[DRE-commits] [ruby-gherkin] 01/02: Merge tag 'debian/2.12.1-1' into wheezy-backports

Jérémy Bobbio lunar at alioth.debian.org
Mon Oct 7 10:21:17 UTC 2013


This is an automated email from the git hooks/post-receive script.

lunar pushed a commit to branch wheezy-backports
in repository ruby-gherkin.

commit b9c1d0febeb5a1dc2e42addef3f24dec5b41743c
Merge: 2777ce6 e2e8aef
Author: Jérémy Bobbio <lunar at debian.org>
Date:   Mon Oct 7 12:17:13 2013 +0200

    Merge tag 'debian/2.12.1-1' into wheezy-backports
    
    ruby-gherkin Debian release 2.12.1-1

 .ruby-gemset                                       |    1 +
 .ruby-version                                      |    1 +
 .rvmrc                                             |    1 -
 .travis.yml                                        |    5 +-
 Gemfile                                            |    2 +-
 History.md                                         |   82 +
 LICENSE                                            |    2 +-
 README.md                                          |   94 +-
 checksums.yaml.gz                                  |  Bin 0 -> 266 bytes
 cucumber.yml                                       |    1 +
 debian/Rakefile                                    |   52 +
 debian/changelog                                   |   21 +
 debian/control                                     |    8 +-
 debian/copyright                                   |    5 +-
 debian/patches/fix_path_ragel_task.patch           |   19 +
 debian/patches/remove_bundler_rubygems_stuff.patch |   10 +-
 debian/patches/series                              |    3 +-
 debian/patches/signed_char.patch                   |   71 +
 debian/patches/skip_encoding_lexer.patch           |   28 +
 debian/rules                                       |   11 +
 examples/parse_and_output_json.rb                  |    4 +-
 ext/gherkin_lexer_ar/extconf.rb                    |    6 -
 ext/gherkin_lexer_ar/gherkin_lexer_ar.c            | 1432 -------------
 ext/gherkin_lexer_bg/extconf.rb                    |    6 -
 ext/gherkin_lexer_bg/gherkin_lexer_bg.c            | 1655 ---------------
 ext/gherkin_lexer_bm/extconf.rb                    |    6 -
 ext/gherkin_lexer_bm/gherkin_lexer_bm.c            | 1337 -------------
 ext/gherkin_lexer_ca/extconf.rb                    |    6 -
 ext/gherkin_lexer_ca/gherkin_lexer_ca.c            | 1581 ---------------
 ext/gherkin_lexer_cs/extconf.rb                    |    6 -
 ext/gherkin_lexer_cs/gherkin_lexer_cs.c            | 1427 -------------
 ext/gherkin_lexer_cy_gb/extconf.rb                 |    6 -
 ext/gherkin_lexer_cy_gb/gherkin_lexer_cy_gb.c      | 1282 ------------
 ext/gherkin_lexer_da/extconf.rb                    |    6 -
 ext/gherkin_lexer_da/gherkin_lexer_da.c            | 1298 ------------
 ext/gherkin_lexer_de/extconf.rb                    |    6 -
 ext/gherkin_lexer_de/gherkin_lexer_de.c            | 1415 -------------
 ext/gherkin_lexer_en/extconf.rb                    |    6 -
 ext/gherkin_lexer_en/gherkin_lexer_en.c            | 1418 -------------
 ext/gherkin_lexer_en_au/extconf.rb                 |    6 -
 ext/gherkin_lexer_en_au/gherkin_lexer_en_au.c      | 1223 ------------
 ext/gherkin_lexer_en_lol/extconf.rb                |    6 -
 ext/gherkin_lexer_en_lol/gherkin_lexer_en_lol.c    | 1177 -----------
 ext/gherkin_lexer_en_pirate/extconf.rb             |    6 -
 .../gherkin_lexer_en_pirate.c                      | 1471 --------------
 ext/gherkin_lexer_en_scouse/extconf.rb             |    6 -
 .../gherkin_lexer_en_scouse.c                      | 1634 ---------------
 ext/gherkin_lexer_en_tx/extconf.rb                 |    6 -
 ext/gherkin_lexer_en_tx/gherkin_lexer_en_tx.c      | 1265 ------------
 ext/gherkin_lexer_eo/extconf.rb                    |    6 -
 ext/gherkin_lexer_eo/gherkin_lexer_eo.c            | 1241 ------------
 ext/gherkin_lexer_es/extconf.rb                    |    6 -
 ext/gherkin_lexer_es/gherkin_lexer_es.c            | 1399 -------------
 ext/gherkin_lexer_et/extconf.rb                    |    6 -
 ext/gherkin_lexer_et/gherkin_lexer_et.c            | 1236 ------------
 ext/gherkin_lexer_fi/extconf.rb                    |    6 -
 ext/gherkin_lexer_fi/gherkin_lexer_fi.c            | 1215 -----------
 ext/gherkin_lexer_fr/extconf.rb                    |    6 -
 ext/gherkin_lexer_fr/gherkin_lexer_fr.c            | 1493 --------------
 ext/gherkin_lexer_he/extconf.rb                    |    6 -
 ext/gherkin_lexer_he/gherkin_lexer_he.c            | 1374 -------------
 ext/gherkin_lexer_hr/extconf.rb                    |    6 -
 ext/gherkin_lexer_hr/gherkin_lexer_hr.c            | 1323 ------------
 ext/gherkin_lexer_hu/extconf.rb                    |    6 -
 ext/gherkin_lexer_hu/gherkin_lexer_hu.c            | 1376 -------------
 ext/gherkin_lexer_id/extconf.rb                    |    6 -
 ext/gherkin_lexer_id/gherkin_lexer_id.c            | 1208 -----------
 ext/gherkin_lexer_is/extconf.rb                    |    6 -
 ext/gherkin_lexer_is/gherkin_lexer_is.c            | 1376 -------------
 ext/gherkin_lexer_it/extconf.rb                    |    6 -
 ext/gherkin_lexer_it/gherkin_lexer_it.c            | 1340 -------------
 ext/gherkin_lexer_ja/extconf.rb                    |    6 -
 ext/gherkin_lexer_ja/gherkin_lexer_ja.c            | 1699 ----------------
 ext/gherkin_lexer_ko/extconf.rb                    |    6 -
 ext/gherkin_lexer_ko/gherkin_lexer_ko.c            | 1360 -------------
 ext/gherkin_lexer_lt/extconf.rb                    |    6 -
 ext/gherkin_lexer_lt/gherkin_lexer_lt.c            | 1296 ------------
 ext/gherkin_lexer_lu/extconf.rb                    |    6 -
 ext/gherkin_lexer_lu/gherkin_lexer_lu.c            | 1389 -------------
 ext/gherkin_lexer_lv/extconf.rb                    |    6 -
 ext/gherkin_lexer_lv/gherkin_lexer_lv.c            | 1425 -------------
 ext/gherkin_lexer_nl/extconf.rb                    |    6 -
 ext/gherkin_lexer_nl/gherkin_lexer_nl.c            | 1368 -------------
 ext/gherkin_lexer_no/extconf.rb                    |    6 -
 ext/gherkin_lexer_no/gherkin_lexer_no.c            | 1311 ------------
 ext/gherkin_lexer_pl/extconf.rb                    |    6 -
 ext/gherkin_lexer_pl/gherkin_lexer_pl.c            | 1738 ----------------
 ext/gherkin_lexer_pt/extconf.rb                    |    6 -
 ext/gherkin_lexer_pt/gherkin_lexer_pt.c            | 1711 ----------------
 ext/gherkin_lexer_ro/extconf.rb                    |    6 -
 ext/gherkin_lexer_ro/gherkin_lexer_ro.c            | 1427 -------------
 ext/gherkin_lexer_ru/extconf.rb                    |    6 -
 ext/gherkin_lexer_ru/gherkin_lexer_ru.c            | 2058 -------------------
 ext/gherkin_lexer_sk/extconf.rb                    |    6 -
 ext/gherkin_lexer_sk/gherkin_lexer_sk.c            | 1298 ------------
 ext/gherkin_lexer_sr_cyrl/extconf.rb               |    6 -
 ext/gherkin_lexer_sr_cyrl/gherkin_lexer_sr_cyrl.c  | 2112 --------------------
 ext/gherkin_lexer_sr_latn/extconf.rb               |    6 -
 ext/gherkin_lexer_sr_latn/gherkin_lexer_sr_latn.c  | 1567 ---------------
 ext/gherkin_lexer_sv/extconf.rb                    |    6 -
 ext/gherkin_lexer_sv/gherkin_lexer_sv.c            | 1324 ------------
 ext/gherkin_lexer_tr/extconf.rb                    |    6 -
 ext/gherkin_lexer_tr/gherkin_lexer_tr.c            | 1347 -------------
 ext/gherkin_lexer_uk/extconf.rb                    |    6 -
 ext/gherkin_lexer_uk/gherkin_lexer_uk.c            | 1941 ------------------
 ext/gherkin_lexer_uz/extconf.rb                    |    6 -
 ext/gherkin_lexer_uz/gherkin_lexer_uz.c            | 1651 ---------------
 ext/gherkin_lexer_vi/extconf.rb                    |    6 -
 ext/gherkin_lexer_vi/gherkin_lexer_vi.c            | 1458 --------------
 ext/gherkin_lexer_zh_cn/extconf.rb                 |    6 -
 ext/gherkin_lexer_zh_cn/gherkin_lexer_zh_cn.c      | 1314 ------------
 ext/gherkin_lexer_zh_tw/extconf.rb                 |    6 -
 ext/gherkin_lexer_zh_tw/gherkin_lexer_zh_tw.c      | 1307 ------------
 features/.cucumber/stepdefs.json                   |    8 +-
 features/parser_with_native_lexer.feature          |    2 +-
 features/pretty_formatter.feature                  |    1 +
 features/step_definitions/json_formatter_steps.rb  |    8 +-
 features/step_definitions/json_parser_steps.rb     |    3 +-
 features/support/env.rb                            |    5 +-
 gherkin.gemspec                                    |   43 +-
 install_mingw_os_x.sh                              |    8 +-
 lib/gherkin/README.md                              |    7 +
 lib/gherkin/formatter/filter_formatter.rb          |    8 +-
 lib/gherkin/formatter/hashable.rb                  |    8 +-
 lib/gherkin/formatter/json_formatter.rb            |   19 +-
 lib/gherkin/formatter/line_filter.rb               |    4 +-
 lib/gherkin/formatter/pretty_formatter.rb          |    2 +-
 lib/gherkin/formatter/regexp_filter.rb             |    4 +-
 lib/gherkin/formatter/tag_filter.rb                |    6 +-
 lib/gherkin/i18n.json                              |  772 +++++++
 lib/gherkin/i18n.rb                                |   26 +-
 lib/gherkin/i18n.yml                               |  613 ------
 lib/gherkin/js_lexer.rb                            |   20 -
 lib/gherkin/json_parser.rb                         |    8 +-
 lib/gherkin/lexer/encoding.rb                      |   41 +
 lib/gherkin/lexer/i18n_lexer.rb                    |   12 +-
 lib/gherkin/native/java.rb                         |    4 +-
 lib/gherkin/native/therubyracer.rb                 |    6 +-
 lib/gherkin/parser/parser.rb                       |   28 +-
 lib/gherkin/platform.rb                            |   13 +
 lib/gherkin/rb_lexer.rb                            |    8 -
 lib/gherkin/rb_lexer/README.rdoc                   |    8 -
 lib/gherkin/rb_lexer/ar.rb                         | 1165 -----------
 lib/gherkin/rb_lexer/bg.rb                         | 1377 -------------
 lib/gherkin/rb_lexer/bm.rb                         | 1081 ----------
 lib/gherkin/rb_lexer/ca.rb                         | 1305 ------------
 lib/gherkin/rb_lexer/cs.rb                         | 1157 -----------
 lib/gherkin/rb_lexer/cy_gb.rb                      | 1027 ----------
 lib/gherkin/rb_lexer/da.rb                         | 1043 ----------
 lib/gherkin/rb_lexer/de.rb                         | 1151 -----------
 lib/gherkin/rb_lexer/en.rb                         | 1151 -----------
 lib/gherkin/rb_lexer/en_au.rb                      |  971 ---------
 lib/gherkin/rb_lexer/en_lol.rb                     |  929 ---------
 lib/gherkin/rb_lexer/en_pirate.rb                  | 1205 -----------
 lib/gherkin/rb_lexer/en_scouse.rb                  | 1357 -------------
 lib/gherkin/rb_lexer/en_tx.rb                      | 1011 ----------
 lib/gherkin/rb_lexer/eo.rb                         |  990 ---------
 lib/gherkin/rb_lexer/es.rb                         | 1135 -----------
 lib/gherkin/rb_lexer/et.rb                         |  985 ---------
 lib/gherkin/rb_lexer/fi.rb                         |  964 ---------
 lib/gherkin/rb_lexer/fr.rb                         | 1223 ------------
 lib/gherkin/rb_lexer/he.rb                         | 1113 -----------
 lib/gherkin/rb_lexer/hr.rb                         | 1061 ----------
 lib/gherkin/rb_lexer/hu.rb                         | 1113 -----------
 lib/gherkin/rb_lexer/id.rb                         |  958 ---------
 lib/gherkin/rb_lexer/is.rb                         | 1115 -----------
 lib/gherkin/rb_lexer/it.rb                         | 1081 ----------
 lib/gherkin/rb_lexer/ja.rb                         | 1413 -------------
 lib/gherkin/rb_lexer/ko.rb                         | 1097 ----------
 lib/gherkin/rb_lexer/lt.rb                         | 1040 ----------
 lib/gherkin/rb_lexer/lu.rb                         | 1127 -----------
 lib/gherkin/rb_lexer/lv.rb                         | 1161 -----------
 lib/gherkin/rb_lexer/nl.rb                         | 1110 ----------
 lib/gherkin/rb_lexer/no.rb                         | 1055 ----------
 lib/gherkin/rb_lexer/pl.rb                         | 1452 --------------
 lib/gherkin/rb_lexer/pt.rb                         | 1425 -------------
 lib/gherkin/rb_lexer/ro.rb                         | 1159 -----------
 lib/gherkin/rb_lexer/ru.rb                         | 1749 ----------------
 lib/gherkin/rb_lexer/sk.rb                         | 1041 ----------
 lib/gherkin/rb_lexer/sr_cyrl.rb                    | 1798 -----------------
 lib/gherkin/rb_lexer/sr_latn.rb                    | 1289 ------------
 lib/gherkin/rb_lexer/sv.rb                         | 1065 ----------
 lib/gherkin/rb_lexer/tr.rb                         | 1087 ----------
 lib/gherkin/rb_lexer/uk.rb                         | 1641 ---------------
 lib/gherkin/rb_lexer/uz.rb                         | 1371 -------------
 lib/gherkin/rb_lexer/vi.rb                         | 1193 -----------
 lib/gherkin/rb_lexer/zh_cn.rb                      | 1053 ----------
 lib/gherkin/rb_lexer/zh_tw.rb                      | 1047 ----------
 lib/gherkin/rubify.rb                              |   23 +-
 lib/gherkin/tag_expression.rb                      |    4 +-
 metadata.yml                                       |  298 +--
 ragel/lexer.c.rl.erb                               |   10 +-
 ragel/lexer.java.rl.erb                            |   14 +-
 ragel/lexer.js.rl.erb                              |   16 +-
 ragel/lexer.rb.rl.erb                              |    8 +-
 spec/gherkin/c_lexer_spec.rb                       |    2 +-
 spec/gherkin/fixtures/iso-8859-1.feature           |    6 +
 .../fixtures/with_bom_and_language_spec.feature    |    4 +
 spec/gherkin/formatter/json_formatter_spec.rb      |   93 +-
 spec/gherkin/formatter/pretty_formatter_spec.rb    |   43 +-
 spec/gherkin/i18n_spec.rb                          |   18 +-
 spec/gherkin/js_lexer_spec.rb                      |   23 -
 spec/gherkin/json_parser_spec.rb                   |   21 +-
 spec/gherkin/lexer/i18n_lexer_spec.rb              |   70 +-
 spec/gherkin/native_lexer_spec.rb                  |   29 +
 spec/gherkin/output_stream_string_io.rb            |   20 -
 spec/gherkin/parser/parser_spec.rb                 |    2 +-
 spec/gherkin/rb_lexer_spec.rb                      |   20 -
 spec/gherkin/rubify_spec.rb                        |   23 +
 spec/gherkin/shared/bom_group.rb                   |   20 -
 spec/gherkin/shared/encoding_group.rb              |   50 +
 spec/gherkin/tag_expression_spec.rb                |   34 +-
 spec/spec_helper.rb                                |   13 +-
 tasks/apidoc.rake                                  |   32 +
 tasks/compile.rake                                 |   41 +-
 tasks/cucumber.rake                                |    1 +
 tasks/gems.rake                                    |   25 +-
 tasks/ikvm.rake                                    |   18 +-
 tasks/ragel_task.rb                                |   26 +-
 tasks/release.rake                                 |   23 +-
 tasks/rspec.rake                                   |    8 +-
 tasks/yard.rake                                    |    7 -
 222 files changed, 1923 insertions(+), 121852 deletions(-)

diff --cc debian/changelog
index 15ff603,a4beadf..603ed60
--- a/debian/changelog
+++ b/debian/changelog
@@@ -1,9 -1,24 +1,30 @@@
+ ruby-gherkin (2.12.1-1) unstable; urgency=low
+ 
+   * Imported Upstream version 2.12.1
+   * Refresh patches
+   * debian/control:
+     + bump Standards-Version to 3.9.4 (no changes needed)
+     + update my email address
+     + build-depend on ruby-multi-json, ragel
+     + depend on ruby-multi-json
+   * debian/rules:
+     + Install upstream changelog
+     + use debian/Rakefile to regenerate upstream C and Ruby files from ragel
+   * add myself to copyright holders of debian/*
+   * debian/patches:
+     + add fix_path_ragel_task.patch: fix paths in sed commands in
+     tasks/ragel_task.rb
+     + add skip_encoding_lexer.patch, skipping failing tests on powerpc
+     + remove signed_char.patch from quilt series
+ 
+  -- Cédric Boutillier <boutil at debian.org>  Wed, 31 Jul 2013 15:47:02 +0200
+ 
 +ruby-gherkin (2.11.1-2~bpo70+1) wheezy-backports; urgency=low
 +
 +  * Rebuild for wheezy-backports.
 +
 + -- Jérémy Bobbio <lunar at debian.org>  Wed, 07 Aug 2013 12:14:22 +0200
 +
  ruby-gherkin (2.11.1-2) unstable; urgency=low
  
    * debian/patches/signed_char.patch: force the assumption of signedness for
diff --cc ext/gherkin_lexer_ar/extconf.rb
index eda6c65,eda6c65..0000000
deleted file mode 100644,100644
--- a/ext/gherkin_lexer_ar/extconf.rb
+++ /dev/null
@@@ -1,6 -1,6 +1,0 @@@
--require 'mkmf'
--CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags']
--$CFLAGS << ' -O0 -Wall' if CONFIG['CC'] =~ /gcc|clang/
--dir_config("gherkin_lexer_ar")
--have_library("c", "main")
--create_makefile("gherkin_lexer_ar")
diff --cc ext/gherkin_lexer_ar/gherkin_lexer_ar.c
index 95dbe0f,dd81528..0000000
deleted file mode 100644,100644
--- a/ext/gherkin_lexer_ar/gherkin_lexer_ar.c
+++ /dev/null
@@@ -1,1432 -1,1432 +1,0 @@@
--
- #line 1 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ar.c.rl"
- #include <assert.h>
- #include <ruby.h>
- 
- #if defined(_WIN32)
- #include <stddef.h>
- #endif
- 
- #ifdef HAVE_RUBY_RE_H
- #include <ruby/re.h>
- #else
- #include <re.h>
- #endif
- 
- #ifdef HAVE_RUBY_ENCODING_H
- #include <ruby/encoding.h>
- #define ENCODED_STR_NEW(ptr, len) \
-     rb_enc_str_new(ptr, len, rb_utf8_encoding())
- #else
- #define ENCODED_STR_NEW(ptr, len) \
-     rb_str_new(ptr, len)
- #endif
- 
- #ifndef RSTRING_PTR
- #define RSTRING_PTR(s) (RSTRING(s)->ptr)
- #endif
- 
- #ifndef RSTRING_LEN
- #define RSTRING_LEN(s) (RSTRING(s)->len)
- #endif
- 
- #define DATA_GET(FROM, TYPE, NAME) \
-   Data_Get_Struct(FROM, TYPE, NAME); \
-   if (NAME == NULL) { \
-     rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \
-   }
-  
- typedef struct lexer_state {
-   int content_len;
-   int line_number;
-   int current_line;
-   int start_col;
-   size_t mark;
-   size_t keyword_start;
-   size_t keyword_end;
-   size_t next_keyword_start;
-   size_t content_start;
-   size_t content_end;
-   size_t docstring_content_type_start;
-   size_t docstring_content_type_end;
-   size_t query_start;
-   size_t last_newline;
-   size_t final_newline;
- } lexer_state;
- 
- static VALUE mGherkin;
- static VALUE mGherkinLexer;
- static VALUE mCLexer;
- static VALUE cI18nLexer;
- static VALUE rb_eGherkinLexingError;
- 
- #define LEN(AT, P) (P - data - lexer->AT)
- #define MARK(M, P) (lexer->M = (P) - data)
- #define PTR_TO(P) (data + lexer->P)
- 
- #define STORE_KW_END_CON(EVENT) \
-   store_multiline_kw_con(listener, # EVENT, \
-     PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \
-     PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \
-     lexer->current_line, lexer->start_col); \
-     if (lexer->content_end != 0) { \
-       p = PTR_TO(content_end - 1); \
-     } \
-     lexer->content_end = 0
- 
- #define STORE_ATTR(ATTR) \
-     store_attr(listener, # ATTR, \
-       PTR_TO(content_start), LEN(content_start, p), \
-       lexer->line_number)
- 
- 
- #line 254 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ar.c.rl"
- 
- 
- /** Data **/
- 
- #line 89 "ext/gherkin_lexer_ar/gherkin_lexer_ar.c"
- static const char _lexer_actions[] = {
- 	0, 1, 0, 1, 1, 1, 2, 1, 
- 	3, 1, 4, 1, 5, 1, 6, 1, 
- 	7, 1, 8, 1, 9, 1, 10, 1, 
- 	11, 1, 12, 1, 13, 1, 16, 1, 
- 	17, 1, 18, 1, 19, 1, 20, 1, 
- 	21, 1, 22, 1, 23, 2, 1, 18, 
- 	2, 4, 5, 2, 13, 0, 2, 14, 
- 	15, 2, 17, 0, 2, 17, 2, 2, 
- 	17, 16, 2, 17, 19, 2, 18, 6, 
- 	2, 18, 7, 2, 18, 8, 2, 18, 
- 	9, 2, 18, 10, 2, 18, 16, 2, 
- 	20, 21, 2, 22, 0, 2, 22, 2, 
- 	2, 22, 16, 2, 22, 19, 3, 3, 
- 	14, 15, 3, 5, 14, 15, 3, 11, 
- 	14, 15, 3, 12, 14, 15, 3, 13, 
- 	14, 15, 3, 14, 15, 18, 3, 17, 
- 	0, 11, 3, 17, 14, 15, 4, 1, 
- 	14, 15, 18, 4, 4, 5, 14, 15, 
- 	4, 17, 0, 14, 15, 5, 17, 0, 
- 	11, 14, 15
- };
- 
- static const short _lexer_key_offsets[] = {
- 	0, 0, 13, 19, 21, 22, 23, 24, 
- 	25, 26, 27, 29, 31, 43, 46, 47, 
- 	48, 49, 50, 51, 52, 53, 54, 55, 
- 	56, 58, 60, 65, 70, 75, 80, 84, 
- 	88, 90, 91, 92, 93, 94, 95, 96, 
- 	97, 98, 99, 100, 101, 102, 103, 104, 
- 	105, 110, 117, 122, 126, 132, 135, 137, 
- 	143, 155, 157, 158, 159, 160, 161, 162, 
- 	163, 164, 165, 166, 167, 168, 169, 170, 
- 	180, 187, 189, 191, 193, 195, 197, 199, 
- 	201, 213, 215, 217, 219, 221, 223, 225, 
- 	227, 229, 231, 233, 235, 237, 239, 241, 
- 	243, 245, 247, 249, 251, 253, 255, 257, 
- 	259, 261, 263, 265, 267, 269, 271, 274, 
- 	276, 278, 280, 282, 284, 286, 288, 290, 
- 	292, 294, 296, 298, 300, 302, 304, 306, 
- 	310, 312, 314, 316, 318, 320, 322, 324, 
- 	326, 328, 330, 332, 334, 336, 338, 340, 
- 	342, 344, 346, 348, 350, 352, 354, 355, 
- 	356, 357, 358, 359, 360, 361, 362, 363, 
- 	370, 372, 374, 376, 378, 380, 382, 384, 
- 	386, 388, 390, 391, 392, 393, 394, 395, 
- 	396, 397, 398, 399, 400, 401, 402, 403, 
- 	404, 405, 406, 407, 408, 409, 417, 421, 
- 	423, 426, 428, 430, 432, 434, 436, 438, 
- 	440, 442, 444, 446, 448, 450, 452, 454, 
- 	456, 458, 460, 462, 464, 466, 468, 470, 
- 	472, 474, 476, 478, 480, 482, 484, 486, 
- 	488, 491, 493, 495, 497, 499, 501, 503, 
- 	505, 507, 509, 511, 513, 515, 517, 519, 
- 	521, 523, 525, 527, 529, 531, 533, 535, 
- 	536, 537, 538, 539, 540, 541, 542, 543, 
- 	544, 545, 546, 547, 549, 550, 551, 552, 
- 	553, 554, 555, 556, 557, 558, 559, 560, 
- 	570, 577, 579, 581, 583, 585, 587, 589, 
- 	591, 593, 595, 597, 599, 601, 603, 605, 
- 	607, 609, 611, 613, 615, 617, 619, 621, 
- 	623, 625, 627, 629, 631, 633, 635, 637, 
- 	639, 641, 643, 645, 647, 649, 651, 653, 
- 	655, 657, 659, 661, 663, 665, 669, 671, 
- 	673, 675, 677, 679, 681, 683, 685, 687, 
- 	689, 691, 693, 695, 697, 699, 701, 703, 
- 	705, 707, 709, 711, 713, 714, 715, 725, 
- 	732, 735, 737, 739, 741, 743, 745, 747, 
- 	749, 751, 753, 755, 757, 759, 761, 763, 
- 	765, 767, 769, 771, 773, 775, 777, 779, 
- 	781, 783, 785, 787, 789, 791, 793, 795, 
- 	797, 799, 801, 803, 805, 807, 809, 811, 
- 	813, 815, 817, 819, 822, 824, 826, 828, 
- 	830, 832, 834, 836, 838, 840, 842, 844, 
- 	846, 848, 850, 852, 854, 858, 860, 862, 
- 	864, 866, 868, 870, 872, 874, 876, 878, 
- 	880, 882, 884, 886, 888, 890, 892, 894, 
- 	896, 898, 900, 902, 903, 904, 905, 906, 
- 	907, 908, 909, 910, 911, 912
- };
- 
- static const char _lexer_trans_keys[] = {
- 	-40, -39, -17, 10, 32, 34, 35, 37, 
- 	42, 64, 124, 9, 13, -89, -88, -85, 
- 	-82, -77, -71, -40, -39, -80, -40, -89, 
- 	-39, -117, 32, 10, 13, 10, 13, -40, 
- 	-39, 10, 32, 34, 35, 37, 42, 64, 
- 	124, 9, 13, -124, -123, -120, -39, -125, 
- 	-39, -122, -40, -86, -39, -119, 34, 34, 
- 	10, 13, 10, 13, 10, 32, 34, 9, 
- 	13, 10, 32, 34, 9, 13, 10, 32, 
- 	34, 9, 13, 10, 32, 34, 9, 13, 
- 	10, 32, 9, 13, 10, 32, 9, 13, 
- 	10, 13, 10, 95, 70, 69, 65, 84, 
- 	85, 82, 69, 95, 69, 78, 68, 95, 
- 	37, 13, 32, 64, 9, 10, 9, 10, 
- 	13, 32, 64, 11, 12, 10, 32, 64, 
- 	9, 13, 32, 124, 9, 13, 10, 32, 
- 	92, 124, 9, 13, 10, 92, 124, 10, 
- 	92, 10, 32, 92, 124, 9, 13, -40, 
- 	-39, 10, 32, 34, 35, 37, 42, 64, 
- 	124, 9, 13, -124, -123, -40, -82, -39, 
- 	-124, -39, -127, -39, -118, -40, -87, 58, 
- 	10, 10, -40, -39, 10, 32, 35, 37, 
- 	42, 64, 9, 13, -89, -88, -85, -82, 
- 	-77, -71, 10, -40, 10, -80, 10, -40, 
- 	10, -89, 10, -39, 10, -117, 10, 10, 
- 	32, -40, -39, 10, 32, 34, 35, 37, 
- 	42, 64, 124, 9, 13, -39, 10, -127, 
- 	10, -40, 10, -79, 10, -40, 10, -74, 
- 	10, -39, 10, -123, 10, -40, 10, -89, 
- 	10, -40, 10, -75, 10, -39, 10, -118, 
- 	10, -40, 10, -87, 10, 10, 58, -39, 
- 	10, -118, 10, -39, 10, -122, 10, -40, 
- 	10, -89, 10, -40, 10, -79, 10, -39, 
- 	10, -118, 10, -39, 10, -120, 10, 10, 
- 	32, 58, -39, 10, -123, 10, -40, 10, 
- 	-82, 10, -40, 10, -73, 10, -40, 10, 
- 	-73, 10, -39, 10, -122, 10, -40, 10, 
- 	-81, 10, -39, 10, -123, 10, -40, 10, 
- 	-89, 10, -124, -123, -120, 10, -39, 10, 
- 	-125, 10, -39, 10, -122, 10, -40, 10, 
- 	-86, 10, -39, 10, -119, 10, 10, 95, 
- 	10, 70, 10, 69, 10, 65, 10, 84, 
- 	10, 85, 10, 82, 10, 69, 10, 95, 
- 	10, 69, 10, 78, 10, 68, 10, 95, 
- 	10, 37, -40, -85, -39, -124, -40, -87, 
- 	58, 10, 10, -40, 10, 32, 35, 124, 
- 	9, 13, -82, 10, -40, 10, -89, 10, 
- 	-40, 10, -75, 10, -39, 10, -118, 10, 
- 	-40, 10, -87, 10, 10, 58, -39, -127, 
- 	-40, -79, -40, -74, -39, -123, -40, -89, 
- 	-40, -75, -39, -118, -40, -87, 58, 10, 
- 	10, -40, 10, 32, 35, 37, 64, 9, 
- 	13, -89, -82, -77, 10, -39, 10, -124, 
- 	-123, 10, -40, 10, -82, 10, -39, 10, 
- 	-124, 10, -39, 10, -127, 10, -39, 10, 
- 	-118, 10, -40, 10, -87, 10, 10, 58, 
- 	-40, 10, -85, 10, -39, 10, -124, 10, 
- 	-40, 10, -89, 10, -40, 10, -75, 10, 
- 	-39, 10, -118, 10, -39, 10, -122, 10, 
- 	-40, 10, -89, 10, -40, 10, -79, 10, 
- 	-39, 10, -118, 10, -39, 10, -120, 10, 
- 	10, 32, 58, -39, 10, -123, 10, -40, 
- 	10, -82, 10, -40, 10, -73, 10, -40, 
- 	10, -73, 10, 10, 95, 10, 70, 10, 
- 	69, 10, 65, 10, 84, 10, 85, 10, 
- 	82, 10, 69, 10, 95, 10, 69, 10, 
- 	78, 10, 68, 10, 95, 10, 37, -39, 
- 	-118, -39, -122, -40, -89, -40, -79, -39, 
- 	-118, -39, -120, 32, 58, -39, -123, -40, 
- 	-82, -40, -73, -40, -73, 58, 10, 10, 
- 	-40, -39, 10, 32, 35, 37, 42, 64, 
- 	9, 13, -89, -88, -85, -82, -77, -71, 
- 	10, -40, 10, -80, 10, -40, 10, -89, 
- 	10, -39, 10, -117, 10, 10, 32, -39, 
- 	10, -127, 10, -40, 10, -79, 10, -40, 
- 	10, -74, 10, -39, 10, -123, 10, -40, 
- 	10, -89, 10, -40, 10, -75, 10, -39, 
- 	10, -118, 10, -40, 10, -87, 10, 10, 
- 	58, -39, 10, -118, 10, -39, 10, -122, 
- 	10, -40, 10, -89, 10, -40, 10, -79, 
- 	10, -39, 10, -118, 10, -39, 10, -120, 
- 	10, -39, 10, -122, 10, -40, 10, -81, 
- 	10, -39, 10, -123, 10, -40, 10, -89, 
- 	10, -124, -123, -120, 10, -39, 10, -125, 
- 	10, -39, 10, -122, 10, -40, 10, -86, 
- 	10, -39, 10, -119, 10, 10, 95, 10, 
- 	70, 10, 69, 10, 65, 10, 84, 10, 
- 	85, 10, 82, 10, 69, 10, 95, 10, 
- 	69, 10, 78, 10, 68, 10, 95, 10, 
- 	37, 10, 10, -40, -39, 10, 32, 35, 
- 	37, 42, 64, 9, 13, -89, -88, -85, 
- 	-82, -77, -71, 10, -40, -39, 10, -80, 
- 	10, -40, 10, -89, 10, -39, 10, -117, 
- 	10, 10, 32, -124, 10, -40, 10, -82, 
- 	10, -39, 10, -124, 10, -39, 10, -127, 
- 	10, -39, 10, -118, 10, -40, 10, -87, 
- 	10, 10, 58, -39, 10, -127, 10, -40, 
- 	10, -79, 10, -40, 10, -74, 10, -39, 
- 	10, -123, 10, -40, 10, -89, 10, -40, 
- 	10, -75, 10, -39, 10, -118, 10, -39, 
- 	10, -122, 10, -40, 10, -89, 10, -40, 
- 	10, -79, 10, -39, 10, -118, 10, -39, 
- 	10, -120, 10, 10, 32, 58, -39, 10, 
- 	-123, 10, -40, 10, -82, 10, -40, 10, 
- 	-73, 10, -40, 10, -73, 10, -39, 10, 
- 	-122, 10, -40, 10, -81, 10, -39, 10, 
- 	-123, 10, -40, 10, -89, 10, -124, -123, 
- 	-120, 10, -39, 10, -125, 10, -39, 10, 
- 	-122, 10, -40, 10, -86, 10, -39, 10, 
- 	-119, 10, 10, 95, 10, 70, 10, 69, 
- 	10, 65, 10, 84, 10, 85, 10, 82, 
- 	10, 69, 10, 95, 10, 69, 10, 78, 
- 	10, 68, 10, 95, 10, 37, -39, -122, 
- 	-40, -81, -39, -123, -40, -89, -69, -65, 
- 	0
- };
- 
- static const char _lexer_single_lengths[] = {
- 	0, 11, 6, 2, 1, 1, 1, 1, 
- 	1, 1, 2, 2, 10, 3, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	2, 2, 3, 3, 3, 3, 2, 2, 
- 	2, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	3, 5, 3, 2, 4, 3, 2, 4, 
- 	10, 2, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 8, 
- 	7, 2, 2, 2, 2, 2, 2, 2, 
- 	10, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 3, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 4, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 5, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 6, 4, 2, 
- 	3, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	3, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 2, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 8, 
- 	7, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 4, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 1, 1, 8, 7, 
- 	3, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 3, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 4, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 0
- };
- 
- static const char _lexer_range_lengths[] = {
- 	0, 1, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 1, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 1, 1, 1, 1, 1, 1, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	1, 1, 1, 1, 1, 0, 0, 1, 
- 	1, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 1, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	1, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 1, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 1, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 1, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 1, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0
- };
- 
- static const short _lexer_index_offsets[] = {
- 	0, 0, 13, 20, 23, 25, 27, 29, 
- 	31, 33, 35, 38, 41, 53, 57, 59, 
- 	61, 63, 65, 67, 69, 71, 73, 75, 
- 	77, 80, 83, 88, 93, 98, 103, 107, 
- 	111, 114, 116, 118, 120, 122, 124, 126, 
- 	128, 130, 132, 134, 136, 138, 140, 142, 
- 	144, 149, 156, 161, 165, 171, 175, 178, 
- 	184, 196, 199, 201, 203, 205, 207, 209, 
- 	211, 213, 215, 217, 219, 221, 223, 225, 
- 	235, 243, 246, 249, 252, 255, 258, 261, 
- 	264, 276, 279, 282, 285, 288, 291, 294, 
- 	297, 300, 303, 306, 309, 312, 315, 318, 
- 	321, 324, 327, 330, 333, 336, 339, 342, 
- 	345, 348, 351, 354, 357, 360, 363, 367, 
- 	370, 373, 376, 379, 382, 385, 388, 391, 
- 	394, 397, 400, 403, 406, 409, 412, 415, 
- 	420, 423, 426, 429, 432, 435, 438, 441, 
- 	444, 447, 450, 453, 456, 459, 462, 465, 
- 	468, 471, 474, 477, 480, 483, 486, 488, 
- 	490, 492, 494, 496, 498, 500, 502, 504, 
- 	511, 514, 517, 520, 523, 526, 529, 532, 
- 	535, 538, 541, 543, 545, 547, 549, 551, 
- 	553, 555, 557, 559, 561, 563, 565, 567, 
- 	569, 571, 573, 575, 577, 579, 587, 592, 
- 	595, 599, 602, 605, 608, 611, 614, 617, 
- 	620, 623, 626, 629, 632, 635, 638, 641, 
- 	644, 647, 650, 653, 656, 659, 662, 665, 
- 	668, 671, 674, 677, 680, 683, 686, 689, 
- 	692, 696, 699, 702, 705, 708, 711, 714, 
- 	717, 720, 723, 726, 729, 732, 735, 738, 
- 	741, 744, 747, 750, 753, 756, 759, 762, 
- 	764, 766, 768, 770, 772, 774, 776, 778, 
- 	780, 782, 784, 786, 789, 791, 793, 795, 
- 	797, 799, 801, 803, 805, 807, 809, 811, 
- 	821, 829, 832, 835, 838, 841, 844, 847, 
- 	850, 853, 856, 859, 862, 865, 868, 871, 
- 	874, 877, 880, 883, 886, 889, 892, 895, 
- 	898, 901, 904, 907, 910, 913, 916, 919, 
- 	922, 925, 928, 931, 934, 937, 940, 943, 
- 	946, 949, 952, 955, 958, 961, 966, 969, 
- 	972, 975, 978, 981, 984, 987, 990, 993, 
- 	996, 999, 1002, 1005, 1008, 1011, 1014, 1017, 
- 	1020, 1023, 1026, 1029, 1032, 1034, 1036, 1046, 
- 	1054, 1058, 1061, 1064, 1067, 1070, 1073, 1076, 
- 	1079, 1082, 1085, 1088, 1091, 1094, 1097, 1100, 
- 	1103, 1106, 1109, 1112, 1115, 1118, 1121, 1124, 
- 	1127, 1130, 1133, 1136, 1139, 1142, 1145, 1148, 
- 	1151, 1154, 1157, 1160, 1163, 1166, 1169, 1172, 
- 	1175, 1178, 1181, 1184, 1188, 1191, 1194, 1197, 
- 	1200, 1203, 1206, 1209, 1212, 1215, 1218, 1221, 
- 	1224, 1227, 1230, 1233, 1236, 1241, 1244, 1247, 
- 	1250, 1253, 1256, 1259, 1262, 1265, 1268, 1271, 
- 	1274, 1277, 1280, 1283, 1286, 1289, 1292, 1295, 
- 	1298, 1301, 1304, 1307, 1309, 1311, 1313, 1315, 
- 	1317, 1319, 1321, 1323, 1325, 1327
- };
- 
- static const short _lexer_trans_targs[] = {
- 	2, 13, 435, 12, 12, 22, 32, 34, 
- 	9, 48, 51, 12, 0, 3, 170, 176, 
- 	178, 247, 427, 0, 4, 57, 0, 5, 
- 	0, 6, 0, 7, 0, 8, 0, 9, 
- 	0, 10, 0, 12, 33, 11, 12, 33, 
- 	11, 2, 13, 12, 12, 22, 32, 34, 
- 	9, 48, 51, 12, 0, 14, 18, 9, 
- 	0, 15, 0, 16, 0, 17, 0, 9, 
- 	0, 19, 0, 20, 0, 21, 0, 9, 
- 	0, 23, 0, 24, 0, 26, 25, 25, 
- 	26, 25, 25, 27, 27, 28, 27, 27, 
- 	27, 27, 28, 27, 27, 27, 27, 29, 
- 	27, 27, 27, 27, 30, 27, 27, 12, 
- 	31, 31, 0, 12, 31, 31, 0, 12, 
- 	33, 32, 12, 0, 35, 0, 36, 0, 
- 	37, 0, 38, 0, 39, 0, 40, 0, 
- 	41, 0, 42, 0, 43, 0, 44, 0, 
- 	45, 0, 46, 0, 47, 0, 437, 0, 
- 	0, 0, 0, 0, 49, 50, 12, 50, 
- 	50, 48, 49, 49, 12, 50, 48, 50, 
- 	0, 51, 52, 51, 0, 56, 55, 54, 
- 	52, 55, 53, 0, 54, 52, 53, 0, 
- 	54, 53, 56, 55, 54, 52, 55, 53, 
- 	2, 13, 56, 56, 22, 32, 34, 9, 
- 	48, 51, 56, 0, 58, 150, 0, 59, 
- 	0, 60, 0, 61, 0, 62, 0, 63, 
- 	0, 64, 0, 65, 0, 66, 0, 67, 
- 	0, 68, 0, 69, 0, 71, 70, 71, 
- 	70, 72, 127, 71, 71, 12, 136, 79, 
- 	12, 71, 70, 73, 81, 87, 89, 98, 
- 	119, 71, 70, 74, 71, 70, 75, 71, 
- 	70, 76, 71, 70, 77, 71, 70, 78, 
- 	71, 70, 79, 71, 70, 71, 80, 70, 
- 	2, 13, 12, 12, 22, 32, 34, 9, 
- 	48, 51, 12, 0, 82, 71, 70, 83, 
- 	71, 70, 84, 71, 70, 85, 71, 70, 
- 	86, 71, 70, 79, 71, 70, 88, 71, 
- 	70, 79, 71, 70, 90, 71, 70, 91, 
- 	71, 70, 92, 71, 70, 93, 71, 70, 
- 	94, 71, 70, 95, 71, 70, 96, 71, 
- 	70, 97, 71, 70, 71, 80, 70, 99, 
- 	71, 70, 100, 71, 70, 101, 71, 70, 
- 	102, 71, 70, 103, 71, 70, 104, 71, 
- 	70, 105, 71, 70, 106, 71, 70, 107, 
- 	71, 70, 108, 71, 70, 109, 71, 70, 
- 	110, 71, 70, 71, 111, 80, 70, 112, 
- 	71, 70, 113, 71, 70, 114, 71, 70, 
- 	115, 71, 70, 116, 71, 70, 117, 71, 
- 	70, 118, 71, 70, 97, 71, 70, 120, 
- 	71, 70, 121, 71, 70, 122, 71, 70, 
- 	123, 71, 70, 124, 71, 70, 125, 71, 
- 	70, 126, 71, 70, 79, 71, 70, 128, 
- 	132, 79, 71, 70, 129, 71, 70, 130, 
- 	71, 70, 131, 71, 70, 79, 71, 70, 
- 	133, 71, 70, 134, 71, 70, 135, 71, 
- 	70, 79, 71, 70, 71, 137, 70, 71, 
- 	138, 70, 71, 139, 70, 71, 140, 70, 
- 	71, 141, 70, 71, 142, 70, 71, 143, 
- 	70, 71, 144, 70, 71, 145, 70, 71, 
- 	146, 70, 71, 147, 70, 71, 148, 70, 
- 	71, 149, 70, 71, 12, 70, 151, 0, 
- 	152, 0, 153, 0, 154, 0, 155, 0, 
- 	156, 0, 157, 0, 159, 158, 159, 158, 
- 	160, 159, 159, 12, 12, 159, 158, 161, 
- 	159, 158, 162, 159, 158, 163, 159, 158, 
- 	164, 159, 158, 165, 159, 158, 166, 159, 
- 	158, 167, 159, 158, 168, 159, 158, 169, 
- 	159, 158, 159, 80, 158, 171, 0, 172, 
- 	0, 173, 0, 174, 0, 175, 0, 9, 
- 	0, 177, 0, 9, 0, 179, 0, 180, 
- 	0, 181, 0, 182, 0, 183, 0, 184, 
- 	0, 185, 0, 186, 0, 187, 0, 189, 
- 	188, 189, 188, 190, 189, 189, 12, 233, 
- 	12, 189, 188, 191, 208, 212, 189, 188, 
- 	192, 189, 188, 193, 204, 189, 188, 194, 
- 	189, 188, 195, 189, 188, 196, 189, 188, 
- 	197, 189, 188, 198, 189, 188, 199, 189, 
- 	188, 200, 189, 188, 201, 189, 188, 202, 
- 	189, 188, 203, 189, 188, 189, 80, 188, 
- 	205, 189, 188, 206, 189, 188, 207, 189, 
- 	188, 201, 189, 188, 209, 189, 188, 210, 
- 	189, 188, 211, 189, 188, 199, 189, 188, 
- 	213, 189, 188, 214, 189, 188, 215, 189, 
- 	188, 216, 189, 188, 217, 189, 188, 218, 
- 	189, 188, 219, 189, 188, 220, 189, 188, 
- 	221, 189, 188, 222, 189, 188, 223, 189, 
- 	188, 224, 189, 188, 189, 225, 80, 188, 
- 	226, 189, 188, 227, 189, 188, 228, 189, 
- 	188, 229, 189, 188, 230, 189, 188, 231, 
- 	189, 188, 232, 189, 188, 203, 189, 188, 
- 	189, 234, 188, 189, 235, 188, 189, 236, 
- 	188, 189, 237, 188, 189, 238, 188, 189, 
- 	239, 188, 189, 240, 188, 189, 241, 188, 
- 	189, 242, 188, 189, 243, 188, 189, 244, 
- 	188, 189, 245, 188, 189, 246, 188, 189, 
- 	12, 188, 248, 0, 249, 0, 250, 0, 
- 	251, 0, 252, 0, 253, 0, 254, 0, 
- 	255, 0, 256, 0, 257, 0, 258, 0, 
- 	259, 0, 260, 340, 0, 261, 0, 262, 
- 	0, 263, 0, 264, 0, 265, 0, 266, 
- 	0, 267, 0, 268, 0, 269, 0, 271, 
- 	270, 271, 270, 272, 317, 271, 271, 12, 
- 	326, 279, 12, 271, 270, 273, 280, 286, 
- 	288, 297, 309, 271, 270, 274, 271, 270, 
- 	275, 271, 270, 276, 271, 270, 277, 271, 
- 	270, 278, 271, 270, 279, 271, 270, 271, 
- 	80, 270, 281, 271, 270, 282, 271, 270, 
- 	283, 271, 270, 284, 271, 270, 285, 271, 
- 	270, 279, 271, 270, 287, 271, 270, 279, 
- 	271, 270, 289, 271, 270, 290, 271, 270, 
- 	291, 271, 270, 292, 271, 270, 293, 271, 
- 	270, 294, 271, 270, 295, 271, 270, 296, 
- 	271, 270, 271, 80, 270, 298, 271, 270, 
- 	299, 271, 270, 300, 271, 270, 301, 271, 
- 	270, 302, 271, 270, 303, 271, 270, 304, 
- 	271, 270, 305, 271, 270, 306, 271, 270, 
- 	307, 271, 270, 308, 271, 270, 296, 271, 
- 	270, 310, 271, 270, 311, 271, 270, 312, 
- 	271, 270, 313, 271, 270, 314, 271, 270, 
- 	315, 271, 270, 316, 271, 270, 279, 271, 
- 	270, 318, 322, 279, 271, 270, 319, 271, 
- 	270, 320, 271, 270, 321, 271, 270, 279, 
- 	271, 270, 323, 271, 270, 324, 271, 270, 
- 	325, 271, 270, 279, 271, 270, 271, 327, 
- 	270, 271, 328, 270, 271, 329, 270, 271, 
- 	330, 270, 271, 331, 270, 271, 332, 270, 
- 	271, 333, 270, 271, 334, 270, 271, 335, 
- 	270, 271, 336, 270, 271, 337, 270, 271, 
- 	338, 270, 271, 339, 270, 271, 12, 270, 
- 	342, 341, 342, 341, 343, 404, 342, 342, 
- 	12, 413, 350, 12, 342, 341, 344, 363, 
- 	369, 371, 375, 396, 342, 341, 345, 351, 
- 	342, 341, 346, 342, 341, 347, 342, 341, 
- 	348, 342, 341, 349, 342, 341, 350, 342, 
- 	341, 342, 80, 341, 352, 342, 341, 353, 
- 	342, 341, 354, 342, 341, 355, 342, 341, 
- 	356, 342, 341, 357, 342, 341, 358, 342, 
- 	341, 359, 342, 341, 360, 342, 341, 361, 
- 	342, 341, 362, 342, 341, 342, 80, 341, 
- 	364, 342, 341, 365, 342, 341, 366, 342, 
- 	341, 367, 342, 341, 368, 342, 341, 350, 
- 	342, 341, 370, 342, 341, 350, 342, 341, 
- 	372, 342, 341, 373, 342, 341, 374, 342, 
- 	341, 358, 342, 341, 376, 342, 341, 377, 
- 	342, 341, 378, 342, 341, 379, 342, 341, 
- 	380, 342, 341, 381, 342, 341, 382, 342, 
- 	341, 383, 342, 341, 384, 342, 341, 385, 
- 	342, 341, 386, 342, 341, 387, 342, 341, 
- 	342, 388, 80, 341, 389, 342, 341, 390, 
- 	342, 341, 391, 342, 341, 392, 342, 341, 
- 	393, 342, 341, 394, 342, 341, 395, 342, 
- 	341, 362, 342, 341, 397, 342, 341, 398, 
- 	342, 341, 399, 342, 341, 400, 342, 341, 
- 	401, 342, 341, 402, 342, 341, 403, 342, 
- 	341, 350, 342, 341, 405, 409, 350, 342, 
- 	341, 406, 342, 341, 407, 342, 341, 408, 
- 	342, 341, 350, 342, 341, 410, 342, 341, 
- 	411, 342, 341, 412, 342, 341, 350, 342, 
- 	341, 342, 414, 341, 342, 415, 341, 342, 
- 	416, 341, 342, 417, 341, 342, 418, 341, 
- 	342, 419, 341, 342, 420, 341, 342, 421, 
- 	341, 342, 422, 341, 342, 423, 341, 342, 
- 	424, 341, 342, 425, 341, 342, 426, 341, 
- 	342, 12, 341, 428, 0, 429, 0, 430, 
- 	0, 431, 0, 432, 0, 433, 0, 434, 
- 	0, 9, 0, 436, 0, 12, 0, 0, 
- 	0
- };
- 
- static const unsigned char _lexer_trans_actions[] = {
- 	29, 29, 0, 54, 0, 5, 1, 0, 
- 	29, 1, 35, 0, 43, 0, 0, 0, 
- 	0, 0, 0, 43, 0, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 149, 126, 57, 110, 23, 
- 	0, 29, 29, 54, 0, 5, 1, 0, 
- 	29, 1, 35, 0, 43, 0, 0, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 139, 48, 9, 
- 	106, 11, 0, 134, 45, 45, 45, 3, 
- 	122, 33, 33, 33, 0, 122, 33, 33, 
- 	33, 0, 122, 33, 0, 33, 0, 102, 
- 	7, 7, 43, 54, 0, 0, 43, 114, 
- 	25, 0, 54, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	43, 43, 43, 43, 0, 27, 118, 27, 
- 	27, 51, 27, 0, 54, 0, 1, 0, 
- 	43, 0, 0, 0, 43, 54, 37, 37, 
- 	87, 37, 37, 43, 0, 39, 0, 43, 
- 	0, 0, 54, 0, 0, 39, 0, 0, 
- 	96, 96, 54, 0, 93, 90, 41, 96, 
- 	90, 99, 0, 43, 0, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 144, 57, 54, 
- 	0, 84, 84, 54, 0, 72, 33, 84, 
- 	72, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 54, 15, 0, 
- 	63, 63, 130, 31, 60, 57, 31, 63, 
- 	57, 66, 31, 43, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 54, 15, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 54, 0, 15, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 15, 0, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 144, 57, 54, 0, 
- 	84, 54, 0, 81, 81, 0, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 54, 21, 0, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 144, 
- 	57, 54, 0, 84, 54, 0, 69, 33, 
- 	69, 0, 0, 0, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 54, 13, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 54, 0, 13, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	13, 0, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 144, 
- 	57, 54, 0, 84, 84, 54, 0, 78, 
- 	33, 84, 78, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 54, 
- 	19, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 54, 19, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 19, 0, 
- 	144, 57, 54, 0, 84, 84, 54, 0, 
- 	75, 33, 84, 75, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 54, 0, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 54, 17, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 54, 17, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	54, 0, 17, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 17, 0, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	0
- };
- 
- static const unsigned char _lexer_eof_actions[] = {
- 	0, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43
- };
- 
- static const int lexer_start = 1;
- static const int lexer_first_final = 437;
- static const int lexer_error = 0;
- 
- static const int lexer_en_main = 1;
- 
- 
- #line 258 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ar.c.rl"
- 
- static VALUE 
- unindent(VALUE con, int start_col)
- {
-   VALUE re;
-   // Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters
-   char pat[32]; 
-   snprintf(pat, 32, "^[\t ]{0,%d}", start_col); 
-   re = rb_reg_regcomp(rb_str_new2(pat));
-   rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2(""));
- 
-   return Qnil;
- 
- }
- 
- static void 
- store_kw_con(VALUE listener, const char * event_name, 
-              const char * keyword_at, size_t keyword_length, 
-              const char * at,         size_t length, 
-              int current_line)
- {
-   VALUE con = Qnil, kw = Qnil;
-   kw = ENCODED_STR_NEW(keyword_at, keyword_length);
-   con = ENCODED_STR_NEW(at, length);
-   rb_funcall(con, rb_intern("strip!"), 0);
-   rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); 
- }
- 
- static void
- store_multiline_kw_con(VALUE listener, const char * event_name,
-                       const char * keyword_at, size_t keyword_length,
-                       const char * at,         size_t length,
-                       int current_line, int start_col)
- {
-   VALUE split;
-   VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil;
- 
-   kw = ENCODED_STR_NEW(keyword_at, keyword_length);
-   con = ENCODED_STR_NEW(at, length);
- 
-   unindent(con, start_col);
-   
-   split = rb_str_split(con, "\n");
- 
-   name = rb_funcall(split, rb_intern("shift"), 0);
-   desc = rb_ary_join(split, rb_str_new2( "\n" ));
- 
-   if( name == Qnil ) 
-   {
-     name = rb_str_new2("");
-   }
-   if( rb_funcall(desc, rb_intern("size"), 0) == 0) 
-   {
-     desc = rb_str_new2("");
-   }
-   rb_funcall(name, rb_intern("strip!"), 0);
-   rb_funcall(desc, rb_intern("rstrip!"), 0);
-   rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); 
- }
- 
- static void 
- store_attr(VALUE listener, const char * attr_type,
-            const char * at, size_t length, 
-            int line)
- {
-   VALUE val = ENCODED_STR_NEW(at, length);
-   rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line));
- }
- static void 
- store_docstring_content(VALUE listener, 
-           int start_col, 
-           const char *type_at, size_t type_length,
-           const char *at, size_t length, 
-           int current_line)
- {
-   VALUE re2;
-   VALUE unescape_escaped_quotes;
-   VALUE con = ENCODED_STR_NEW(at, length);
-   VALUE con_type = ENCODED_STR_NEW(type_at, type_length);
- 
-   unindent(con, start_col);
- 
-   re2 = rb_reg_regcomp(rb_str_new2("\r\\Z"));
-   unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\""));
-   rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2(""));
-   rb_funcall(con_type, rb_intern("strip!"), 0);
-   rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\""));
-   rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line));
- }
- static void 
- raise_lexer_error(const char * at, int line)
- { 
-   rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at);
- }
- 
- static void lexer_init(lexer_state *lexer) {
-   lexer->content_start = 0;
-   lexer->content_end = 0;
-   lexer->content_len = 0;
-   lexer->docstring_content_type_start = 0;
-   lexer->docstring_content_type_end = 0;
-   lexer->mark = 0;
-   lexer->keyword_start = 0;
-   lexer->keyword_end = 0;
-   lexer->next_keyword_start = 0;
-   lexer->line_number = 1;
-   lexer->last_newline = 0;
-   lexer->final_newline = 0;
-   lexer->start_col = 0;
- }
- 
- static VALUE CLexer_alloc(VALUE klass)
- {
-   VALUE obj;
-   lexer_state *lxr = ALLOC(lexer_state);
-   lexer_init(lxr);
- 
-   obj = Data_Wrap_Struct(klass, NULL, -1, lxr);
- 
-   return obj;
- }
- 
- static VALUE CLexer_init(VALUE self, VALUE listener)
- {
-   lexer_state *lxr; 
-   rb_iv_set(self, "@listener", listener);
-   
-   lxr = NULL;
-   DATA_GET(self, lexer_state, lxr);
-   lexer_init(lxr);
-   
-   return self;
- }
- 
- static VALUE CLexer_scan(VALUE self, VALUE input)
- {
-   VALUE input_copy;
-   char *data;
-   size_t len;
-   VALUE listener = rb_iv_get(self, "@listener");
- 
-   lexer_state *lexer;
-   lexer = NULL;
-   DATA_GET(self, lexer_state, lexer);
- 
-   input_copy = rb_str_dup(input);
- 
-   rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%"));
-   data = RSTRING_PTR(input_copy);
-   len = RSTRING_LEN(input_copy);
-   
-   if (len == 0) { 
-     rb_raise(rb_eGherkinLexingError, "No content to lex.");
-   } else {
- 
-     const char *p, *pe, *eof;
-     int cs = 0;
-     
-     VALUE current_row = Qnil;
- 
-     p = data;
-     pe = data + len;
-     eof = pe;
-     
-     assert(*pe == '\0' && "pointer does not end on NULL");
-     
-     
- #line 1036 "ext/gherkin_lexer_ar/gherkin_lexer_ar.c"
- 	{
- 	cs = lexer_start;
- 	}
- 
- #line 425 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ar.c.rl"
-     
- #line 1043 "ext/gherkin_lexer_ar/gherkin_lexer_ar.c"
- 	{
- 	int _klen;
- 	unsigned int _trans;
- 	const char *_acts;
- 	unsigned int _nacts;
- 	const char *_keys;
- 
- 	if ( p == pe )
- 		goto _test_eof;
- 	if ( cs == 0 )
- 		goto _out;
- _resume:
- 	_keys = _lexer_trans_keys + _lexer_key_offsets[cs];
- 	_trans = _lexer_index_offsets[cs];
- 
- 	_klen = _lexer_single_lengths[cs];
- 	if ( _klen > 0 ) {
- 		const char *_lower = _keys;
- 		const char *_mid;
- 		const char *_upper = _keys + _klen - 1;
- 		while (1) {
- 			if ( _upper < _lower )
- 				break;
- 
- 			_mid = _lower + ((_upper-_lower) >> 1);
- 			if ( (*p) < *_mid )
- 				_upper = _mid - 1;
- 			else if ( (*p) > *_mid )
- 				_lower = _mid + 1;
- 			else {
- 				_trans += (_mid - _keys);
- 				goto _match;
- 			}
- 		}
- 		_keys += _klen;
- 		_trans += _klen;
- 	}
- 
- 	_klen = _lexer_range_lengths[cs];
- 	if ( _klen > 0 ) {
- 		const char *_lower = _keys;
- 		const char *_mid;
- 		const char *_upper = _keys + (_klen<<1) - 2;
- 		while (1) {
- 			if ( _upper < _lower )
- 				break;
- 
- 			_mid = _lower + (((_upper-_lower) >> 1) & ~1);
- 			if ( (*p) < _mid[0] )
- 				_upper = _mid - 2;
- 			else if ( (*p) > _mid[1] )
- 				_lower = _mid + 2;
- 			else {
- 				_trans += ((_mid - _keys)>>1);
- 				goto _match;
- 			}
- 		}
- 		_trans += _klen;
- 	}
- 
- _match:
- 	cs = _lexer_trans_targs[_trans];
- 
- 	if ( _lexer_trans_actions[_trans] == 0 )
- 		goto _again;
- 
- 	_acts = _lexer_actions + _lexer_trans_actions[_trans];
- 	_nacts = (unsigned int) *_acts++;
- 	while ( _nacts-- > 0 )
- 	{
- 		switch ( *_acts++ )
- 		{
- 	case 0:
- #line 83 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ar.c.rl"
- 	{
- 		MARK(content_start, p);
-     lexer->current_line = lexer->line_number;
-     lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2;
-   }
- 	break;
- 	case 1:
- #line 89 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ar.c.rl"
- 	{
-     MARK(content_start, p);
-   }
- 	break;
- 	case 2:
- #line 93 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ar.c.rl"
- 	{
-     lexer->current_line = lexer->line_number;
-     lexer->start_col = p - data - lexer->last_newline;
-   }
- 	break;
- 	case 3:
- #line 98 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ar.c.rl"
- 	{
-     int len = LEN(content_start, PTR_TO(final_newline));
-     int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end));
- 
-     if (len < 0) len = 0;
-     if (type_len < 0) len = 0;
- 
-     store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line);
-   }
- 	break;
- 	case 4:
- #line 108 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ar.c.rl"
- 	{ 
-     MARK(docstring_content_type_start, p);
-   }
- 	break;
- 	case 5:
- #line 112 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ar.c.rl"
- 	{ 
-     MARK(docstring_content_type_end, p);
-   }
- 	break;
- 	case 6:
- #line 116 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ar.c.rl"
- 	{
-     STORE_KW_END_CON(feature);
-   }
- 	break;
- 	case 7:
- #line 120 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ar.c.rl"
- 	{
-     STORE_KW_END_CON(background);
-   }
- 	break;
- 	case 8:
- #line 124 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ar.c.rl"
- 	{
-     STORE_KW_END_CON(scenario);
-   }
- 	break;
- 	case 9:
- #line 128 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ar.c.rl"
- 	{
-     STORE_KW_END_CON(scenario_outline);
-   }
- 	break;
- 	case 10:
- #line 132 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ar.c.rl"
- 	{
-     STORE_KW_END_CON(examples);
-   }
- 	break;
- 	case 11:
- #line 136 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ar.c.rl"
- 	{
-     store_kw_con(listener, "step",
-       PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-       PTR_TO(content_start), LEN(content_start, p), 
-       lexer->current_line);
-   }
- 	break;
- 	case 12:
- #line 143 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ar.c.rl"
- 	{
-     STORE_ATTR(comment);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 13:
- #line 148 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ar.c.rl"
- 	{
-     STORE_ATTR(tag);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 14:
- #line 153 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ar.c.rl"
- 	{
-     lexer->line_number += 1;
-     MARK(final_newline, p);
-   }
- 	break;
- 	case 15:
- #line 158 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ar.c.rl"
- 	{
-     MARK(last_newline, p + 1);
-   }
- 	break;
- 	case 16:
- #line 162 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ar.c.rl"
- 	{
-     if (lexer->mark == 0) {
-       MARK(mark, p);
-     }
-   }
- 	break;
- 	case 17:
- #line 168 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ar.c.rl"
- 	{
-     MARK(keyword_end, p);
-     MARK(keyword_start, PTR_TO(mark));
-     MARK(content_start, p + 1);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 18:
- #line 175 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ar.c.rl"
- 	{
-     MARK(content_end, p);
-   }
- 	break;
- 	case 19:
- #line 179 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ar.c.rl"
- 	{
-     p = p - 1;
-     lexer->current_line = lexer->line_number;
-     current_row = rb_ary_new();
-   }
- 	break;
- 	case 20:
- #line 185 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ar.c.rl"
- 	{
- 		MARK(content_start, p);
-   }
- 	break;
- 	case 21:
- #line 189 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ar.c.rl"
- 	{
-     VALUE re_pipe, re_newline, re_backslash;
-     VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
-     rb_funcall(con, rb_intern("strip!"), 0);
-     re_pipe      = rb_reg_regcomp(rb_str_new2("\\\\\\|"));
-     re_newline   = rb_reg_regcomp(rb_str_new2("\\\\n"));
-     re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_pipe,      rb_str_new2("|"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_newline,   rb_str_new2("\n"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\"));
- 
-     rb_ary_push(current_row, con);
-   }
- 	break;
- 	case 22:
- #line 203 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ar.c.rl"
- 	{
-     rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
-   }
- 	break;
- 	case 23:
- #line 207 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ar.c.rl"
- 	{
-     int line;
-     if (cs < lexer_first_final) {
-       size_t count = 0;
-       VALUE newstr_val;
-       char *newstr;
-       int newstr_count = 0;        
-       size_t len;
-       const char *buff;
-       if (lexer->last_newline != 0) {
-         len = LEN(last_newline, eof);
-         buff = PTR_TO(last_newline);
-       } else {
-         len = strlen(data);
-         buff = data;
-       }
- 
-       // Allocate as a ruby string so that it gets cleaned up by GC
-       newstr_val = rb_str_new(buff, len);
-       newstr = RSTRING_PTR(newstr_val);
- 
- 
-       for (count = 0; count < len; count++) {
-         if(buff[count] == 10) {
-           newstr[newstr_count] = '\0'; // terminate new string at first newline found
-           break;
-         } else {
-           if (buff[count] == '%') {
-             newstr[newstr_count++] = buff[count];
-             newstr[newstr_count] = buff[count];
-           } else {
-             newstr[newstr_count] = buff[count];
-           }
-         }
-         newstr_count++;
-       }
- 
-       line = lexer->line_number;
-       lexer_init(lexer); // Re-initialize so we can scan again with the same lexer
-       raise_lexer_error(newstr, line);
-     } else {
-       rb_funcall(listener, rb_intern("eof"), 0);
-     }
-   }
- 	break;
- #line 1333 "ext/gherkin_lexer_ar/gherkin_lexer_ar.c"
- 		}
- 	}
- 
- _again:
- 	if ( cs == 0 )
- 		goto _out;
- 	if ( ++p != pe )
- 		goto _resume;
- 	_test_eof: {}
- 	if ( p == eof )
- 	{
- 	const char *__acts = _lexer_actions + _lexer_eof_actions[cs];
- 	unsigned int __nacts = (unsigned int) *__acts++;
- 	while ( __nacts-- > 0 ) {
- 		switch ( *__acts++ ) {
- 	case 23:
- #line 207 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ar.c.rl"
- 	{
-     int line;
-     if (cs < lexer_first_final) {
-       size_t count = 0;
-       VALUE newstr_val;
-       char *newstr;
-       int newstr_count = 0;        
-       size_t len;
-       const char *buff;
-       if (lexer->last_newline != 0) {
-         len = LEN(last_newline, eof);
-         buff = PTR_TO(last_newline);
-       } else {
-         len = strlen(data);
-         buff = data;
-       }
- 
-       // Allocate as a ruby string so that it gets cleaned up by GC
-       newstr_val = rb_str_new(buff, len);
-       newstr = RSTRING_PTR(newstr_val);
- 
- 
-       for (count = 0; count < len; count++) {
-         if(buff[count] == 10) {
-           newstr[newstr_count] = '\0'; // terminate new string at first newline found
-           break;
-         } else {
-           if (buff[count] == '%') {
-             newstr[newstr_count++] = buff[count];
-             newstr[newstr_count] = buff[count];
-           } else {
-             newstr[newstr_count] = buff[count];
-           }
-         }
-         newstr_count++;
-       }
- 
-       line = lexer->line_number;
-       lexer_init(lexer); // Re-initialize so we can scan again with the same lexer
-       raise_lexer_error(newstr, line);
-     } else {
-       rb_funcall(listener, rb_intern("eof"), 0);
-     }
-   }
- 	break;
- #line 1396 "ext/gherkin_lexer_ar/gherkin_lexer_ar.c"
- 		}
- 	}
- 	}
- 
- 	_out: {}
- 	}
- 
- #line 426 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ar.c.rl"
- 
-     assert(p <= pe && "data overflow after parsing execute");
-     assert(lexer->content_start <= len && "content starts after data end");
-     assert(lexer->mark < len && "mark is after data end");
-     
-     // Reset lexer by re-initializing the whole thing
-     lexer_init(lexer);
- 
-     if (cs == lexer_error) {
-       rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails.");
-     } else {
-       return Qtrue;
-     }
-   }
- }
- 
- void Init_gherkin_lexer_ar()
- {
-   mGherkin = rb_define_module("Gherkin");
-   mGherkinLexer = rb_define_module_under(mGherkin, "Lexer");
-   rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError"));
- 
-   mCLexer = rb_define_module_under(mGherkin, "CLexer");
-   cI18nLexer = rb_define_class_under(mCLexer, "Ar", rb_cObject);
-   rb_define_alloc_func(cI18nLexer, CLexer_alloc);
-   rb_define_method(cI18nLexer, "initialize", CLexer_init, 1);
-   rb_define_method(cI18nLexer, "scan", CLexer_scan, 1);
- }
- 
 -#line 1 "ragel/i18n/ar.c.rl"
 -#include <assert.h>
 -#include <ruby.h>
 -
 -#if defined(_WIN32)
 -#include <stddef.h>
 -#endif
 -
 -#ifdef HAVE_RUBY_RE_H
 -#include <ruby/re.h>
 -#else
 -#include <re.h>
 -#endif
 -
 -#ifdef HAVE_RUBY_ENCODING_H
 -#include <ruby/encoding.h>
 -#define ENCODED_STR_NEW(ptr, len) \
 -    rb_enc_str_new(ptr, len, rb_utf8_encoding())
 -#else
 -#define ENCODED_STR_NEW(ptr, len) \
 -    rb_str_new(ptr, len)
 -#endif
 -
 -#ifndef RSTRING_PTR
 -#define RSTRING_PTR(s) (RSTRING(s)->ptr)
 -#endif
 -
 -#ifndef RSTRING_LEN
 -#define RSTRING_LEN(s) (RSTRING(s)->len)
 -#endif
 -
 -#define DATA_GET(FROM, TYPE, NAME) \
 -  Data_Get_Struct(FROM, TYPE, NAME); \
 -  if (NAME == NULL) { \
 -    rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \
 -  }
 - 
 -typedef struct lexer_state {
 -  int content_len;
 -  int line_number;
 -  int current_line;
 -  int start_col;
 -  size_t mark;
 -  size_t keyword_start;
 -  size_t keyword_end;
 -  size_t next_keyword_start;
 -  size_t content_start;
 -  size_t content_end;
 -  size_t docstring_content_type_start;
 -  size_t docstring_content_type_end;
 -  size_t query_start;
 -  size_t last_newline;
 -  size_t final_newline;
 -} lexer_state;
 -
 -static VALUE mGherkin;
 -static VALUE mGherkinLexer;
 -static VALUE mCLexer;
 -static VALUE cI18nLexer;
 -static VALUE rb_eGherkinLexingError;
 -
 -#define LEN(AT, P) (P - data - lexer->AT)
 -#define MARK(M, P) (lexer->M = (P) - data)
 -#define PTR_TO(P) (data + lexer->P)
 -
 -#define STORE_KW_END_CON(EVENT) \
 -  store_multiline_kw_con(listener, # EVENT, \
 -    PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \
 -    PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \
 -    lexer->current_line, lexer->start_col); \
 -    if (lexer->content_end != 0) { \
 -      p = PTR_TO(content_end - 1); \
 -    } \
 -    lexer->content_end = 0
 -
 -#define STORE_ATTR(ATTR) \
 -    store_attr(listener, # ATTR, \
 -      PTR_TO(content_start), LEN(content_start, p), \
 -      lexer->line_number)
 -
 -
 -#line 254 "ragel/i18n/ar.c.rl"
 -
 -
 -/** Data **/
 -
 -#line 89 "ext/gherkin_lexer_ar/gherkin_lexer_ar.c"
 -static const char _lexer_actions[] = {
 -	0, 1, 0, 1, 1, 1, 2, 1, 
 -	3, 1, 4, 1, 5, 1, 6, 1, 
 -	7, 1, 8, 1, 9, 1, 10, 1, 
 -	11, 1, 12, 1, 13, 1, 16, 1, 
 -	17, 1, 18, 1, 19, 1, 20, 1, 
 -	21, 1, 22, 1, 23, 2, 1, 18, 
 -	2, 4, 5, 2, 13, 0, 2, 14, 
 -	15, 2, 17, 0, 2, 17, 2, 2, 
 -	17, 16, 2, 17, 19, 2, 18, 6, 
 -	2, 18, 7, 2, 18, 8, 2, 18, 
 -	9, 2, 18, 10, 2, 18, 16, 2, 
 -	20, 21, 2, 22, 0, 2, 22, 2, 
 -	2, 22, 16, 2, 22, 19, 3, 3, 
 -	14, 15, 3, 5, 14, 15, 3, 11, 
 -	14, 15, 3, 12, 14, 15, 3, 13, 
 -	14, 15, 3, 14, 15, 18, 3, 17, 
 -	0, 11, 3, 17, 14, 15, 4, 1, 
 -	14, 15, 18, 4, 4, 5, 14, 15, 
 -	4, 17, 0, 14, 15, 5, 17, 0, 
 -	11, 14, 15
 -};
 -
 -static const short _lexer_key_offsets[] = {
 -	0, 0, 13, 19, 21, 22, 23, 24, 
 -	25, 26, 27, 29, 31, 43, 46, 47, 
 -	48, 49, 50, 51, 52, 53, 54, 55, 
 -	56, 58, 60, 65, 70, 75, 80, 84, 
 -	88, 90, 91, 92, 93, 94, 95, 96, 
 -	97, 98, 99, 100, 101, 102, 103, 104, 
 -	105, 110, 117, 122, 126, 132, 135, 137, 
 -	143, 155, 157, 158, 159, 160, 161, 162, 
 -	163, 164, 165, 166, 167, 168, 169, 170, 
 -	180, 187, 189, 191, 193, 195, 197, 199, 
 -	201, 213, 215, 217, 219, 221, 223, 225, 
 -	227, 229, 231, 233, 235, 237, 239, 241, 
 -	243, 245, 247, 249, 251, 253, 255, 257, 
 -	259, 261, 263, 265, 267, 269, 271, 274, 
 -	276, 278, 280, 282, 284, 286, 288, 290, 
 -	292, 294, 296, 298, 300, 302, 304, 306, 
 -	310, 312, 314, 316, 318, 320, 322, 324, 
 -	326, 328, 330, 332, 334, 336, 338, 340, 
 -	342, 344, 346, 348, 350, 352, 354, 355, 
 -	356, 357, 358, 359, 360, 361, 362, 363, 
 -	370, 372, 374, 376, 378, 380, 382, 384, 
 -	386, 388, 390, 391, 392, 393, 394, 395, 
 -	396, 397, 398, 399, 400, 401, 402, 403, 
 -	404, 405, 406, 407, 408, 409, 417, 421, 
 -	423, 426, 428, 430, 432, 434, 436, 438, 
 -	440, 442, 444, 446, 448, 450, 452, 454, 
 -	456, 458, 460, 462, 464, 466, 468, 470, 
 -	472, 474, 476, 478, 480, 482, 484, 486, 
 -	488, 491, 493, 495, 497, 499, 501, 503, 
 -	505, 507, 509, 511, 513, 515, 517, 519, 
 -	521, 523, 525, 527, 529, 531, 533, 535, 
 -	536, 537, 538, 539, 540, 541, 542, 543, 
 -	544, 545, 546, 547, 549, 550, 551, 552, 
 -	553, 554, 555, 556, 557, 558, 559, 560, 
 -	570, 577, 579, 581, 583, 585, 587, 589, 
 -	591, 593, 595, 597, 599, 601, 603, 605, 
 -	607, 609, 611, 613, 615, 617, 619, 621, 
 -	623, 625, 627, 629, 631, 633, 635, 637, 
 -	639, 641, 643, 645, 647, 649, 651, 653, 
 -	655, 657, 659, 661, 663, 665, 669, 671, 
 -	673, 675, 677, 679, 681, 683, 685, 687, 
 -	689, 691, 693, 695, 697, 699, 701, 703, 
 -	705, 707, 709, 711, 713, 714, 715, 725, 
 -	732, 735, 737, 739, 741, 743, 745, 747, 
 -	749, 751, 753, 755, 757, 759, 761, 763, 
 -	765, 767, 769, 771, 773, 775, 777, 779, 
 -	781, 783, 785, 787, 789, 791, 793, 795, 
 -	797, 799, 801, 803, 805, 807, 809, 811, 
 -	813, 815, 817, 819, 822, 824, 826, 828, 
 -	830, 832, 834, 836, 838, 840, 842, 844, 
 -	846, 848, 850, 852, 854, 858, 860, 862, 
 -	864, 866, 868, 870, 872, 874, 876, 878, 
 -	880, 882, 884, 886, 888, 890, 892, 894, 
 -	896, 898, 900, 902, 903, 904, 905, 906, 
 -	907, 908, 909, 910, 911, 912
 -};
 -
 -static const char _lexer_trans_keys[] = {
 -	-40, -39, -17, 10, 32, 34, 35, 37, 
 -	42, 64, 124, 9, 13, -89, -88, -85, 
 -	-82, -77, -71, -40, -39, -80, -40, -89, 
 -	-39, -117, 32, 10, 13, 10, 13, -40, 
 -	-39, 10, 32, 34, 35, 37, 42, 64, 
 -	124, 9, 13, -124, -123, -120, -39, -125, 
 -	-39, -122, -40, -86, -39, -119, 34, 34, 
 -	10, 13, 10, 13, 10, 32, 34, 9, 
 -	13, 10, 32, 34, 9, 13, 10, 32, 
 -	34, 9, 13, 10, 32, 34, 9, 13, 
 -	10, 32, 9, 13, 10, 32, 9, 13, 
 -	10, 13, 10, 95, 70, 69, 65, 84, 
 -	85, 82, 69, 95, 69, 78, 68, 95, 
 -	37, 13, 32, 64, 9, 10, 9, 10, 
 -	13, 32, 64, 11, 12, 10, 32, 64, 
 -	9, 13, 32, 124, 9, 13, 10, 32, 
 -	92, 124, 9, 13, 10, 92, 124, 10, 
 -	92, 10, 32, 92, 124, 9, 13, -40, 
 -	-39, 10, 32, 34, 35, 37, 42, 64, 
 -	124, 9, 13, -124, -123, -40, -82, -39, 
 -	-124, -39, -127, -39, -118, -40, -87, 58, 
 -	10, 10, -40, -39, 10, 32, 35, 37, 
 -	42, 64, 9, 13, -89, -88, -85, -82, 
 -	-77, -71, 10, -40, 10, -80, 10, -40, 
 -	10, -89, 10, -39, 10, -117, 10, 10, 
 -	32, -40, -39, 10, 32, 34, 35, 37, 
 -	42, 64, 124, 9, 13, -39, 10, -127, 
 -	10, -40, 10, -79, 10, -40, 10, -74, 
 -	10, -39, 10, -123, 10, -40, 10, -89, 
 -	10, -40, 10, -75, 10, -39, 10, -118, 
 -	10, -40, 10, -87, 10, 10, 58, -39, 
 -	10, -118, 10, -39, 10, -122, 10, -40, 
 -	10, -89, 10, -40, 10, -79, 10, -39, 
 -	10, -118, 10, -39, 10, -120, 10, 10, 
 -	32, 58, -39, 10, -123, 10, -40, 10, 
 -	-82, 10, -40, 10, -73, 10, -40, 10, 
 -	-73, 10, -39, 10, -122, 10, -40, 10, 
 -	-81, 10, -39, 10, -123, 10, -40, 10, 
 -	-89, 10, -124, -123, -120, 10, -39, 10, 
 -	-125, 10, -39, 10, -122, 10, -40, 10, 
 -	-86, 10, -39, 10, -119, 10, 10, 95, 
 -	10, 70, 10, 69, 10, 65, 10, 84, 
 -	10, 85, 10, 82, 10, 69, 10, 95, 
 -	10, 69, 10, 78, 10, 68, 10, 95, 
 -	10, 37, -40, -85, -39, -124, -40, -87, 
 -	58, 10, 10, -40, 10, 32, 35, 124, 
 -	9, 13, -82, 10, -40, 10, -89, 10, 
 -	-40, 10, -75, 10, -39, 10, -118, 10, 
 -	-40, 10, -87, 10, 10, 58, -39, -127, 
 -	-40, -79, -40, -74, -39, -123, -40, -89, 
 -	-40, -75, -39, -118, -40, -87, 58, 10, 
 -	10, -40, 10, 32, 35, 37, 64, 9, 
 -	13, -89, -82, -77, 10, -39, 10, -124, 
 -	-123, 10, -40, 10, -82, 10, -39, 10, 
 -	-124, 10, -39, 10, -127, 10, -39, 10, 
 -	-118, 10, -40, 10, -87, 10, 10, 58, 
 -	-40, 10, -85, 10, -39, 10, -124, 10, 
 -	-40, 10, -89, 10, -40, 10, -75, 10, 
 -	-39, 10, -118, 10, -39, 10, -122, 10, 
 -	-40, 10, -89, 10, -40, 10, -79, 10, 
 -	-39, 10, -118, 10, -39, 10, -120, 10, 
 -	10, 32, 58, -39, 10, -123, 10, -40, 
 -	10, -82, 10, -40, 10, -73, 10, -40, 
 -	10, -73, 10, 10, 95, 10, 70, 10, 
 -	69, 10, 65, 10, 84, 10, 85, 10, 
 -	82, 10, 69, 10, 95, 10, 69, 10, 
 -	78, 10, 68, 10, 95, 10, 37, -39, 
 -	-118, -39, -122, -40, -89, -40, -79, -39, 
 -	-118, -39, -120, 32, 58, -39, -123, -40, 
 -	-82, -40, -73, -40, -73, 58, 10, 10, 
 -	-40, -39, 10, 32, 35, 37, 42, 64, 
 -	9, 13, -89, -88, -85, -82, -77, -71, 
 -	10, -40, 10, -80, 10, -40, 10, -89, 
 -	10, -39, 10, -117, 10, 10, 32, -39, 
 -	10, -127, 10, -40, 10, -79, 10, -40, 
 -	10, -74, 10, -39, 10, -123, 10, -40, 
 -	10, -89, 10, -40, 10, -75, 10, -39, 
 -	10, -118, 10, -40, 10, -87, 10, 10, 
 -	58, -39, 10, -118, 10, -39, 10, -122, 
 -	10, -40, 10, -89, 10, -40, 10, -79, 
 -	10, -39, 10, -118, 10, -39, 10, -120, 
 -	10, -39, 10, -122, 10, -40, 10, -81, 
 -	10, -39, 10, -123, 10, -40, 10, -89, 
 -	10, -124, -123, -120, 10, -39, 10, -125, 
 -	10, -39, 10, -122, 10, -40, 10, -86, 
 -	10, -39, 10, -119, 10, 10, 95, 10, 
 -	70, 10, 69, 10, 65, 10, 84, 10, 
 -	85, 10, 82, 10, 69, 10, 95, 10, 
 -	69, 10, 78, 10, 68, 10, 95, 10, 
 -	37, 10, 10, -40, -39, 10, 32, 35, 
 -	37, 42, 64, 9, 13, -89, -88, -85, 
 -	-82, -77, -71, 10, -40, -39, 10, -80, 
 -	10, -40, 10, -89, 10, -39, 10, -117, 
 -	10, 10, 32, -124, 10, -40, 10, -82, 
 -	10, -39, 10, -124, 10, -39, 10, -127, 
 -	10, -39, 10, -118, 10, -40, 10, -87, 
 -	10, 10, 58, -39, 10, -127, 10, -40, 
 -	10, -79, 10, -40, 10, -74, 10, -39, 
 -	10, -123, 10, -40, 10, -89, 10, -40, 
 -	10, -75, 10, -39, 10, -118, 10, -39, 
 -	10, -122, 10, -40, 10, -89, 10, -40, 
 -	10, -79, 10, -39, 10, -118, 10, -39, 
 -	10, -120, 10, 10, 32, 58, -39, 10, 
 -	-123, 10, -40, 10, -82, 10, -40, 10, 
 -	-73, 10, -40, 10, -73, 10, -39, 10, 
 -	-122, 10, -40, 10, -81, 10, -39, 10, 
 -	-123, 10, -40, 10, -89, 10, -124, -123, 
 -	-120, 10, -39, 10, -125, 10, -39, 10, 
 -	-122, 10, -40, 10, -86, 10, -39, 10, 
 -	-119, 10, 10, 95, 10, 70, 10, 69, 
 -	10, 65, 10, 84, 10, 85, 10, 82, 
 -	10, 69, 10, 95, 10, 69, 10, 78, 
 -	10, 68, 10, 95, 10, 37, -39, -122, 
 -	-40, -81, -39, -123, -40, -89, -69, -65, 
 -	0
 -};
 -
 -static const char _lexer_single_lengths[] = {
 -	0, 11, 6, 2, 1, 1, 1, 1, 
 -	1, 1, 2, 2, 10, 3, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	2, 2, 3, 3, 3, 3, 2, 2, 
 -	2, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	3, 5, 3, 2, 4, 3, 2, 4, 
 -	10, 2, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 8, 
 -	7, 2, 2, 2, 2, 2, 2, 2, 
 -	10, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 3, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 4, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 5, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 6, 4, 2, 
 -	3, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	3, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 2, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 8, 
 -	7, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 4, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 1, 1, 8, 7, 
 -	3, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 3, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 4, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 0
 -};
 -
 -static const char _lexer_range_lengths[] = {
 -	0, 1, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 1, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 1, 1, 1, 1, 1, 1, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	1, 1, 1, 1, 1, 0, 0, 1, 
 -	1, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 1, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	1, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 1, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 1, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 1, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 1, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0
 -};
 -
 -static const short _lexer_index_offsets[] = {
 -	0, 0, 13, 20, 23, 25, 27, 29, 
 -	31, 33, 35, 38, 41, 53, 57, 59, 
 -	61, 63, 65, 67, 69, 71, 73, 75, 
 -	77, 80, 83, 88, 93, 98, 103, 107, 
 -	111, 114, 116, 118, 120, 122, 124, 126, 
 -	128, 130, 132, 134, 136, 138, 140, 142, 
 -	144, 149, 156, 161, 165, 171, 175, 178, 
 -	184, 196, 199, 201, 203, 205, 207, 209, 
 -	211, 213, 215, 217, 219, 221, 223, 225, 
 -	235, 243, 246, 249, 252, 255, 258, 261, 
 -	264, 276, 279, 282, 285, 288, 291, 294, 
 -	297, 300, 303, 306, 309, 312, 315, 318, 
 -	321, 324, 327, 330, 333, 336, 339, 342, 
 -	345, 348, 351, 354, 357, 360, 363, 367, 
 -	370, 373, 376, 379, 382, 385, 388, 391, 
 -	394, 397, 400, 403, 406, 409, 412, 415, 
 -	420, 423, 426, 429, 432, 435, 438, 441, 
 -	444, 447, 450, 453, 456, 459, 462, 465, 
 -	468, 471, 474, 477, 480, 483, 486, 488, 
 -	490, 492, 494, 496, 498, 500, 502, 504, 
 -	511, 514, 517, 520, 523, 526, 529, 532, 
 -	535, 538, 541, 543, 545, 547, 549, 551, 
 -	553, 555, 557, 559, 561, 563, 565, 567, 
 -	569, 571, 573, 575, 577, 579, 587, 592, 
 -	595, 599, 602, 605, 608, 611, 614, 617, 
 -	620, 623, 626, 629, 632, 635, 638, 641, 
 -	644, 647, 650, 653, 656, 659, 662, 665, 
 -	668, 671, 674, 677, 680, 683, 686, 689, 
 -	692, 696, 699, 702, 705, 708, 711, 714, 
 -	717, 720, 723, 726, 729, 732, 735, 738, 
 -	741, 744, 747, 750, 753, 756, 759, 762, 
 -	764, 766, 768, 770, 772, 774, 776, 778, 
 -	780, 782, 784, 786, 789, 791, 793, 795, 
 -	797, 799, 801, 803, 805, 807, 809, 811, 
 -	821, 829, 832, 835, 838, 841, 844, 847, 
 -	850, 853, 856, 859, 862, 865, 868, 871, 
 -	874, 877, 880, 883, 886, 889, 892, 895, 
 -	898, 901, 904, 907, 910, 913, 916, 919, 
 -	922, 925, 928, 931, 934, 937, 940, 943, 
 -	946, 949, 952, 955, 958, 961, 966, 969, 
 -	972, 975, 978, 981, 984, 987, 990, 993, 
 -	996, 999, 1002, 1005, 1008, 1011, 1014, 1017, 
 -	1020, 1023, 1026, 1029, 1032, 1034, 1036, 1046, 
 -	1054, 1058, 1061, 1064, 1067, 1070, 1073, 1076, 
 -	1079, 1082, 1085, 1088, 1091, 1094, 1097, 1100, 
 -	1103, 1106, 1109, 1112, 1115, 1118, 1121, 1124, 
 -	1127, 1130, 1133, 1136, 1139, 1142, 1145, 1148, 
 -	1151, 1154, 1157, 1160, 1163, 1166, 1169, 1172, 
 -	1175, 1178, 1181, 1184, 1188, 1191, 1194, 1197, 
 -	1200, 1203, 1206, 1209, 1212, 1215, 1218, 1221, 
 -	1224, 1227, 1230, 1233, 1236, 1241, 1244, 1247, 
 -	1250, 1253, 1256, 1259, 1262, 1265, 1268, 1271, 
 -	1274, 1277, 1280, 1283, 1286, 1289, 1292, 1295, 
 -	1298, 1301, 1304, 1307, 1309, 1311, 1313, 1315, 
 -	1317, 1319, 1321, 1323, 1325, 1327
 -};
 -
 -static const short _lexer_trans_targs[] = {
 -	2, 13, 435, 12, 12, 22, 32, 34, 
 -	9, 48, 51, 12, 0, 3, 170, 176, 
 -	178, 247, 427, 0, 4, 57, 0, 5, 
 -	0, 6, 0, 7, 0, 8, 0, 9, 
 -	0, 10, 0, 12, 33, 11, 12, 33, 
 -	11, 2, 13, 12, 12, 22, 32, 34, 
 -	9, 48, 51, 12, 0, 14, 18, 9, 
 -	0, 15, 0, 16, 0, 17, 0, 9, 
 -	0, 19, 0, 20, 0, 21, 0, 9, 
 -	0, 23, 0, 24, 0, 26, 25, 25, 
 -	26, 25, 25, 27, 27, 28, 27, 27, 
 -	27, 27, 28, 27, 27, 27, 27, 29, 
 -	27, 27, 27, 27, 30, 27, 27, 12, 
 -	31, 31, 0, 12, 31, 31, 0, 12, 
 -	33, 32, 12, 0, 35, 0, 36, 0, 
 -	37, 0, 38, 0, 39, 0, 40, 0, 
 -	41, 0, 42, 0, 43, 0, 44, 0, 
 -	45, 0, 46, 0, 47, 0, 437, 0, 
 -	0, 0, 0, 0, 49, 50, 12, 50, 
 -	50, 48, 49, 49, 12, 50, 48, 50, 
 -	0, 51, 52, 51, 0, 56, 55, 54, 
 -	52, 55, 53, 0, 54, 52, 53, 0, 
 -	54, 53, 56, 55, 54, 52, 55, 53, 
 -	2, 13, 56, 56, 22, 32, 34, 9, 
 -	48, 51, 56, 0, 58, 150, 0, 59, 
 -	0, 60, 0, 61, 0, 62, 0, 63, 
 -	0, 64, 0, 65, 0, 66, 0, 67, 
 -	0, 68, 0, 69, 0, 71, 70, 71, 
 -	70, 72, 127, 71, 71, 12, 136, 79, 
 -	12, 71, 70, 73, 81, 87, 89, 98, 
 -	119, 71, 70, 74, 71, 70, 75, 71, 
 -	70, 76, 71, 70, 77, 71, 70, 78, 
 -	71, 70, 79, 71, 70, 71, 80, 70, 
 -	2, 13, 12, 12, 22, 32, 34, 9, 
 -	48, 51, 12, 0, 82, 71, 70, 83, 
 -	71, 70, 84, 71, 70, 85, 71, 70, 
 -	86, 71, 70, 79, 71, 70, 88, 71, 
 -	70, 79, 71, 70, 90, 71, 70, 91, 
 -	71, 70, 92, 71, 70, 93, 71, 70, 
 -	94, 71, 70, 95, 71, 70, 96, 71, 
 -	70, 97, 71, 70, 71, 80, 70, 99, 
 -	71, 70, 100, 71, 70, 101, 71, 70, 
 -	102, 71, 70, 103, 71, 70, 104, 71, 
 -	70, 105, 71, 70, 106, 71, 70, 107, 
 -	71, 70, 108, 71, 70, 109, 71, 70, 
 -	110, 71, 70, 71, 111, 80, 70, 112, 
 -	71, 70, 113, 71, 70, 114, 71, 70, 
 -	115, 71, 70, 116, 71, 70, 117, 71, 
 -	70, 118, 71, 70, 97, 71, 70, 120, 
 -	71, 70, 121, 71, 70, 122, 71, 70, 
 -	123, 71, 70, 124, 71, 70, 125, 71, 
 -	70, 126, 71, 70, 79, 71, 70, 128, 
 -	132, 79, 71, 70, 129, 71, 70, 130, 
 -	71, 70, 131, 71, 70, 79, 71, 70, 
 -	133, 71, 70, 134, 71, 70, 135, 71, 
 -	70, 79, 71, 70, 71, 137, 70, 71, 
 -	138, 70, 71, 139, 70, 71, 140, 70, 
 -	71, 141, 70, 71, 142, 70, 71, 143, 
 -	70, 71, 144, 70, 71, 145, 70, 71, 
 -	146, 70, 71, 147, 70, 71, 148, 70, 
 -	71, 149, 70, 71, 12, 70, 151, 0, 
 -	152, 0, 153, 0, 154, 0, 155, 0, 
 -	156, 0, 157, 0, 159, 158, 159, 158, 
 -	160, 159, 159, 12, 12, 159, 158, 161, 
 -	159, 158, 162, 159, 158, 163, 159, 158, 
 -	164, 159, 158, 165, 159, 158, 166, 159, 
 -	158, 167, 159, 158, 168, 159, 158, 169, 
 -	159, 158, 159, 80, 158, 171, 0, 172, 
 -	0, 173, 0, 174, 0, 175, 0, 9, 
 -	0, 177, 0, 9, 0, 179, 0, 180, 
 -	0, 181, 0, 182, 0, 183, 0, 184, 
 -	0, 185, 0, 186, 0, 187, 0, 189, 
 -	188, 189, 188, 190, 189, 189, 12, 233, 
 -	12, 189, 188, 191, 208, 212, 189, 188, 
 -	192, 189, 188, 193, 204, 189, 188, 194, 
 -	189, 188, 195, 189, 188, 196, 189, 188, 
 -	197, 189, 188, 198, 189, 188, 199, 189, 
 -	188, 200, 189, 188, 201, 189, 188, 202, 
 -	189, 188, 203, 189, 188, 189, 80, 188, 
 -	205, 189, 188, 206, 189, 188, 207, 189, 
 -	188, 201, 189, 188, 209, 189, 188, 210, 
 -	189, 188, 211, 189, 188, 199, 189, 188, 
 -	213, 189, 188, 214, 189, 188, 215, 189, 
 -	188, 216, 189, 188, 217, 189, 188, 218, 
 -	189, 188, 219, 189, 188, 220, 189, 188, 
 -	221, 189, 188, 222, 189, 188, 223, 189, 
 -	188, 224, 189, 188, 189, 225, 80, 188, 
 -	226, 189, 188, 227, 189, 188, 228, 189, 
 -	188, 229, 189, 188, 230, 189, 188, 231, 
 -	189, 188, 232, 189, 188, 203, 189, 188, 
 -	189, 234, 188, 189, 235, 188, 189, 236, 
 -	188, 189, 237, 188, 189, 238, 188, 189, 
 -	239, 188, 189, 240, 188, 189, 241, 188, 
 -	189, 242, 188, 189, 243, 188, 189, 244, 
 -	188, 189, 245, 188, 189, 246, 188, 189, 
 -	12, 188, 248, 0, 249, 0, 250, 0, 
 -	251, 0, 252, 0, 253, 0, 254, 0, 
 -	255, 0, 256, 0, 257, 0, 258, 0, 
 -	259, 0, 260, 340, 0, 261, 0, 262, 
 -	0, 263, 0, 264, 0, 265, 0, 266, 
 -	0, 267, 0, 268, 0, 269, 0, 271, 
 -	270, 271, 270, 272, 317, 271, 271, 12, 
 -	326, 279, 12, 271, 270, 273, 280, 286, 
 -	288, 297, 309, 271, 270, 274, 271, 270, 
 -	275, 271, 270, 276, 271, 270, 277, 271, 
 -	270, 278, 271, 270, 279, 271, 270, 271, 
 -	80, 270, 281, 271, 270, 282, 271, 270, 
 -	283, 271, 270, 284, 271, 270, 285, 271, 
 -	270, 279, 271, 270, 287, 271, 270, 279, 
 -	271, 270, 289, 271, 270, 290, 271, 270, 
 -	291, 271, 270, 292, 271, 270, 293, 271, 
 -	270, 294, 271, 270, 295, 271, 270, 296, 
 -	271, 270, 271, 80, 270, 298, 271, 270, 
 -	299, 271, 270, 300, 271, 270, 301, 271, 
 -	270, 302, 271, 270, 303, 271, 270, 304, 
 -	271, 270, 305, 271, 270, 306, 271, 270, 
 -	307, 271, 270, 308, 271, 270, 296, 271, 
 -	270, 310, 271, 270, 311, 271, 270, 312, 
 -	271, 270, 313, 271, 270, 314, 271, 270, 
 -	315, 271, 270, 316, 271, 270, 279, 271, 
 -	270, 318, 322, 279, 271, 270, 319, 271, 
 -	270, 320, 271, 270, 321, 271, 270, 279, 
 -	271, 270, 323, 271, 270, 324, 271, 270, 
 -	325, 271, 270, 279, 271, 270, 271, 327, 
 -	270, 271, 328, 270, 271, 329, 270, 271, 
 -	330, 270, 271, 331, 270, 271, 332, 270, 
 -	271, 333, 270, 271, 334, 270, 271, 335, 
 -	270, 271, 336, 270, 271, 337, 270, 271, 
 -	338, 270, 271, 339, 270, 271, 12, 270, 
 -	342, 341, 342, 341, 343, 404, 342, 342, 
 -	12, 413, 350, 12, 342, 341, 344, 363, 
 -	369, 371, 375, 396, 342, 341, 345, 351, 
 -	342, 341, 346, 342, 341, 347, 342, 341, 
 -	348, 342, 341, 349, 342, 341, 350, 342, 
 -	341, 342, 80, 341, 352, 342, 341, 353, 
 -	342, 341, 354, 342, 341, 355, 342, 341, 
 -	356, 342, 341, 357, 342, 341, 358, 342, 
 -	341, 359, 342, 341, 360, 342, 341, 361, 
 -	342, 341, 362, 342, 341, 342, 80, 341, 
 -	364, 342, 341, 365, 342, 341, 366, 342, 
 -	341, 367, 342, 341, 368, 342, 341, 350, 
 -	342, 341, 370, 342, 341, 350, 342, 341, 
 -	372, 342, 341, 373, 342, 341, 374, 342, 
 -	341, 358, 342, 341, 376, 342, 341, 377, 
 -	342, 341, 378, 342, 341, 379, 342, 341, 
 -	380, 342, 341, 381, 342, 341, 382, 342, 
 -	341, 383, 342, 341, 384, 342, 341, 385, 
 -	342, 341, 386, 342, 341, 387, 342, 341, 
 -	342, 388, 80, 341, 389, 342, 341, 390, 
 -	342, 341, 391, 342, 341, 392, 342, 341, 
 -	393, 342, 341, 394, 342, 341, 395, 342, 
 -	341, 362, 342, 341, 397, 342, 341, 398, 
 -	342, 341, 399, 342, 341, 400, 342, 341, 
 -	401, 342, 341, 402, 342, 341, 403, 342, 
 -	341, 350, 342, 341, 405, 409, 350, 342, 
 -	341, 406, 342, 341, 407, 342, 341, 408, 
 -	342, 341, 350, 342, 341, 410, 342, 341, 
 -	411, 342, 341, 412, 342, 341, 350, 342, 
 -	341, 342, 414, 341, 342, 415, 341, 342, 
 -	416, 341, 342, 417, 341, 342, 418, 341, 
 -	342, 419, 341, 342, 420, 341, 342, 421, 
 -	341, 342, 422, 341, 342, 423, 341, 342, 
 -	424, 341, 342, 425, 341, 342, 426, 341, 
 -	342, 12, 341, 428, 0, 429, 0, 430, 
 -	0, 431, 0, 432, 0, 433, 0, 434, 
 -	0, 9, 0, 436, 0, 12, 0, 0, 
 -	0
 -};
 -
 -static const unsigned char _lexer_trans_actions[] = {
 -	29, 29, 0, 54, 0, 5, 1, 0, 
 -	29, 1, 35, 0, 43, 0, 0, 0, 
 -	0, 0, 0, 43, 0, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 149, 126, 57, 110, 23, 
 -	0, 29, 29, 54, 0, 5, 1, 0, 
 -	29, 1, 35, 0, 43, 0, 0, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 139, 48, 9, 
 -	106, 11, 0, 134, 45, 45, 45, 3, 
 -	122, 33, 33, 33, 0, 122, 33, 33, 
 -	33, 0, 122, 33, 0, 33, 0, 102, 
 -	7, 7, 43, 54, 0, 0, 43, 114, 
 -	25, 0, 54, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	43, 43, 43, 43, 0, 27, 118, 27, 
 -	27, 51, 27, 0, 54, 0, 1, 0, 
 -	43, 0, 0, 0, 43, 54, 37, 37, 
 -	87, 37, 37, 43, 0, 39, 0, 43, 
 -	0, 0, 54, 0, 0, 39, 0, 0, 
 -	96, 96, 54, 0, 93, 90, 41, 96, 
 -	90, 99, 0, 43, 0, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 144, 57, 54, 
 -	0, 84, 84, 54, 0, 72, 33, 84, 
 -	72, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 54, 15, 0, 
 -	63, 63, 130, 31, 60, 57, 31, 63, 
 -	57, 66, 31, 43, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 54, 15, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 54, 0, 15, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 15, 0, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 144, 57, 54, 0, 
 -	84, 54, 0, 81, 81, 0, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 54, 21, 0, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 144, 
 -	57, 54, 0, 84, 54, 0, 69, 33, 
 -	69, 0, 0, 0, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 54, 13, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 54, 0, 13, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	13, 0, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 144, 
 -	57, 54, 0, 84, 84, 54, 0, 78, 
 -	33, 84, 78, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 54, 
 -	19, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 54, 19, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 19, 0, 
 -	144, 57, 54, 0, 84, 84, 54, 0, 
 -	75, 33, 84, 75, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 54, 0, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 54, 17, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 54, 17, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	54, 0, 17, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 17, 0, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	0
 -};
 -
 -static const unsigned char _lexer_eof_actions[] = {
 -	0, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43
 -};
 -
 -static const int lexer_start = 1;
 -static const int lexer_first_final = 437;
 -static const int lexer_error = 0;
 -
 -static const int lexer_en_main = 1;
 -
 -
 -#line 258 "ragel/i18n/ar.c.rl"
 -
 -static VALUE 
 -unindent(VALUE con, int start_col)
 -{
 -  VALUE re;
 -  /* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */
 -  char pat[32]; 
 -  snprintf(pat, 32, "^[\t ]{0,%d}", start_col); 
 -  re = rb_reg_regcomp(rb_str_new2(pat));
 -  rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2(""));
 -
 -  return Qnil;
 -
 -}
 -
 -static void 
 -store_kw_con(VALUE listener, const char * event_name, 
 -             const char * keyword_at, size_t keyword_length, 
 -             const char * at,         size_t length, 
 -             int current_line)
 -{
 -  VALUE con = Qnil, kw = Qnil;
 -  kw = ENCODED_STR_NEW(keyword_at, keyword_length);
 -  con = ENCODED_STR_NEW(at, length);
 -  rb_funcall(con, rb_intern("strip!"), 0);
 -  rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); 
 -}
 -
 -static void
 -store_multiline_kw_con(VALUE listener, const char * event_name,
 -                      const char * keyword_at, size_t keyword_length,
 -                      const char * at,         size_t length,
 -                      int current_line, int start_col)
 -{
 -  VALUE split;
 -  VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil;
 -
 -  kw = ENCODED_STR_NEW(keyword_at, keyword_length);
 -  con = ENCODED_STR_NEW(at, length);
 -
 -  unindent(con, start_col);
 -  
 -  split = rb_str_split(con, "\n");
 -
 -  name = rb_funcall(split, rb_intern("shift"), 0);
 -  desc = rb_ary_join(split, rb_str_new2( "\n" ));
 -
 -  if( name == Qnil ) 
 -  {
 -    name = rb_str_new2("");
 -  }
 -  if( rb_funcall(desc, rb_intern("size"), 0) == 0) 
 -  {
 -    desc = rb_str_new2("");
 -  }
 -  rb_funcall(name, rb_intern("strip!"), 0);
 -  rb_funcall(desc, rb_intern("rstrip!"), 0);
 -  rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); 
 -}
 -
 -static void 
 -store_attr(VALUE listener, const char * attr_type,
 -           const char * at, size_t length, 
 -           int line)
 -{
 -  VALUE val = ENCODED_STR_NEW(at, length);
 -  rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line));
 -}
 -static void 
 -store_docstring_content(VALUE listener, 
 -          int start_col, 
 -          const char *type_at, size_t type_length,
 -          const char *at, size_t length, 
 -          int current_line)
 -{
 -  VALUE re2;
 -  VALUE unescape_escaped_quotes;
 -  VALUE con = ENCODED_STR_NEW(at, length);
 -  VALUE con_type = ENCODED_STR_NEW(type_at, type_length);
 -
 -  unindent(con, start_col);
 -
 -  re2 = rb_reg_regcomp(rb_str_new2("\r\\Z"));
 -  unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\""));
 -  rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2(""));
 -  rb_funcall(con_type, rb_intern("strip!"), 0);
 -  rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\""));
 -  rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line));
 -}
 -static void 
 -raise_lexer_error(const char * at, int line)
 -{ 
 -  rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at);
 -}
 -
 -static void lexer_init(lexer_state *lexer) {
 -  lexer->content_start = 0;
 -  lexer->content_end = 0;
 -  lexer->content_len = 0;
 -  lexer->docstring_content_type_start = 0;
 -  lexer->docstring_content_type_end = 0;
 -  lexer->mark = 0;
 -  lexer->keyword_start = 0;
 -  lexer->keyword_end = 0;
 -  lexer->next_keyword_start = 0;
 -  lexer->line_number = 1;
 -  lexer->last_newline = 0;
 -  lexer->final_newline = 0;
 -  lexer->start_col = 0;
 -}
 -
 -static VALUE CLexer_alloc(VALUE klass)
 -{
 -  VALUE obj;
 -  lexer_state *lxr = ALLOC(lexer_state);
 -  lexer_init(lxr);
 -
 -  obj = Data_Wrap_Struct(klass, NULL, -1, lxr);
 -
 -  return obj;
 -}
 -
 -static VALUE CLexer_init(VALUE self, VALUE listener)
 -{
 -  lexer_state *lxr; 
 -  rb_iv_set(self, "@listener", listener);
 -  
 -  lxr = NULL;
 -  DATA_GET(self, lexer_state, lxr);
 -  lexer_init(lxr);
 -  
 -  return self;
 -}
 -
 -static VALUE CLexer_scan(VALUE self, VALUE input)
 -{
 -  VALUE input_copy;
 -  char *data;
 -  size_t len;
 -  VALUE listener = rb_iv_get(self, "@listener");
 -
 -  lexer_state *lexer;
 -  lexer = NULL;
 -  DATA_GET(self, lexer_state, lexer);
 -
 -  input_copy = rb_str_dup(input);
 -
 -  rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%"));
 -  data = RSTRING_PTR(input_copy);
 -  len = RSTRING_LEN(input_copy);
 -  
 -  if (len == 0) { 
 -    rb_raise(rb_eGherkinLexingError, "No content to lex.");
 -  } else {
 -
 -    const char *p, *pe, *eof;
 -    int cs = 0;
 -    
 -    VALUE current_row = Qnil;
 -
 -    p = data;
 -    pe = data + len;
 -    eof = pe;
 -    
 -    assert(*pe == '\0' && "pointer does not end on NULL");
 -    
 -    
 -#line 1036 "ext/gherkin_lexer_ar/gherkin_lexer_ar.c"
 -	{
 -	cs = lexer_start;
 -	}
 -
 -#line 425 "ragel/i18n/ar.c.rl"
 -    
 -#line 1043 "ext/gherkin_lexer_ar/gherkin_lexer_ar.c"
 -	{
 -	int _klen;
 -	unsigned int _trans;
 -	const char *_acts;
 -	unsigned int _nacts;
 -	const char *_keys;
 -
 -	if ( p == pe )
 -		goto _test_eof;
 -	if ( cs == 0 )
 -		goto _out;
 -_resume:
 -	_keys = _lexer_trans_keys + _lexer_key_offsets[cs];
 -	_trans = _lexer_index_offsets[cs];
 -
 -	_klen = _lexer_single_lengths[cs];
 -	if ( _klen > 0 ) {
 -		const char *_lower = _keys;
 -		const char *_mid;
 -		const char *_upper = _keys + _klen - 1;
 -		while (1) {
 -			if ( _upper < _lower )
 -				break;
 -
 -			_mid = _lower + ((_upper-_lower) >> 1);
 -			if ( (*p) < *_mid )
 -				_upper = _mid - 1;
 -			else if ( (*p) > *_mid )
 -				_lower = _mid + 1;
 -			else {
 -				_trans += (unsigned int)(_mid - _keys);
 -				goto _match;
 -			}
 -		}
 -		_keys += _klen;
 -		_trans += _klen;
 -	}
 -
 -	_klen = _lexer_range_lengths[cs];
 -	if ( _klen > 0 ) {
 -		const char *_lower = _keys;
 -		const char *_mid;
 -		const char *_upper = _keys + (_klen<<1) - 2;
 -		while (1) {
 -			if ( _upper < _lower )
 -				break;
 -
 -			_mid = _lower + (((_upper-_lower) >> 1) & ~1);
 -			if ( (*p) < _mid[0] )
 -				_upper = _mid - 2;
 -			else if ( (*p) > _mid[1] )
 -				_lower = _mid + 2;
 -			else {
 -				_trans += (unsigned int)((_mid - _keys)>>1);
 -				goto _match;
 -			}
 -		}
 -		_trans += _klen;
 -	}
 -
 -_match:
 -	cs = _lexer_trans_targs[_trans];
 -
 -	if ( _lexer_trans_actions[_trans] == 0 )
 -		goto _again;
 -
 -	_acts = _lexer_actions + _lexer_trans_actions[_trans];
 -	_nacts = (unsigned int) *_acts++;
 -	while ( _nacts-- > 0 )
 -	{
 -		switch ( *_acts++ )
 -		{
 -	case 0:
 -#line 83 "ragel/i18n/ar.c.rl"
 -	{
 -		MARK(content_start, p);
 -    lexer->current_line = lexer->line_number;
 -    lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2;
 -  }
 -	break;
 -	case 1:
 -#line 89 "ragel/i18n/ar.c.rl"
 -	{
 -    MARK(content_start, p);
 -  }
 -	break;
 -	case 2:
 -#line 93 "ragel/i18n/ar.c.rl"
 -	{
 -    lexer->current_line = lexer->line_number;
 -    lexer->start_col = p - data - lexer->last_newline;
 -  }
 -	break;
 -	case 3:
 -#line 98 "ragel/i18n/ar.c.rl"
 -	{
 -    int len = LEN(content_start, PTR_TO(final_newline));
 -    int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end));
 -
 -    if (len < 0) len = 0;
 -    if (type_len < 0) len = 0;
 -
 -    store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line);
 -  }
 -	break;
 -	case 4:
 -#line 108 "ragel/i18n/ar.c.rl"
 -	{ 
 -    MARK(docstring_content_type_start, p);
 -  }
 -	break;
 -	case 5:
 -#line 112 "ragel/i18n/ar.c.rl"
 -	{ 
 -    MARK(docstring_content_type_end, p);
 -  }
 -	break;
 -	case 6:
 -#line 116 "ragel/i18n/ar.c.rl"
 -	{
 -    STORE_KW_END_CON(feature);
 -  }
 -	break;
 -	case 7:
 -#line 120 "ragel/i18n/ar.c.rl"
 -	{
 -    STORE_KW_END_CON(background);
 -  }
 -	break;
 -	case 8:
 -#line 124 "ragel/i18n/ar.c.rl"
 -	{
 -    STORE_KW_END_CON(scenario);
 -  }
 -	break;
 -	case 9:
 -#line 128 "ragel/i18n/ar.c.rl"
 -	{
 -    STORE_KW_END_CON(scenario_outline);
 -  }
 -	break;
 -	case 10:
 -#line 132 "ragel/i18n/ar.c.rl"
 -	{
 -    STORE_KW_END_CON(examples);
 -  }
 -	break;
 -	case 11:
 -#line 136 "ragel/i18n/ar.c.rl"
 -	{
 -    store_kw_con(listener, "step",
 -      PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
 -      PTR_TO(content_start), LEN(content_start, p), 
 -      lexer->current_line);
 -  }
 -	break;
 -	case 12:
 -#line 143 "ragel/i18n/ar.c.rl"
 -	{
 -    STORE_ATTR(comment);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 13:
 -#line 148 "ragel/i18n/ar.c.rl"
 -	{
 -    STORE_ATTR(tag);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 14:
 -#line 153 "ragel/i18n/ar.c.rl"
 -	{
 -    lexer->line_number += 1;
 -    MARK(final_newline, p);
 -  }
 -	break;
 -	case 15:
 -#line 158 "ragel/i18n/ar.c.rl"
 -	{
 -    MARK(last_newline, p + 1);
 -  }
 -	break;
 -	case 16:
 -#line 162 "ragel/i18n/ar.c.rl"
 -	{
 -    if (lexer->mark == 0) {
 -      MARK(mark, p);
 -    }
 -  }
 -	break;
 -	case 17:
 -#line 168 "ragel/i18n/ar.c.rl"
 -	{
 -    MARK(keyword_end, p);
 -    MARK(keyword_start, PTR_TO(mark));
 -    MARK(content_start, p + 1);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 18:
 -#line 175 "ragel/i18n/ar.c.rl"
 -	{
 -    MARK(content_end, p);
 -  }
 -	break;
 -	case 19:
 -#line 179 "ragel/i18n/ar.c.rl"
 -	{
 -    p = p - 1;
 -    lexer->current_line = lexer->line_number;
 -    current_row = rb_ary_new();
 -  }
 -	break;
 -	case 20:
 -#line 185 "ragel/i18n/ar.c.rl"
 -	{
 -		MARK(content_start, p);
 -  }
 -	break;
 -	case 21:
 -#line 189 "ragel/i18n/ar.c.rl"
 -	{
 -    VALUE re_pipe, re_newline, re_backslash;
 -    VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
 -    rb_funcall(con, rb_intern("strip!"), 0);
 -    re_pipe      = rb_reg_regcomp(rb_str_new2("\\\\\\|"));
 -    re_newline   = rb_reg_regcomp(rb_str_new2("\\\\n"));
 -    re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_pipe,      rb_str_new2("|"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_newline,   rb_str_new2("\n"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\"));
 -
 -    rb_ary_push(current_row, con);
 -  }
 -	break;
 -	case 22:
 -#line 203 "ragel/i18n/ar.c.rl"
 -	{
 -    rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
 -  }
 -	break;
 -	case 23:
 -#line 207 "ragel/i18n/ar.c.rl"
 -	{
 -    int line;
 -    if (cs < lexer_first_final) {
 -      size_t count = 0;
 -      VALUE newstr_val;
 -      char *newstr;
 -      int newstr_count = 0;        
 -      size_t len;
 -      const char *buff;
 -      if (lexer->last_newline != 0) {
 -        len = LEN(last_newline, eof);
 -        buff = PTR_TO(last_newline);
 -      } else {
 -        len = strlen(data);
 -        buff = data;
 -      }
 -
 -      /* Allocate as a ruby string so that it gets cleaned up by GC */
 -      newstr_val = rb_str_new(buff, len);
 -      newstr = RSTRING_PTR(newstr_val);
 -
 -
 -      for (count = 0; count < len; count++) {
 -        if(buff[count] == 10) {
 -          newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
 -          break;
 -        } else {
 -          if (buff[count] == '%') {
 -            newstr[newstr_count++] = buff[count];
 -            newstr[newstr_count] = buff[count];
 -          } else {
 -            newstr[newstr_count] = buff[count];
 -          }
 -        }
 -        newstr_count++;
 -      }
 -
 -      line = lexer->line_number;
 -      lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
 -      raise_lexer_error(newstr, line);
 -    } else {
 -      rb_funcall(listener, rb_intern("eof"), 0);
 -    }
 -  }
 -	break;
 -#line 1333 "ext/gherkin_lexer_ar/gherkin_lexer_ar.c"
 -		}
 -	}
 -
 -_again:
 -	if ( cs == 0 )
 -		goto _out;
 -	if ( ++p != pe )
 -		goto _resume;
 -	_test_eof: {}
 -	if ( p == eof )
 -	{
 -	const char *__acts = _lexer_actions + _lexer_eof_actions[cs];
 -	unsigned int __nacts = (unsigned int) *__acts++;
 -	while ( __nacts-- > 0 ) {
 -		switch ( *__acts++ ) {
 -	case 23:
 -#line 207 "ragel/i18n/ar.c.rl"
 -	{
 -    int line;
 -    if (cs < lexer_first_final) {
 -      size_t count = 0;
 -      VALUE newstr_val;
 -      char *newstr;
 -      int newstr_count = 0;        
 -      size_t len;
 -      const char *buff;
 -      if (lexer->last_newline != 0) {
 -        len = LEN(last_newline, eof);
 -        buff = PTR_TO(last_newline);
 -      } else {
 -        len = strlen(data);
 -        buff = data;
 -      }
 -
 -      /* Allocate as a ruby string so that it gets cleaned up by GC */
 -      newstr_val = rb_str_new(buff, len);
 -      newstr = RSTRING_PTR(newstr_val);
 -
 -
 -      for (count = 0; count < len; count++) {
 -        if(buff[count] == 10) {
 -          newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
 -          break;
 -        } else {
 -          if (buff[count] == '%') {
 -            newstr[newstr_count++] = buff[count];
 -            newstr[newstr_count] = buff[count];
 -          } else {
 -            newstr[newstr_count] = buff[count];
 -          }
 -        }
 -        newstr_count++;
 -      }
 -
 -      line = lexer->line_number;
 -      lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
 -      raise_lexer_error(newstr, line);
 -    } else {
 -      rb_funcall(listener, rb_intern("eof"), 0);
 -    }
 -  }
 -	break;
 -#line 1396 "ext/gherkin_lexer_ar/gherkin_lexer_ar.c"
 -		}
 -	}
 -	}
 -
 -	_out: {}
 -	}
 -
 -#line 426 "ragel/i18n/ar.c.rl"
 -
 -    assert(p <= pe && "data overflow after parsing execute");
 -    assert(lexer->content_start <= len && "content starts after data end");
 -    assert(lexer->mark < len && "mark is after data end");
 -    
 -    /* Reset lexer by re-initializing the whole thing */
 -    lexer_init(lexer);
 -
 -    if (cs == lexer_error) {
 -      rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails.");
 -    } else {
 -      return Qtrue;
 -    }
 -  }
 -}
 -
 -void Init_gherkin_lexer_ar()
 -{
 -  mGherkin = rb_define_module("Gherkin");
 -  mGherkinLexer = rb_define_module_under(mGherkin, "Lexer");
 -  rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError"));
 -
 -  mCLexer = rb_define_module_under(mGherkin, "CLexer");
 -  cI18nLexer = rb_define_class_under(mCLexer, "Ar", rb_cObject);
 -  rb_define_alloc_func(cI18nLexer, CLexer_alloc);
 -  rb_define_method(cI18nLexer, "initialize", CLexer_init, 1);
 -  rb_define_method(cI18nLexer, "scan", CLexer_scan, 1);
 -}
 -
diff --cc ext/gherkin_lexer_bg/extconf.rb
index 17bcdaa,17bcdaa..0000000
deleted file mode 100644,100644
--- a/ext/gherkin_lexer_bg/extconf.rb
+++ /dev/null
@@@ -1,6 -1,6 +1,0 @@@
--require 'mkmf'
--CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags']
--$CFLAGS << ' -O0 -Wall' if CONFIG['CC'] =~ /gcc|clang/
--dir_config("gherkin_lexer_bg")
--have_library("c", "main")
--create_makefile("gherkin_lexer_bg")
diff --cc ext/gherkin_lexer_bg/gherkin_lexer_bg.c
index 744f5cb,b102247..0000000
deleted file mode 100644,100644
--- a/ext/gherkin_lexer_bg/gherkin_lexer_bg.c
+++ /dev/null
@@@ -1,1655 -1,1655 +1,0 @@@
--
- #line 1 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/bg.c.rl"
- #include <assert.h>
- #include <ruby.h>
- 
- #if defined(_WIN32)
- #include <stddef.h>
- #endif
- 
- #ifdef HAVE_RUBY_RE_H
- #include <ruby/re.h>
- #else
- #include <re.h>
- #endif
- 
- #ifdef HAVE_RUBY_ENCODING_H
- #include <ruby/encoding.h>
- #define ENCODED_STR_NEW(ptr, len) \
-     rb_enc_str_new(ptr, len, rb_utf8_encoding())
- #else
- #define ENCODED_STR_NEW(ptr, len) \
-     rb_str_new(ptr, len)
- #endif
- 
- #ifndef RSTRING_PTR
- #define RSTRING_PTR(s) (RSTRING(s)->ptr)
- #endif
- 
- #ifndef RSTRING_LEN
- #define RSTRING_LEN(s) (RSTRING(s)->len)
- #endif
- 
- #define DATA_GET(FROM, TYPE, NAME) \
-   Data_Get_Struct(FROM, TYPE, NAME); \
-   if (NAME == NULL) { \
-     rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \
-   }
-  
- typedef struct lexer_state {
-   int content_len;
-   int line_number;
-   int current_line;
-   int start_col;
-   size_t mark;
-   size_t keyword_start;
-   size_t keyword_end;
-   size_t next_keyword_start;
-   size_t content_start;
-   size_t content_end;
-   size_t docstring_content_type_start;
-   size_t docstring_content_type_end;
-   size_t query_start;
-   size_t last_newline;
-   size_t final_newline;
- } lexer_state;
- 
- static VALUE mGherkin;
- static VALUE mGherkinLexer;
- static VALUE mCLexer;
- static VALUE cI18nLexer;
- static VALUE rb_eGherkinLexingError;
- 
- #define LEN(AT, P) (P - data - lexer->AT)
- #define MARK(M, P) (lexer->M = (P) - data)
- #define PTR_TO(P) (data + lexer->P)
- 
- #define STORE_KW_END_CON(EVENT) \
-   store_multiline_kw_con(listener, # EVENT, \
-     PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \
-     PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \
-     lexer->current_line, lexer->start_col); \
-     if (lexer->content_end != 0) { \
-       p = PTR_TO(content_end - 1); \
-     } \
-     lexer->content_end = 0
- 
- #define STORE_ATTR(ATTR) \
-     store_attr(listener, # ATTR, \
-       PTR_TO(content_start), LEN(content_start, p), \
-       lexer->line_number)
- 
- 
- #line 254 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/bg.c.rl"
- 
- 
- /** Data **/
- 
- #line 89 "ext/gherkin_lexer_bg/gherkin_lexer_bg.c"
- static const char _lexer_actions[] = {
- 	0, 1, 0, 1, 1, 1, 2, 1, 
- 	3, 1, 4, 1, 5, 1, 6, 1, 
- 	7, 1, 8, 1, 9, 1, 10, 1, 
- 	11, 1, 12, 1, 13, 1, 16, 1, 
- 	17, 1, 18, 1, 19, 1, 20, 1, 
- 	21, 1, 22, 1, 23, 2, 1, 18, 
- 	2, 4, 5, 2, 13, 0, 2, 14, 
- 	15, 2, 17, 0, 2, 17, 2, 2, 
- 	17, 16, 2, 17, 19, 2, 18, 6, 
- 	2, 18, 7, 2, 18, 8, 2, 18, 
- 	9, 2, 18, 10, 2, 18, 16, 2, 
- 	20, 21, 2, 22, 0, 2, 22, 2, 
- 	2, 22, 16, 2, 22, 19, 3, 3, 
- 	14, 15, 3, 5, 14, 15, 3, 11, 
- 	14, 15, 3, 12, 14, 15, 3, 13, 
- 	14, 15, 3, 14, 15, 18, 3, 17, 
- 	0, 11, 3, 17, 14, 15, 4, 1, 
- 	14, 15, 18, 4, 4, 5, 14, 15, 
- 	4, 17, 0, 14, 15, 5, 17, 0, 
- 	11, 14, 15
- };
- 
- static const short _lexer_key_offsets[] = {
- 	0, 0, 12, 21, 22, 23, 24, 25, 
- 	26, 27, 28, 29, 30, 31, 32, 34, 
- 	36, 47, 48, 49, 51, 53, 58, 63, 
- 	68, 73, 77, 81, 83, 84, 85, 86, 
- 	87, 88, 89, 90, 91, 92, 93, 94, 
- 	95, 96, 97, 98, 103, 110, 115, 119, 
- 	125, 128, 130, 136, 147, 148, 149, 150, 
- 	151, 152, 153, 154, 155, 156, 157, 158, 
- 	160, 161, 162, 163, 164, 165, 166, 167, 
- 	168, 169, 170, 171, 172, 173, 174, 175, 
- 	176, 177, 178, 179, 188, 197, 199, 201, 
- 	203, 205, 207, 209, 211, 213, 215, 217, 
- 	219, 230, 232, 234, 236, 238, 240, 242, 
- 	244, 246, 248, 250, 252, 254, 256, 258, 
- 	260, 262, 264, 266, 268, 270, 272, 274, 
- 	276, 278, 280, 282, 284, 286, 288, 290, 
- 	292, 294, 296, 298, 300, 302, 304, 306, 
- 	308, 310, 312, 314, 316, 318, 320, 322, 
- 	324, 326, 328, 330, 332, 334, 336, 338, 
- 	340, 342, 344, 346, 348, 350, 352, 354, 
- 	356, 358, 360, 362, 364, 366, 368, 370, 
- 	372, 374, 376, 378, 380, 382, 384, 386, 
- 	388, 389, 390, 391, 392, 393, 394, 395, 
- 	396, 397, 398, 399, 406, 408, 410, 412, 
- 	414, 416, 418, 420, 422, 424, 426, 428, 
- 	430, 432, 434, 436, 438, 440, 442, 444, 
- 	446, 448, 450, 452, 454, 456, 458, 460, 
- 	462, 463, 464, 465, 466, 467, 468, 469, 
- 	470, 471, 472, 473, 474, 475, 476, 477, 
- 	478, 479, 480, 481, 482, 483, 484, 485, 
- 	486, 487, 488, 489, 490, 491, 492, 493, 
- 	494, 495, 504, 512, 514, 516, 518, 520, 
- 	522, 524, 526, 528, 530, 532, 534, 536, 
- 	538, 540, 542, 544, 546, 548, 550, 552, 
- 	554, 556, 558, 560, 562, 564, 566, 568, 
- 	570, 572, 574, 576, 578, 580, 582, 584, 
- 	586, 588, 590, 592, 594, 596, 598, 600, 
- 	602, 604, 606, 608, 610, 612, 614, 616, 
- 	618, 620, 622, 624, 626, 628, 630, 632, 
- 	634, 636, 638, 640, 642, 644, 646, 648, 
- 	650, 652, 654, 656, 658, 660, 661, 662, 
- 	663, 664, 665, 666, 667, 668, 669, 670, 
- 	671, 672, 673, 674, 675, 676, 677, 686, 
- 	696, 698, 700, 702, 704, 706, 708, 710, 
- 	712, 714, 716, 718, 720, 722, 724, 726, 
- 	728, 730, 732, 734, 736, 738, 740, 742, 
- 	744, 746, 748, 750, 752, 754, 756, 758, 
- 	760, 762, 764, 766, 768, 770, 772, 774, 
- 	776, 778, 780, 782, 784, 786, 788, 790, 
- 	792, 794, 796, 798, 800, 802, 804, 806, 
- 	808, 810, 812, 814, 816, 818, 820, 822, 
- 	824, 826, 828, 830, 832, 834, 836, 838, 
- 	840, 842, 844, 846, 848, 850, 852, 854, 
- 	856, 858, 860, 862, 864, 866, 868, 870, 
- 	872, 874, 876, 878, 880, 882, 884, 886, 
- 	888, 890, 892, 894, 896, 898, 900, 902, 
- 	904, 906, 908, 910, 912, 914, 916, 917, 
- 	918, 919, 920, 921, 922, 923, 924, 925, 
- 	926, 927, 928, 929, 930, 931, 932, 933, 
- 	934, 935, 936, 937, 938, 939, 940, 941, 
- 	942, 943, 944, 945, 953, 958, 960, 962, 
- 	964, 967, 969, 971, 973, 975, 977, 979, 
- 	981, 983, 985, 987, 989, 991, 993, 995, 
- 	997, 999, 1001, 1003, 1005, 1007, 1009, 1011, 
- 	1013, 1015, 1017, 1019, 1021, 1023, 1025, 1027, 
- 	1029, 1031, 1033, 1035, 1037, 1039, 1041, 1043, 
- 	1045, 1047, 1049, 1051, 1053, 1055, 1057, 1059, 
- 	1061, 1063, 1065, 1067, 1069, 1071, 1073, 1075, 
- 	1077, 1079, 1081, 1083, 1085, 1087, 1089, 1091, 
- 	1093, 1095, 1097, 1099, 1101, 1103, 1105, 1107, 
- 	1109, 1111, 1113, 1115, 1117, 1119, 1121, 1123, 
- 	1125, 1127, 1129, 1131, 1133, 1135, 1137, 1139, 
- 	1141, 1143, 1145, 1147, 1149, 1151, 1153, 1155, 
- 	1157, 1158, 1159
- };
- 
- static const char _lexer_trans_keys[] = {
- 	-48, -17, 10, 32, 34, 35, 37, 42, 
- 	64, 124, 9, 13, -108, -104, -102, -99, 
- 	-97, -96, -95, -94, -92, -48, -80, -48, 
- 	-76, -48, -75, -48, -67, -48, -66, 32, 
- 	10, 13, 10, 13, -48, 10, 32, 34, 
- 	35, 37, 42, 64, 124, 9, 13, 34, 
- 	34, 10, 13, 10, 13, 10, 32, 34, 
- 	9, 13, 10, 32, 34, 9, 13, 10, 
- 	32, 34, 9, 13, 10, 32, 34, 9, 
- 	13, 10, 32, 9, 13, 10, 32, 9, 
- 	13, 10, 13, 10, 95, 70, 69, 65, 
- 	84, 85, 82, 69, 95, 69, 78, 68, 
- 	95, 37, 13, 32, 64, 9, 10, 9, 
- 	10, 13, 32, 64, 11, 12, 10, 32, 
- 	64, 9, 13, 32, 124, 9, 13, 10, 
- 	32, 92, 124, 9, 13, 10, 92, 124, 
- 	10, 92, 10, 32, 92, 124, 9, 13, 
- 	-48, 10, 32, 34, 35, 37, 42, 64, 
- 	124, 9, 13, -48, -66, -48, -77, -48, 
- 	-80, -47, -126, -47, -128, -48, -75, -72, 
- 	-48, -76, -48, -72, -47, -127, -47, -126, 
- 	-48, -66, -47, -128, -48, -72, -47, -113, 
- 	58, 10, 10, -48, 10, 32, 35, 37, 
- 	42, 64, 9, 13, -108, -104, -102, -99, 
- 	-96, -95, -94, -92, 10, -48, 10, -80, 
- 	10, -48, 10, -76, 10, -48, 10, -75, 
- 	10, -48, 10, -67, 10, -48, 10, -66, 
- 	10, 10, 32, -48, 10, 32, 34, 35, 
- 	37, 42, 64, 124, 9, 13, -48, 10, 
- 	-66, 10, -48, 10, -77, 10, -48, 10, 
- 	-80, 10, -47, 10, -126, 10, -48, 10, 
- 	-80, 10, -48, 10, -68, 10, -48, 10, 
- 	-70, 10, -48, 10, -80, 10, 10, 32, 
- 	-48, 10, -67, 10, -48, 10, -80, 10, 
- 	10, 32, -47, 10, -127, 10, -47, 10, 
- 	-122, 10, -48, 10, -75, 10, -48, 10, 
- 	-67, 10, -48, 10, -80, 10, -47, 10, 
- 	-128, 10, -48, 10, -72, 10, -48, 10, 
- 	-71, 10, 10, 58, -47, 10, -125, 10, 
- 	-48, 10, -67, 10, -48, 10, -70, 10, 
- 	-47, 10, -122, 10, -48, 10, -72, 10, 
- 	-48, 10, -66, 10, -48, 10, -67, 10, 
- 	-48, 10, -80, 10, -48, 10, -69, 10, 
- 	-48, 10, -67, 10, -48, 10, -66, 10, 
- 	-47, 10, -127, 10, -47, 10, -126, 10, 
- 	10, 95, 10, 70, 10, 69, 10, 65, 
- 	10, 84, 10, 85, 10, 82, 10, 69, 
- 	10, 95, 10, 69, 10, 78, 10, 68, 
- 	10, 95, 10, 37, -48, -68, -48, -75, 
- 	-47, -128, -48, -72, 58, 10, 10, -48, 
- 	10, 32, 35, 124, 9, 13, -92, 10, 
- 	-47, 10, -125, 10, -48, 10, -67, 10, 
- 	-48, 10, -70, 10, -47, 10, -122, 10, 
- 	-48, 10, -72, 10, -48, 10, -66, 10, 
- 	-48, 10, -67, 10, -48, 10, -80, 10, 
- 	-48, 10, -69, 10, -48, 10, -67, 10, 
- 	-48, 10, -66, 10, -47, 10, -127, 10, 
- 	-47, 10, -126, 10, 10, 58, -48, -80, 
- 	-48, -68, -48, -70, -48, -80, 32, -48, 
- 	-67, -48, -80, 32, -47, -127, -47, -122, 
- 	-48, -75, -48, -67, -48, -80, -47, -128, 
- 	-48, -72, -48, -71, 58, 10, 10, -48, 
- 	10, 32, 35, 37, 42, 64, 9, 13, 
- 	-108, -104, -102, -99, -95, -94, -92, 10, 
- 	-48, 10, -80, 10, -48, 10, -76, 10, 
- 	-48, 10, -75, 10, -48, 10, -67, 10, 
- 	-48, 10, -66, 10, 10, 32, -48, 10, 
- 	-66, 10, -48, 10, -77, 10, -48, 10, 
- 	-80, 10, -47, 10, -126, 10, -47, 10, 
- 	-122, 10, -48, 10, -75, 10, -48, 10, 
- 	-67, 10, -48, 10, -80, 10, -47, 10, 
- 	-128, 10, -48, 10, -72, 10, -48, 10, 
- 	-71, 10, 10, 58, -47, 10, -125, 10, 
- 	-48, 10, -67, 10, -48, 10, -70, 10, 
- 	-47, 10, -122, 10, -48, 10, -72, 10, 
- 	-48, 10, -66, 10, -48, 10, -67, 10, 
- 	-48, 10, -80, 10, -48, 10, -69, 10, 
- 	-48, 10, -67, 10, -48, 10, -66, 10, 
- 	-47, 10, -127, 10, -47, 10, -126, 10, 
- 	10, 95, 10, 70, 10, 69, 10, 65, 
- 	10, 84, 10, 85, 10, 82, 10, 69, 
- 	10, 95, 10, 69, 10, 78, 10, 68, 
- 	10, 95, 10, 37, -47, -122, -48, -75, 
- 	-48, -67, -48, -80, -47, -128, -48, -72, 
- 	-48, -71, 58, 10, 10, -48, 10, 32, 
- 	35, 37, 42, 64, 9, 13, -108, -104, 
- 	-102, -99, -97, -96, -95, -94, -92, 10, 
- 	-48, 10, -80, 10, -48, 10, -76, 10, 
- 	-48, 10, -75, 10, -48, 10, -67, 10, 
- 	-48, 10, -66, 10, 10, 32, -48, 10, 
- 	-66, 10, -48, 10, -77, 10, -48, 10, 
- 	-80, 10, -47, 10, -126, 10, -47, 10, 
- 	-128, 10, -48, 10, -75, 10, -48, 10, 
- 	-76, 10, -48, 10, -72, 10, -47, 10, 
- 	-127, 10, -47, 10, -126, 10, -48, 10, 
- 	-66, 10, -47, 10, -128, 10, -48, 10, 
- 	-72, 10, -47, 10, -113, 10, 10, 58, 
- 	-48, 10, -80, 10, -48, 10, -68, 10, 
- 	-48, 10, -70, 10, -48, 10, -80, 10, 
- 	10, 32, -48, 10, -67, 10, -48, 10, 
- 	-80, 10, 10, 32, -47, 10, -127, 10, 
- 	-47, 10, -122, 10, -48, 10, -75, 10, 
- 	-48, 10, -67, 10, -48, 10, -80, 10, 
- 	-47, 10, -128, 10, -48, 10, -72, 10, 
- 	-48, 10, -71, 10, -47, 10, -125, 10, 
- 	-48, 10, -67, 10, -48, 10, -70, 10, 
- 	-47, 10, -122, 10, -48, 10, -72, 10, 
- 	-48, 10, -66, 10, -48, 10, -67, 10, 
- 	-48, 10, -80, 10, -48, 10, -69, 10, 
- 	-48, 10, -67, 10, -48, 10, -66, 10, 
- 	-47, 10, -127, 10, -47, 10, -126, 10, 
- 	10, 95, 10, 70, 10, 69, 10, 65, 
- 	10, 84, 10, 85, 10, 82, 10, 69, 
- 	10, 95, 10, 69, 10, 78, 10, 68, 
- 	10, 95, 10, 37, -47, -125, -48, -67, 
- 	-48, -70, -47, -122, -48, -72, -48, -66, 
- 	-48, -67, -48, -80, -48, -69, -48, -67, 
- 	-48, -66, -47, -127, -47, -126, 58, 10, 
- 	10, -48, 10, 32, 35, 37, 64, 9, 
- 	13, -97, -96, -95, -92, 10, -47, 10, 
- 	-128, 10, -48, 10, -75, -72, 10, -48, 
- 	10, -76, 10, -48, 10, -72, 10, -47, 
- 	10, -127, 10, -47, 10, -126, 10, -48, 
- 	10, -66, 10, -47, 10, -128, 10, -48, 
- 	10, -72, 10, -47, 10, -113, 10, 10, 
- 	58, -48, 10, -68, 10, -48, 10, -75, 
- 	10, -47, 10, -128, 10, -48, 10, -72, 
- 	10, -48, 10, -80, 10, -48, 10, -68, 
- 	10, -48, 10, -70, 10, -48, 10, -80, 
- 	10, 10, 32, -48, 10, -67, 10, -48, 
- 	10, -80, 10, 10, 32, -47, 10, -127, 
- 	10, -47, 10, -122, 10, -48, 10, -75, 
- 	10, -48, 10, -67, 10, -48, 10, -80, 
- 	10, -47, 10, -128, 10, -48, 10, -72, 
- 	10, -48, 10, -71, 10, -47, 10, -125, 
- 	10, -48, 10, -67, 10, -48, 10, -70, 
- 	10, -47, 10, -122, 10, -48, 10, -72, 
- 	10, -48, 10, -66, 10, -48, 10, -67, 
- 	10, -48, 10, -80, 10, -48, 10, -69, 
- 	10, -48, 10, -67, 10, -48, 10, -66, 
- 	10, -47, 10, -127, 10, -47, 10, -126, 
- 	10, 10, 95, 10, 70, 10, 69, 10, 
- 	65, 10, 84, 10, 85, 10, 82, 10, 
- 	69, 10, 95, 10, 69, 10, 78, 10, 
- 	68, 10, 95, 10, 37, -69, -65, 0
- };
- 
- static const char _lexer_single_lengths[] = {
- 	0, 10, 9, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 2, 2, 
- 	9, 1, 1, 2, 2, 3, 3, 3, 
- 	3, 2, 2, 2, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 3, 5, 3, 2, 4, 
- 	3, 2, 4, 9, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 2, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 7, 9, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	9, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 5, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 7, 8, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 7, 10, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 6, 5, 2, 2, 2, 
- 	3, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	1, 1, 0
- };
- 
- static const char _lexer_range_lengths[] = {
- 	0, 1, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	1, 0, 0, 0, 0, 1, 1, 1, 
- 	1, 1, 1, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 1, 1, 1, 1, 1, 
- 	0, 0, 1, 1, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 1, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	1, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 1, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 1, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 1, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 1, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0
- };
- 
- static const short _lexer_index_offsets[] = {
- 	0, 0, 12, 22, 24, 26, 28, 30, 
- 	32, 34, 36, 38, 40, 42, 44, 47, 
- 	50, 61, 63, 65, 68, 71, 76, 81, 
- 	86, 91, 95, 99, 102, 104, 106, 108, 
- 	110, 112, 114, 116, 118, 120, 122, 124, 
- 	126, 128, 130, 132, 137, 144, 149, 153, 
- 	159, 163, 166, 172, 183, 185, 187, 189, 
- 	191, 193, 195, 197, 199, 201, 203, 205, 
- 	208, 210, 212, 214, 216, 218, 220, 222, 
- 	224, 226, 228, 230, 232, 234, 236, 238, 
- 	240, 242, 244, 246, 255, 265, 268, 271, 
- 	274, 277, 280, 283, 286, 289, 292, 295, 
- 	298, 309, 312, 315, 318, 321, 324, 327, 
- 	330, 333, 336, 339, 342, 345, 348, 351, 
- 	354, 357, 360, 363, 366, 369, 372, 375, 
- 	378, 381, 384, 387, 390, 393, 396, 399, 
- 	402, 405, 408, 411, 414, 417, 420, 423, 
- 	426, 429, 432, 435, 438, 441, 444, 447, 
- 	450, 453, 456, 459, 462, 465, 468, 471, 
- 	474, 477, 480, 483, 486, 489, 492, 495, 
- 	498, 501, 504, 507, 510, 513, 516, 519, 
- 	522, 525, 528, 531, 534, 537, 540, 543, 
- 	546, 548, 550, 552, 554, 556, 558, 560, 
- 	562, 564, 566, 568, 575, 578, 581, 584, 
- 	587, 590, 593, 596, 599, 602, 605, 608, 
- 	611, 614, 617, 620, 623, 626, 629, 632, 
- 	635, 638, 641, 644, 647, 650, 653, 656, 
- 	659, 661, 663, 665, 667, 669, 671, 673, 
- 	675, 677, 679, 681, 683, 685, 687, 689, 
- 	691, 693, 695, 697, 699, 701, 703, 705, 
- 	707, 709, 711, 713, 715, 717, 719, 721, 
- 	723, 725, 734, 743, 746, 749, 752, 755, 
- 	758, 761, 764, 767, 770, 773, 776, 779, 
- 	782, 785, 788, 791, 794, 797, 800, 803, 
- 	806, 809, 812, 815, 818, 821, 824, 827, 
- 	830, 833, 836, 839, 842, 845, 848, 851, 
- 	854, 857, 860, 863, 866, 869, 872, 875, 
- 	878, 881, 884, 887, 890, 893, 896, 899, 
- 	902, 905, 908, 911, 914, 917, 920, 923, 
- 	926, 929, 932, 935, 938, 941, 944, 947, 
- 	950, 953, 956, 959, 962, 965, 967, 969, 
- 	971, 973, 975, 977, 979, 981, 983, 985, 
- 	987, 989, 991, 993, 995, 997, 999, 1008, 
- 	1019, 1022, 1025, 1028, 1031, 1034, 1037, 1040, 
- 	1043, 1046, 1049, 1052, 1055, 1058, 1061, 1064, 
- 	1067, 1070, 1073, 1076, 1079, 1082, 1085, 1088, 
- 	1091, 1094, 1097, 1100, 1103, 1106, 1109, 1112, 
- 	1115, 1118, 1121, 1124, 1127, 1130, 1133, 1136, 
- 	1139, 1142, 1145, 1148, 1151, 1154, 1157, 1160, 
- 	1163, 1166, 1169, 1172, 1175, 1178, 1181, 1184, 
- 	1187, 1190, 1193, 1196, 1199, 1202, 1205, 1208, 
- 	1211, 1214, 1217, 1220, 1223, 1226, 1229, 1232, 
- 	1235, 1238, 1241, 1244, 1247, 1250, 1253, 1256, 
- 	1259, 1262, 1265, 1268, 1271, 1274, 1277, 1280, 
- 	1283, 1286, 1289, 1292, 1295, 1298, 1301, 1304, 
- 	1307, 1310, 1313, 1316, 1319, 1322, 1325, 1328, 
- 	1331, 1334, 1337, 1340, 1343, 1346, 1349, 1351, 
- 	1353, 1355, 1357, 1359, 1361, 1363, 1365, 1367, 
- 	1369, 1371, 1373, 1375, 1377, 1379, 1381, 1383, 
- 	1385, 1387, 1389, 1391, 1393, 1395, 1397, 1399, 
- 	1401, 1403, 1405, 1407, 1415, 1421, 1424, 1427, 
- 	1430, 1434, 1437, 1440, 1443, 1446, 1449, 1452, 
- 	1455, 1458, 1461, 1464, 1467, 1470, 1473, 1476, 
- 	1479, 1482, 1485, 1488, 1491, 1494, 1497, 1500, 
- 	1503, 1506, 1509, 1512, 1515, 1518, 1521, 1524, 
- 	1527, 1530, 1533, 1536, 1539, 1542, 1545, 1548, 
- 	1551, 1554, 1557, 1560, 1563, 1566, 1569, 1572, 
- 	1575, 1578, 1581, 1584, 1587, 1590, 1593, 1596, 
- 	1599, 1602, 1605, 1608, 1611, 1614, 1617, 1620, 
- 	1623, 1626, 1629, 1632, 1635, 1638, 1641, 1644, 
- 	1647, 1650, 1653, 1656, 1659, 1662, 1665, 1668, 
- 	1671, 1674, 1677, 1680, 1683, 1686, 1689, 1692, 
- 	1695, 1698, 1701, 1704, 1707, 1710, 1713, 1716, 
- 	1719, 1721, 1723
- };
- 
- static const short _lexer_trans_targs[] = {
- 	2, 584, 16, 16, 17, 27, 29, 13, 
- 	43, 46, 16, 0, 3, 13, 52, 11, 
- 	60, 216, 325, 11, 454, 0, 4, 0, 
- 	5, 0, 6, 0, 7, 0, 8, 0, 
- 	9, 0, 10, 0, 11, 0, 12, 0, 
- 	13, 0, 14, 0, 16, 28, 15, 16, 
- 	28, 15, 2, 16, 16, 17, 27, 29, 
- 	13, 43, 46, 16, 0, 18, 0, 19, 
- 	0, 21, 20, 20, 21, 20, 20, 22, 
- 	22, 23, 22, 22, 22, 22, 23, 22, 
- 	22, 22, 22, 24, 22, 22, 22, 22, 
- 	25, 22, 22, 16, 26, 26, 0, 16, 
- 	26, 26, 0, 16, 28, 27, 16, 0, 
- 	30, 0, 31, 0, 32, 0, 33, 0, 
- 	34, 0, 35, 0, 36, 0, 37, 0, 
- 	38, 0, 39, 0, 40, 0, 41, 0, 
- 	42, 0, 586, 0, 0, 0, 0, 0, 
- 	44, 45, 16, 45, 45, 43, 44, 44, 
- 	16, 45, 43, 45, 0, 46, 47, 46, 
- 	0, 51, 50, 49, 47, 50, 48, 0, 
- 	49, 47, 48, 0, 49, 48, 51, 50, 
- 	49, 47, 50, 48, 2, 51, 51, 17, 
- 	27, 29, 13, 43, 46, 51, 0, 53, 
- 	0, 54, 0, 55, 0, 56, 0, 57, 
- 	0, 58, 0, 59, 0, 11, 0, 61, 
- 	0, 62, 0, 63, 0, 64, 176, 0, 
- 	65, 0, 66, 0, 67, 0, 68, 0, 
- 	69, 0, 70, 0, 71, 0, 72, 0, 
- 	73, 0, 74, 0, 75, 0, 76, 0, 
- 	77, 0, 78, 0, 79, 0, 80, 0, 
- 	81, 0, 83, 82, 83, 82, 84, 83, 
- 	83, 16, 162, 95, 16, 83, 82, 85, 
- 	95, 97, 93, 105, 121, 93, 136, 83, 
- 	82, 86, 83, 82, 87, 83, 82, 88, 
- 	83, 82, 89, 83, 82, 90, 83, 82, 
- 	91, 83, 82, 92, 83, 82, 93, 83, 
- 	82, 94, 83, 82, 95, 83, 82, 83, 
- 	96, 82, 2, 16, 16, 17, 27, 29, 
- 	13, 43, 46, 16, 0, 98, 83, 82, 
- 	99, 83, 82, 100, 83, 82, 101, 83, 
- 	82, 102, 83, 82, 103, 83, 82, 104, 
- 	83, 82, 93, 83, 82, 106, 83, 82, 
- 	107, 83, 82, 108, 83, 82, 109, 83, 
- 	82, 110, 83, 82, 111, 83, 82, 112, 
- 	83, 82, 113, 83, 82, 83, 114, 82, 
- 	115, 83, 82, 116, 83, 82, 117, 83, 
- 	82, 118, 83, 82, 83, 119, 82, 120, 
- 	83, 82, 121, 83, 82, 122, 83, 82, 
- 	123, 83, 82, 124, 83, 82, 125, 83, 
- 	82, 126, 83, 82, 127, 83, 82, 128, 
- 	83, 82, 129, 83, 82, 130, 83, 82, 
- 	131, 83, 82, 132, 83, 82, 133, 83, 
- 	82, 134, 83, 82, 135, 83, 82, 83, 
- 	96, 82, 137, 83, 82, 138, 83, 82, 
- 	139, 83, 82, 140, 83, 82, 141, 83, 
- 	82, 142, 83, 82, 143, 83, 82, 144, 
- 	83, 82, 145, 83, 82, 146, 83, 82, 
- 	147, 83, 82, 148, 83, 82, 149, 83, 
- 	82, 150, 83, 82, 151, 83, 82, 152, 
- 	83, 82, 153, 83, 82, 154, 83, 82, 
- 	155, 83, 82, 156, 83, 82, 157, 83, 
- 	82, 158, 83, 82, 159, 83, 82, 160, 
- 	83, 82, 161, 83, 82, 135, 83, 82, 
- 	83, 163, 82, 83, 164, 82, 83, 165, 
- 	82, 83, 166, 82, 83, 167, 82, 83, 
- 	168, 82, 83, 169, 82, 83, 170, 82, 
- 	83, 171, 82, 83, 172, 82, 83, 173, 
- 	82, 83, 174, 82, 83, 175, 82, 83, 
- 	16, 82, 177, 0, 178, 0, 179, 0, 
- 	180, 0, 181, 0, 182, 0, 183, 0, 
- 	184, 0, 185, 0, 187, 186, 187, 186, 
- 	188, 187, 187, 16, 16, 187, 186, 189, 
- 	187, 186, 190, 187, 186, 191, 187, 186, 
- 	192, 187, 186, 193, 187, 186, 194, 187, 
- 	186, 195, 187, 186, 196, 187, 186, 197, 
- 	187, 186, 198, 187, 186, 199, 187, 186, 
- 	200, 187, 186, 201, 187, 186, 202, 187, 
- 	186, 203, 187, 186, 204, 187, 186, 205, 
- 	187, 186, 206, 187, 186, 207, 187, 186, 
- 	208, 187, 186, 209, 187, 186, 210, 187, 
- 	186, 211, 187, 186, 212, 187, 186, 213, 
- 	187, 186, 214, 187, 186, 215, 187, 186, 
- 	187, 96, 186, 217, 0, 218, 0, 219, 
- 	0, 220, 0, 221, 0, 222, 0, 223, 
- 	0, 224, 0, 225, 0, 226, 0, 227, 
- 	0, 228, 0, 229, 0, 230, 0, 231, 
- 	0, 232, 0, 233, 0, 234, 0, 235, 
- 	0, 236, 0, 237, 0, 238, 0, 239, 
- 	0, 240, 0, 241, 0, 242, 0, 243, 
- 	0, 244, 0, 245, 0, 246, 0, 247, 
- 	0, 249, 248, 249, 248, 250, 249, 249, 
- 	16, 311, 261, 16, 249, 248, 251, 261, 
- 	262, 259, 270, 259, 285, 249, 248, 252, 
- 	249, 248, 253, 249, 248, 254, 249, 248, 
- 	255, 249, 248, 256, 249, 248, 257, 249, 
- 	248, 258, 249, 248, 259, 249, 248, 260, 
- 	249, 248, 261, 249, 248, 249, 96, 248, 
- 	263, 249, 248, 264, 249, 248, 265, 249, 
- 	248, 266, 249, 248, 267, 249, 248, 268, 
- 	249, 248, 269, 249, 248, 259, 249, 248, 
- 	271, 249, 248, 272, 249, 248, 273, 249, 
- 	248, 274, 249, 248, 275, 249, 248, 276, 
- 	249, 248, 277, 249, 248, 278, 249, 248, 
- 	279, 249, 248, 280, 249, 248, 281, 249, 
- 	248, 282, 249, 248, 283, 249, 248, 284, 
- 	249, 248, 249, 96, 248, 286, 249, 248, 
- 	287, 249, 248, 288, 249, 248, 289, 249, 
- 	248, 290, 249, 248, 291, 249, 248, 292, 
- 	249, 248, 293, 249, 248, 294, 249, 248, 
- 	295, 249, 248, 296, 249, 248, 297, 249, 
- 	248, 298, 249, 248, 299, 249, 248, 300, 
- 	249, 248, 301, 249, 248, 302, 249, 248, 
- 	303, 249, 248, 304, 249, 248, 305, 249, 
- 	248, 306, 249, 248, 307, 249, 248, 308, 
- 	249, 248, 309, 249, 248, 310, 249, 248, 
- 	284, 249, 248, 249, 312, 248, 249, 313, 
- 	248, 249, 314, 248, 249, 315, 248, 249, 
- 	316, 248, 249, 317, 248, 249, 318, 248, 
- 	249, 319, 248, 249, 320, 248, 249, 321, 
- 	248, 249, 322, 248, 249, 323, 248, 249, 
- 	324, 248, 249, 16, 248, 326, 0, 327, 
- 	0, 328, 0, 329, 0, 330, 0, 331, 
- 	0, 332, 0, 333, 0, 334, 0, 335, 
- 	0, 336, 0, 337, 0, 338, 0, 339, 
- 	0, 340, 0, 342, 341, 342, 341, 343, 
- 	342, 342, 16, 440, 354, 16, 342, 341, 
- 	344, 354, 355, 352, 363, 384, 400, 352, 
- 	414, 342, 341, 345, 342, 341, 346, 342, 
- 	341, 347, 342, 341, 348, 342, 341, 349, 
- 	342, 341, 350, 342, 341, 351, 342, 341, 
- 	352, 342, 341, 353, 342, 341, 354, 342, 
- 	341, 342, 96, 341, 356, 342, 341, 357, 
- 	342, 341, 358, 342, 341, 359, 342, 341, 
- 	360, 342, 341, 361, 342, 341, 362, 342, 
- 	341, 352, 342, 341, 364, 342, 341, 365, 
- 	342, 341, 366, 342, 341, 367, 342, 341, 
- 	368, 342, 341, 369, 342, 341, 370, 342, 
- 	341, 371, 342, 341, 372, 342, 341, 373, 
- 	342, 341, 374, 342, 341, 375, 342, 341, 
- 	376, 342, 341, 377, 342, 341, 378, 342, 
- 	341, 379, 342, 341, 380, 342, 341, 381, 
- 	342, 341, 382, 342, 341, 383, 342, 341, 
- 	342, 96, 341, 385, 342, 341, 386, 342, 
- 	341, 387, 342, 341, 388, 342, 341, 389, 
- 	342, 341, 390, 342, 341, 391, 342, 341, 
- 	392, 342, 341, 342, 393, 341, 394, 342, 
- 	341, 395, 342, 341, 396, 342, 341, 397, 
- 	342, 341, 342, 398, 341, 399, 342, 341, 
- 	400, 342, 341, 401, 342, 341, 402, 342, 
- 	341, 403, 342, 341, 404, 342, 341, 405, 
- 	342, 341, 406, 342, 341, 407, 342, 341, 
- 	408, 342, 341, 409, 342, 341, 410, 342, 
- 	341, 411, 342, 341, 412, 342, 341, 413, 
- 	342, 341, 383, 342, 341, 415, 342, 341, 
- 	416, 342, 341, 417, 342, 341, 418, 342, 
- 	341, 419, 342, 341, 420, 342, 341, 421, 
- 	342, 341, 422, 342, 341, 423, 342, 341, 
- 	424, 342, 341, 425, 342, 341, 426, 342, 
- 	341, 427, 342, 341, 428, 342, 341, 429, 
- 	342, 341, 430, 342, 341, 431, 342, 341, 
- 	432, 342, 341, 433, 342, 341, 434, 342, 
- 	341, 435, 342, 341, 436, 342, 341, 437, 
- 	342, 341, 438, 342, 341, 439, 342, 341, 
- 	383, 342, 341, 342, 441, 341, 342, 442, 
- 	341, 342, 443, 341, 342, 444, 341, 342, 
- 	445, 341, 342, 446, 341, 342, 447, 341, 
- 	342, 448, 341, 342, 449, 341, 342, 450, 
- 	341, 342, 451, 341, 342, 452, 341, 342, 
- 	453, 341, 342, 16, 341, 455, 0, 456, 
- 	0, 457, 0, 458, 0, 459, 0, 460, 
- 	0, 461, 0, 462, 0, 463, 0, 464, 
- 	0, 465, 0, 466, 0, 467, 0, 468, 
- 	0, 469, 0, 470, 0, 471, 0, 472, 
- 	0, 473, 0, 474, 0, 475, 0, 476, 
- 	0, 477, 0, 478, 0, 479, 0, 480, 
- 	0, 481, 0, 483, 482, 483, 482, 484, 
- 	483, 483, 16, 570, 16, 483, 482, 485, 
- 	514, 530, 544, 483, 482, 486, 483, 482, 
- 	487, 483, 482, 488, 483, 482, 489, 506, 
- 	483, 482, 490, 483, 482, 491, 483, 482, 
- 	492, 483, 482, 493, 483, 482, 494, 483, 
- 	482, 495, 483, 482, 496, 483, 482, 497, 
- 	483, 482, 498, 483, 482, 499, 483, 482, 
- 	500, 483, 482, 501, 483, 482, 502, 483, 
- 	482, 503, 483, 482, 504, 483, 482, 505, 
- 	483, 482, 483, 96, 482, 507, 483, 482, 
- 	508, 483, 482, 509, 483, 482, 510, 483, 
- 	482, 511, 483, 482, 512, 483, 482, 513, 
- 	483, 482, 505, 483, 482, 515, 483, 482, 
- 	516, 483, 482, 517, 483, 482, 518, 483, 
- 	482, 519, 483, 482, 520, 483, 482, 521, 
- 	483, 482, 522, 483, 482, 483, 523, 482, 
- 	524, 483, 482, 525, 483, 482, 526, 483, 
- 	482, 527, 483, 482, 483, 528, 482, 529, 
- 	483, 482, 530, 483, 482, 531, 483, 482, 
- 	532, 483, 482, 533, 483, 482, 534, 483, 
- 	482, 535, 483, 482, 536, 483, 482, 537, 
- 	483, 482, 538, 483, 482, 539, 483, 482, 
- 	540, 483, 482, 541, 483, 482, 542, 483, 
- 	482, 543, 483, 482, 505, 483, 482, 545, 
- 	483, 482, 546, 483, 482, 547, 483, 482, 
- 	548, 483, 482, 549, 483, 482, 550, 483, 
- 	482, 551, 483, 482, 552, 483, 482, 553, 
- 	483, 482, 554, 483, 482, 555, 483, 482, 
- 	556, 483, 482, 557, 483, 482, 558, 483, 
- 	482, 559, 483, 482, 560, 483, 482, 561, 
- 	483, 482, 562, 483, 482, 563, 483, 482, 
- 	564, 483, 482, 565, 483, 482, 566, 483, 
- 	482, 567, 483, 482, 568, 483, 482, 569, 
- 	483, 482, 505, 483, 482, 483, 571, 482, 
- 	483, 572, 482, 483, 573, 482, 483, 574, 
- 	482, 483, 575, 482, 483, 576, 482, 483, 
- 	577, 482, 483, 578, 482, 483, 579, 482, 
- 	483, 580, 482, 483, 581, 482, 483, 582, 
- 	482, 483, 583, 482, 483, 16, 482, 585, 
- 	0, 16, 0, 0, 0
- };
- 
- static const unsigned char _lexer_trans_actions[] = {
- 	29, 0, 54, 0, 5, 1, 0, 29, 
- 	1, 35, 0, 43, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 149, 126, 57, 110, 
- 	23, 0, 29, 54, 0, 5, 1, 0, 
- 	29, 1, 35, 0, 43, 0, 43, 0, 
- 	43, 139, 48, 9, 106, 11, 0, 134, 
- 	45, 45, 45, 3, 122, 33, 33, 33, 
- 	0, 122, 33, 33, 33, 0, 122, 33, 
- 	0, 33, 0, 102, 7, 7, 43, 54, 
- 	0, 0, 43, 114, 25, 0, 54, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 43, 43, 43, 43, 
- 	0, 27, 118, 27, 27, 51, 27, 0, 
- 	54, 0, 1, 0, 43, 0, 0, 0, 
- 	43, 54, 37, 37, 87, 37, 37, 43, 
- 	0, 39, 0, 43, 0, 0, 54, 0, 
- 	0, 39, 0, 0, 96, 54, 0, 93, 
- 	90, 41, 96, 90, 99, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 144, 57, 54, 0, 84, 54, 
- 	0, 72, 33, 84, 72, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 54, 
- 	15, 0, 63, 130, 31, 60, 57, 31, 
- 	63, 57, 66, 31, 43, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 54, 0, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 54, 0, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 54, 
- 	15, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	15, 0, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 144, 57, 54, 0, 
- 	84, 54, 0, 81, 81, 0, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	54, 21, 0, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 144, 57, 54, 0, 84, 54, 0, 
- 	78, 33, 84, 78, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 54, 19, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 54, 19, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 19, 0, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 144, 57, 54, 0, 84, 
- 	54, 0, 75, 33, 84, 75, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 54, 17, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	54, 17, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 54, 0, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 54, 0, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 17, 0, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 144, 57, 54, 0, 84, 
- 	54, 0, 69, 33, 69, 0, 0, 0, 
- 	0, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 54, 13, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 54, 0, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 54, 0, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 13, 0, 0, 
- 	43, 0, 43, 0, 0
- };
- 
- static const unsigned char _lexer_eof_actions[] = {
- 	0, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43
- };
- 
- static const int lexer_start = 1;
- static const int lexer_first_final = 586;
- static const int lexer_error = 0;
- 
- static const int lexer_en_main = 1;
- 
- 
- #line 258 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/bg.c.rl"
- 
- static VALUE 
- unindent(VALUE con, int start_col)
- {
-   VALUE re;
-   // Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters
-   char pat[32]; 
-   snprintf(pat, 32, "^[\t ]{0,%d}", start_col); 
-   re = rb_reg_regcomp(rb_str_new2(pat));
-   rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2(""));
- 
-   return Qnil;
- 
- }
- 
- static void 
- store_kw_con(VALUE listener, const char * event_name, 
-              const char * keyword_at, size_t keyword_length, 
-              const char * at,         size_t length, 
-              int current_line)
- {
-   VALUE con = Qnil, kw = Qnil;
-   kw = ENCODED_STR_NEW(keyword_at, keyword_length);
-   con = ENCODED_STR_NEW(at, length);
-   rb_funcall(con, rb_intern("strip!"), 0);
-   rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); 
- }
- 
- static void
- store_multiline_kw_con(VALUE listener, const char * event_name,
-                       const char * keyword_at, size_t keyword_length,
-                       const char * at,         size_t length,
-                       int current_line, int start_col)
- {
-   VALUE split;
-   VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil;
- 
-   kw = ENCODED_STR_NEW(keyword_at, keyword_length);
-   con = ENCODED_STR_NEW(at, length);
- 
-   unindent(con, start_col);
-   
-   split = rb_str_split(con, "\n");
- 
-   name = rb_funcall(split, rb_intern("shift"), 0);
-   desc = rb_ary_join(split, rb_str_new2( "\n" ));
- 
-   if( name == Qnil ) 
-   {
-     name = rb_str_new2("");
-   }
-   if( rb_funcall(desc, rb_intern("size"), 0) == 0) 
-   {
-     desc = rb_str_new2("");
-   }
-   rb_funcall(name, rb_intern("strip!"), 0);
-   rb_funcall(desc, rb_intern("rstrip!"), 0);
-   rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); 
- }
- 
- static void 
- store_attr(VALUE listener, const char * attr_type,
-            const char * at, size_t length, 
-            int line)
- {
-   VALUE val = ENCODED_STR_NEW(at, length);
-   rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line));
- }
- static void 
- store_docstring_content(VALUE listener, 
-           int start_col, 
-           const char *type_at, size_t type_length,
-           const char *at, size_t length, 
-           int current_line)
- {
-   VALUE re2;
-   VALUE unescape_escaped_quotes;
-   VALUE con = ENCODED_STR_NEW(at, length);
-   VALUE con_type = ENCODED_STR_NEW(type_at, type_length);
- 
-   unindent(con, start_col);
- 
-   re2 = rb_reg_regcomp(rb_str_new2("\r\\Z"));
-   unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\""));
-   rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2(""));
-   rb_funcall(con_type, rb_intern("strip!"), 0);
-   rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\""));
-   rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line));
- }
- static void 
- raise_lexer_error(const char * at, int line)
- { 
-   rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at);
- }
- 
- static void lexer_init(lexer_state *lexer) {
-   lexer->content_start = 0;
-   lexer->content_end = 0;
-   lexer->content_len = 0;
-   lexer->docstring_content_type_start = 0;
-   lexer->docstring_content_type_end = 0;
-   lexer->mark = 0;
-   lexer->keyword_start = 0;
-   lexer->keyword_end = 0;
-   lexer->next_keyword_start = 0;
-   lexer->line_number = 1;
-   lexer->last_newline = 0;
-   lexer->final_newline = 0;
-   lexer->start_col = 0;
- }
- 
- static VALUE CLexer_alloc(VALUE klass)
- {
-   VALUE obj;
-   lexer_state *lxr = ALLOC(lexer_state);
-   lexer_init(lxr);
- 
-   obj = Data_Wrap_Struct(klass, NULL, -1, lxr);
- 
-   return obj;
- }
- 
- static VALUE CLexer_init(VALUE self, VALUE listener)
- {
-   lexer_state *lxr; 
-   rb_iv_set(self, "@listener", listener);
-   
-   lxr = NULL;
-   DATA_GET(self, lexer_state, lxr);
-   lexer_init(lxr);
-   
-   return self;
- }
- 
- static VALUE CLexer_scan(VALUE self, VALUE input)
- {
-   VALUE input_copy;
-   char *data;
-   size_t len;
-   VALUE listener = rb_iv_get(self, "@listener");
- 
-   lexer_state *lexer;
-   lexer = NULL;
-   DATA_GET(self, lexer_state, lexer);
- 
-   input_copy = rb_str_dup(input);
- 
-   rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%"));
-   data = RSTRING_PTR(input_copy);
-   len = RSTRING_LEN(input_copy);
-   
-   if (len == 0) { 
-     rb_raise(rb_eGherkinLexingError, "No content to lex.");
-   } else {
- 
-     const char *p, *pe, *eof;
-     int cs = 0;
-     
-     VALUE current_row = Qnil;
- 
-     p = data;
-     pe = data + len;
-     eof = pe;
-     
-     assert(*pe == '\0' && "pointer does not end on NULL");
-     
-     
- #line 1259 "ext/gherkin_lexer_bg/gherkin_lexer_bg.c"
- 	{
- 	cs = lexer_start;
- 	}
- 
- #line 425 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/bg.c.rl"
-     
- #line 1266 "ext/gherkin_lexer_bg/gherkin_lexer_bg.c"
- 	{
- 	int _klen;
- 	unsigned int _trans;
- 	const char *_acts;
- 	unsigned int _nacts;
- 	const char *_keys;
- 
- 	if ( p == pe )
- 		goto _test_eof;
- 	if ( cs == 0 )
- 		goto _out;
- _resume:
- 	_keys = _lexer_trans_keys + _lexer_key_offsets[cs];
- 	_trans = _lexer_index_offsets[cs];
- 
- 	_klen = _lexer_single_lengths[cs];
- 	if ( _klen > 0 ) {
- 		const char *_lower = _keys;
- 		const char *_mid;
- 		const char *_upper = _keys + _klen - 1;
- 		while (1) {
- 			if ( _upper < _lower )
- 				break;
- 
- 			_mid = _lower + ((_upper-_lower) >> 1);
- 			if ( (*p) < *_mid )
- 				_upper = _mid - 1;
- 			else if ( (*p) > *_mid )
- 				_lower = _mid + 1;
- 			else {
- 				_trans += (_mid - _keys);
- 				goto _match;
- 			}
- 		}
- 		_keys += _klen;
- 		_trans += _klen;
- 	}
- 
- 	_klen = _lexer_range_lengths[cs];
- 	if ( _klen > 0 ) {
- 		const char *_lower = _keys;
- 		const char *_mid;
- 		const char *_upper = _keys + (_klen<<1) - 2;
- 		while (1) {
- 			if ( _upper < _lower )
- 				break;
- 
- 			_mid = _lower + (((_upper-_lower) >> 1) & ~1);
- 			if ( (*p) < _mid[0] )
- 				_upper = _mid - 2;
- 			else if ( (*p) > _mid[1] )
- 				_lower = _mid + 2;
- 			else {
- 				_trans += ((_mid - _keys)>>1);
- 				goto _match;
- 			}
- 		}
- 		_trans += _klen;
- 	}
- 
- _match:
- 	cs = _lexer_trans_targs[_trans];
- 
- 	if ( _lexer_trans_actions[_trans] == 0 )
- 		goto _again;
- 
- 	_acts = _lexer_actions + _lexer_trans_actions[_trans];
- 	_nacts = (unsigned int) *_acts++;
- 	while ( _nacts-- > 0 )
- 	{
- 		switch ( *_acts++ )
- 		{
- 	case 0:
- #line 83 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/bg.c.rl"
- 	{
- 		MARK(content_start, p);
-     lexer->current_line = lexer->line_number;
-     lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2;
-   }
- 	break;
- 	case 1:
- #line 89 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/bg.c.rl"
- 	{
-     MARK(content_start, p);
-   }
- 	break;
- 	case 2:
- #line 93 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/bg.c.rl"
- 	{
-     lexer->current_line = lexer->line_number;
-     lexer->start_col = p - data - lexer->last_newline;
-   }
- 	break;
- 	case 3:
- #line 98 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/bg.c.rl"
- 	{
-     int len = LEN(content_start, PTR_TO(final_newline));
-     int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end));
- 
-     if (len < 0) len = 0;
-     if (type_len < 0) len = 0;
- 
-     store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line);
-   }
- 	break;
- 	case 4:
- #line 108 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/bg.c.rl"
- 	{ 
-     MARK(docstring_content_type_start, p);
-   }
- 	break;
- 	case 5:
- #line 112 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/bg.c.rl"
- 	{ 
-     MARK(docstring_content_type_end, p);
-   }
- 	break;
- 	case 6:
- #line 116 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/bg.c.rl"
- 	{
-     STORE_KW_END_CON(feature);
-   }
- 	break;
- 	case 7:
- #line 120 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/bg.c.rl"
- 	{
-     STORE_KW_END_CON(background);
-   }
- 	break;
- 	case 8:
- #line 124 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/bg.c.rl"
- 	{
-     STORE_KW_END_CON(scenario);
-   }
- 	break;
- 	case 9:
- #line 128 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/bg.c.rl"
- 	{
-     STORE_KW_END_CON(scenario_outline);
-   }
- 	break;
- 	case 10:
- #line 132 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/bg.c.rl"
- 	{
-     STORE_KW_END_CON(examples);
-   }
- 	break;
- 	case 11:
- #line 136 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/bg.c.rl"
- 	{
-     store_kw_con(listener, "step",
-       PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-       PTR_TO(content_start), LEN(content_start, p), 
-       lexer->current_line);
-   }
- 	break;
- 	case 12:
- #line 143 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/bg.c.rl"
- 	{
-     STORE_ATTR(comment);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 13:
- #line 148 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/bg.c.rl"
- 	{
-     STORE_ATTR(tag);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 14:
- #line 153 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/bg.c.rl"
- 	{
-     lexer->line_number += 1;
-     MARK(final_newline, p);
-   }
- 	break;
- 	case 15:
- #line 158 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/bg.c.rl"
- 	{
-     MARK(last_newline, p + 1);
-   }
- 	break;
- 	case 16:
- #line 162 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/bg.c.rl"
- 	{
-     if (lexer->mark == 0) {
-       MARK(mark, p);
-     }
-   }
- 	break;
- 	case 17:
- #line 168 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/bg.c.rl"
- 	{
-     MARK(keyword_end, p);
-     MARK(keyword_start, PTR_TO(mark));
-     MARK(content_start, p + 1);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 18:
- #line 175 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/bg.c.rl"
- 	{
-     MARK(content_end, p);
-   }
- 	break;
- 	case 19:
- #line 179 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/bg.c.rl"
- 	{
-     p = p - 1;
-     lexer->current_line = lexer->line_number;
-     current_row = rb_ary_new();
-   }
- 	break;
- 	case 20:
- #line 185 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/bg.c.rl"
- 	{
- 		MARK(content_start, p);
-   }
- 	break;
- 	case 21:
- #line 189 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/bg.c.rl"
- 	{
-     VALUE re_pipe, re_newline, re_backslash;
-     VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
-     rb_funcall(con, rb_intern("strip!"), 0);
-     re_pipe      = rb_reg_regcomp(rb_str_new2("\\\\\\|"));
-     re_newline   = rb_reg_regcomp(rb_str_new2("\\\\n"));
-     re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_pipe,      rb_str_new2("|"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_newline,   rb_str_new2("\n"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\"));
- 
-     rb_ary_push(current_row, con);
-   }
- 	break;
- 	case 22:
- #line 203 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/bg.c.rl"
- 	{
-     rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
-   }
- 	break;
- 	case 23:
- #line 207 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/bg.c.rl"
- 	{
-     int line;
-     if (cs < lexer_first_final) {
-       size_t count = 0;
-       VALUE newstr_val;
-       char *newstr;
-       int newstr_count = 0;        
-       size_t len;
-       const char *buff;
-       if (lexer->last_newline != 0) {
-         len = LEN(last_newline, eof);
-         buff = PTR_TO(last_newline);
-       } else {
-         len = strlen(data);
-         buff = data;
-       }
- 
-       // Allocate as a ruby string so that it gets cleaned up by GC
-       newstr_val = rb_str_new(buff, len);
-       newstr = RSTRING_PTR(newstr_val);
- 
- 
-       for (count = 0; count < len; count++) {
-         if(buff[count] == 10) {
-           newstr[newstr_count] = '\0'; // terminate new string at first newline found
-           break;
-         } else {
-           if (buff[count] == '%') {
-             newstr[newstr_count++] = buff[count];
-             newstr[newstr_count] = buff[count];
-           } else {
-             newstr[newstr_count] = buff[count];
-           }
-         }
-         newstr_count++;
-       }
- 
-       line = lexer->line_number;
-       lexer_init(lexer); // Re-initialize so we can scan again with the same lexer
-       raise_lexer_error(newstr, line);
-     } else {
-       rb_funcall(listener, rb_intern("eof"), 0);
-     }
-   }
- 	break;
- #line 1556 "ext/gherkin_lexer_bg/gherkin_lexer_bg.c"
- 		}
- 	}
- 
- _again:
- 	if ( cs == 0 )
- 		goto _out;
- 	if ( ++p != pe )
- 		goto _resume;
- 	_test_eof: {}
- 	if ( p == eof )
- 	{
- 	const char *__acts = _lexer_actions + _lexer_eof_actions[cs];
- 	unsigned int __nacts = (unsigned int) *__acts++;
- 	while ( __nacts-- > 0 ) {
- 		switch ( *__acts++ ) {
- 	case 23:
- #line 207 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/bg.c.rl"
- 	{
-     int line;
-     if (cs < lexer_first_final) {
-       size_t count = 0;
-       VALUE newstr_val;
-       char *newstr;
-       int newstr_count = 0;        
-       size_t len;
-       const char *buff;
-       if (lexer->last_newline != 0) {
-         len = LEN(last_newline, eof);
-         buff = PTR_TO(last_newline);
-       } else {
-         len = strlen(data);
-         buff = data;
-       }
- 
-       // Allocate as a ruby string so that it gets cleaned up by GC
-       newstr_val = rb_str_new(buff, len);
-       newstr = RSTRING_PTR(newstr_val);
- 
- 
-       for (count = 0; count < len; count++) {
-         if(buff[count] == 10) {
-           newstr[newstr_count] = '\0'; // terminate new string at first newline found
-           break;
-         } else {
-           if (buff[count] == '%') {
-             newstr[newstr_count++] = buff[count];
-             newstr[newstr_count] = buff[count];
-           } else {
-             newstr[newstr_count] = buff[count];
-           }
-         }
-         newstr_count++;
-       }
- 
-       line = lexer->line_number;
-       lexer_init(lexer); // Re-initialize so we can scan again with the same lexer
-       raise_lexer_error(newstr, line);
-     } else {
-       rb_funcall(listener, rb_intern("eof"), 0);
-     }
-   }
- 	break;
- #line 1619 "ext/gherkin_lexer_bg/gherkin_lexer_bg.c"
- 		}
- 	}
- 	}
- 
- 	_out: {}
- 	}
- 
- #line 426 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/bg.c.rl"
- 
-     assert(p <= pe && "data overflow after parsing execute");
-     assert(lexer->content_start <= len && "content starts after data end");
-     assert(lexer->mark < len && "mark is after data end");
-     
-     // Reset lexer by re-initializing the whole thing
-     lexer_init(lexer);
- 
-     if (cs == lexer_error) {
-       rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails.");
-     } else {
-       return Qtrue;
-     }
-   }
- }
- 
- void Init_gherkin_lexer_bg()
- {
-   mGherkin = rb_define_module("Gherkin");
-   mGherkinLexer = rb_define_module_under(mGherkin, "Lexer");
-   rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError"));
- 
-   mCLexer = rb_define_module_under(mGherkin, "CLexer");
-   cI18nLexer = rb_define_class_under(mCLexer, "Bg", rb_cObject);
-   rb_define_alloc_func(cI18nLexer, CLexer_alloc);
-   rb_define_method(cI18nLexer, "initialize", CLexer_init, 1);
-   rb_define_method(cI18nLexer, "scan", CLexer_scan, 1);
- }
- 
 -#line 1 "ragel/i18n/bg.c.rl"
 -#include <assert.h>
 -#include <ruby.h>
 -
 -#if defined(_WIN32)
 -#include <stddef.h>
 -#endif
 -
 -#ifdef HAVE_RUBY_RE_H
 -#include <ruby/re.h>
 -#else
 -#include <re.h>
 -#endif
 -
 -#ifdef HAVE_RUBY_ENCODING_H
 -#include <ruby/encoding.h>
 -#define ENCODED_STR_NEW(ptr, len) \
 -    rb_enc_str_new(ptr, len, rb_utf8_encoding())
 -#else
 -#define ENCODED_STR_NEW(ptr, len) \
 -    rb_str_new(ptr, len)
 -#endif
 -
 -#ifndef RSTRING_PTR
 -#define RSTRING_PTR(s) (RSTRING(s)->ptr)
 -#endif
 -
 -#ifndef RSTRING_LEN
 -#define RSTRING_LEN(s) (RSTRING(s)->len)
 -#endif
 -
 -#define DATA_GET(FROM, TYPE, NAME) \
 -  Data_Get_Struct(FROM, TYPE, NAME); \
 -  if (NAME == NULL) { \
 -    rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \
 -  }
 - 
 -typedef struct lexer_state {
 -  int content_len;
 -  int line_number;
 -  int current_line;
 -  int start_col;
 -  size_t mark;
 -  size_t keyword_start;
 -  size_t keyword_end;
 -  size_t next_keyword_start;
 -  size_t content_start;
 -  size_t content_end;
 -  size_t docstring_content_type_start;
 -  size_t docstring_content_type_end;
 -  size_t query_start;
 -  size_t last_newline;
 -  size_t final_newline;
 -} lexer_state;
 -
 -static VALUE mGherkin;
 -static VALUE mGherkinLexer;
 -static VALUE mCLexer;
 -static VALUE cI18nLexer;
 -static VALUE rb_eGherkinLexingError;
 -
 -#define LEN(AT, P) (P - data - lexer->AT)
 -#define MARK(M, P) (lexer->M = (P) - data)
 -#define PTR_TO(P) (data + lexer->P)
 -
 -#define STORE_KW_END_CON(EVENT) \
 -  store_multiline_kw_con(listener, # EVENT, \
 -    PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \
 -    PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \
 -    lexer->current_line, lexer->start_col); \
 -    if (lexer->content_end != 0) { \
 -      p = PTR_TO(content_end - 1); \
 -    } \
 -    lexer->content_end = 0
 -
 -#define STORE_ATTR(ATTR) \
 -    store_attr(listener, # ATTR, \
 -      PTR_TO(content_start), LEN(content_start, p), \
 -      lexer->line_number)
 -
 -
 -#line 254 "ragel/i18n/bg.c.rl"
 -
 -
 -/** Data **/
 -
 -#line 89 "ext/gherkin_lexer_bg/gherkin_lexer_bg.c"
 -static const char _lexer_actions[] = {
 -	0, 1, 0, 1, 1, 1, 2, 1, 
 -	3, 1, 4, 1, 5, 1, 6, 1, 
 -	7, 1, 8, 1, 9, 1, 10, 1, 
 -	11, 1, 12, 1, 13, 1, 16, 1, 
 -	17, 1, 18, 1, 19, 1, 20, 1, 
 -	21, 1, 22, 1, 23, 2, 1, 18, 
 -	2, 4, 5, 2, 13, 0, 2, 14, 
 -	15, 2, 17, 0, 2, 17, 2, 2, 
 -	17, 16, 2, 17, 19, 2, 18, 6, 
 -	2, 18, 7, 2, 18, 8, 2, 18, 
 -	9, 2, 18, 10, 2, 18, 16, 2, 
 -	20, 21, 2, 22, 0, 2, 22, 2, 
 -	2, 22, 16, 2, 22, 19, 3, 3, 
 -	14, 15, 3, 5, 14, 15, 3, 11, 
 -	14, 15, 3, 12, 14, 15, 3, 13, 
 -	14, 15, 3, 14, 15, 18, 3, 17, 
 -	0, 11, 3, 17, 14, 15, 4, 1, 
 -	14, 15, 18, 4, 4, 5, 14, 15, 
 -	4, 17, 0, 14, 15, 5, 17, 0, 
 -	11, 14, 15
 -};
 -
 -static const short _lexer_key_offsets[] = {
 -	0, 0, 12, 21, 22, 23, 24, 25, 
 -	26, 27, 28, 29, 30, 31, 32, 34, 
 -	36, 47, 48, 49, 51, 53, 58, 63, 
 -	68, 73, 77, 81, 83, 84, 85, 86, 
 -	87, 88, 89, 90, 91, 92, 93, 94, 
 -	95, 96, 97, 98, 103, 110, 115, 119, 
 -	125, 128, 130, 136, 147, 148, 149, 150, 
 -	151, 152, 153, 154, 155, 156, 157, 158, 
 -	160, 161, 162, 163, 164, 165, 166, 167, 
 -	168, 169, 170, 171, 172, 173, 174, 175, 
 -	176, 177, 178, 179, 188, 197, 199, 201, 
 -	203, 205, 207, 209, 211, 213, 215, 217, 
 -	219, 230, 232, 234, 236, 238, 240, 242, 
 -	244, 246, 248, 250, 252, 254, 256, 258, 
 -	260, 262, 264, 266, 268, 270, 272, 274, 
 -	276, 278, 280, 282, 284, 286, 288, 290, 
 -	292, 294, 296, 298, 300, 302, 304, 306, 
 -	308, 310, 312, 314, 316, 318, 320, 322, 
 -	324, 326, 328, 330, 332, 334, 336, 338, 
 -	340, 342, 344, 346, 348, 350, 352, 354, 
 -	356, 358, 360, 362, 364, 366, 368, 370, 
 -	372, 374, 376, 378, 380, 382, 384, 386, 
 -	388, 389, 390, 391, 392, 393, 394, 395, 
 -	396, 397, 398, 399, 406, 408, 410, 412, 
 -	414, 416, 418, 420, 422, 424, 426, 428, 
 -	430, 432, 434, 436, 438, 440, 442, 444, 
 -	446, 448, 450, 452, 454, 456, 458, 460, 
 -	462, 463, 464, 465, 466, 467, 468, 469, 
 -	470, 471, 472, 473, 474, 475, 476, 477, 
 -	478, 479, 480, 481, 482, 483, 484, 485, 
 -	486, 487, 488, 489, 490, 491, 492, 493, 
 -	494, 495, 504, 512, 514, 516, 518, 520, 
 -	522, 524, 526, 528, 530, 532, 534, 536, 
 -	538, 540, 542, 544, 546, 548, 550, 552, 
 -	554, 556, 558, 560, 562, 564, 566, 568, 
 -	570, 572, 574, 576, 578, 580, 582, 584, 
 -	586, 588, 590, 592, 594, 596, 598, 600, 
 -	602, 604, 606, 608, 610, 612, 614, 616, 
 -	618, 620, 622, 624, 626, 628, 630, 632, 
 -	634, 636, 638, 640, 642, 644, 646, 648, 
 -	650, 652, 654, 656, 658, 660, 661, 662, 
 -	663, 664, 665, 666, 667, 668, 669, 670, 
 -	671, 672, 673, 674, 675, 676, 677, 686, 
 -	696, 698, 700, 702, 704, 706, 708, 710, 
 -	712, 714, 716, 718, 720, 722, 724, 726, 
 -	728, 730, 732, 734, 736, 738, 740, 742, 
 -	744, 746, 748, 750, 752, 754, 756, 758, 
 -	760, 762, 764, 766, 768, 770, 772, 774, 
 -	776, 778, 780, 782, 784, 786, 788, 790, 
 -	792, 794, 796, 798, 800, 802, 804, 806, 
 -	808, 810, 812, 814, 816, 818, 820, 822, 
 -	824, 826, 828, 830, 832, 834, 836, 838, 
 -	840, 842, 844, 846, 848, 850, 852, 854, 
 -	856, 858, 860, 862, 864, 866, 868, 870, 
 -	872, 874, 876, 878, 880, 882, 884, 886, 
 -	888, 890, 892, 894, 896, 898, 900, 902, 
 -	904, 906, 908, 910, 912, 914, 916, 917, 
 -	918, 919, 920, 921, 922, 923, 924, 925, 
 -	926, 927, 928, 929, 930, 931, 932, 933, 
 -	934, 935, 936, 937, 938, 939, 940, 941, 
 -	942, 943, 944, 945, 953, 958, 960, 962, 
 -	964, 967, 969, 971, 973, 975, 977, 979, 
 -	981, 983, 985, 987, 989, 991, 993, 995, 
 -	997, 999, 1001, 1003, 1005, 1007, 1009, 1011, 
 -	1013, 1015, 1017, 1019, 1021, 1023, 1025, 1027, 
 -	1029, 1031, 1033, 1035, 1037, 1039, 1041, 1043, 
 -	1045, 1047, 1049, 1051, 1053, 1055, 1057, 1059, 
 -	1061, 1063, 1065, 1067, 1069, 1071, 1073, 1075, 
 -	1077, 1079, 1081, 1083, 1085, 1087, 1089, 1091, 
 -	1093, 1095, 1097, 1099, 1101, 1103, 1105, 1107, 
 -	1109, 1111, 1113, 1115, 1117, 1119, 1121, 1123, 
 -	1125, 1127, 1129, 1131, 1133, 1135, 1137, 1139, 
 -	1141, 1143, 1145, 1147, 1149, 1151, 1153, 1155, 
 -	1157, 1158, 1159
 -};
 -
 -static const char _lexer_trans_keys[] = {
 -	-48, -17, 10, 32, 34, 35, 37, 42, 
 -	64, 124, 9, 13, -108, -104, -102, -99, 
 -	-97, -96, -95, -94, -92, -48, -80, -48, 
 -	-76, -48, -75, -48, -67, -48, -66, 32, 
 -	10, 13, 10, 13, -48, 10, 32, 34, 
 -	35, 37, 42, 64, 124, 9, 13, 34, 
 -	34, 10, 13, 10, 13, 10, 32, 34, 
 -	9, 13, 10, 32, 34, 9, 13, 10, 
 -	32, 34, 9, 13, 10, 32, 34, 9, 
 -	13, 10, 32, 9, 13, 10, 32, 9, 
 -	13, 10, 13, 10, 95, 70, 69, 65, 
 -	84, 85, 82, 69, 95, 69, 78, 68, 
 -	95, 37, 13, 32, 64, 9, 10, 9, 
 -	10, 13, 32, 64, 11, 12, 10, 32, 
 -	64, 9, 13, 32, 124, 9, 13, 10, 
 -	32, 92, 124, 9, 13, 10, 92, 124, 
 -	10, 92, 10, 32, 92, 124, 9, 13, 
 -	-48, 10, 32, 34, 35, 37, 42, 64, 
 -	124, 9, 13, -48, -66, -48, -77, -48, 
 -	-80, -47, -126, -47, -128, -48, -75, -72, 
 -	-48, -76, -48, -72, -47, -127, -47, -126, 
 -	-48, -66, -47, -128, -48, -72, -47, -113, 
 -	58, 10, 10, -48, 10, 32, 35, 37, 
 -	42, 64, 9, 13, -108, -104, -102, -99, 
 -	-96, -95, -94, -92, 10, -48, 10, -80, 
 -	10, -48, 10, -76, 10, -48, 10, -75, 
 -	10, -48, 10, -67, 10, -48, 10, -66, 
 -	10, 10, 32, -48, 10, 32, 34, 35, 
 -	37, 42, 64, 124, 9, 13, -48, 10, 
 -	-66, 10, -48, 10, -77, 10, -48, 10, 
 -	-80, 10, -47, 10, -126, 10, -48, 10, 
 -	-80, 10, -48, 10, -68, 10, -48, 10, 
 -	-70, 10, -48, 10, -80, 10, 10, 32, 
 -	-48, 10, -67, 10, -48, 10, -80, 10, 
 -	10, 32, -47, 10, -127, 10, -47, 10, 
 -	-122, 10, -48, 10, -75, 10, -48, 10, 
 -	-67, 10, -48, 10, -80, 10, -47, 10, 
 -	-128, 10, -48, 10, -72, 10, -48, 10, 
 -	-71, 10, 10, 58, -47, 10, -125, 10, 
 -	-48, 10, -67, 10, -48, 10, -70, 10, 
 -	-47, 10, -122, 10, -48, 10, -72, 10, 
 -	-48, 10, -66, 10, -48, 10, -67, 10, 
 -	-48, 10, -80, 10, -48, 10, -69, 10, 
 -	-48, 10, -67, 10, -48, 10, -66, 10, 
 -	-47, 10, -127, 10, -47, 10, -126, 10, 
 -	10, 95, 10, 70, 10, 69, 10, 65, 
 -	10, 84, 10, 85, 10, 82, 10, 69, 
 -	10, 95, 10, 69, 10, 78, 10, 68, 
 -	10, 95, 10, 37, -48, -68, -48, -75, 
 -	-47, -128, -48, -72, 58, 10, 10, -48, 
 -	10, 32, 35, 124, 9, 13, -92, 10, 
 -	-47, 10, -125, 10, -48, 10, -67, 10, 
 -	-48, 10, -70, 10, -47, 10, -122, 10, 
 -	-48, 10, -72, 10, -48, 10, -66, 10, 
 -	-48, 10, -67, 10, -48, 10, -80, 10, 
 -	-48, 10, -69, 10, -48, 10, -67, 10, 
 -	-48, 10, -66, 10, -47, 10, -127, 10, 
 -	-47, 10, -126, 10, 10, 58, -48, -80, 
 -	-48, -68, -48, -70, -48, -80, 32, -48, 
 -	-67, -48, -80, 32, -47, -127, -47, -122, 
 -	-48, -75, -48, -67, -48, -80, -47, -128, 
 -	-48, -72, -48, -71, 58, 10, 10, -48, 
 -	10, 32, 35, 37, 42, 64, 9, 13, 
 -	-108, -104, -102, -99, -95, -94, -92, 10, 
 -	-48, 10, -80, 10, -48, 10, -76, 10, 
 -	-48, 10, -75, 10, -48, 10, -67, 10, 
 -	-48, 10, -66, 10, 10, 32, -48, 10, 
 -	-66, 10, -48, 10, -77, 10, -48, 10, 
 -	-80, 10, -47, 10, -126, 10, -47, 10, 
 -	-122, 10, -48, 10, -75, 10, -48, 10, 
 -	-67, 10, -48, 10, -80, 10, -47, 10, 
 -	-128, 10, -48, 10, -72, 10, -48, 10, 
 -	-71, 10, 10, 58, -47, 10, -125, 10, 
 -	-48, 10, -67, 10, -48, 10, -70, 10, 
 -	-47, 10, -122, 10, -48, 10, -72, 10, 
 -	-48, 10, -66, 10, -48, 10, -67, 10, 
 -	-48, 10, -80, 10, -48, 10, -69, 10, 
 -	-48, 10, -67, 10, -48, 10, -66, 10, 
 -	-47, 10, -127, 10, -47, 10, -126, 10, 
 -	10, 95, 10, 70, 10, 69, 10, 65, 
 -	10, 84, 10, 85, 10, 82, 10, 69, 
 -	10, 95, 10, 69, 10, 78, 10, 68, 
 -	10, 95, 10, 37, -47, -122, -48, -75, 
 -	-48, -67, -48, -80, -47, -128, -48, -72, 
 -	-48, -71, 58, 10, 10, -48, 10, 32, 
 -	35, 37, 42, 64, 9, 13, -108, -104, 
 -	-102, -99, -97, -96, -95, -94, -92, 10, 
 -	-48, 10, -80, 10, -48, 10, -76, 10, 
 -	-48, 10, -75, 10, -48, 10, -67, 10, 
 -	-48, 10, -66, 10, 10, 32, -48, 10, 
 -	-66, 10, -48, 10, -77, 10, -48, 10, 
 -	-80, 10, -47, 10, -126, 10, -47, 10, 
 -	-128, 10, -48, 10, -75, 10, -48, 10, 
 -	-76, 10, -48, 10, -72, 10, -47, 10, 
 -	-127, 10, -47, 10, -126, 10, -48, 10, 
 -	-66, 10, -47, 10, -128, 10, -48, 10, 
 -	-72, 10, -47, 10, -113, 10, 10, 58, 
 -	-48, 10, -80, 10, -48, 10, -68, 10, 
 -	-48, 10, -70, 10, -48, 10, -80, 10, 
 -	10, 32, -48, 10, -67, 10, -48, 10, 
 -	-80, 10, 10, 32, -47, 10, -127, 10, 
 -	-47, 10, -122, 10, -48, 10, -75, 10, 
 -	-48, 10, -67, 10, -48, 10, -80, 10, 
 -	-47, 10, -128, 10, -48, 10, -72, 10, 
 -	-48, 10, -71, 10, -47, 10, -125, 10, 
 -	-48, 10, -67, 10, -48, 10, -70, 10, 
 -	-47, 10, -122, 10, -48, 10, -72, 10, 
 -	-48, 10, -66, 10, -48, 10, -67, 10, 
 -	-48, 10, -80, 10, -48, 10, -69, 10, 
 -	-48, 10, -67, 10, -48, 10, -66, 10, 
 -	-47, 10, -127, 10, -47, 10, -126, 10, 
 -	10, 95, 10, 70, 10, 69, 10, 65, 
 -	10, 84, 10, 85, 10, 82, 10, 69, 
 -	10, 95, 10, 69, 10, 78, 10, 68, 
 -	10, 95, 10, 37, -47, -125, -48, -67, 
 -	-48, -70, -47, -122, -48, -72, -48, -66, 
 -	-48, -67, -48, -80, -48, -69, -48, -67, 
 -	-48, -66, -47, -127, -47, -126, 58, 10, 
 -	10, -48, 10, 32, 35, 37, 64, 9, 
 -	13, -97, -96, -95, -92, 10, -47, 10, 
 -	-128, 10, -48, 10, -75, -72, 10, -48, 
 -	10, -76, 10, -48, 10, -72, 10, -47, 
 -	10, -127, 10, -47, 10, -126, 10, -48, 
 -	10, -66, 10, -47, 10, -128, 10, -48, 
 -	10, -72, 10, -47, 10, -113, 10, 10, 
 -	58, -48, 10, -68, 10, -48, 10, -75, 
 -	10, -47, 10, -128, 10, -48, 10, -72, 
 -	10, -48, 10, -80, 10, -48, 10, -68, 
 -	10, -48, 10, -70, 10, -48, 10, -80, 
 -	10, 10, 32, -48, 10, -67, 10, -48, 
 -	10, -80, 10, 10, 32, -47, 10, -127, 
 -	10, -47, 10, -122, 10, -48, 10, -75, 
 -	10, -48, 10, -67, 10, -48, 10, -80, 
 -	10, -47, 10, -128, 10, -48, 10, -72, 
 -	10, -48, 10, -71, 10, -47, 10, -125, 
 -	10, -48, 10, -67, 10, -48, 10, -70, 
 -	10, -47, 10, -122, 10, -48, 10, -72, 
 -	10, -48, 10, -66, 10, -48, 10, -67, 
 -	10, -48, 10, -80, 10, -48, 10, -69, 
 -	10, -48, 10, -67, 10, -48, 10, -66, 
 -	10, -47, 10, -127, 10, -47, 10, -126, 
 -	10, 10, 95, 10, 70, 10, 69, 10, 
 -	65, 10, 84, 10, 85, 10, 82, 10, 
 -	69, 10, 95, 10, 69, 10, 78, 10, 
 -	68, 10, 95, 10, 37, -69, -65, 0
 -};
 -
 -static const char _lexer_single_lengths[] = {
 -	0, 10, 9, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 2, 2, 
 -	9, 1, 1, 2, 2, 3, 3, 3, 
 -	3, 2, 2, 2, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 3, 5, 3, 2, 4, 
 -	3, 2, 4, 9, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 2, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 7, 9, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	9, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 5, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 7, 8, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 7, 10, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 6, 5, 2, 2, 2, 
 -	3, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	1, 1, 0
 -};
 -
 -static const char _lexer_range_lengths[] = {
 -	0, 1, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	1, 0, 0, 0, 0, 1, 1, 1, 
 -	1, 1, 1, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 1, 1, 1, 1, 1, 
 -	0, 0, 1, 1, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 1, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	1, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 1, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 1, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 1, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 1, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0
 -};
 -
 -static const short _lexer_index_offsets[] = {
 -	0, 0, 12, 22, 24, 26, 28, 30, 
 -	32, 34, 36, 38, 40, 42, 44, 47, 
 -	50, 61, 63, 65, 68, 71, 76, 81, 
 -	86, 91, 95, 99, 102, 104, 106, 108, 
 -	110, 112, 114, 116, 118, 120, 122, 124, 
 -	126, 128, 130, 132, 137, 144, 149, 153, 
 -	159, 163, 166, 172, 183, 185, 187, 189, 
 -	191, 193, 195, 197, 199, 201, 203, 205, 
 -	208, 210, 212, 214, 216, 218, 220, 222, 
 -	224, 226, 228, 230, 232, 234, 236, 238, 
 -	240, 242, 244, 246, 255, 265, 268, 271, 
 -	274, 277, 280, 283, 286, 289, 292, 295, 
 -	298, 309, 312, 315, 318, 321, 324, 327, 
 -	330, 333, 336, 339, 342, 345, 348, 351, 
 -	354, 357, 360, 363, 366, 369, 372, 375, 
 -	378, 381, 384, 387, 390, 393, 396, 399, 
 -	402, 405, 408, 411, 414, 417, 420, 423, 
 -	426, 429, 432, 435, 438, 441, 444, 447, 
 -	450, 453, 456, 459, 462, 465, 468, 471, 
 -	474, 477, 480, 483, 486, 489, 492, 495, 
 -	498, 501, 504, 507, 510, 513, 516, 519, 
 -	522, 525, 528, 531, 534, 537, 540, 543, 
 -	546, 548, 550, 552, 554, 556, 558, 560, 
 -	562, 564, 566, 568, 575, 578, 581, 584, 
 -	587, 590, 593, 596, 599, 602, 605, 608, 
 -	611, 614, 617, 620, 623, 626, 629, 632, 
 -	635, 638, 641, 644, 647, 650, 653, 656, 
 -	659, 661, 663, 665, 667, 669, 671, 673, 
 -	675, 677, 679, 681, 683, 685, 687, 689, 
 -	691, 693, 695, 697, 699, 701, 703, 705, 
 -	707, 709, 711, 713, 715, 717, 719, 721, 
 -	723, 725, 734, 743, 746, 749, 752, 755, 
 -	758, 761, 764, 767, 770, 773, 776, 779, 
 -	782, 785, 788, 791, 794, 797, 800, 803, 
 -	806, 809, 812, 815, 818, 821, 824, 827, 
 -	830, 833, 836, 839, 842, 845, 848, 851, 
 -	854, 857, 860, 863, 866, 869, 872, 875, 
 -	878, 881, 884, 887, 890, 893, 896, 899, 
 -	902, 905, 908, 911, 914, 917, 920, 923, 
 -	926, 929, 932, 935, 938, 941, 944, 947, 
 -	950, 953, 956, 959, 962, 965, 967, 969, 
 -	971, 973, 975, 977, 979, 981, 983, 985, 
 -	987, 989, 991, 993, 995, 997, 999, 1008, 
 -	1019, 1022, 1025, 1028, 1031, 1034, 1037, 1040, 
 -	1043, 1046, 1049, 1052, 1055, 1058, 1061, 1064, 
 -	1067, 1070, 1073, 1076, 1079, 1082, 1085, 1088, 
 -	1091, 1094, 1097, 1100, 1103, 1106, 1109, 1112, 
 -	1115, 1118, 1121, 1124, 1127, 1130, 1133, 1136, 
 -	1139, 1142, 1145, 1148, 1151, 1154, 1157, 1160, 
 -	1163, 1166, 1169, 1172, 1175, 1178, 1181, 1184, 
 -	1187, 1190, 1193, 1196, 1199, 1202, 1205, 1208, 
 -	1211, 1214, 1217, 1220, 1223, 1226, 1229, 1232, 
 -	1235, 1238, 1241, 1244, 1247, 1250, 1253, 1256, 
 -	1259, 1262, 1265, 1268, 1271, 1274, 1277, 1280, 
 -	1283, 1286, 1289, 1292, 1295, 1298, 1301, 1304, 
 -	1307, 1310, 1313, 1316, 1319, 1322, 1325, 1328, 
 -	1331, 1334, 1337, 1340, 1343, 1346, 1349, 1351, 
 -	1353, 1355, 1357, 1359, 1361, 1363, 1365, 1367, 
 -	1369, 1371, 1373, 1375, 1377, 1379, 1381, 1383, 
 -	1385, 1387, 1389, 1391, 1393, 1395, 1397, 1399, 
 -	1401, 1403, 1405, 1407, 1415, 1421, 1424, 1427, 
 -	1430, 1434, 1437, 1440, 1443, 1446, 1449, 1452, 
 -	1455, 1458, 1461, 1464, 1467, 1470, 1473, 1476, 
 -	1479, 1482, 1485, 1488, 1491, 1494, 1497, 1500, 
 -	1503, 1506, 1509, 1512, 1515, 1518, 1521, 1524, 
 -	1527, 1530, 1533, 1536, 1539, 1542, 1545, 1548, 
 -	1551, 1554, 1557, 1560, 1563, 1566, 1569, 1572, 
 -	1575, 1578, 1581, 1584, 1587, 1590, 1593, 1596, 
 -	1599, 1602, 1605, 1608, 1611, 1614, 1617, 1620, 
 -	1623, 1626, 1629, 1632, 1635, 1638, 1641, 1644, 
 -	1647, 1650, 1653, 1656, 1659, 1662, 1665, 1668, 
 -	1671, 1674, 1677, 1680, 1683, 1686, 1689, 1692, 
 -	1695, 1698, 1701, 1704, 1707, 1710, 1713, 1716, 
 -	1719, 1721, 1723
 -};
 -
 -static const short _lexer_trans_targs[] = {
 -	2, 584, 16, 16, 17, 27, 29, 13, 
 -	43, 46, 16, 0, 3, 13, 52, 11, 
 -	60, 216, 325, 11, 454, 0, 4, 0, 
 -	5, 0, 6, 0, 7, 0, 8, 0, 
 -	9, 0, 10, 0, 11, 0, 12, 0, 
 -	13, 0, 14, 0, 16, 28, 15, 16, 
 -	28, 15, 2, 16, 16, 17, 27, 29, 
 -	13, 43, 46, 16, 0, 18, 0, 19, 
 -	0, 21, 20, 20, 21, 20, 20, 22, 
 -	22, 23, 22, 22, 22, 22, 23, 22, 
 -	22, 22, 22, 24, 22, 22, 22, 22, 
 -	25, 22, 22, 16, 26, 26, 0, 16, 
 -	26, 26, 0, 16, 28, 27, 16, 0, 
 -	30, 0, 31, 0, 32, 0, 33, 0, 
 -	34, 0, 35, 0, 36, 0, 37, 0, 
 -	38, 0, 39, 0, 40, 0, 41, 0, 
 -	42, 0, 586, 0, 0, 0, 0, 0, 
 -	44, 45, 16, 45, 45, 43, 44, 44, 
 -	16, 45, 43, 45, 0, 46, 47, 46, 
 -	0, 51, 50, 49, 47, 50, 48, 0, 
 -	49, 47, 48, 0, 49, 48, 51, 50, 
 -	49, 47, 50, 48, 2, 51, 51, 17, 
 -	27, 29, 13, 43, 46, 51, 0, 53, 
 -	0, 54, 0, 55, 0, 56, 0, 57, 
 -	0, 58, 0, 59, 0, 11, 0, 61, 
 -	0, 62, 0, 63, 0, 64, 176, 0, 
 -	65, 0, 66, 0, 67, 0, 68, 0, 
 -	69, 0, 70, 0, 71, 0, 72, 0, 
 -	73, 0, 74, 0, 75, 0, 76, 0, 
 -	77, 0, 78, 0, 79, 0, 80, 0, 
 -	81, 0, 83, 82, 83, 82, 84, 83, 
 -	83, 16, 162, 95, 16, 83, 82, 85, 
 -	95, 97, 93, 105, 121, 93, 136, 83, 
 -	82, 86, 83, 82, 87, 83, 82, 88, 
 -	83, 82, 89, 83, 82, 90, 83, 82, 
 -	91, 83, 82, 92, 83, 82, 93, 83, 
 -	82, 94, 83, 82, 95, 83, 82, 83, 
 -	96, 82, 2, 16, 16, 17, 27, 29, 
 -	13, 43, 46, 16, 0, 98, 83, 82, 
 -	99, 83, 82, 100, 83, 82, 101, 83, 
 -	82, 102, 83, 82, 103, 83, 82, 104, 
 -	83, 82, 93, 83, 82, 106, 83, 82, 
 -	107, 83, 82, 108, 83, 82, 109, 83, 
 -	82, 110, 83, 82, 111, 83, 82, 112, 
 -	83, 82, 113, 83, 82, 83, 114, 82, 
 -	115, 83, 82, 116, 83, 82, 117, 83, 
 -	82, 118, 83, 82, 83, 119, 82, 120, 
 -	83, 82, 121, 83, 82, 122, 83, 82, 
 -	123, 83, 82, 124, 83, 82, 125, 83, 
 -	82, 126, 83, 82, 127, 83, 82, 128, 
 -	83, 82, 129, 83, 82, 130, 83, 82, 
 -	131, 83, 82, 132, 83, 82, 133, 83, 
 -	82, 134, 83, 82, 135, 83, 82, 83, 
 -	96, 82, 137, 83, 82, 138, 83, 82, 
 -	139, 83, 82, 140, 83, 82, 141, 83, 
 -	82, 142, 83, 82, 143, 83, 82, 144, 
 -	83, 82, 145, 83, 82, 146, 83, 82, 
 -	147, 83, 82, 148, 83, 82, 149, 83, 
 -	82, 150, 83, 82, 151, 83, 82, 152, 
 -	83, 82, 153, 83, 82, 154, 83, 82, 
 -	155, 83, 82, 156, 83, 82, 157, 83, 
 -	82, 158, 83, 82, 159, 83, 82, 160, 
 -	83, 82, 161, 83, 82, 135, 83, 82, 
 -	83, 163, 82, 83, 164, 82, 83, 165, 
 -	82, 83, 166, 82, 83, 167, 82, 83, 
 -	168, 82, 83, 169, 82, 83, 170, 82, 
 -	83, 171, 82, 83, 172, 82, 83, 173, 
 -	82, 83, 174, 82, 83, 175, 82, 83, 
 -	16, 82, 177, 0, 178, 0, 179, 0, 
 -	180, 0, 181, 0, 182, 0, 183, 0, 
 -	184, 0, 185, 0, 187, 186, 187, 186, 
 -	188, 187, 187, 16, 16, 187, 186, 189, 
 -	187, 186, 190, 187, 186, 191, 187, 186, 
 -	192, 187, 186, 193, 187, 186, 194, 187, 
 -	186, 195, 187, 186, 196, 187, 186, 197, 
 -	187, 186, 198, 187, 186, 199, 187, 186, 
 -	200, 187, 186, 201, 187, 186, 202, 187, 
 -	186, 203, 187, 186, 204, 187, 186, 205, 
 -	187, 186, 206, 187, 186, 207, 187, 186, 
 -	208, 187, 186, 209, 187, 186, 210, 187, 
 -	186, 211, 187, 186, 212, 187, 186, 213, 
 -	187, 186, 214, 187, 186, 215, 187, 186, 
 -	187, 96, 186, 217, 0, 218, 0, 219, 
 -	0, 220, 0, 221, 0, 222, 0, 223, 
 -	0, 224, 0, 225, 0, 226, 0, 227, 
 -	0, 228, 0, 229, 0, 230, 0, 231, 
 -	0, 232, 0, 233, 0, 234, 0, 235, 
 -	0, 236, 0, 237, 0, 238, 0, 239, 
 -	0, 240, 0, 241, 0, 242, 0, 243, 
 -	0, 244, 0, 245, 0, 246, 0, 247, 
 -	0, 249, 248, 249, 248, 250, 249, 249, 
 -	16, 311, 261, 16, 249, 248, 251, 261, 
 -	262, 259, 270, 259, 285, 249, 248, 252, 
 -	249, 248, 253, 249, 248, 254, 249, 248, 
 -	255, 249, 248, 256, 249, 248, 257, 249, 
 -	248, 258, 249, 248, 259, 249, 248, 260, 
 -	249, 248, 261, 249, 248, 249, 96, 248, 
 -	263, 249, 248, 264, 249, 248, 265, 249, 
 -	248, 266, 249, 248, 267, 249, 248, 268, 
 -	249, 248, 269, 249, 248, 259, 249, 248, 
 -	271, 249, 248, 272, 249, 248, 273, 249, 
 -	248, 274, 249, 248, 275, 249, 248, 276, 
 -	249, 248, 277, 249, 248, 278, 249, 248, 
 -	279, 249, 248, 280, 249, 248, 281, 249, 
 -	248, 282, 249, 248, 283, 249, 248, 284, 
 -	249, 248, 249, 96, 248, 286, 249, 248, 
 -	287, 249, 248, 288, 249, 248, 289, 249, 
 -	248, 290, 249, 248, 291, 249, 248, 292, 
 -	249, 248, 293, 249, 248, 294, 249, 248, 
 -	295, 249, 248, 296, 249, 248, 297, 249, 
 -	248, 298, 249, 248, 299, 249, 248, 300, 
 -	249, 248, 301, 249, 248, 302, 249, 248, 
 -	303, 249, 248, 304, 249, 248, 305, 249, 
 -	248, 306, 249, 248, 307, 249, 248, 308, 
 -	249, 248, 309, 249, 248, 310, 249, 248, 
 -	284, 249, 248, 249, 312, 248, 249, 313, 
 -	248, 249, 314, 248, 249, 315, 248, 249, 
 -	316, 248, 249, 317, 248, 249, 318, 248, 
 -	249, 319, 248, 249, 320, 248, 249, 321, 
 -	248, 249, 322, 248, 249, 323, 248, 249, 
 -	324, 248, 249, 16, 248, 326, 0, 327, 
 -	0, 328, 0, 329, 0, 330, 0, 331, 
 -	0, 332, 0, 333, 0, 334, 0, 335, 
 -	0, 336, 0, 337, 0, 338, 0, 339, 
 -	0, 340, 0, 342, 341, 342, 341, 343, 
 -	342, 342, 16, 440, 354, 16, 342, 341, 
 -	344, 354, 355, 352, 363, 384, 400, 352, 
 -	414, 342, 341, 345, 342, 341, 346, 342, 
 -	341, 347, 342, 341, 348, 342, 341, 349, 
 -	342, 341, 350, 342, 341, 351, 342, 341, 
 -	352, 342, 341, 353, 342, 341, 354, 342, 
 -	341, 342, 96, 341, 356, 342, 341, 357, 
 -	342, 341, 358, 342, 341, 359, 342, 341, 
 -	360, 342, 341, 361, 342, 341, 362, 342, 
 -	341, 352, 342, 341, 364, 342, 341, 365, 
 -	342, 341, 366, 342, 341, 367, 342, 341, 
 -	368, 342, 341, 369, 342, 341, 370, 342, 
 -	341, 371, 342, 341, 372, 342, 341, 373, 
 -	342, 341, 374, 342, 341, 375, 342, 341, 
 -	376, 342, 341, 377, 342, 341, 378, 342, 
 -	341, 379, 342, 341, 380, 342, 341, 381, 
 -	342, 341, 382, 342, 341, 383, 342, 341, 
 -	342, 96, 341, 385, 342, 341, 386, 342, 
 -	341, 387, 342, 341, 388, 342, 341, 389, 
 -	342, 341, 390, 342, 341, 391, 342, 341, 
 -	392, 342, 341, 342, 393, 341, 394, 342, 
 -	341, 395, 342, 341, 396, 342, 341, 397, 
 -	342, 341, 342, 398, 341, 399, 342, 341, 
 -	400, 342, 341, 401, 342, 341, 402, 342, 
 -	341, 403, 342, 341, 404, 342, 341, 405, 
 -	342, 341, 406, 342, 341, 407, 342, 341, 
 -	408, 342, 341, 409, 342, 341, 410, 342, 
 -	341, 411, 342, 341, 412, 342, 341, 413, 
 -	342, 341, 383, 342, 341, 415, 342, 341, 
 -	416, 342, 341, 417, 342, 341, 418, 342, 
 -	341, 419, 342, 341, 420, 342, 341, 421, 
 -	342, 341, 422, 342, 341, 423, 342, 341, 
 -	424, 342, 341, 425, 342, 341, 426, 342, 
 -	341, 427, 342, 341, 428, 342, 341, 429, 
 -	342, 341, 430, 342, 341, 431, 342, 341, 
 -	432, 342, 341, 433, 342, 341, 434, 342, 
 -	341, 435, 342, 341, 436, 342, 341, 437, 
 -	342, 341, 438, 342, 341, 439, 342, 341, 
 -	383, 342, 341, 342, 441, 341, 342, 442, 
 -	341, 342, 443, 341, 342, 444, 341, 342, 
 -	445, 341, 342, 446, 341, 342, 447, 341, 
 -	342, 448, 341, 342, 449, 341, 342, 450, 
 -	341, 342, 451, 341, 342, 452, 341, 342, 
 -	453, 341, 342, 16, 341, 455, 0, 456, 
 -	0, 457, 0, 458, 0, 459, 0, 460, 
 -	0, 461, 0, 462, 0, 463, 0, 464, 
 -	0, 465, 0, 466, 0, 467, 0, 468, 
 -	0, 469, 0, 470, 0, 471, 0, 472, 
 -	0, 473, 0, 474, 0, 475, 0, 476, 
 -	0, 477, 0, 478, 0, 479, 0, 480, 
 -	0, 481, 0, 483, 482, 483, 482, 484, 
 -	483, 483, 16, 570, 16, 483, 482, 485, 
 -	514, 530, 544, 483, 482, 486, 483, 482, 
 -	487, 483, 482, 488, 483, 482, 489, 506, 
 -	483, 482, 490, 483, 482, 491, 483, 482, 
 -	492, 483, 482, 493, 483, 482, 494, 483, 
 -	482, 495, 483, 482, 496, 483, 482, 497, 
 -	483, 482, 498, 483, 482, 499, 483, 482, 
 -	500, 483, 482, 501, 483, 482, 502, 483, 
 -	482, 503, 483, 482, 504, 483, 482, 505, 
 -	483, 482, 483, 96, 482, 507, 483, 482, 
 -	508, 483, 482, 509, 483, 482, 510, 483, 
 -	482, 511, 483, 482, 512, 483, 482, 513, 
 -	483, 482, 505, 483, 482, 515, 483, 482, 
 -	516, 483, 482, 517, 483, 482, 518, 483, 
 -	482, 519, 483, 482, 520, 483, 482, 521, 
 -	483, 482, 522, 483, 482, 483, 523, 482, 
 -	524, 483, 482, 525, 483, 482, 526, 483, 
 -	482, 527, 483, 482, 483, 528, 482, 529, 
 -	483, 482, 530, 483, 482, 531, 483, 482, 
 -	532, 483, 482, 533, 483, 482, 534, 483, 
 -	482, 535, 483, 482, 536, 483, 482, 537, 
 -	483, 482, 538, 483, 482, 539, 483, 482, 
 -	540, 483, 482, 541, 483, 482, 542, 483, 
 -	482, 543, 483, 482, 505, 483, 482, 545, 
 -	483, 482, 546, 483, 482, 547, 483, 482, 
 -	548, 483, 482, 549, 483, 482, 550, 483, 
 -	482, 551, 483, 482, 552, 483, 482, 553, 
 -	483, 482, 554, 483, 482, 555, 483, 482, 
 -	556, 483, 482, 557, 483, 482, 558, 483, 
 -	482, 559, 483, 482, 560, 483, 482, 561, 
 -	483, 482, 562, 483, 482, 563, 483, 482, 
 -	564, 483, 482, 565, 483, 482, 566, 483, 
 -	482, 567, 483, 482, 568, 483, 482, 569, 
 -	483, 482, 505, 483, 482, 483, 571, 482, 
 -	483, 572, 482, 483, 573, 482, 483, 574, 
 -	482, 483, 575, 482, 483, 576, 482, 483, 
 -	577, 482, 483, 578, 482, 483, 579, 482, 
 -	483, 580, 482, 483, 581, 482, 483, 582, 
 -	482, 483, 583, 482, 483, 16, 482, 585, 
 -	0, 16, 0, 0, 0
 -};
 -
 -static const unsigned char _lexer_trans_actions[] = {
 -	29, 0, 54, 0, 5, 1, 0, 29, 
 -	1, 35, 0, 43, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 149, 126, 57, 110, 
 -	23, 0, 29, 54, 0, 5, 1, 0, 
 -	29, 1, 35, 0, 43, 0, 43, 0, 
 -	43, 139, 48, 9, 106, 11, 0, 134, 
 -	45, 45, 45, 3, 122, 33, 33, 33, 
 -	0, 122, 33, 33, 33, 0, 122, 33, 
 -	0, 33, 0, 102, 7, 7, 43, 54, 
 -	0, 0, 43, 114, 25, 0, 54, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 43, 43, 43, 43, 
 -	0, 27, 118, 27, 27, 51, 27, 0, 
 -	54, 0, 1, 0, 43, 0, 0, 0, 
 -	43, 54, 37, 37, 87, 37, 37, 43, 
 -	0, 39, 0, 43, 0, 0, 54, 0, 
 -	0, 39, 0, 0, 96, 54, 0, 93, 
 -	90, 41, 96, 90, 99, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 144, 57, 54, 0, 84, 54, 
 -	0, 72, 33, 84, 72, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 54, 
 -	15, 0, 63, 130, 31, 60, 57, 31, 
 -	63, 57, 66, 31, 43, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 54, 0, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 54, 0, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 54, 
 -	15, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	15, 0, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 144, 57, 54, 0, 
 -	84, 54, 0, 81, 81, 0, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	54, 21, 0, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 144, 57, 54, 0, 84, 54, 0, 
 -	78, 33, 84, 78, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 54, 19, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 54, 19, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 19, 0, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 144, 57, 54, 0, 84, 
 -	54, 0, 75, 33, 84, 75, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 54, 17, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	54, 17, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 54, 0, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 54, 0, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 17, 0, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 144, 57, 54, 0, 84, 
 -	54, 0, 69, 33, 69, 0, 0, 0, 
 -	0, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 54, 13, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 54, 0, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 54, 0, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 13, 0, 0, 
 -	43, 0, 43, 0, 0
 -};
 -
 -static const unsigned char _lexer_eof_actions[] = {
 -	0, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43
 -};
 -
 -static const int lexer_start = 1;
 -static const int lexer_first_final = 586;
 -static const int lexer_error = 0;
 -
 -static const int lexer_en_main = 1;
 -
 -
 -#line 258 "ragel/i18n/bg.c.rl"
 -
 -static VALUE 
 -unindent(VALUE con, int start_col)
 -{
 -  VALUE re;
 -  /* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */
 -  char pat[32]; 
 -  snprintf(pat, 32, "^[\t ]{0,%d}", start_col); 
 -  re = rb_reg_regcomp(rb_str_new2(pat));
 -  rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2(""));
 -
 -  return Qnil;
 -
 -}
 -
 -static void 
 -store_kw_con(VALUE listener, const char * event_name, 
 -             const char * keyword_at, size_t keyword_length, 
 -             const char * at,         size_t length, 
 -             int current_line)
 -{
 -  VALUE con = Qnil, kw = Qnil;
 -  kw = ENCODED_STR_NEW(keyword_at, keyword_length);
 -  con = ENCODED_STR_NEW(at, length);
 -  rb_funcall(con, rb_intern("strip!"), 0);
 -  rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); 
 -}
 -
 -static void
 -store_multiline_kw_con(VALUE listener, const char * event_name,
 -                      const char * keyword_at, size_t keyword_length,
 -                      const char * at,         size_t length,
 -                      int current_line, int start_col)
 -{
 -  VALUE split;
 -  VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil;
 -
 -  kw = ENCODED_STR_NEW(keyword_at, keyword_length);
 -  con = ENCODED_STR_NEW(at, length);
 -
 -  unindent(con, start_col);
 -  
 -  split = rb_str_split(con, "\n");
 -
 -  name = rb_funcall(split, rb_intern("shift"), 0);
 -  desc = rb_ary_join(split, rb_str_new2( "\n" ));
 -
 -  if( name == Qnil ) 
 -  {
 -    name = rb_str_new2("");
 -  }
 -  if( rb_funcall(desc, rb_intern("size"), 0) == 0) 
 -  {
 -    desc = rb_str_new2("");
 -  }
 -  rb_funcall(name, rb_intern("strip!"), 0);
 -  rb_funcall(desc, rb_intern("rstrip!"), 0);
 -  rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); 
 -}
 -
 -static void 
 -store_attr(VALUE listener, const char * attr_type,
 -           const char * at, size_t length, 
 -           int line)
 -{
 -  VALUE val = ENCODED_STR_NEW(at, length);
 -  rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line));
 -}
 -static void 
 -store_docstring_content(VALUE listener, 
 -          int start_col, 
 -          const char *type_at, size_t type_length,
 -          const char *at, size_t length, 
 -          int current_line)
 -{
 -  VALUE re2;
 -  VALUE unescape_escaped_quotes;
 -  VALUE con = ENCODED_STR_NEW(at, length);
 -  VALUE con_type = ENCODED_STR_NEW(type_at, type_length);
 -
 -  unindent(con, start_col);
 -
 -  re2 = rb_reg_regcomp(rb_str_new2("\r\\Z"));
 -  unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\""));
 -  rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2(""));
 -  rb_funcall(con_type, rb_intern("strip!"), 0);
 -  rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\""));
 -  rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line));
 -}
 -static void 
 -raise_lexer_error(const char * at, int line)
 -{ 
 -  rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at);
 -}
 -
 -static void lexer_init(lexer_state *lexer) {
 -  lexer->content_start = 0;
 -  lexer->content_end = 0;
 -  lexer->content_len = 0;
 -  lexer->docstring_content_type_start = 0;
 -  lexer->docstring_content_type_end = 0;
 -  lexer->mark = 0;
 -  lexer->keyword_start = 0;
 -  lexer->keyword_end = 0;
 -  lexer->next_keyword_start = 0;
 -  lexer->line_number = 1;
 -  lexer->last_newline = 0;
 -  lexer->final_newline = 0;
 -  lexer->start_col = 0;
 -}
 -
 -static VALUE CLexer_alloc(VALUE klass)
 -{
 -  VALUE obj;
 -  lexer_state *lxr = ALLOC(lexer_state);
 -  lexer_init(lxr);
 -
 -  obj = Data_Wrap_Struct(klass, NULL, -1, lxr);
 -
 -  return obj;
 -}
 -
 -static VALUE CLexer_init(VALUE self, VALUE listener)
 -{
 -  lexer_state *lxr; 
 -  rb_iv_set(self, "@listener", listener);
 -  
 -  lxr = NULL;
 -  DATA_GET(self, lexer_state, lxr);
 -  lexer_init(lxr);
 -  
 -  return self;
 -}
 -
 -static VALUE CLexer_scan(VALUE self, VALUE input)
 -{
 -  VALUE input_copy;
 -  char *data;
 -  size_t len;
 -  VALUE listener = rb_iv_get(self, "@listener");
 -
 -  lexer_state *lexer;
 -  lexer = NULL;
 -  DATA_GET(self, lexer_state, lexer);
 -
 -  input_copy = rb_str_dup(input);
 -
 -  rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%"));
 -  data = RSTRING_PTR(input_copy);
 -  len = RSTRING_LEN(input_copy);
 -  
 -  if (len == 0) { 
 -    rb_raise(rb_eGherkinLexingError, "No content to lex.");
 -  } else {
 -
 -    const char *p, *pe, *eof;
 -    int cs = 0;
 -    
 -    VALUE current_row = Qnil;
 -
 -    p = data;
 -    pe = data + len;
 -    eof = pe;
 -    
 -    assert(*pe == '\0' && "pointer does not end on NULL");
 -    
 -    
 -#line 1259 "ext/gherkin_lexer_bg/gherkin_lexer_bg.c"
 -	{
 -	cs = lexer_start;
 -	}
 -
 -#line 425 "ragel/i18n/bg.c.rl"
 -    
 -#line 1266 "ext/gherkin_lexer_bg/gherkin_lexer_bg.c"
 -	{
 -	int _klen;
 -	unsigned int _trans;
 -	const char *_acts;
 -	unsigned int _nacts;
 -	const char *_keys;
 -
 -	if ( p == pe )
 -		goto _test_eof;
 -	if ( cs == 0 )
 -		goto _out;
 -_resume:
 -	_keys = _lexer_trans_keys + _lexer_key_offsets[cs];
 -	_trans = _lexer_index_offsets[cs];
 -
 -	_klen = _lexer_single_lengths[cs];
 -	if ( _klen > 0 ) {
 -		const char *_lower = _keys;
 -		const char *_mid;
 -		const char *_upper = _keys + _klen - 1;
 -		while (1) {
 -			if ( _upper < _lower )
 -				break;
 -
 -			_mid = _lower + ((_upper-_lower) >> 1);
 -			if ( (*p) < *_mid )
 -				_upper = _mid - 1;
 -			else if ( (*p) > *_mid )
 -				_lower = _mid + 1;
 -			else {
 -				_trans += (unsigned int)(_mid - _keys);
 -				goto _match;
 -			}
 -		}
 -		_keys += _klen;
 -		_trans += _klen;
 -	}
 -
 -	_klen = _lexer_range_lengths[cs];
 -	if ( _klen > 0 ) {
 -		const char *_lower = _keys;
 -		const char *_mid;
 -		const char *_upper = _keys + (_klen<<1) - 2;
 -		while (1) {
 -			if ( _upper < _lower )
 -				break;
 -
 -			_mid = _lower + (((_upper-_lower) >> 1) & ~1);
 -			if ( (*p) < _mid[0] )
 -				_upper = _mid - 2;
 -			else if ( (*p) > _mid[1] )
 -				_lower = _mid + 2;
 -			else {
 -				_trans += (unsigned int)((_mid - _keys)>>1);
 -				goto _match;
 -			}
 -		}
 -		_trans += _klen;
 -	}
 -
 -_match:
 -	cs = _lexer_trans_targs[_trans];
 -
 -	if ( _lexer_trans_actions[_trans] == 0 )
 -		goto _again;
 -
 -	_acts = _lexer_actions + _lexer_trans_actions[_trans];
 -	_nacts = (unsigned int) *_acts++;
 -	while ( _nacts-- > 0 )
 -	{
 -		switch ( *_acts++ )
 -		{
 -	case 0:
 -#line 83 "ragel/i18n/bg.c.rl"
 -	{
 -		MARK(content_start, p);
 -    lexer->current_line = lexer->line_number;
 -    lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2;
 -  }
 -	break;
 -	case 1:
 -#line 89 "ragel/i18n/bg.c.rl"
 -	{
 -    MARK(content_start, p);
 -  }
 -	break;
 -	case 2:
 -#line 93 "ragel/i18n/bg.c.rl"
 -	{
 -    lexer->current_line = lexer->line_number;
 -    lexer->start_col = p - data - lexer->last_newline;
 -  }
 -	break;
 -	case 3:
 -#line 98 "ragel/i18n/bg.c.rl"
 -	{
 -    int len = LEN(content_start, PTR_TO(final_newline));
 -    int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end));
 -
 -    if (len < 0) len = 0;
 -    if (type_len < 0) len = 0;
 -
 -    store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line);
 -  }
 -	break;
 -	case 4:
 -#line 108 "ragel/i18n/bg.c.rl"
 -	{ 
 -    MARK(docstring_content_type_start, p);
 -  }
 -	break;
 -	case 5:
 -#line 112 "ragel/i18n/bg.c.rl"
 -	{ 
 -    MARK(docstring_content_type_end, p);
 -  }
 -	break;
 -	case 6:
 -#line 116 "ragel/i18n/bg.c.rl"
 -	{
 -    STORE_KW_END_CON(feature);
 -  }
 -	break;
 -	case 7:
 -#line 120 "ragel/i18n/bg.c.rl"
 -	{
 -    STORE_KW_END_CON(background);
 -  }
 -	break;
 -	case 8:
 -#line 124 "ragel/i18n/bg.c.rl"
 -	{
 -    STORE_KW_END_CON(scenario);
 -  }
 -	break;
 -	case 9:
 -#line 128 "ragel/i18n/bg.c.rl"
 -	{
 -    STORE_KW_END_CON(scenario_outline);
 -  }
 -	break;
 -	case 10:
 -#line 132 "ragel/i18n/bg.c.rl"
 -	{
 -    STORE_KW_END_CON(examples);
 -  }
 -	break;
 -	case 11:
 -#line 136 "ragel/i18n/bg.c.rl"
 -	{
 -    store_kw_con(listener, "step",
 -      PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
 -      PTR_TO(content_start), LEN(content_start, p), 
 -      lexer->current_line);
 -  }
 -	break;
 -	case 12:
 -#line 143 "ragel/i18n/bg.c.rl"
 -	{
 -    STORE_ATTR(comment);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 13:
 -#line 148 "ragel/i18n/bg.c.rl"
 -	{
 -    STORE_ATTR(tag);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 14:
 -#line 153 "ragel/i18n/bg.c.rl"
 -	{
 -    lexer->line_number += 1;
 -    MARK(final_newline, p);
 -  }
 -	break;
 -	case 15:
 -#line 158 "ragel/i18n/bg.c.rl"
 -	{
 -    MARK(last_newline, p + 1);
 -  }
 -	break;
 -	case 16:
 -#line 162 "ragel/i18n/bg.c.rl"
 -	{
 -    if (lexer->mark == 0) {
 -      MARK(mark, p);
 -    }
 -  }
 -	break;
 -	case 17:
 -#line 168 "ragel/i18n/bg.c.rl"
 -	{
 -    MARK(keyword_end, p);
 -    MARK(keyword_start, PTR_TO(mark));
 -    MARK(content_start, p + 1);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 18:
 -#line 175 "ragel/i18n/bg.c.rl"
 -	{
 -    MARK(content_end, p);
 -  }
 -	break;
 -	case 19:
 -#line 179 "ragel/i18n/bg.c.rl"
 -	{
 -    p = p - 1;
 -    lexer->current_line = lexer->line_number;
 -    current_row = rb_ary_new();
 -  }
 -	break;
 -	case 20:
 -#line 185 "ragel/i18n/bg.c.rl"
 -	{
 -		MARK(content_start, p);
 -  }
 -	break;
 -	case 21:
 -#line 189 "ragel/i18n/bg.c.rl"
 -	{
 -    VALUE re_pipe, re_newline, re_backslash;
 -    VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
 -    rb_funcall(con, rb_intern("strip!"), 0);
 -    re_pipe      = rb_reg_regcomp(rb_str_new2("\\\\\\|"));
 -    re_newline   = rb_reg_regcomp(rb_str_new2("\\\\n"));
 -    re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_pipe,      rb_str_new2("|"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_newline,   rb_str_new2("\n"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\"));
 -
 -    rb_ary_push(current_row, con);
 -  }
 -	break;
 -	case 22:
 -#line 203 "ragel/i18n/bg.c.rl"
 -	{
 -    rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
 -  }
 -	break;
 -	case 23:
 -#line 207 "ragel/i18n/bg.c.rl"
 -	{
 -    int line;
 -    if (cs < lexer_first_final) {
 -      size_t count = 0;
 -      VALUE newstr_val;
 -      char *newstr;
 -      int newstr_count = 0;        
 -      size_t len;
 -      const char *buff;
 -      if (lexer->last_newline != 0) {
 -        len = LEN(last_newline, eof);
 -        buff = PTR_TO(last_newline);
 -      } else {
 -        len = strlen(data);
 -        buff = data;
 -      }
 -
 -      /* Allocate as a ruby string so that it gets cleaned up by GC */
 -      newstr_val = rb_str_new(buff, len);
 -      newstr = RSTRING_PTR(newstr_val);
 -
 -
 -      for (count = 0; count < len; count++) {
 -        if(buff[count] == 10) {
 -          newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
 -          break;
 -        } else {
 -          if (buff[count] == '%') {
 -            newstr[newstr_count++] = buff[count];
 -            newstr[newstr_count] = buff[count];
 -          } else {
 -            newstr[newstr_count] = buff[count];
 -          }
 -        }
 -        newstr_count++;
 -      }
 -
 -      line = lexer->line_number;
 -      lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
 -      raise_lexer_error(newstr, line);
 -    } else {
 -      rb_funcall(listener, rb_intern("eof"), 0);
 -    }
 -  }
 -	break;
 -#line 1556 "ext/gherkin_lexer_bg/gherkin_lexer_bg.c"
 -		}
 -	}
 -
 -_again:
 -	if ( cs == 0 )
 -		goto _out;
 -	if ( ++p != pe )
 -		goto _resume;
 -	_test_eof: {}
 -	if ( p == eof )
 -	{
 -	const char *__acts = _lexer_actions + _lexer_eof_actions[cs];
 -	unsigned int __nacts = (unsigned int) *__acts++;
 -	while ( __nacts-- > 0 ) {
 -		switch ( *__acts++ ) {
 -	case 23:
 -#line 207 "ragel/i18n/bg.c.rl"
 -	{
 -    int line;
 -    if (cs < lexer_first_final) {
 -      size_t count = 0;
 -      VALUE newstr_val;
 -      char *newstr;
 -      int newstr_count = 0;        
 -      size_t len;
 -      const char *buff;
 -      if (lexer->last_newline != 0) {
 -        len = LEN(last_newline, eof);
 -        buff = PTR_TO(last_newline);
 -      } else {
 -        len = strlen(data);
 -        buff = data;
 -      }
 -
 -      /* Allocate as a ruby string so that it gets cleaned up by GC */
 -      newstr_val = rb_str_new(buff, len);
 -      newstr = RSTRING_PTR(newstr_val);
 -
 -
 -      for (count = 0; count < len; count++) {
 -        if(buff[count] == 10) {
 -          newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
 -          break;
 -        } else {
 -          if (buff[count] == '%') {
 -            newstr[newstr_count++] = buff[count];
 -            newstr[newstr_count] = buff[count];
 -          } else {
 -            newstr[newstr_count] = buff[count];
 -          }
 -        }
 -        newstr_count++;
 -      }
 -
 -      line = lexer->line_number;
 -      lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
 -      raise_lexer_error(newstr, line);
 -    } else {
 -      rb_funcall(listener, rb_intern("eof"), 0);
 -    }
 -  }
 -	break;
 -#line 1619 "ext/gherkin_lexer_bg/gherkin_lexer_bg.c"
 -		}
 -	}
 -	}
 -
 -	_out: {}
 -	}
 -
 -#line 426 "ragel/i18n/bg.c.rl"
 -
 -    assert(p <= pe && "data overflow after parsing execute");
 -    assert(lexer->content_start <= len && "content starts after data end");
 -    assert(lexer->mark < len && "mark is after data end");
 -    
 -    /* Reset lexer by re-initializing the whole thing */
 -    lexer_init(lexer);
 -
 -    if (cs == lexer_error) {
 -      rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails.");
 -    } else {
 -      return Qtrue;
 -    }
 -  }
 -}
 -
 -void Init_gherkin_lexer_bg()
 -{
 -  mGherkin = rb_define_module("Gherkin");
 -  mGherkinLexer = rb_define_module_under(mGherkin, "Lexer");
 -  rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError"));
 -
 -  mCLexer = rb_define_module_under(mGherkin, "CLexer");
 -  cI18nLexer = rb_define_class_under(mCLexer, "Bg", rb_cObject);
 -  rb_define_alloc_func(cI18nLexer, CLexer_alloc);
 -  rb_define_method(cI18nLexer, "initialize", CLexer_init, 1);
 -  rb_define_method(cI18nLexer, "scan", CLexer_scan, 1);
 -}
 -
diff --cc ext/gherkin_lexer_bm/extconf.rb
index 886fec7,886fec7..0000000
deleted file mode 100644,100644
--- a/ext/gherkin_lexer_bm/extconf.rb
+++ /dev/null
@@@ -1,6 -1,6 +1,0 @@@
--require 'mkmf'
--CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags']
--$CFLAGS << ' -O0 -Wall' if CONFIG['CC'] =~ /gcc|clang/
--dir_config("gherkin_lexer_bm")
--have_library("c", "main")
--create_makefile("gherkin_lexer_bm")
diff --cc ext/gherkin_lexer_bm/gherkin_lexer_bm.c
index 230ef00,4027548..0000000
deleted file mode 100644,100644
--- a/ext/gherkin_lexer_bm/gherkin_lexer_bm.c
+++ /dev/null
@@@ -1,1337 -1,1516 +1,0 @@@
--
- #line 1 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/bm.c.rl"
- #include <assert.h>
- #include <ruby.h>
- 
- #if defined(_WIN32)
- #include <stddef.h>
- #endif
- 
- #ifdef HAVE_RUBY_RE_H
- #include <ruby/re.h>
- #else
- #include <re.h>
- #endif
- 
- #ifdef HAVE_RUBY_ENCODING_H
- #include <ruby/encoding.h>
- #define ENCODED_STR_NEW(ptr, len) \
-     rb_enc_str_new(ptr, len, rb_utf8_encoding())
- #else
- #define ENCODED_STR_NEW(ptr, len) \
-     rb_str_new(ptr, len)
- #endif
- 
- #ifndef RSTRING_PTR
- #define RSTRING_PTR(s) (RSTRING(s)->ptr)
- #endif
- 
- #ifndef RSTRING_LEN
- #define RSTRING_LEN(s) (RSTRING(s)->len)
- #endif
- 
- #define DATA_GET(FROM, TYPE, NAME) \
-   Data_Get_Struct(FROM, TYPE, NAME); \
-   if (NAME == NULL) { \
-     rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \
-   }
-  
- typedef struct lexer_state {
-   int content_len;
-   int line_number;
-   int current_line;
-   int start_col;
-   size_t mark;
-   size_t keyword_start;
-   size_t keyword_end;
-   size_t next_keyword_start;
-   size_t content_start;
-   size_t content_end;
-   size_t docstring_content_type_start;
-   size_t docstring_content_type_end;
-   size_t query_start;
-   size_t last_newline;
-   size_t final_newline;
- } lexer_state;
- 
- static VALUE mGherkin;
- static VALUE mGherkinLexer;
- static VALUE mCLexer;
- static VALUE cI18nLexer;
- static VALUE rb_eGherkinLexingError;
- 
- #define LEN(AT, P) (P - data - lexer->AT)
- #define MARK(M, P) (lexer->M = (P) - data)
- #define PTR_TO(P) (data + lexer->P)
- 
- #define STORE_KW_END_CON(EVENT) \
-   store_multiline_kw_con(listener, # EVENT, \
-     PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \
-     PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \
-     lexer->current_line, lexer->start_col); \
-     if (lexer->content_end != 0) { \
-       p = PTR_TO(content_end - 1); \
-     } \
-     lexer->content_end = 0
- 
- #define STORE_ATTR(ATTR) \
-     store_attr(listener, # ATTR, \
-       PTR_TO(content_start), LEN(content_start, p), \
-       lexer->line_number)
- 
- 
- #line 254 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/bm.c.rl"
- 
- 
- /** Data **/
- 
- #line 89 "ext/gherkin_lexer_bm/gherkin_lexer_bm.c"
- static const char _lexer_actions[] = {
- 	0, 1, 0, 1, 1, 1, 2, 1, 
- 	3, 1, 4, 1, 5, 1, 6, 1, 
- 	7, 1, 8, 1, 9, 1, 10, 1, 
- 	11, 1, 12, 1, 13, 1, 16, 1, 
- 	17, 1, 18, 1, 19, 1, 20, 1, 
- 	21, 1, 22, 1, 23, 2, 1, 18, 
- 	2, 4, 5, 2, 13, 0, 2, 14, 
- 	15, 2, 17, 0, 2, 17, 2, 2, 
- 	17, 16, 2, 17, 19, 2, 18, 6, 
- 	2, 18, 7, 2, 18, 8, 2, 18, 
- 	9, 2, 18, 10, 2, 18, 16, 2, 
- 	20, 21, 2, 22, 0, 2, 22, 2, 
- 	2, 22, 16, 2, 22, 19, 3, 3, 
- 	14, 15, 3, 5, 14, 15, 3, 11, 
- 	14, 15, 3, 12, 14, 15, 3, 13, 
- 	14, 15, 3, 14, 15, 18, 3, 17, 
- 	0, 11, 3, 17, 14, 15, 4, 1, 
- 	14, 15, 18, 4, 4, 5, 14, 15, 
- 	4, 17, 0, 14, 15, 5, 17, 0, 
- 	11, 14, 15
- };
- 
- static const short _lexer_key_offsets[] = {
- 	0, 0, 21, 22, 23, 43, 44, 45, 
- 	47, 49, 54, 59, 64, 69, 73, 77, 
- 	79, 80, 81, 82, 83, 84, 85, 86, 
- 	87, 88, 89, 90, 91, 92, 93, 94, 
- 	95, 97, 99, 104, 111, 116, 117, 118, 
- 	119, 120, 121, 122, 123, 124, 125, 126, 
- 	127, 128, 129, 130, 131, 132, 133, 140, 
- 	142, 144, 146, 148, 150, 152, 172, 173, 
- 	174, 175, 176, 177, 178, 179, 180, 181, 
- 	182, 194, 196, 198, 200, 202, 204, 206, 
- 	208, 210, 212, 214, 216, 218, 220, 222, 
- 	224, 226, 228, 230, 232, 234, 236, 238, 
- 	240, 242, 244, 246, 248, 250, 252, 254, 
- 	256, 258, 260, 262, 264, 266, 268, 270, 
- 	272, 274, 276, 278, 280, 282, 284, 286, 
- 	288, 290, 292, 294, 296, 298, 300, 302, 
- 	304, 306, 308, 309, 310, 311, 312, 313, 
- 	314, 315, 316, 317, 318, 319, 320, 321, 
- 	322, 323, 324, 325, 326, 327, 328, 329, 
- 	345, 347, 349, 351, 353, 355, 357, 359, 
- 	361, 363, 365, 367, 369, 371, 373, 375, 
- 	377, 379, 381, 383, 385, 387, 389, 391, 
- 	393, 395, 397, 399, 401, 403, 405, 407, 
- 	409, 411, 413, 415, 417, 419, 421, 423, 
- 	425, 427, 429, 431, 433, 435, 437, 439, 
- 	441, 443, 445, 447, 449, 451, 453, 455, 
- 	457, 459, 461, 463, 465, 466, 467, 468, 
- 	469, 470, 471, 472, 473, 474, 475, 476, 
- 	477, 478, 479, 480, 481, 482, 483, 484, 
- 	485, 486, 487, 502, 504, 506, 508, 510, 
- 	512, 514, 516, 518, 520, 522, 524, 526, 
- 	528, 530, 532, 534, 536, 538, 540, 542, 
- 	544, 546, 548, 550, 552, 554, 556, 558, 
- 	560, 562, 564, 566, 568, 570, 572, 574, 
- 	576, 578, 580, 582, 584, 586, 588, 590, 
- 	592, 594, 596, 597, 598, 599, 600, 601, 
- 	602, 603, 604, 605, 622, 624, 626, 628, 
- 	630, 632, 634, 636, 638, 640, 642, 644, 
- 	646, 648, 650, 652, 654, 656, 658, 660, 
- 	662, 664, 666, 668, 670, 672, 674, 676, 
- 	678, 680, 682, 684, 686, 688, 690, 692, 
- 	694, 696, 698, 700, 702, 704, 706, 708, 
- 	710, 712, 714, 716, 718, 720, 722, 724, 
- 	726, 728, 730, 732, 734, 736, 738, 740, 
- 	742, 744, 746, 748, 750, 752, 754, 756, 
- 	758, 760, 762, 764, 766, 768, 769, 770, 
- 	771, 772, 776, 782, 785, 787, 793, 813
- };
- 
- static const char _lexer_trans_keys[] = {
- 	-17, 10, 32, 34, 35, 37, 42, 64, 
- 	65, 66, 67, 68, 70, 75, 76, 77, 
- 	83, 84, 124, 9, 13, -69, -65, 10, 
- 	32, 34, 35, 37, 42, 64, 65, 66, 
- 	67, 68, 70, 75, 76, 77, 83, 84, 
- 	124, 9, 13, 34, 34, 10, 13, 10, 
- 	13, 10, 32, 34, 9, 13, 10, 32, 
- 	34, 9, 13, 10, 32, 34, 9, 13, 
- 	10, 32, 34, 9, 13, 10, 32, 9, 
- 	13, 10, 32, 9, 13, 10, 13, 10, 
- 	95, 70, 69, 65, 84, 85, 82, 69, 
- 	95, 69, 78, 68, 95, 37, 32, 10, 
- 	13, 10, 13, 13, 32, 64, 9, 10, 
- 	9, 10, 13, 32, 64, 11, 12, 10, 
- 	32, 64, 9, 13, 112, 97, 98, 105, 
- 	108, 97, 97, 103, 105, 111, 110, 116, 
- 	111, 104, 58, 10, 10, 10, 32, 35, 
- 	70, 124, 9, 13, 10, 117, 10, 110, 
- 	10, 103, 10, 115, 10, 105, 10, 58, 
- 	10, 32, 34, 35, 37, 42, 64, 65, 
- 	66, 67, 68, 70, 75, 76, 77, 83, 
- 	84, 124, 9, 13, 97, 110, 117, 110, 
- 	103, 115, 105, 58, 10, 10, 10, 32, 
- 	35, 37, 64, 67, 70, 76, 77, 83, 
- 	9, 13, 10, 95, 10, 70, 10, 69, 
- 	10, 65, 10, 84, 10, 85, 10, 82, 
- 	10, 69, 10, 95, 10, 69, 10, 78, 
- 	10, 68, 10, 95, 10, 37, 10, 111, 
- 	10, 110, 10, 116, 10, 111, 10, 104, 
- 	10, 58, 10, 117, 10, 110, 10, 103, 
- 	10, 115, 10, 105, 10, 97, 10, 116, 
- 	10, 97, 10, 114, 10, 32, 10, 66, 
- 	10, 101, 10, 108, 10, 97, 10, 107, 
- 	10, 97, 10, 110, 10, 103, 10, 101, 
- 	10, 110, 10, 103, 10, 103, 10, 97, 
- 	10, 114, 10, 105, 10, 115, 10, 107, 
- 	10, 97, 10, 110, 10, 32, 10, 83, 
- 	10, 101, 10, 110, 10, 97, 10, 114, 
- 	10, 105, 10, 111, 101, 109, 117, 100, 
- 	105, 97, 116, 97, 114, 32, 66, 101, 
- 	108, 97, 107, 97, 110, 103, 58, 10, 
- 	10, 10, 32, 35, 37, 42, 64, 65, 
- 	66, 68, 70, 75, 77, 83, 84, 9, 
- 	13, 10, 95, 10, 70, 10, 69, 10, 
- 	65, 10, 84, 10, 85, 10, 82, 10, 
- 	69, 10, 95, 10, 69, 10, 78, 10, 
- 	68, 10, 95, 10, 37, 10, 32, 10, 
- 	112, 10, 97, 10, 98, 10, 105, 10, 
- 	108, 10, 97, 10, 97, 10, 103, 10, 
- 	105, 10, 97, 10, 110, 10, 117, 10, 
- 	110, 10, 103, 10, 115, 10, 105, 10, 
- 	58, 10, 101, 10, 109, 10, 117, 10, 
- 	100, 10, 105, 10, 101, 10, 110, 10, 
- 	103, 10, 103, 10, 97, 10, 114, 10, 
- 	105, 10, 115, 10, 107, 10, 97, 10, 
- 	110, 10, 32, 10, 83, 10, 101, 10, 
- 	110, 10, 97, 10, 114, 10, 105, 10, 
- 	111, 10, 101, 10, 116, 10, 97, 10, 
- 	112, 101, 110, 103, 103, 97, 114, 105, 
- 	115, 107, 97, 110, 32, 83, 101, 110, 
- 	97, 114, 105, 111, 58, 10, 10, 10, 
- 	32, 35, 37, 42, 64, 65, 66, 68, 
- 	70, 75, 83, 84, 9, 13, 10, 95, 
- 	10, 70, 10, 69, 10, 65, 10, 84, 
- 	10, 85, 10, 82, 10, 69, 10, 95, 
- 	10, 69, 10, 78, 10, 68, 10, 95, 
- 	10, 37, 10, 32, 10, 112, 10, 97, 
- 	10, 98, 10, 105, 10, 108, 10, 97, 
- 	10, 97, 10, 103, 10, 105, 10, 97, 
- 	10, 110, 10, 117, 10, 110, 10, 103, 
- 	10, 115, 10, 105, 10, 58, 10, 101, 
- 	10, 109, 10, 117, 10, 100, 10, 105, 
- 	10, 101, 10, 110, 10, 97, 10, 114, 
- 	10, 105, 10, 111, 10, 101, 10, 116, 
- 	10, 97, 10, 112, 101, 110, 97, 114, 
- 	105, 111, 58, 10, 10, 10, 32, 35, 
- 	37, 42, 64, 65, 66, 68, 70, 75, 
- 	76, 77, 83, 84, 9, 13, 10, 95, 
- 	10, 70, 10, 69, 10, 65, 10, 84, 
- 	10, 85, 10, 82, 10, 69, 10, 95, 
- 	10, 69, 10, 78, 10, 68, 10, 95, 
- 	10, 37, 10, 32, 10, 112, 10, 97, 
- 	10, 98, 10, 105, 10, 108, 10, 97, 
- 	10, 97, 10, 103, 10, 105, 10, 97, 
- 	10, 110, 10, 117, 10, 110, 10, 103, 
- 	10, 115, 10, 105, 10, 58, 10, 101, 
- 	10, 109, 10, 117, 10, 100, 10, 105, 
- 	10, 97, 10, 116, 10, 97, 10, 114, 
- 	10, 32, 10, 66, 10, 101, 10, 108, 
- 	10, 97, 10, 107, 10, 97, 10, 110, 
- 	10, 103, 10, 101, 10, 110, 10, 103, 
- 	10, 103, 10, 97, 10, 114, 10, 105, 
- 	10, 115, 10, 107, 10, 97, 10, 110, 
- 	10, 32, 10, 83, 10, 101, 10, 110, 
- 	10, 97, 10, 114, 10, 105, 10, 111, 
- 	10, 101, 10, 116, 10, 97, 10, 112, 
- 	101, 116, 97, 112, 32, 124, 9, 13, 
- 	10, 32, 92, 124, 9, 13, 10, 92, 
- 	124, 10, 92, 10, 32, 92, 124, 9, 
- 	13, 10, 32, 34, 35, 37, 42, 64, 
- 	65, 66, 67, 68, 70, 75, 76, 77, 
- 	83, 84, 124, 9, 13, 0
- };
- 
- static const char _lexer_single_lengths[] = {
- 	0, 19, 1, 1, 18, 1, 1, 2, 
- 	2, 3, 3, 3, 3, 2, 2, 2, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	2, 2, 3, 5, 3, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 5, 2, 
- 	2, 2, 2, 2, 2, 18, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	10, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 14, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 13, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 15, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 1, 1, 1, 
- 	1, 2, 4, 3, 2, 4, 18, 0
- };
- 
- static const char _lexer_range_lengths[] = {
- 	0, 1, 0, 0, 1, 0, 0, 0, 
- 	0, 1, 1, 1, 1, 1, 1, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 1, 1, 1, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 1, 0, 
- 	0, 0, 0, 0, 0, 1, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	1, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 1, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 1, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 1, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 1, 1, 0, 0, 1, 1, 0
- };
- 
- static const short _lexer_index_offsets[] = {
- 	0, 0, 21, 23, 25, 45, 47, 49, 
- 	52, 55, 60, 65, 70, 75, 79, 83, 
- 	86, 88, 90, 92, 94, 96, 98, 100, 
- 	102, 104, 106, 108, 110, 112, 114, 116, 
- 	118, 121, 124, 129, 136, 141, 143, 145, 
- 	147, 149, 151, 153, 155, 157, 159, 161, 
- 	163, 165, 167, 169, 171, 173, 175, 182, 
- 	185, 188, 191, 194, 197, 200, 220, 222, 
- 	224, 226, 228, 230, 232, 234, 236, 238, 
- 	240, 252, 255, 258, 261, 264, 267, 270, 
- 	273, 276, 279, 282, 285, 288, 291, 294, 
- 	297, 300, 303, 306, 309, 312, 315, 318, 
- 	321, 324, 327, 330, 333, 336, 339, 342, 
- 	345, 348, 351, 354, 357, 360, 363, 366, 
- 	369, 372, 375, 378, 381, 384, 387, 390, 
- 	393, 396, 399, 402, 405, 408, 411, 414, 
- 	417, 420, 423, 425, 427, 429, 431, 433, 
- 	435, 437, 439, 441, 443, 445, 447, 449, 
- 	451, 453, 455, 457, 459, 461, 463, 465, 
- 	481, 484, 487, 490, 493, 496, 499, 502, 
- 	505, 508, 511, 514, 517, 520, 523, 526, 
- 	529, 532, 535, 538, 541, 544, 547, 550, 
- 	553, 556, 559, 562, 565, 568, 571, 574, 
- 	577, 580, 583, 586, 589, 592, 595, 598, 
- 	601, 604, 607, 610, 613, 616, 619, 622, 
- 	625, 628, 631, 634, 637, 640, 643, 646, 
- 	649, 652, 655, 658, 661, 663, 665, 667, 
- 	669, 671, 673, 675, 677, 679, 681, 683, 
- 	685, 687, 689, 691, 693, 695, 697, 699, 
- 	701, 703, 705, 720, 723, 726, 729, 732, 
- 	735, 738, 741, 744, 747, 750, 753, 756, 
- 	759, 762, 765, 768, 771, 774, 777, 780, 
- 	783, 786, 789, 792, 795, 798, 801, 804, 
- 	807, 810, 813, 816, 819, 822, 825, 828, 
- 	831, 834, 837, 840, 843, 846, 849, 852, 
- 	855, 858, 861, 863, 865, 867, 869, 871, 
- 	873, 875, 877, 879, 896, 899, 902, 905, 
- 	908, 911, 914, 917, 920, 923, 926, 929, 
- 	932, 935, 938, 941, 944, 947, 950, 953, 
- 	956, 959, 962, 965, 968, 971, 974, 977, 
- 	980, 983, 986, 989, 992, 995, 998, 1001, 
- 	1004, 1007, 1010, 1013, 1016, 1019, 1022, 1025, 
- 	1028, 1031, 1034, 1037, 1040, 1043, 1046, 1049, 
- 	1052, 1055, 1058, 1061, 1064, 1067, 1070, 1073, 
- 	1076, 1079, 1082, 1085, 1088, 1091, 1094, 1097, 
- 	1100, 1103, 1106, 1109, 1112, 1115, 1117, 1119, 
- 	1121, 1123, 1127, 1133, 1137, 1140, 1146, 1166
- };
- 
- static const short _lexer_trans_targs[] = {
- 	2, 4, 4, 5, 15, 17, 31, 34, 
- 	37, 43, 46, 62, 64, 130, 135, 212, 
- 	282, 365, 369, 4, 0, 3, 0, 4, 
- 	0, 4, 4, 5, 15, 17, 31, 34, 
- 	37, 43, 46, 62, 64, 130, 135, 212, 
- 	282, 365, 369, 4, 0, 6, 0, 7, 
- 	0, 9, 8, 8, 9, 8, 8, 10, 
- 	10, 11, 10, 10, 10, 10, 11, 10, 
- 	10, 10, 10, 12, 10, 10, 10, 10, 
- 	13, 10, 10, 4, 14, 14, 0, 4, 
- 	14, 14, 0, 4, 16, 15, 4, 0, 
- 	18, 0, 19, 0, 20, 0, 21, 0, 
- 	22, 0, 23, 0, 24, 0, 25, 0, 
- 	26, 0, 27, 0, 28, 0, 29, 0, 
- 	30, 0, 375, 0, 32, 0, 4, 16, 
- 	33, 4, 16, 33, 0, 0, 0, 0, 
- 	35, 36, 4, 36, 36, 34, 35, 35, 
- 	4, 36, 34, 36, 0, 38, 0, 39, 
- 	0, 40, 0, 41, 0, 42, 0, 31, 
- 	0, 44, 0, 45, 0, 31, 0, 47, 
- 	0, 48, 0, 49, 0, 50, 0, 51, 
- 	0, 52, 0, 54, 53, 54, 53, 54, 
- 	54, 4, 55, 4, 54, 53, 54, 56, 
- 	53, 54, 57, 53, 54, 58, 53, 54, 
- 	59, 53, 54, 60, 53, 54, 61, 53, 
- 	4, 4, 5, 15, 17, 31, 34, 37, 
- 	43, 46, 62, 64, 130, 135, 212, 282, 
- 	365, 369, 4, 0, 63, 0, 31, 0, 
- 	65, 0, 66, 0, 67, 0, 68, 0, 
- 	69, 0, 70, 0, 72, 71, 72, 71, 
- 	72, 72, 4, 73, 4, 87, 93, 98, 
- 	111, 124, 72, 71, 72, 74, 71, 72, 
- 	75, 71, 72, 76, 71, 72, 77, 71, 
- 	72, 78, 71, 72, 79, 71, 72, 80, 
- 	71, 72, 81, 71, 72, 82, 71, 72, 
- 	83, 71, 72, 84, 71, 72, 85, 71, 
- 	72, 86, 71, 72, 4, 71, 72, 88, 
- 	71, 72, 89, 71, 72, 90, 71, 72, 
- 	91, 71, 72, 92, 71, 72, 61, 71, 
- 	72, 94, 71, 72, 95, 71, 72, 96, 
- 	71, 72, 97, 71, 72, 92, 71, 72, 
- 	99, 71, 72, 100, 71, 72, 101, 71, 
- 	72, 102, 71, 72, 103, 71, 72, 104, 
- 	71, 72, 105, 71, 72, 106, 71, 72, 
- 	107, 71, 72, 108, 71, 72, 109, 71, 
- 	72, 110, 71, 72, 92, 71, 72, 112, 
- 	71, 72, 113, 71, 72, 114, 71, 72, 
- 	115, 71, 72, 116, 71, 72, 117, 71, 
- 	72, 118, 71, 72, 119, 71, 72, 120, 
- 	71, 72, 121, 71, 72, 122, 71, 72, 
- 	123, 71, 72, 124, 71, 72, 125, 71, 
- 	72, 126, 71, 72, 127, 71, 72, 128, 
- 	71, 72, 129, 71, 72, 92, 71, 131, 
- 	0, 132, 0, 133, 0, 134, 0, 62, 
- 	0, 136, 0, 137, 0, 138, 0, 139, 
- 	0, 140, 0, 141, 0, 142, 0, 143, 
- 	0, 144, 0, 145, 0, 146, 0, 147, 
- 	0, 148, 0, 149, 0, 151, 150, 151, 
- 	150, 151, 151, 4, 152, 166, 4, 167, 
- 	173, 176, 178, 184, 189, 202, 208, 151, 
- 	150, 151, 153, 150, 151, 154, 150, 151, 
- 	155, 150, 151, 156, 150, 151, 157, 150, 
- 	151, 158, 150, 151, 159, 150, 151, 160, 
- 	150, 151, 161, 150, 151, 162, 150, 151, 
- 	163, 150, 151, 164, 150, 151, 165, 150, 
- 	151, 4, 150, 151, 61, 150, 151, 168, 
- 	150, 151, 169, 150, 151, 170, 150, 151, 
- 	171, 150, 151, 172, 150, 151, 166, 150, 
- 	151, 174, 150, 151, 175, 150, 151, 166, 
- 	150, 151, 177, 150, 151, 166, 150, 151, 
- 	179, 150, 151, 180, 150, 151, 181, 150, 
- 	151, 182, 150, 151, 183, 150, 151, 61, 
- 	150, 151, 185, 150, 151, 186, 150, 151, 
- 	187, 150, 151, 188, 150, 151, 176, 150, 
- 	151, 190, 150, 151, 191, 150, 151, 192, 
- 	150, 151, 193, 150, 151, 194, 150, 151, 
- 	195, 150, 151, 196, 150, 151, 197, 150, 
- 	151, 198, 150, 151, 199, 150, 151, 200, 
- 	150, 151, 201, 150, 151, 202, 150, 151, 
- 	203, 150, 151, 204, 150, 151, 205, 150, 
- 	151, 206, 150, 151, 207, 150, 151, 183, 
- 	150, 151, 209, 150, 151, 210, 150, 151, 
- 	211, 150, 151, 175, 150, 213, 0, 214, 
- 	0, 215, 0, 216, 0, 217, 0, 218, 
- 	0, 219, 0, 220, 0, 221, 0, 222, 
- 	0, 223, 0, 224, 0, 225, 0, 226, 
- 	0, 227, 0, 228, 0, 229, 0, 230, 
- 	0, 231, 0, 232, 0, 234, 233, 234, 
- 	233, 234, 234, 4, 235, 249, 4, 250, 
- 	256, 259, 261, 267, 272, 278, 234, 233, 
- 	234, 236, 233, 234, 237, 233, 234, 238, 
- 	233, 234, 239, 233, 234, 240, 233, 234, 
- 	241, 233, 234, 242, 233, 234, 243, 233, 
- 	234, 244, 233, 234, 245, 233, 234, 246, 
- 	233, 234, 247, 233, 234, 248, 233, 234, 
- 	4, 233, 234, 61, 233, 234, 251, 233, 
- 	234, 252, 233, 234, 253, 233, 234, 254, 
- 	233, 234, 255, 233, 234, 249, 233, 234, 
- 	257, 233, 234, 258, 233, 234, 249, 233, 
- 	234, 260, 233, 234, 249, 233, 234, 262, 
- 	233, 234, 263, 233, 234, 264, 233, 234, 
- 	265, 233, 234, 266, 233, 234, 61, 233, 
- 	234, 268, 233, 234, 269, 233, 234, 270, 
- 	233, 234, 271, 233, 234, 259, 233, 234, 
- 	273, 233, 234, 274, 233, 234, 275, 233, 
- 	234, 276, 233, 234, 277, 233, 234, 266, 
- 	233, 234, 279, 233, 234, 280, 233, 234, 
- 	281, 233, 234, 258, 233, 283, 0, 284, 
- 	0, 285, 0, 286, 0, 287, 0, 288, 
- 	0, 289, 0, 291, 290, 291, 290, 291, 
- 	291, 4, 292, 306, 4, 307, 313, 316, 
- 	318, 324, 329, 342, 355, 361, 291, 290, 
- 	291, 293, 290, 291, 294, 290, 291, 295, 
- 	290, 291, 296, 290, 291, 297, 290, 291, 
- 	298, 290, 291, 299, 290, 291, 300, 290, 
- 	291, 301, 290, 291, 302, 290, 291, 303, 
- 	290, 291, 304, 290, 291, 305, 290, 291, 
- 	4, 290, 291, 61, 290, 291, 308, 290, 
- 	291, 309, 290, 291, 310, 290, 291, 311, 
- 	290, 291, 312, 290, 291, 306, 290, 291, 
- 	314, 290, 291, 315, 290, 291, 306, 290, 
- 	291, 317, 290, 291, 306, 290, 291, 319, 
- 	290, 291, 320, 290, 291, 321, 290, 291, 
- 	322, 290, 291, 323, 290, 291, 61, 290, 
- 	291, 325, 290, 291, 326, 290, 291, 327, 
- 	290, 291, 328, 290, 291, 316, 290, 291, 
- 	330, 290, 291, 331, 290, 291, 332, 290, 
- 	291, 333, 290, 291, 334, 290, 291, 335, 
- 	290, 291, 336, 290, 291, 337, 290, 291, 
- 	338, 290, 291, 339, 290, 291, 340, 290, 
- 	291, 341, 290, 291, 323, 290, 291, 343, 
- 	290, 291, 344, 290, 291, 345, 290, 291, 
- 	346, 290, 291, 347, 290, 291, 348, 290, 
- 	291, 349, 290, 291, 350, 290, 291, 351, 
- 	290, 291, 352, 290, 291, 353, 290, 291, 
- 	354, 290, 291, 355, 290, 291, 356, 290, 
- 	291, 357, 290, 291, 358, 290, 291, 359, 
- 	290, 291, 360, 290, 291, 323, 290, 291, 
- 	362, 290, 291, 363, 290, 291, 364, 290, 
- 	291, 315, 290, 366, 0, 367, 0, 368, 
- 	0, 45, 0, 369, 370, 369, 0, 374, 
- 	373, 372, 370, 373, 371, 0, 372, 370, 
- 	371, 0, 372, 371, 374, 373, 372, 370, 
- 	373, 371, 374, 374, 5, 15, 17, 31, 
- 	34, 37, 43, 46, 62, 64, 130, 135, 
- 	212, 282, 365, 369, 374, 0, 0, 0
- };
- 
- static const unsigned char _lexer_trans_actions[] = {
- 	0, 54, 0, 5, 1, 0, 29, 1, 
- 	29, 29, 29, 29, 29, 29, 29, 29, 
- 	29, 29, 35, 0, 43, 0, 43, 0, 
- 	43, 54, 0, 5, 1, 0, 29, 1, 
- 	29, 29, 29, 29, 29, 29, 29, 29, 
- 	29, 29, 35, 0, 43, 0, 43, 0, 
- 	43, 139, 48, 9, 106, 11, 0, 134, 
- 	45, 45, 45, 3, 122, 33, 33, 33, 
- 	0, 122, 33, 33, 33, 0, 122, 33, 
- 	0, 33, 0, 102, 7, 7, 43, 54, 
- 	0, 0, 43, 114, 25, 0, 54, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 149, 126, 
- 	57, 110, 23, 0, 43, 43, 43, 43, 
- 	0, 27, 118, 27, 27, 51, 27, 0, 
- 	54, 0, 1, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 144, 57, 54, 0, 54, 
- 	0, 81, 84, 81, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 21, 0, 
- 	130, 31, 60, 57, 31, 63, 57, 63, 
- 	63, 63, 63, 63, 63, 63, 63, 63, 
- 	63, 66, 31, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 144, 57, 54, 0, 
- 	54, 0, 69, 33, 69, 84, 84, 84, 
- 	84, 84, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 13, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 13, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 144, 57, 54, 
- 	0, 54, 0, 72, 33, 84, 72, 84, 
- 	84, 84, 84, 84, 84, 84, 84, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 15, 0, 54, 15, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 15, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 144, 57, 54, 
- 	0, 54, 0, 78, 33, 84, 78, 84, 
- 	84, 84, 84, 84, 84, 84, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	19, 0, 54, 19, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 19, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 144, 57, 54, 0, 54, 
- 	0, 75, 33, 84, 75, 84, 84, 84, 
- 	84, 84, 84, 84, 84, 84, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	17, 0, 54, 17, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 17, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 0, 0, 43, 54, 
- 	37, 37, 87, 37, 37, 43, 0, 39, 
- 	0, 43, 0, 0, 54, 0, 0, 39, 
- 	0, 0, 54, 0, 93, 90, 41, 96, 
- 	90, 96, 96, 96, 96, 96, 96, 96, 
- 	96, 96, 96, 99, 0, 43, 0, 0
- };
- 
- static const unsigned char _lexer_eof_actions[] = {
- 	0, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43
- };
- 
- static const int lexer_start = 1;
- static const int lexer_first_final = 375;
- static const int lexer_error = 0;
- 
- static const int lexer_en_main = 1;
- 
- 
- #line 258 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/bm.c.rl"
- 
- static VALUE 
- unindent(VALUE con, int start_col)
- {
-   VALUE re;
-   // Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters
-   char pat[32]; 
-   snprintf(pat, 32, "^[\t ]{0,%d}", start_col); 
-   re = rb_reg_regcomp(rb_str_new2(pat));
-   rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2(""));
- 
-   return Qnil;
- 
- }
- 
- static void 
- store_kw_con(VALUE listener, const char * event_name, 
-              const char * keyword_at, size_t keyword_length, 
-              const char * at,         size_t length, 
-              int current_line)
- {
-   VALUE con = Qnil, kw = Qnil;
-   kw = ENCODED_STR_NEW(keyword_at, keyword_length);
-   con = ENCODED_STR_NEW(at, length);
-   rb_funcall(con, rb_intern("strip!"), 0);
-   rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); 
- }
- 
- static void
- store_multiline_kw_con(VALUE listener, const char * event_name,
-                       const char * keyword_at, size_t keyword_length,
-                       const char * at,         size_t length,
-                       int current_line, int start_col)
- {
-   VALUE split;
-   VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil;
- 
-   kw = ENCODED_STR_NEW(keyword_at, keyword_length);
-   con = ENCODED_STR_NEW(at, length);
- 
-   unindent(con, start_col);
-   
-   split = rb_str_split(con, "\n");
- 
-   name = rb_funcall(split, rb_intern("shift"), 0);
-   desc = rb_ary_join(split, rb_str_new2( "\n" ));
- 
-   if( name == Qnil ) 
-   {
-     name = rb_str_new2("");
-   }
-   if( rb_funcall(desc, rb_intern("size"), 0) == 0) 
-   {
-     desc = rb_str_new2("");
-   }
-   rb_funcall(name, rb_intern("strip!"), 0);
-   rb_funcall(desc, rb_intern("rstrip!"), 0);
-   rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); 
- }
- 
- static void 
- store_attr(VALUE listener, const char * attr_type,
-            const char * at, size_t length, 
-            int line)
- {
-   VALUE val = ENCODED_STR_NEW(at, length);
-   rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line));
- }
- static void 
- store_docstring_content(VALUE listener, 
-           int start_col, 
-           const char *type_at, size_t type_length,
-           const char *at, size_t length, 
-           int current_line)
- {
-   VALUE re2;
-   VALUE unescape_escaped_quotes;
-   VALUE con = ENCODED_STR_NEW(at, length);
-   VALUE con_type = ENCODED_STR_NEW(type_at, type_length);
- 
-   unindent(con, start_col);
- 
-   re2 = rb_reg_regcomp(rb_str_new2("\r\\Z"));
-   unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\""));
-   rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2(""));
-   rb_funcall(con_type, rb_intern("strip!"), 0);
-   rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\""));
-   rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line));
- }
- static void 
- raise_lexer_error(const char * at, int line)
- { 
-   rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at);
- }
- 
- static void lexer_init(lexer_state *lexer) {
-   lexer->content_start = 0;
-   lexer->content_end = 0;
-   lexer->content_len = 0;
-   lexer->docstring_content_type_start = 0;
-   lexer->docstring_content_type_end = 0;
-   lexer->mark = 0;
-   lexer->keyword_start = 0;
-   lexer->keyword_end = 0;
-   lexer->next_keyword_start = 0;
-   lexer->line_number = 1;
-   lexer->last_newline = 0;
-   lexer->final_newline = 0;
-   lexer->start_col = 0;
- }
- 
- static VALUE CLexer_alloc(VALUE klass)
- {
-   VALUE obj;
-   lexer_state *lxr = ALLOC(lexer_state);
-   lexer_init(lxr);
- 
-   obj = Data_Wrap_Struct(klass, NULL, -1, lxr);
- 
-   return obj;
- }
- 
- static VALUE CLexer_init(VALUE self, VALUE listener)
- {
-   lexer_state *lxr; 
-   rb_iv_set(self, "@listener", listener);
-   
-   lxr = NULL;
-   DATA_GET(self, lexer_state, lxr);
-   lexer_init(lxr);
-   
-   return self;
- }
- 
- static VALUE CLexer_scan(VALUE self, VALUE input)
- {
-   VALUE input_copy;
-   char *data;
-   size_t len;
-   VALUE listener = rb_iv_get(self, "@listener");
- 
-   lexer_state *lexer;
-   lexer = NULL;
-   DATA_GET(self, lexer_state, lexer);
- 
-   input_copy = rb_str_dup(input);
- 
-   rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%"));
-   data = RSTRING_PTR(input_copy);
-   len = RSTRING_LEN(input_copy);
-   
-   if (len == 0) { 
-     rb_raise(rb_eGherkinLexingError, "No content to lex.");
-   } else {
- 
-     const char *p, *pe, *eof;
-     int cs = 0;
-     
-     VALUE current_row = Qnil;
- 
-     p = data;
-     pe = data + len;
-     eof = pe;
-     
-     assert(*pe == '\0' && "pointer does not end on NULL");
-     
-     
- #line 941 "ext/gherkin_lexer_bm/gherkin_lexer_bm.c"
- 	{
- 	cs = lexer_start;
- 	}
- 
- #line 425 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/bm.c.rl"
-     
- #line 948 "ext/gherkin_lexer_bm/gherkin_lexer_bm.c"
- 	{
- 	int _klen;
- 	unsigned int _trans;
- 	const char *_acts;
- 	unsigned int _nacts;
- 	const char *_keys;
- 
- 	if ( p == pe )
- 		goto _test_eof;
- 	if ( cs == 0 )
- 		goto _out;
- _resume:
- 	_keys = _lexer_trans_keys + _lexer_key_offsets[cs];
- 	_trans = _lexer_index_offsets[cs];
- 
- 	_klen = _lexer_single_lengths[cs];
- 	if ( _klen > 0 ) {
- 		const char *_lower = _keys;
- 		const char *_mid;
- 		const char *_upper = _keys + _klen - 1;
- 		while (1) {
- 			if ( _upper < _lower )
- 				break;
- 
- 			_mid = _lower + ((_upper-_lower) >> 1);
- 			if ( (*p) < *_mid )
- 				_upper = _mid - 1;
- 			else if ( (*p) > *_mid )
- 				_lower = _mid + 1;
- 			else {
- 				_trans += (_mid - _keys);
- 				goto _match;
- 			}
- 		}
- 		_keys += _klen;
- 		_trans += _klen;
- 	}
- 
- 	_klen = _lexer_range_lengths[cs];
- 	if ( _klen > 0 ) {
- 		const char *_lower = _keys;
- 		const char *_mid;
- 		const char *_upper = _keys + (_klen<<1) - 2;
- 		while (1) {
- 			if ( _upper < _lower )
- 				break;
- 
- 			_mid = _lower + (((_upper-_lower) >> 1) & ~1);
- 			if ( (*p) < _mid[0] )
- 				_upper = _mid - 2;
- 			else if ( (*p) > _mid[1] )
- 				_lower = _mid + 2;
- 			else {
- 				_trans += ((_mid - _keys)>>1);
- 				goto _match;
- 			}
- 		}
- 		_trans += _klen;
- 	}
- 
- _match:
- 	cs = _lexer_trans_targs[_trans];
- 
- 	if ( _lexer_trans_actions[_trans] == 0 )
- 		goto _again;
- 
- 	_acts = _lexer_actions + _lexer_trans_actions[_trans];
- 	_nacts = (unsigned int) *_acts++;
- 	while ( _nacts-- > 0 )
- 	{
- 		switch ( *_acts++ )
- 		{
- 	case 0:
- #line 83 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/bm.c.rl"
- 	{
- 		MARK(content_start, p);
-     lexer->current_line = lexer->line_number;
-     lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2;
-   }
- 	break;
- 	case 1:
- #line 89 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/bm.c.rl"
- 	{
-     MARK(content_start, p);
-   }
- 	break;
- 	case 2:
- #line 93 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/bm.c.rl"
- 	{
-     lexer->current_line = lexer->line_number;
-     lexer->start_col = p - data - lexer->last_newline;
-   }
- 	break;
- 	case 3:
- #line 98 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/bm.c.rl"
- 	{
-     int len = LEN(content_start, PTR_TO(final_newline));
-     int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end));
- 
-     if (len < 0) len = 0;
-     if (type_len < 0) len = 0;
- 
-     store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line);
-   }
- 	break;
- 	case 4:
- #line 108 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/bm.c.rl"
- 	{ 
-     MARK(docstring_content_type_start, p);
-   }
- 	break;
- 	case 5:
- #line 112 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/bm.c.rl"
- 	{ 
-     MARK(docstring_content_type_end, p);
-   }
- 	break;
- 	case 6:
- #line 116 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/bm.c.rl"
- 	{
-     STORE_KW_END_CON(feature);
-   }
- 	break;
- 	case 7:
- #line 120 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/bm.c.rl"
- 	{
-     STORE_KW_END_CON(background);
-   }
- 	break;
- 	case 8:
- #line 124 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/bm.c.rl"
- 	{
-     STORE_KW_END_CON(scenario);
-   }
- 	break;
- 	case 9:
- #line 128 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/bm.c.rl"
- 	{
-     STORE_KW_END_CON(scenario_outline);
-   }
- 	break;
- 	case 10:
- #line 132 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/bm.c.rl"
- 	{
-     STORE_KW_END_CON(examples);
-   }
- 	break;
- 	case 11:
- #line 136 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/bm.c.rl"
- 	{
-     store_kw_con(listener, "step",
-       PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-       PTR_TO(content_start), LEN(content_start, p), 
-       lexer->current_line);
-   }
- 	break;
- 	case 12:
- #line 143 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/bm.c.rl"
- 	{
-     STORE_ATTR(comment);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 13:
- #line 148 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/bm.c.rl"
- 	{
-     STORE_ATTR(tag);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 14:
- #line 153 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/bm.c.rl"
- 	{
-     lexer->line_number += 1;
-     MARK(final_newline, p);
-   }
- 	break;
- 	case 15:
- #line 158 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/bm.c.rl"
- 	{
-     MARK(last_newline, p + 1);
-   }
- 	break;
- 	case 16:
- #line 162 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/bm.c.rl"
- 	{
-     if (lexer->mark == 0) {
-       MARK(mark, p);
-     }
-   }
- 	break;
- 	case 17:
- #line 168 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/bm.c.rl"
- 	{
-     MARK(keyword_end, p);
-     MARK(keyword_start, PTR_TO(mark));
-     MARK(content_start, p + 1);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 18:
- #line 175 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/bm.c.rl"
- 	{
-     MARK(content_end, p);
-   }
- 	break;
- 	case 19:
- #line 179 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/bm.c.rl"
- 	{
-     p = p - 1;
-     lexer->current_line = lexer->line_number;
-     current_row = rb_ary_new();
-   }
- 	break;
- 	case 20:
- #line 185 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/bm.c.rl"
- 	{
- 		MARK(content_start, p);
-   }
- 	break;
- 	case 21:
- #line 189 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/bm.c.rl"
- 	{
-     VALUE re_pipe, re_newline, re_backslash;
-     VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
-     rb_funcall(con, rb_intern("strip!"), 0);
-     re_pipe      = rb_reg_regcomp(rb_str_new2("\\\\\\|"));
-     re_newline   = rb_reg_regcomp(rb_str_new2("\\\\n"));
-     re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_pipe,      rb_str_new2("|"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_newline,   rb_str_new2("\n"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\"));
- 
-     rb_ary_push(current_row, con);
-   }
- 	break;
- 	case 22:
- #line 203 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/bm.c.rl"
- 	{
-     rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
-   }
- 	break;
- 	case 23:
- #line 207 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/bm.c.rl"
- 	{
-     int line;
-     if (cs < lexer_first_final) {
-       size_t count = 0;
-       VALUE newstr_val;
-       char *newstr;
-       int newstr_count = 0;        
-       size_t len;
-       const char *buff;
-       if (lexer->last_newline != 0) {
-         len = LEN(last_newline, eof);
-         buff = PTR_TO(last_newline);
-       } else {
-         len = strlen(data);
-         buff = data;
-       }
- 
-       // Allocate as a ruby string so that it gets cleaned up by GC
-       newstr_val = rb_str_new(buff, len);
-       newstr = RSTRING_PTR(newstr_val);
- 
- 
-       for (count = 0; count < len; count++) {
-         if(buff[count] == 10) {
-           newstr[newstr_count] = '\0'; // terminate new string at first newline found
-           break;
-         } else {
-           if (buff[count] == '%') {
-             newstr[newstr_count++] = buff[count];
-             newstr[newstr_count] = buff[count];
-           } else {
-             newstr[newstr_count] = buff[count];
-           }
-         }
-         newstr_count++;
-       }
- 
-       line = lexer->line_number;
-       lexer_init(lexer); // Re-initialize so we can scan again with the same lexer
-       raise_lexer_error(newstr, line);
-     } else {
-       rb_funcall(listener, rb_intern("eof"), 0);
-     }
-   }
- 	break;
- #line 1238 "ext/gherkin_lexer_bm/gherkin_lexer_bm.c"
- 		}
- 	}
- 
- _again:
- 	if ( cs == 0 )
- 		goto _out;
- 	if ( ++p != pe )
- 		goto _resume;
- 	_test_eof: {}
- 	if ( p == eof )
- 	{
- 	const char *__acts = _lexer_actions + _lexer_eof_actions[cs];
- 	unsigned int __nacts = (unsigned int) *__acts++;
- 	while ( __nacts-- > 0 ) {
- 		switch ( *__acts++ ) {
- 	case 23:
- #line 207 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/bm.c.rl"
- 	{
-     int line;
-     if (cs < lexer_first_final) {
-       size_t count = 0;
-       VALUE newstr_val;
-       char *newstr;
-       int newstr_count = 0;        
-       size_t len;
-       const char *buff;
-       if (lexer->last_newline != 0) {
-         len = LEN(last_newline, eof);
-         buff = PTR_TO(last_newline);
-       } else {
-         len = strlen(data);
-         buff = data;
-       }
- 
-       // Allocate as a ruby string so that it gets cleaned up by GC
-       newstr_val = rb_str_new(buff, len);
-       newstr = RSTRING_PTR(newstr_val);
- 
- 
-       for (count = 0; count < len; count++) {
-         if(buff[count] == 10) {
-           newstr[newstr_count] = '\0'; // terminate new string at first newline found
-           break;
-         } else {
-           if (buff[count] == '%') {
-             newstr[newstr_count++] = buff[count];
-             newstr[newstr_count] = buff[count];
-           } else {
-             newstr[newstr_count] = buff[count];
-           }
-         }
-         newstr_count++;
-       }
- 
-       line = lexer->line_number;
-       lexer_init(lexer); // Re-initialize so we can scan again with the same lexer
-       raise_lexer_error(newstr, line);
-     } else {
-       rb_funcall(listener, rb_intern("eof"), 0);
-     }
-   }
- 	break;
- #line 1301 "ext/gherkin_lexer_bm/gherkin_lexer_bm.c"
- 		}
- 	}
- 	}
- 
- 	_out: {}
- 	}
- 
- #line 426 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/bm.c.rl"
- 
-     assert(p <= pe && "data overflow after parsing execute");
-     assert(lexer->content_start <= len && "content starts after data end");
-     assert(lexer->mark < len && "mark is after data end");
-     
-     // Reset lexer by re-initializing the whole thing
-     lexer_init(lexer);
- 
-     if (cs == lexer_error) {
-       rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails.");
-     } else {
-       return Qtrue;
-     }
-   }
- }
- 
- void Init_gherkin_lexer_bm()
- {
-   mGherkin = rb_define_module("Gherkin");
-   mGherkinLexer = rb_define_module_under(mGherkin, "Lexer");
-   rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError"));
- 
-   mCLexer = rb_define_module_under(mGherkin, "CLexer");
-   cI18nLexer = rb_define_class_under(mCLexer, "Bm", rb_cObject);
-   rb_define_alloc_func(cI18nLexer, CLexer_alloc);
-   rb_define_method(cI18nLexer, "initialize", CLexer_init, 1);
-   rb_define_method(cI18nLexer, "scan", CLexer_scan, 1);
- }
- 
 -#line 1 "ragel/i18n/bm.c.rl"
 -#include <assert.h>
 -#include <ruby.h>
 -
 -#if defined(_WIN32)
 -#include <stddef.h>
 -#endif
 -
 -#ifdef HAVE_RUBY_RE_H
 -#include <ruby/re.h>
 -#else
 -#include <re.h>
 -#endif
 -
 -#ifdef HAVE_RUBY_ENCODING_H
 -#include <ruby/encoding.h>
 -#define ENCODED_STR_NEW(ptr, len) \
 -    rb_enc_str_new(ptr, len, rb_utf8_encoding())
 -#else
 -#define ENCODED_STR_NEW(ptr, len) \
 -    rb_str_new(ptr, len)
 -#endif
 -
 -#ifndef RSTRING_PTR
 -#define RSTRING_PTR(s) (RSTRING(s)->ptr)
 -#endif
 -
 -#ifndef RSTRING_LEN
 -#define RSTRING_LEN(s) (RSTRING(s)->len)
 -#endif
 -
 -#define DATA_GET(FROM, TYPE, NAME) \
 -  Data_Get_Struct(FROM, TYPE, NAME); \
 -  if (NAME == NULL) { \
 -    rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \
 -  }
 - 
 -typedef struct lexer_state {
 -  int content_len;
 -  int line_number;
 -  int current_line;
 -  int start_col;
 -  size_t mark;
 -  size_t keyword_start;
 -  size_t keyword_end;
 -  size_t next_keyword_start;
 -  size_t content_start;
 -  size_t content_end;
 -  size_t docstring_content_type_start;
 -  size_t docstring_content_type_end;
 -  size_t query_start;
 -  size_t last_newline;
 -  size_t final_newline;
 -} lexer_state;
 -
 -static VALUE mGherkin;
 -static VALUE mGherkinLexer;
 -static VALUE mCLexer;
 -static VALUE cI18nLexer;
 -static VALUE rb_eGherkinLexingError;
 -
 -#define LEN(AT, P) (P - data - lexer->AT)
 -#define MARK(M, P) (lexer->M = (P) - data)
 -#define PTR_TO(P) (data + lexer->P)
 -
 -#define STORE_KW_END_CON(EVENT) \
 -  store_multiline_kw_con(listener, # EVENT, \
 -    PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \
 -    PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \
 -    lexer->current_line, lexer->start_col); \
 -    if (lexer->content_end != 0) { \
 -      p = PTR_TO(content_end - 1); \
 -    } \
 -    lexer->content_end = 0
 -
 -#define STORE_ATTR(ATTR) \
 -    store_attr(listener, # ATTR, \
 -      PTR_TO(content_start), LEN(content_start, p), \
 -      lexer->line_number)
 -
 -
 -#line 254 "ragel/i18n/bm.c.rl"
 -
 -
 -/** Data **/
 -
 -#line 89 "ext/gherkin_lexer_bm/gherkin_lexer_bm.c"
 -static const char _lexer_actions[] = {
 -	0, 1, 0, 1, 1, 1, 2, 1, 
 -	3, 1, 4, 1, 5, 1, 6, 1, 
 -	7, 1, 8, 1, 9, 1, 10, 1, 
 -	11, 1, 12, 1, 13, 1, 16, 1, 
 -	17, 1, 18, 1, 19, 1, 20, 1, 
 -	21, 1, 22, 1, 23, 2, 1, 18, 
 -	2, 4, 5, 2, 13, 0, 2, 14, 
 -	15, 2, 17, 0, 2, 17, 2, 2, 
 -	17, 16, 2, 17, 19, 2, 18, 6, 
 -	2, 18, 7, 2, 18, 8, 2, 18, 
 -	9, 2, 18, 10, 2, 18, 16, 2, 
 -	20, 21, 2, 22, 0, 2, 22, 2, 
 -	2, 22, 16, 2, 22, 19, 3, 3, 
 -	14, 15, 3, 5, 14, 15, 3, 11, 
 -	14, 15, 3, 12, 14, 15, 3, 13, 
 -	14, 15, 3, 14, 15, 18, 3, 17, 
 -	0, 11, 3, 17, 14, 15, 4, 1, 
 -	14, 15, 18, 4, 4, 5, 14, 15, 
 -	4, 17, 0, 14, 15, 5, 17, 0, 
 -	11, 14, 15
 -};
 -
 -static const short _lexer_key_offsets[] = {
 -	0, 0, 21, 22, 23, 43, 44, 45, 
 -	47, 49, 54, 59, 64, 69, 73, 77, 
 -	79, 80, 81, 82, 83, 84, 85, 86, 
 -	87, 88, 89, 90, 91, 92, 93, 94, 
 -	95, 97, 99, 104, 111, 116, 117, 118, 
 -	119, 120, 121, 122, 123, 124, 125, 126, 
 -	127, 128, 129, 130, 131, 132, 133, 140, 
 -	142, 144, 146, 148, 150, 152, 172, 174, 
 -	175, 176, 177, 178, 179, 180, 181, 182, 
 -	183, 184, 185, 186, 200, 202, 204, 206, 
 -	208, 210, 212, 214, 216, 218, 220, 222, 
 -	224, 226, 228, 230, 232, 234, 236, 238, 
 -	240, 242, 244, 246, 248, 250, 252, 254, 
 -	256, 258, 260, 262, 264, 266, 268, 270, 
 -	272, 274, 276, 278, 280, 282, 284, 286, 
 -	288, 290, 292, 294, 296, 298, 300, 302, 
 -	304, 306, 308, 310, 312, 314, 316, 318, 
 -	320, 322, 324, 326, 329, 331, 333, 335, 
 -	337, 339, 341, 343, 345, 347, 349, 351, 
 -	354, 355, 357, 358, 359, 360, 361, 362, 
 -	363, 364, 381, 383, 385, 387, 389, 391, 
 -	393, 395, 397, 399, 401, 403, 405, 407, 
 -	409, 411, 413, 415, 417, 419, 421, 423, 
 -	425, 427, 429, 432, 434, 436, 438, 440, 
 -	442, 444, 446, 448, 450, 452, 454, 457, 
 -	459, 461, 463, 465, 467, 469, 471, 473, 
 -	475, 477, 479, 481, 483, 485, 487, 489, 
 -	491, 493, 495, 497, 499, 502, 504, 506, 
 -	508, 510, 512, 514, 516, 518, 520, 522, 
 -	524, 526, 528, 530, 532, 534, 536, 538, 
 -	540, 543, 545, 547, 549, 552, 554, 557, 
 -	559, 561, 563, 565, 567, 569, 572, 574, 
 -	576, 578, 579, 580, 581, 582, 583, 584, 
 -	585, 586, 587, 588, 589, 590, 591, 592, 
 -	593, 594, 595, 596, 597, 598, 614, 616, 
 -	618, 620, 622, 624, 626, 628, 630, 632, 
 -	634, 636, 638, 640, 642, 644, 646, 648, 
 -	650, 652, 654, 656, 658, 660, 662, 665, 
 -	667, 669, 671, 673, 675, 677, 679, 681, 
 -	683, 685, 687, 690, 692, 694, 696, 698, 
 -	700, 702, 704, 706, 709, 711, 713, 715, 
 -	717, 719, 721, 723, 725, 727, 729, 731, 
 -	733, 735, 737, 739, 741, 743, 745, 747, 
 -	750, 752, 754, 756, 759, 761, 764, 766, 
 -	768, 770, 772, 774, 776, 779, 781, 783, 
 -	785, 787, 788, 789, 790, 791, 792, 793, 
 -	794, 795, 796, 797, 798, 799, 800, 801, 
 -	802, 803, 804, 805, 806, 807, 808, 809, 
 -	825, 827, 829, 831, 833, 835, 837, 839, 
 -	841, 843, 845, 847, 849, 851, 853, 855, 
 -	857, 859, 861, 863, 865, 867, 869, 871, 
 -	873, 876, 878, 880, 882, 884, 886, 888, 
 -	890, 892, 894, 896, 898, 901, 903, 905, 
 -	907, 909, 911, 913, 915, 917, 919, 921, 
 -	924, 926, 928, 930, 932, 934, 936, 938, 
 -	940, 943, 945, 947, 949, 951, 952, 953, 
 -	954, 955, 956, 957, 958, 959, 960, 962, 
 -	963, 965, 966, 967, 968, 969, 970, 971, 
 -	973, 974, 975, 976, 977, 978, 979, 981, 
 -	982, 983, 984, 985, 986, 990, 996, 999, 
 -	1001, 1007, 1027
 -};
 -
 -static const char _lexer_trans_keys[] = {
 -	-17, 10, 32, 34, 35, 37, 42, 64, 
 -	65, 66, 67, 68, 70, 75, 76, 77, 
 -	83, 84, 124, 9, 13, -69, -65, 10, 
 -	32, 34, 35, 37, 42, 64, 65, 66, 
 -	67, 68, 70, 75, 76, 77, 83, 84, 
 -	124, 9, 13, 34, 34, 10, 13, 10, 
 -	13, 10, 32, 34, 9, 13, 10, 32, 
 -	34, 9, 13, 10, 32, 34, 9, 13, 
 -	10, 32, 34, 9, 13, 10, 32, 9, 
 -	13, 10, 32, 9, 13, 10, 13, 10, 
 -	95, 70, 69, 65, 84, 85, 82, 69, 
 -	95, 69, 78, 68, 95, 37, 32, 10, 
 -	13, 10, 13, 13, 32, 64, 9, 10, 
 -	9, 10, 13, 32, 64, 11, 12, 10, 
 -	32, 64, 9, 13, 112, 97, 98, 105, 
 -	108, 97, 97, 103, 105, 111, 110, 116, 
 -	111, 104, 58, 10, 10, 10, 32, 35, 
 -	70, 124, 9, 13, 10, 117, 10, 110, 
 -	10, 103, 10, 115, 10, 105, 10, 58, 
 -	10, 32, 34, 35, 37, 42, 64, 65, 
 -	66, 67, 68, 70, 75, 76, 77, 83, 
 -	84, 124, 9, 13, 97, 105, 110, 98, 
 -	101, 114, 117, 110, 103, 115, 105, 58, 
 -	10, 10, 10, 32, 35, 37, 64, 67, 
 -	70, 75, 76, 77, 83, 84, 9, 13, 
 -	10, 95, 10, 70, 10, 69, 10, 65, 
 -	10, 84, 10, 85, 10, 82, 10, 69, 
 -	10, 95, 10, 69, 10, 78, 10, 68, 
 -	10, 95, 10, 37, 10, 111, 10, 110, 
 -	10, 116, 10, 111, 10, 104, 10, 58, 
 -	10, 117, 10, 110, 10, 103, 10, 115, 
 -	10, 105, 10, 101, 10, 97, 10, 100, 
 -	10, 97, 10, 97, 10, 110, 10, 97, 
 -	10, 116, 10, 97, 10, 114, 10, 32, 
 -	10, 66, 10, 101, 10, 108, 10, 97, 
 -	10, 107, 10, 97, 10, 110, 10, 103, 
 -	10, 101, 10, 110, 10, 103, 10, 103, 
 -	10, 97, 10, 114, 10, 105, 10, 115, 
 -	10, 107, 10, 97, 10, 110, 10, 32, 
 -	10, 83, 10, 101, 10, 110, 10, 97, 
 -	10, 114, 10, 105, 10, 111, 10, 101, 
 -	105, 10, 116, 10, 117, 10, 97, 10, 
 -	101, 10, 109, 10, 112, 10, 108, 10, 
 -	97, 10, 116, 10, 101, 10, 32, 10, 
 -	75, 83, 101, 97, 109, 100, 97, 97, 
 -	110, 58, 10, 10, 10, 32, 35, 37, 
 -	42, 64, 65, 66, 68, 70, 75, 76, 
 -	77, 83, 84, 9, 13, 10, 95, 10, 
 -	70, 10, 69, 10, 65, 10, 84, 10, 
 -	85, 10, 82, 10, 69, 10, 95, 10, 
 -	69, 10, 78, 10, 68, 10, 95, 10, 
 -	37, 10, 32, 10, 112, 10, 97, 10, 
 -	98, 10, 105, 10, 108, 10, 97, 10, 
 -	97, 10, 103, 10, 105, 10, 97, 105, 
 -	10, 110, 10, 98, 10, 101, 10, 114, 
 -	10, 117, 10, 110, 10, 103, 10, 115, 
 -	10, 105, 10, 58, 10, 101, 10, 97, 
 -	109, 10, 100, 10, 97, 10, 97, 10, 
 -	110, 10, 117, 10, 100, 10, 105, 10, 
 -	97, 10, 97, 10, 116, 10, 97, 10, 
 -	114, 10, 32, 10, 66, 10, 101, 10, 
 -	108, 10, 97, 10, 107, 10, 97, 10, 
 -	110, 10, 103, 10, 97, 101, 10, 107, 
 -	10, 110, 10, 103, 10, 103, 10, 97, 
 -	10, 114, 10, 105, 10, 115, 10, 107, 
 -	10, 97, 10, 110, 10, 32, 10, 83, 
 -	10, 101, 10, 110, 10, 97, 10, 114, 
 -	10, 105, 10, 111, 10, 101, 105, 10, 
 -	116, 10, 117, 10, 97, 10, 97, 101, 
 -	10, 112, 10, 109, 116, 10, 112, 10, 
 -	108, 10, 97, 10, 116, 10, 101, 10, 
 -	32, 10, 75, 83, 10, 101, 10, 97, 
 -	10, 97, 117, 100, 105, 97, 97, 116, 
 -	97, 114, 32, 66, 101, 108, 97, 107, 
 -	97, 110, 103, 58, 10, 10, 10, 32, 
 -	35, 37, 42, 64, 65, 66, 68, 70, 
 -	75, 77, 83, 84, 9, 13, 10, 95, 
 -	10, 70, 10, 69, 10, 65, 10, 84, 
 -	10, 85, 10, 82, 10, 69, 10, 95, 
 -	10, 69, 10, 78, 10, 68, 10, 95, 
 -	10, 37, 10, 32, 10, 112, 10, 97, 
 -	10, 98, 10, 105, 10, 108, 10, 97, 
 -	10, 97, 10, 103, 10, 105, 10, 97, 
 -	105, 10, 110, 10, 98, 10, 101, 10, 
 -	114, 10, 117, 10, 110, 10, 103, 10, 
 -	115, 10, 105, 10, 58, 10, 101, 10, 
 -	97, 109, 10, 100, 10, 97, 10, 97, 
 -	10, 110, 10, 117, 10, 100, 10, 105, 
 -	10, 97, 10, 97, 101, 10, 107, 10, 
 -	110, 10, 103, 10, 103, 10, 97, 10, 
 -	114, 10, 105, 10, 115, 10, 107, 10, 
 -	97, 10, 110, 10, 32, 10, 83, 10, 
 -	101, 10, 110, 10, 97, 10, 114, 10, 
 -	105, 10, 111, 10, 101, 105, 10, 116, 
 -	10, 117, 10, 97, 10, 97, 101, 10, 
 -	112, 10, 109, 116, 10, 112, 10, 108, 
 -	10, 97, 10, 116, 10, 101, 10, 32, 
 -	10, 75, 83, 10, 101, 10, 97, 10, 
 -	97, 97, 101, 107, 110, 103, 103, 97, 
 -	114, 105, 115, 107, 97, 110, 32, 83, 
 -	101, 110, 97, 114, 105, 111, 58, 10, 
 -	10, 10, 32, 35, 37, 42, 64, 65, 
 -	66, 68, 70, 75, 77, 83, 84, 9, 
 -	13, 10, 95, 10, 70, 10, 69, 10, 
 -	65, 10, 84, 10, 85, 10, 82, 10, 
 -	69, 10, 95, 10, 69, 10, 78, 10, 
 -	68, 10, 95, 10, 37, 10, 32, 10, 
 -	112, 10, 97, 10, 98, 10, 105, 10, 
 -	108, 10, 97, 10, 97, 10, 103, 10, 
 -	105, 10, 97, 105, 10, 110, 10, 98, 
 -	10, 101, 10, 114, 10, 117, 10, 110, 
 -	10, 103, 10, 115, 10, 105, 10, 58, 
 -	10, 101, 10, 97, 109, 10, 100, 10, 
 -	97, 10, 97, 10, 110, 10, 117, 10, 
 -	100, 10, 105, 10, 97, 10, 97, 10, 
 -	107, 10, 101, 105, 10, 110, 10, 97, 
 -	10, 114, 10, 105, 10, 111, 10, 116, 
 -	10, 117, 10, 97, 10, 97, 101, 10, 
 -	112, 10, 116, 10, 97, 101, 105, 110, 
 -	97, 114, 105, 111, 116, 117, 97, 105, 
 -	97, 101, 112, 109, 116, 112, 108, 97, 
 -	116, 101, 32, 75, 83, 101, 97, 100, 
 -	97, 97, 110, 101, 105, 116, 117, 97, 
 -	105, 97, 32, 124, 9, 13, 10, 32, 
 -	92, 124, 9, 13, 10, 92, 124, 10, 
 -	92, 10, 32, 92, 124, 9, 13, 10, 
 -	32, 34, 35, 37, 42, 64, 65, 66, 
 -	67, 68, 70, 75, 76, 77, 83, 84, 
 -	124, 9, 13, 0
 -};
 -
 -static const char _lexer_single_lengths[] = {
 -	0, 19, 1, 1, 18, 1, 1, 2, 
 -	2, 3, 3, 3, 3, 2, 2, 2, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	2, 2, 3, 5, 3, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 5, 2, 
 -	2, 2, 2, 2, 2, 18, 2, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 12, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 3, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 3, 
 -	1, 2, 1, 1, 1, 1, 1, 1, 
 -	1, 15, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 3, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 3, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 3, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	3, 2, 2, 2, 3, 2, 3, 2, 
 -	2, 2, 2, 2, 2, 3, 2, 2, 
 -	2, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 14, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 3, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 3, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 3, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 3, 
 -	2, 2, 2, 3, 2, 3, 2, 2, 
 -	2, 2, 2, 2, 3, 2, 2, 2, 
 -	2, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 14, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	3, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 3, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 3, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	3, 2, 2, 2, 2, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 2, 1, 
 -	2, 1, 1, 1, 1, 1, 1, 2, 
 -	1, 1, 1, 1, 1, 1, 2, 1, 
 -	1, 1, 1, 1, 2, 4, 3, 2, 
 -	4, 18, 0
 -};
 -
 -static const char _lexer_range_lengths[] = {
 -	0, 1, 0, 0, 1, 0, 0, 0, 
 -	0, 1, 1, 1, 1, 1, 1, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 1, 1, 1, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 1, 0, 
 -	0, 0, 0, 0, 0, 1, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 1, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 1, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 1, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 1, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 1, 1, 0, 0, 
 -	1, 1, 0
 -};
 -
 -static const short _lexer_index_offsets[] = {
 -	0, 0, 21, 23, 25, 45, 47, 49, 
 -	52, 55, 60, 65, 70, 75, 79, 83, 
 -	86, 88, 90, 92, 94, 96, 98, 100, 
 -	102, 104, 106, 108, 110, 112, 114, 116, 
 -	118, 121, 124, 129, 136, 141, 143, 145, 
 -	147, 149, 151, 153, 155, 157, 159, 161, 
 -	163, 165, 167, 169, 171, 173, 175, 182, 
 -	185, 188, 191, 194, 197, 200, 220, 223, 
 -	225, 227, 229, 231, 233, 235, 237, 239, 
 -	241, 243, 245, 247, 261, 264, 267, 270, 
 -	273, 276, 279, 282, 285, 288, 291, 294, 
 -	297, 300, 303, 306, 309, 312, 315, 318, 
 -	321, 324, 327, 330, 333, 336, 339, 342, 
 -	345, 348, 351, 354, 357, 360, 363, 366, 
 -	369, 372, 375, 378, 381, 384, 387, 390, 
 -	393, 396, 399, 402, 405, 408, 411, 414, 
 -	417, 420, 423, 426, 429, 432, 435, 438, 
 -	441, 444, 447, 450, 454, 457, 460, 463, 
 -	466, 469, 472, 475, 478, 481, 484, 487, 
 -	491, 493, 496, 498, 500, 502, 504, 506, 
 -	508, 510, 527, 530, 533, 536, 539, 542, 
 -	545, 548, 551, 554, 557, 560, 563, 566, 
 -	569, 572, 575, 578, 581, 584, 587, 590, 
 -	593, 596, 599, 603, 606, 609, 612, 615, 
 -	618, 621, 624, 627, 630, 633, 636, 640, 
 -	643, 646, 649, 652, 655, 658, 661, 664, 
 -	667, 670, 673, 676, 679, 682, 685, 688, 
 -	691, 694, 697, 700, 703, 707, 710, 713, 
 -	716, 719, 722, 725, 728, 731, 734, 737, 
 -	740, 743, 746, 749, 752, 755, 758, 761, 
 -	764, 768, 771, 774, 777, 781, 784, 788, 
 -	791, 794, 797, 800, 803, 806, 810, 813, 
 -	816, 819, 821, 823, 825, 827, 829, 831, 
 -	833, 835, 837, 839, 841, 843, 845, 847, 
 -	849, 851, 853, 855, 857, 859, 875, 878, 
 -	881, 884, 887, 890, 893, 896, 899, 902, 
 -	905, 908, 911, 914, 917, 920, 923, 926, 
 -	929, 932, 935, 938, 941, 944, 947, 951, 
 -	954, 957, 960, 963, 966, 969, 972, 975, 
 -	978, 981, 984, 988, 991, 994, 997, 1000, 
 -	1003, 1006, 1009, 1012, 1016, 1019, 1022, 1025, 
 -	1028, 1031, 1034, 1037, 1040, 1043, 1046, 1049, 
 -	1052, 1055, 1058, 1061, 1064, 1067, 1070, 1073, 
 -	1077, 1080, 1083, 1086, 1090, 1093, 1097, 1100, 
 -	1103, 1106, 1109, 1112, 1115, 1119, 1122, 1125, 
 -	1128, 1131, 1133, 1135, 1137, 1139, 1141, 1143, 
 -	1145, 1147, 1149, 1151, 1153, 1155, 1157, 1159, 
 -	1161, 1163, 1165, 1167, 1169, 1171, 1173, 1175, 
 -	1191, 1194, 1197, 1200, 1203, 1206, 1209, 1212, 
 -	1215, 1218, 1221, 1224, 1227, 1230, 1233, 1236, 
 -	1239, 1242, 1245, 1248, 1251, 1254, 1257, 1260, 
 -	1263, 1267, 1270, 1273, 1276, 1279, 1282, 1285, 
 -	1288, 1291, 1294, 1297, 1300, 1304, 1307, 1310, 
 -	1313, 1316, 1319, 1322, 1325, 1328, 1331, 1334, 
 -	1338, 1341, 1344, 1347, 1350, 1353, 1356, 1359, 
 -	1362, 1366, 1369, 1372, 1375, 1378, 1380, 1382, 
 -	1384, 1386, 1388, 1390, 1392, 1394, 1396, 1399, 
 -	1401, 1404, 1406, 1408, 1410, 1412, 1414, 1416, 
 -	1419, 1421, 1423, 1425, 1427, 1429, 1431, 1434, 
 -	1436, 1438, 1440, 1442, 1444, 1448, 1454, 1458, 
 -	1461, 1467, 1487
 -};
 -
 -static const short _lexer_trans_targs[] = {
 -	2, 4, 4, 5, 15, 17, 31, 34, 
 -	37, 43, 46, 62, 67, 152, 261, 360, 
 -	444, 454, 476, 4, 0, 3, 0, 4, 
 -	0, 4, 4, 5, 15, 17, 31, 34, 
 -	37, 43, 46, 62, 67, 152, 261, 360, 
 -	444, 454, 476, 4, 0, 6, 0, 7, 
 -	0, 9, 8, 8, 9, 8, 8, 10, 
 -	10, 11, 10, 10, 10, 10, 11, 10, 
 -	10, 10, 10, 12, 10, 10, 10, 10, 
 -	13, 10, 10, 4, 14, 14, 0, 4, 
 -	14, 14, 0, 4, 16, 15, 4, 0, 
 -	18, 0, 19, 0, 20, 0, 21, 0, 
 -	22, 0, 23, 0, 24, 0, 25, 0, 
 -	26, 0, 27, 0, 28, 0, 29, 0, 
 -	30, 0, 482, 0, 32, 0, 4, 16, 
 -	33, 4, 16, 33, 0, 0, 0, 0, 
 -	35, 36, 4, 36, 36, 34, 35, 35, 
 -	4, 36, 34, 36, 0, 38, 0, 39, 
 -	0, 40, 0, 41, 0, 42, 0, 31, 
 -	0, 44, 0, 45, 0, 31, 0, 47, 
 -	0, 48, 0, 49, 0, 50, 0, 51, 
 -	0, 52, 0, 54, 53, 54, 53, 54, 
 -	54, 4, 55, 4, 54, 53, 54, 56, 
 -	53, 54, 57, 53, 54, 58, 53, 54, 
 -	59, 53, 54, 60, 53, 54, 61, 53, 
 -	4, 4, 5, 15, 17, 31, 34, 37, 
 -	43, 46, 62, 67, 152, 261, 360, 444, 
 -	454, 476, 4, 0, 63, 64, 0, 31, 
 -	0, 65, 0, 66, 0, 45, 0, 68, 
 -	0, 69, 0, 70, 0, 71, 0, 72, 
 -	0, 73, 0, 75, 74, 75, 74, 75, 
 -	75, 4, 76, 4, 90, 96, 101, 107, 
 -	120, 139, 143, 75, 74, 75, 77, 74, 
 -	75, 78, 74, 75, 79, 74, 75, 80, 
 -	74, 75, 81, 74, 75, 82, 74, 75, 
 -	83, 74, 75, 84, 74, 75, 85, 74, 
 -	75, 86, 74, 75, 87, 74, 75, 88, 
 -	74, 75, 89, 74, 75, 4, 74, 75, 
 -	91, 74, 75, 92, 74, 75, 93, 74, 
 -	75, 94, 74, 75, 95, 74, 75, 61, 
 -	74, 75, 97, 74, 75, 98, 74, 75, 
 -	99, 74, 75, 100, 74, 75, 95, 74, 
 -	75, 102, 74, 75, 103, 74, 75, 104, 
 -	74, 75, 105, 74, 75, 106, 74, 75, 
 -	95, 74, 75, 108, 74, 75, 109, 74, 
 -	75, 110, 74, 75, 111, 74, 75, 112, 
 -	74, 75, 113, 74, 75, 114, 74, 75, 
 -	115, 74, 75, 116, 74, 75, 117, 74, 
 -	75, 118, 74, 75, 119, 74, 75, 95, 
 -	74, 75, 121, 74, 75, 122, 74, 75, 
 -	123, 74, 75, 124, 74, 75, 125, 74, 
 -	75, 126, 74, 75, 127, 74, 75, 128, 
 -	74, 75, 129, 74, 75, 130, 74, 75, 
 -	131, 74, 75, 132, 74, 75, 133, 74, 
 -	75, 134, 74, 75, 135, 74, 75, 136, 
 -	74, 75, 137, 74, 75, 138, 74, 75, 
 -	95, 74, 75, 134, 140, 74, 75, 141, 
 -	74, 75, 142, 74, 75, 100, 74, 75, 
 -	144, 74, 75, 145, 74, 75, 146, 74, 
 -	75, 147, 74, 75, 148, 74, 75, 149, 
 -	74, 75, 150, 74, 75, 151, 74, 75, 
 -	101, 139, 74, 153, 0, 154, 257, 0, 
 -	155, 0, 156, 0, 157, 0, 158, 0, 
 -	159, 0, 161, 160, 161, 160, 161, 161, 
 -	4, 162, 176, 4, 177, 183, 186, 191, 
 -	197, 207, 220, 240, 244, 161, 160, 161, 
 -	163, 160, 161, 164, 160, 161, 165, 160, 
 -	161, 166, 160, 161, 167, 160, 161, 168, 
 -	160, 161, 169, 160, 161, 170, 160, 161, 
 -	171, 160, 161, 172, 160, 161, 173, 160, 
 -	161, 174, 160, 161, 175, 160, 161, 4, 
 -	160, 161, 61, 160, 161, 178, 160, 161, 
 -	179, 160, 161, 180, 160, 161, 181, 160, 
 -	161, 182, 160, 161, 176, 160, 161, 184, 
 -	160, 161, 185, 160, 161, 176, 160, 161, 
 -	187, 188, 160, 161, 176, 160, 161, 189, 
 -	160, 161, 190, 160, 161, 185, 160, 161, 
 -	192, 160, 161, 193, 160, 161, 194, 160, 
 -	161, 195, 160, 161, 196, 160, 161, 61, 
 -	160, 161, 198, 160, 161, 199, 203, 160, 
 -	161, 200, 160, 161, 201, 160, 161, 202, 
 -	160, 161, 196, 160, 161, 204, 160, 161, 
 -	205, 160, 161, 206, 160, 161, 187, 160, 
 -	161, 208, 160, 161, 209, 160, 161, 210, 
 -	160, 161, 211, 160, 161, 212, 160, 161, 
 -	213, 160, 161, 214, 160, 161, 215, 160, 
 -	161, 216, 160, 161, 217, 160, 161, 218, 
 -	160, 161, 219, 160, 161, 196, 160, 161, 
 -	221, 222, 160, 161, 182, 160, 161, 223, 
 -	160, 161, 224, 160, 161, 225, 160, 161, 
 -	226, 160, 161, 227, 160, 161, 228, 160, 
 -	161, 229, 160, 161, 230, 160, 161, 231, 
 -	160, 161, 232, 160, 161, 233, 160, 161, 
 -	234, 160, 161, 235, 160, 161, 236, 160, 
 -	161, 237, 160, 161, 238, 160, 161, 239, 
 -	160, 161, 196, 160, 161, 235, 241, 160, 
 -	161, 242, 160, 161, 243, 160, 161, 195, 
 -	160, 161, 245, 246, 160, 161, 185, 160, 
 -	161, 247, 256, 160, 161, 248, 160, 161, 
 -	249, 160, 161, 250, 160, 161, 251, 160, 
 -	161, 252, 160, 161, 253, 160, 161, 254, 
 -	240, 160, 161, 255, 160, 161, 199, 160, 
 -	161, 245, 160, 258, 0, 259, 0, 260, 
 -	0, 63, 0, 262, 0, 263, 0, 264, 
 -	0, 265, 0, 266, 0, 267, 0, 268, 
 -	0, 269, 0, 270, 0, 271, 0, 272, 
 -	0, 273, 0, 274, 0, 275, 0, 277, 
 -	276, 277, 276, 277, 277, 4, 278, 292, 
 -	4, 293, 299, 302, 307, 313, 323, 343, 
 -	347, 277, 276, 277, 279, 276, 277, 280, 
 -	276, 277, 281, 276, 277, 282, 276, 277, 
 -	283, 276, 277, 284, 276, 277, 285, 276, 
 -	277, 286, 276, 277, 287, 276, 277, 288, 
 -	276, 277, 289, 276, 277, 290, 276, 277, 
 -	291, 276, 277, 4, 276, 277, 61, 276, 
 -	277, 294, 276, 277, 295, 276, 277, 296, 
 -	276, 277, 297, 276, 277, 298, 276, 277, 
 -	292, 276, 277, 300, 276, 277, 301, 276, 
 -	277, 292, 276, 277, 303, 304, 276, 277, 
 -	292, 276, 277, 305, 276, 277, 306, 276, 
 -	277, 301, 276, 277, 308, 276, 277, 309, 
 -	276, 277, 310, 276, 277, 311, 276, 277, 
 -	312, 276, 277, 61, 276, 277, 314, 276, 
 -	277, 315, 319, 276, 277, 316, 276, 277, 
 -	317, 276, 277, 318, 276, 277, 312, 276, 
 -	277, 320, 276, 277, 321, 276, 277, 322, 
 -	276, 277, 303, 276, 277, 324, 325, 276, 
 -	277, 298, 276, 277, 326, 276, 277, 327, 
 -	276, 277, 328, 276, 277, 329, 276, 277, 
 -	330, 276, 277, 331, 276, 277, 332, 276, 
 -	277, 333, 276, 277, 334, 276, 277, 335, 
 -	276, 277, 336, 276, 277, 337, 276, 277, 
 -	338, 276, 277, 339, 276, 277, 340, 276, 
 -	277, 341, 276, 277, 342, 276, 277, 312, 
 -	276, 277, 338, 344, 276, 277, 345, 276, 
 -	277, 346, 276, 277, 311, 276, 277, 348, 
 -	349, 276, 277, 301, 276, 277, 350, 359, 
 -	276, 277, 351, 276, 277, 352, 276, 277, 
 -	353, 276, 277, 354, 276, 277, 355, 276, 
 -	277, 356, 276, 277, 357, 343, 276, 277, 
 -	358, 276, 277, 315, 276, 277, 348, 276, 
 -	361, 362, 0, 42, 0, 363, 0, 364, 
 -	0, 365, 0, 366, 0, 367, 0, 368, 
 -	0, 369, 0, 370, 0, 371, 0, 372, 
 -	0, 373, 0, 374, 0, 375, 0, 376, 
 -	0, 377, 0, 378, 0, 379, 0, 380, 
 -	0, 381, 0, 383, 382, 383, 382, 383, 
 -	383, 4, 384, 398, 4, 399, 405, 408, 
 -	413, 419, 429, 431, 440, 383, 382, 383, 
 -	385, 382, 383, 386, 382, 383, 387, 382, 
 -	383, 388, 382, 383, 389, 382, 383, 390, 
 -	382, 383, 391, 382, 383, 392, 382, 383, 
 -	393, 382, 383, 394, 382, 383, 395, 382, 
 -	383, 396, 382, 383, 397, 382, 383, 4, 
 -	382, 383, 61, 382, 383, 400, 382, 383, 
 -	401, 382, 383, 402, 382, 383, 403, 382, 
 -	383, 404, 382, 383, 398, 382, 383, 406, 
 -	382, 383, 407, 382, 383, 398, 382, 383, 
 -	409, 410, 382, 383, 398, 382, 383, 411, 
 -	382, 383, 412, 382, 383, 407, 382, 383, 
 -	414, 382, 383, 415, 382, 383, 416, 382, 
 -	383, 417, 382, 383, 418, 382, 383, 61, 
 -	382, 383, 420, 382, 383, 421, 425, 382, 
 -	383, 422, 382, 383, 423, 382, 383, 424, 
 -	382, 383, 418, 382, 383, 426, 382, 383, 
 -	427, 382, 383, 428, 382, 383, 409, 382, 
 -	383, 430, 382, 383, 404, 382, 383, 432, 
 -	437, 382, 383, 433, 382, 383, 434, 382, 
 -	383, 435, 382, 383, 436, 382, 383, 418, 
 -	382, 383, 438, 382, 383, 439, 382, 383, 
 -	417, 382, 383, 441, 442, 382, 383, 407, 
 -	382, 383, 443, 382, 383, 441, 382, 445, 
 -	450, 0, 446, 0, 447, 0, 448, 0, 
 -	449, 0, 158, 0, 451, 0, 452, 0, 
 -	453, 0, 158, 0, 455, 456, 0, 45, 
 -	0, 457, 475, 0, 458, 0, 459, 0, 
 -	460, 0, 461, 0, 462, 0, 463, 0, 
 -	464, 470, 0, 465, 0, 466, 0, 467, 
 -	0, 468, 0, 469, 0, 380, 0, 375, 
 -	471, 0, 472, 0, 473, 0, 474, 0, 
 -	380, 0, 455, 0, 476, 477, 476, 0, 
 -	481, 480, 479, 477, 480, 478, 0, 479, 
 -	477, 478, 0, 479, 478, 481, 480, 479, 
 -	477, 480, 478, 481, 481, 5, 15, 17, 
 -	31, 34, 37, 43, 46, 62, 67, 152, 
 -	261, 360, 444, 454, 476, 481, 0, 0, 
 -	0
 -};
 -
 -static const unsigned char _lexer_trans_actions[] = {
 -	0, 54, 0, 5, 1, 0, 29, 1, 
 -	29, 29, 29, 29, 29, 29, 29, 29, 
 -	29, 29, 35, 0, 43, 0, 43, 0, 
 -	43, 54, 0, 5, 1, 0, 29, 1, 
 -	29, 29, 29, 29, 29, 29, 29, 29, 
 -	29, 29, 35, 0, 43, 0, 43, 0, 
 -	43, 139, 48, 9, 106, 11, 0, 134, 
 -	45, 45, 45, 3, 122, 33, 33, 33, 
 -	0, 122, 33, 33, 33, 0, 122, 33, 
 -	0, 33, 0, 102, 7, 7, 43, 54, 
 -	0, 0, 43, 114, 25, 0, 54, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 149, 126, 
 -	57, 110, 23, 0, 43, 43, 43, 43, 
 -	0, 27, 118, 27, 27, 51, 27, 0, 
 -	54, 0, 1, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 144, 57, 54, 0, 54, 
 -	0, 81, 84, 81, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 21, 0, 
 -	130, 31, 60, 57, 31, 63, 57, 63, 
 -	63, 63, 63, 63, 63, 63, 63, 63, 
 -	63, 66, 31, 43, 0, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 144, 57, 54, 0, 54, 
 -	0, 69, 33, 69, 84, 84, 84, 84, 
 -	84, 84, 84, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 13, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 13, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 0, 0, 43, 0, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 144, 57, 54, 0, 54, 0, 
 -	75, 33, 84, 75, 84, 84, 84, 84, 
 -	84, 84, 84, 84, 84, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 17, 
 -	0, 54, 17, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 17, 
 -	0, 54, 0, 0, 54, 0, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 144, 
 -	57, 54, 0, 54, 0, 72, 33, 84, 
 -	72, 84, 84, 84, 84, 84, 84, 84, 
 -	84, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 15, 0, 54, 15, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 15, 0, 54, 0, 0, 
 -	54, 0, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	0, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 144, 57, 54, 0, 54, 
 -	0, 78, 33, 84, 78, 84, 84, 84, 
 -	84, 84, 84, 84, 84, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 19, 
 -	0, 54, 19, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 19, 
 -	0, 54, 0, 0, 54, 0, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 0, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 0, 43, 0, 
 -	43, 0, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 0, 0, 43, 
 -	54, 37, 37, 87, 37, 37, 43, 0, 
 -	39, 0, 43, 0, 0, 54, 0, 0, 
 -	39, 0, 0, 54, 0, 93, 90, 41, 
 -	96, 90, 96, 96, 96, 96, 96, 96, 
 -	96, 96, 96, 96, 99, 0, 43, 0, 
 -	0
 -};
 -
 -static const unsigned char _lexer_eof_actions[] = {
 -	0, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43
 -};
 -
 -static const int lexer_start = 1;
 -static const int lexer_first_final = 482;
 -static const int lexer_error = 0;
 -
 -static const int lexer_en_main = 1;
 -
 -
 -#line 258 "ragel/i18n/bm.c.rl"
 -
 -static VALUE 
 -unindent(VALUE con, int start_col)
 -{
 -  VALUE re;
 -  /* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */
 -  char pat[32]; 
 -  snprintf(pat, 32, "^[\t ]{0,%d}", start_col); 
 -  re = rb_reg_regcomp(rb_str_new2(pat));
 -  rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2(""));
 -
 -  return Qnil;
 -
 -}
 -
 -static void 
 -store_kw_con(VALUE listener, const char * event_name, 
 -             const char * keyword_at, size_t keyword_length, 
 -             const char * at,         size_t length, 
 -             int current_line)
 -{
 -  VALUE con = Qnil, kw = Qnil;
 -  kw = ENCODED_STR_NEW(keyword_at, keyword_length);
 -  con = ENCODED_STR_NEW(at, length);
 -  rb_funcall(con, rb_intern("strip!"), 0);
 -  rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); 
 -}
 -
 -static void
 -store_multiline_kw_con(VALUE listener, const char * event_name,
 -                      const char * keyword_at, size_t keyword_length,
 -                      const char * at,         size_t length,
 -                      int current_line, int start_col)
 -{
 -  VALUE split;
 -  VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil;
 -
 -  kw = ENCODED_STR_NEW(keyword_at, keyword_length);
 -  con = ENCODED_STR_NEW(at, length);
 -
 -  unindent(con, start_col);
 -  
 -  split = rb_str_split(con, "\n");
 -
 -  name = rb_funcall(split, rb_intern("shift"), 0);
 -  desc = rb_ary_join(split, rb_str_new2( "\n" ));
 -
 -  if( name == Qnil ) 
 -  {
 -    name = rb_str_new2("");
 -  }
 -  if( rb_funcall(desc, rb_intern("size"), 0) == 0) 
 -  {
 -    desc = rb_str_new2("");
 -  }
 -  rb_funcall(name, rb_intern("strip!"), 0);
 -  rb_funcall(desc, rb_intern("rstrip!"), 0);
 -  rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); 
 -}
 -
 -static void 
 -store_attr(VALUE listener, const char * attr_type,
 -           const char * at, size_t length, 
 -           int line)
 -{
 -  VALUE val = ENCODED_STR_NEW(at, length);
 -  rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line));
 -}
 -static void 
 -store_docstring_content(VALUE listener, 
 -          int start_col, 
 -          const char *type_at, size_t type_length,
 -          const char *at, size_t length, 
 -          int current_line)
 -{
 -  VALUE re2;
 -  VALUE unescape_escaped_quotes;
 -  VALUE con = ENCODED_STR_NEW(at, length);
 -  VALUE con_type = ENCODED_STR_NEW(type_at, type_length);
 -
 -  unindent(con, start_col);
 -
 -  re2 = rb_reg_regcomp(rb_str_new2("\r\\Z"));
 -  unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\""));
 -  rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2(""));
 -  rb_funcall(con_type, rb_intern("strip!"), 0);
 -  rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\""));
 -  rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line));
 -}
 -static void 
 -raise_lexer_error(const char * at, int line)
 -{ 
 -  rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at);
 -}
 -
 -static void lexer_init(lexer_state *lexer) {
 -  lexer->content_start = 0;
 -  lexer->content_end = 0;
 -  lexer->content_len = 0;
 -  lexer->docstring_content_type_start = 0;
 -  lexer->docstring_content_type_end = 0;
 -  lexer->mark = 0;
 -  lexer->keyword_start = 0;
 -  lexer->keyword_end = 0;
 -  lexer->next_keyword_start = 0;
 -  lexer->line_number = 1;
 -  lexer->last_newline = 0;
 -  lexer->final_newline = 0;
 -  lexer->start_col = 0;
 -}
 -
 -static VALUE CLexer_alloc(VALUE klass)
 -{
 -  VALUE obj;
 -  lexer_state *lxr = ALLOC(lexer_state);
 -  lexer_init(lxr);
 -
 -  obj = Data_Wrap_Struct(klass, NULL, -1, lxr);
 -
 -  return obj;
 -}
 -
 -static VALUE CLexer_init(VALUE self, VALUE listener)
 -{
 -  lexer_state *lxr; 
 -  rb_iv_set(self, "@listener", listener);
 -  
 -  lxr = NULL;
 -  DATA_GET(self, lexer_state, lxr);
 -  lexer_init(lxr);
 -  
 -  return self;
 -}
 -
 -static VALUE CLexer_scan(VALUE self, VALUE input)
 -{
 -  VALUE input_copy;
 -  char *data;
 -  size_t len;
 -  VALUE listener = rb_iv_get(self, "@listener");
 -
 -  lexer_state *lexer;
 -  lexer = NULL;
 -  DATA_GET(self, lexer_state, lexer);
 -
 -  input_copy = rb_str_dup(input);
 -
 -  rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%"));
 -  data = RSTRING_PTR(input_copy);
 -  len = RSTRING_LEN(input_copy);
 -  
 -  if (len == 0) { 
 -    rb_raise(rb_eGherkinLexingError, "No content to lex.");
 -  } else {
 -
 -    const char *p, *pe, *eof;
 -    int cs = 0;
 -    
 -    VALUE current_row = Qnil;
 -
 -    p = data;
 -    pe = data + len;
 -    eof = pe;
 -    
 -    assert(*pe == '\0' && "pointer does not end on NULL");
 -    
 -    
 -#line 1120 "ext/gherkin_lexer_bm/gherkin_lexer_bm.c"
 -	{
 -	cs = lexer_start;
 -	}
 -
 -#line 425 "ragel/i18n/bm.c.rl"
 -    
 -#line 1127 "ext/gherkin_lexer_bm/gherkin_lexer_bm.c"
 -	{
 -	int _klen;
 -	unsigned int _trans;
 -	const char *_acts;
 -	unsigned int _nacts;
 -	const char *_keys;
 -
 -	if ( p == pe )
 -		goto _test_eof;
 -	if ( cs == 0 )
 -		goto _out;
 -_resume:
 -	_keys = _lexer_trans_keys + _lexer_key_offsets[cs];
 -	_trans = _lexer_index_offsets[cs];
 -
 -	_klen = _lexer_single_lengths[cs];
 -	if ( _klen > 0 ) {
 -		const char *_lower = _keys;
 -		const char *_mid;
 -		const char *_upper = _keys + _klen - 1;
 -		while (1) {
 -			if ( _upper < _lower )
 -				break;
 -
 -			_mid = _lower + ((_upper-_lower) >> 1);
 -			if ( (*p) < *_mid )
 -				_upper = _mid - 1;
 -			else if ( (*p) > *_mid )
 -				_lower = _mid + 1;
 -			else {
 -				_trans += (unsigned int)(_mid - _keys);
 -				goto _match;
 -			}
 -		}
 -		_keys += _klen;
 -		_trans += _klen;
 -	}
 -
 -	_klen = _lexer_range_lengths[cs];
 -	if ( _klen > 0 ) {
 -		const char *_lower = _keys;
 -		const char *_mid;
 -		const char *_upper = _keys + (_klen<<1) - 2;
 -		while (1) {
 -			if ( _upper < _lower )
 -				break;
 -
 -			_mid = _lower + (((_upper-_lower) >> 1) & ~1);
 -			if ( (*p) < _mid[0] )
 -				_upper = _mid - 2;
 -			else if ( (*p) > _mid[1] )
 -				_lower = _mid + 2;
 -			else {
 -				_trans += (unsigned int)((_mid - _keys)>>1);
 -				goto _match;
 -			}
 -		}
 -		_trans += _klen;
 -	}
 -
 -_match:
 -	cs = _lexer_trans_targs[_trans];
 -
 -	if ( _lexer_trans_actions[_trans] == 0 )
 -		goto _again;
 -
 -	_acts = _lexer_actions + _lexer_trans_actions[_trans];
 -	_nacts = (unsigned int) *_acts++;
 -	while ( _nacts-- > 0 )
 -	{
 -		switch ( *_acts++ )
 -		{
 -	case 0:
 -#line 83 "ragel/i18n/bm.c.rl"
 -	{
 -		MARK(content_start, p);
 -    lexer->current_line = lexer->line_number;
 -    lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2;
 -  }
 -	break;
 -	case 1:
 -#line 89 "ragel/i18n/bm.c.rl"
 -	{
 -    MARK(content_start, p);
 -  }
 -	break;
 -	case 2:
 -#line 93 "ragel/i18n/bm.c.rl"
 -	{
 -    lexer->current_line = lexer->line_number;
 -    lexer->start_col = p - data - lexer->last_newline;
 -  }
 -	break;
 -	case 3:
 -#line 98 "ragel/i18n/bm.c.rl"
 -	{
 -    int len = LEN(content_start, PTR_TO(final_newline));
 -    int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end));
 -
 -    if (len < 0) len = 0;
 -    if (type_len < 0) len = 0;
 -
 -    store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line);
 -  }
 -	break;
 -	case 4:
 -#line 108 "ragel/i18n/bm.c.rl"
 -	{ 
 -    MARK(docstring_content_type_start, p);
 -  }
 -	break;
 -	case 5:
 -#line 112 "ragel/i18n/bm.c.rl"
 -	{ 
 -    MARK(docstring_content_type_end, p);
 -  }
 -	break;
 -	case 6:
 -#line 116 "ragel/i18n/bm.c.rl"
 -	{
 -    STORE_KW_END_CON(feature);
 -  }
 -	break;
 -	case 7:
 -#line 120 "ragel/i18n/bm.c.rl"
 -	{
 -    STORE_KW_END_CON(background);
 -  }
 -	break;
 -	case 8:
 -#line 124 "ragel/i18n/bm.c.rl"
 -	{
 -    STORE_KW_END_CON(scenario);
 -  }
 -	break;
 -	case 9:
 -#line 128 "ragel/i18n/bm.c.rl"
 -	{
 -    STORE_KW_END_CON(scenario_outline);
 -  }
 -	break;
 -	case 10:
 -#line 132 "ragel/i18n/bm.c.rl"
 -	{
 -    STORE_KW_END_CON(examples);
 -  }
 -	break;
 -	case 11:
 -#line 136 "ragel/i18n/bm.c.rl"
 -	{
 -    store_kw_con(listener, "step",
 -      PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
 -      PTR_TO(content_start), LEN(content_start, p), 
 -      lexer->current_line);
 -  }
 -	break;
 -	case 12:
 -#line 143 "ragel/i18n/bm.c.rl"
 -	{
 -    STORE_ATTR(comment);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 13:
 -#line 148 "ragel/i18n/bm.c.rl"
 -	{
 -    STORE_ATTR(tag);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 14:
 -#line 153 "ragel/i18n/bm.c.rl"
 -	{
 -    lexer->line_number += 1;
 -    MARK(final_newline, p);
 -  }
 -	break;
 -	case 15:
 -#line 158 "ragel/i18n/bm.c.rl"
 -	{
 -    MARK(last_newline, p + 1);
 -  }
 -	break;
 -	case 16:
 -#line 162 "ragel/i18n/bm.c.rl"
 -	{
 -    if (lexer->mark == 0) {
 -      MARK(mark, p);
 -    }
 -  }
 -	break;
 -	case 17:
 -#line 168 "ragel/i18n/bm.c.rl"
 -	{
 -    MARK(keyword_end, p);
 -    MARK(keyword_start, PTR_TO(mark));
 -    MARK(content_start, p + 1);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 18:
 -#line 175 "ragel/i18n/bm.c.rl"
 -	{
 -    MARK(content_end, p);
 -  }
 -	break;
 -	case 19:
 -#line 179 "ragel/i18n/bm.c.rl"
 -	{
 -    p = p - 1;
 -    lexer->current_line = lexer->line_number;
 -    current_row = rb_ary_new();
 -  }
 -	break;
 -	case 20:
 -#line 185 "ragel/i18n/bm.c.rl"
 -	{
 -		MARK(content_start, p);
 -  }
 -	break;
 -	case 21:
 -#line 189 "ragel/i18n/bm.c.rl"
 -	{
 -    VALUE re_pipe, re_newline, re_backslash;
 -    VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
 -    rb_funcall(con, rb_intern("strip!"), 0);
 -    re_pipe      = rb_reg_regcomp(rb_str_new2("\\\\\\|"));
 -    re_newline   = rb_reg_regcomp(rb_str_new2("\\\\n"));
 -    re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_pipe,      rb_str_new2("|"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_newline,   rb_str_new2("\n"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\"));
 -
 -    rb_ary_push(current_row, con);
 -  }
 -	break;
 -	case 22:
 -#line 203 "ragel/i18n/bm.c.rl"
 -	{
 -    rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
 -  }
 -	break;
 -	case 23:
 -#line 207 "ragel/i18n/bm.c.rl"
 -	{
 -    int line;
 -    if (cs < lexer_first_final) {
 -      size_t count = 0;
 -      VALUE newstr_val;
 -      char *newstr;
 -      int newstr_count = 0;        
 -      size_t len;
 -      const char *buff;
 -      if (lexer->last_newline != 0) {
 -        len = LEN(last_newline, eof);
 -        buff = PTR_TO(last_newline);
 -      } else {
 -        len = strlen(data);
 -        buff = data;
 -      }
 -
 -      /* Allocate as a ruby string so that it gets cleaned up by GC */
 -      newstr_val = rb_str_new(buff, len);
 -      newstr = RSTRING_PTR(newstr_val);
 -
 -
 -      for (count = 0; count < len; count++) {
 -        if(buff[count] == 10) {
 -          newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
 -          break;
 -        } else {
 -          if (buff[count] == '%') {
 -            newstr[newstr_count++] = buff[count];
 -            newstr[newstr_count] = buff[count];
 -          } else {
 -            newstr[newstr_count] = buff[count];
 -          }
 -        }
 -        newstr_count++;
 -      }
 -
 -      line = lexer->line_number;
 -      lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
 -      raise_lexer_error(newstr, line);
 -    } else {
 -      rb_funcall(listener, rb_intern("eof"), 0);
 -    }
 -  }
 -	break;
 -#line 1417 "ext/gherkin_lexer_bm/gherkin_lexer_bm.c"
 -		}
 -	}
 -
 -_again:
 -	if ( cs == 0 )
 -		goto _out;
 -	if ( ++p != pe )
 -		goto _resume;
 -	_test_eof: {}
 -	if ( p == eof )
 -	{
 -	const char *__acts = _lexer_actions + _lexer_eof_actions[cs];
 -	unsigned int __nacts = (unsigned int) *__acts++;
 -	while ( __nacts-- > 0 ) {
 -		switch ( *__acts++ ) {
 -	case 23:
 -#line 207 "ragel/i18n/bm.c.rl"
 -	{
 -    int line;
 -    if (cs < lexer_first_final) {
 -      size_t count = 0;
 -      VALUE newstr_val;
 -      char *newstr;
 -      int newstr_count = 0;        
 -      size_t len;
 -      const char *buff;
 -      if (lexer->last_newline != 0) {
 -        len = LEN(last_newline, eof);
 -        buff = PTR_TO(last_newline);
 -      } else {
 -        len = strlen(data);
 -        buff = data;
 -      }
 -
 -      /* Allocate as a ruby string so that it gets cleaned up by GC */
 -      newstr_val = rb_str_new(buff, len);
 -      newstr = RSTRING_PTR(newstr_val);
 -
 -
 -      for (count = 0; count < len; count++) {
 -        if(buff[count] == 10) {
 -          newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
 -          break;
 -        } else {
 -          if (buff[count] == '%') {
 -            newstr[newstr_count++] = buff[count];
 -            newstr[newstr_count] = buff[count];
 -          } else {
 -            newstr[newstr_count] = buff[count];
 -          }
 -        }
 -        newstr_count++;
 -      }
 -
 -      line = lexer->line_number;
 -      lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
 -      raise_lexer_error(newstr, line);
 -    } else {
 -      rb_funcall(listener, rb_intern("eof"), 0);
 -    }
 -  }
 -	break;
 -#line 1480 "ext/gherkin_lexer_bm/gherkin_lexer_bm.c"
 -		}
 -	}
 -	}
 -
 -	_out: {}
 -	}
 -
 -#line 426 "ragel/i18n/bm.c.rl"
 -
 -    assert(p <= pe && "data overflow after parsing execute");
 -    assert(lexer->content_start <= len && "content starts after data end");
 -    assert(lexer->mark < len && "mark is after data end");
 -    
 -    /* Reset lexer by re-initializing the whole thing */
 -    lexer_init(lexer);
 -
 -    if (cs == lexer_error) {
 -      rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails.");
 -    } else {
 -      return Qtrue;
 -    }
 -  }
 -}
 -
 -void Init_gherkin_lexer_bm()
 -{
 -  mGherkin = rb_define_module("Gherkin");
 -  mGherkinLexer = rb_define_module_under(mGherkin, "Lexer");
 -  rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError"));
 -
 -  mCLexer = rb_define_module_under(mGherkin, "CLexer");
 -  cI18nLexer = rb_define_class_under(mCLexer, "Bm", rb_cObject);
 -  rb_define_alloc_func(cI18nLexer, CLexer_alloc);
 -  rb_define_method(cI18nLexer, "initialize", CLexer_init, 1);
 -  rb_define_method(cI18nLexer, "scan", CLexer_scan, 1);
 -}
 -
diff --cc ext/gherkin_lexer_ca/extconf.rb
index a3ee0fe,a3ee0fe..0000000
deleted file mode 100644,100644
--- a/ext/gherkin_lexer_ca/extconf.rb
+++ /dev/null
@@@ -1,6 -1,6 +1,0 @@@
--require 'mkmf'
--CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags']
--$CFLAGS << ' -O0 -Wall' if CONFIG['CC'] =~ /gcc|clang/
--dir_config("gherkin_lexer_ca")
--have_library("c", "main")
--create_makefile("gherkin_lexer_ca")
diff --cc ext/gherkin_lexer_ca/gherkin_lexer_ca.c
index 7b85358,a47c99a..0000000
deleted file mode 100644,100644
--- a/ext/gherkin_lexer_ca/gherkin_lexer_ca.c
+++ /dev/null
@@@ -1,1581 -1,1581 +1,0 @@@
--
- #line 1 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ca.c.rl"
- #include <assert.h>
- #include <ruby.h>
- 
- #if defined(_WIN32)
- #include <stddef.h>
- #endif
- 
- #ifdef HAVE_RUBY_RE_H
- #include <ruby/re.h>
- #else
- #include <re.h>
- #endif
- 
- #ifdef HAVE_RUBY_ENCODING_H
- #include <ruby/encoding.h>
- #define ENCODED_STR_NEW(ptr, len) \
-     rb_enc_str_new(ptr, len, rb_utf8_encoding())
- #else
- #define ENCODED_STR_NEW(ptr, len) \
-     rb_str_new(ptr, len)
- #endif
- 
- #ifndef RSTRING_PTR
- #define RSTRING_PTR(s) (RSTRING(s)->ptr)
- #endif
- 
- #ifndef RSTRING_LEN
- #define RSTRING_LEN(s) (RSTRING(s)->len)
- #endif
- 
- #define DATA_GET(FROM, TYPE, NAME) \
-   Data_Get_Struct(FROM, TYPE, NAME); \
-   if (NAME == NULL) { \
-     rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \
-   }
-  
- typedef struct lexer_state {
-   int content_len;
-   int line_number;
-   int current_line;
-   int start_col;
-   size_t mark;
-   size_t keyword_start;
-   size_t keyword_end;
-   size_t next_keyword_start;
-   size_t content_start;
-   size_t content_end;
-   size_t docstring_content_type_start;
-   size_t docstring_content_type_end;
-   size_t query_start;
-   size_t last_newline;
-   size_t final_newline;
- } lexer_state;
- 
- static VALUE mGherkin;
- static VALUE mGherkinLexer;
- static VALUE mCLexer;
- static VALUE cI18nLexer;
- static VALUE rb_eGherkinLexingError;
- 
- #define LEN(AT, P) (P - data - lexer->AT)
- #define MARK(M, P) (lexer->M = (P) - data)
- #define PTR_TO(P) (data + lexer->P)
- 
- #define STORE_KW_END_CON(EVENT) \
-   store_multiline_kw_con(listener, # EVENT, \
-     PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \
-     PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \
-     lexer->current_line, lexer->start_col); \
-     if (lexer->content_end != 0) { \
-       p = PTR_TO(content_end - 1); \
-     } \
-     lexer->content_end = 0
- 
- #define STORE_ATTR(ATTR) \
-     store_attr(listener, # ATTR, \
-       PTR_TO(content_start), LEN(content_start, p), \
-       lexer->line_number)
- 
- 
- #line 254 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ca.c.rl"
- 
- 
- /** Data **/
- 
- #line 89 "ext/gherkin_lexer_ca/gherkin_lexer_ca.c"
- static const char _lexer_actions[] = {
- 	0, 1, 0, 1, 1, 1, 2, 1, 
- 	3, 1, 4, 1, 5, 1, 6, 1, 
- 	7, 1, 8, 1, 9, 1, 10, 1, 
- 	11, 1, 12, 1, 13, 1, 16, 1, 
- 	17, 1, 18, 1, 19, 1, 20, 1, 
- 	21, 1, 22, 1, 23, 2, 1, 18, 
- 	2, 4, 5, 2, 13, 0, 2, 14, 
- 	15, 2, 17, 0, 2, 17, 2, 2, 
- 	17, 16, 2, 17, 19, 2, 18, 6, 
- 	2, 18, 7, 2, 18, 8, 2, 18, 
- 	9, 2, 18, 10, 2, 18, 16, 2, 
- 	20, 21, 2, 22, 0, 2, 22, 2, 
- 	2, 22, 16, 2, 22, 19, 3, 3, 
- 	14, 15, 3, 5, 14, 15, 3, 11, 
- 	14, 15, 3, 12, 14, 15, 3, 13, 
- 	14, 15, 3, 14, 15, 18, 3, 17, 
- 	0, 11, 3, 17, 14, 15, 4, 1, 
- 	14, 15, 18, 4, 4, 5, 14, 15, 
- 	4, 17, 0, 14, 15, 5, 17, 0, 
- 	11, 14, 15
- };
- 
- static const short _lexer_key_offsets[] = {
- 	0, 0, 20, 21, 22, 41, 42, 43, 
- 	45, 47, 52, 57, 62, 67, 71, 75, 
- 	77, 78, 79, 80, 81, 82, 83, 84, 
- 	85, 86, 87, 88, 89, 90, 91, 92, 
- 	93, 95, 97, 102, 109, 114, 117, 118, 
- 	119, 120, 121, 122, 123, 124, 125, 126, 
- 	127, 128, 129, 130, 131, 132, 133, 134, 
- 	135, 136, 152, 154, 156, 158, 160, 162, 
- 	164, 166, 168, 170, 172, 174, 176, 178, 
- 	180, 182, 201, 202, 204, 205, 206, 207, 
- 	208, 209, 210, 211, 212, 213, 214, 215, 
- 	216, 217, 218, 219, 231, 233, 235, 237, 
- 	239, 241, 243, 245, 247, 249, 251, 253, 
- 	255, 257, 259, 261, 263, 265, 267, 269, 
- 	271, 273, 275, 277, 279, 281, 283, 285, 
- 	287, 289, 291, 293, 295, 297, 299, 301, 
- 	303, 305, 307, 309, 312, 315, 317, 319, 
- 	321, 323, 325, 327, 329, 331, 333, 335, 
- 	337, 339, 341, 343, 345, 347, 349, 351, 
- 	353, 355, 357, 359, 361, 363, 365, 367, 
- 	369, 371, 373, 375, 377, 379, 381, 383, 
- 	385, 387, 389, 391, 393, 395, 397, 398, 
- 	399, 400, 402, 403, 405, 407, 408, 409, 
- 	410, 411, 412, 413, 414, 415, 432, 434, 
- 	436, 438, 440, 442, 444, 446, 448, 450, 
- 	452, 454, 456, 458, 460, 462, 466, 468, 
- 	470, 472, 474, 476, 478, 480, 482, 484, 
- 	486, 488, 490, 492, 494, 496, 498, 500, 
- 	503, 505, 507, 509, 511, 514, 516, 518, 
- 	520, 522, 524, 526, 528, 530, 532, 534, 
- 	536, 538, 540, 542, 544, 547, 549, 552, 
- 	554, 556, 558, 560, 562, 564, 566, 568, 
- 	570, 572, 574, 576, 578, 580, 582, 584, 
- 	586, 588, 590, 592, 594, 596, 598, 600, 
- 	602, 604, 606, 608, 610, 612, 614, 616, 
- 	618, 620, 622, 624, 626, 628, 630, 632, 
- 	634, 636, 638, 639, 640, 641, 642, 643, 
- 	644, 645, 646, 647, 648, 649, 650, 651, 
- 	652, 653, 654, 655, 656, 657, 658, 659, 
- 	675, 677, 679, 681, 683, 685, 687, 689, 
- 	691, 693, 695, 697, 699, 701, 703, 705, 
- 	708, 710, 712, 714, 716, 718, 720, 722, 
- 	725, 727, 729, 731, 733, 736, 738, 740, 
- 	742, 744, 746, 748, 750, 752, 754, 756, 
- 	758, 760, 762, 764, 766, 768, 771, 773, 
- 	775, 777, 779, 781, 783, 785, 787, 789, 
- 	791, 793, 795, 797, 799, 801, 803, 805, 
- 	807, 809, 811, 813, 815, 817, 819, 821, 
- 	823, 824, 825, 826, 827, 828, 829, 830, 
- 	831, 832, 840, 842, 844, 846, 848, 850, 
- 	852, 854, 856, 858, 860, 862, 864, 866, 
- 	868, 870, 872, 874, 876, 878, 880, 882, 
- 	884, 886, 888, 890, 892, 894, 895, 896, 
- 	897, 898, 899, 900, 901, 902, 903, 904, 
- 	905, 906, 907, 908, 909, 910, 911, 912, 
- 	913, 914, 915, 916, 917, 918, 919, 923, 
- 	929, 932, 934, 940, 959, 962, 964, 966, 
- 	968, 970, 972, 974, 976, 979, 981, 983, 
- 	985, 987, 990, 992, 994, 996, 998, 1000, 
- 	1002, 1004, 1006, 1008, 1010, 1012, 1014, 1016, 
- 	1018, 1020, 1022, 1025, 1027, 1030, 1032, 1034, 
- 	1036, 1038, 1040, 1042, 1044, 1046, 1048, 1050, 
- 	1052, 1054, 1056, 1058, 1060, 1062, 1064, 1066, 
- 	1068, 1070, 1072, 1074, 1076, 1078, 1080, 1082, 
- 	1084, 1086, 1088, 1090, 1092, 1094, 1096, 1098, 
- 	1100, 1102, 1104, 1106, 1107, 1108
- };
- 
- static const char _lexer_trans_keys[] = {
- 	-17, 10, 32, 34, 35, 37, 42, 64, 
- 	65, 67, 68, 69, 70, 73, 80, 81, 
- 	82, 124, 9, 13, -69, -65, 10, 32, 
- 	34, 35, 37, 42, 64, 65, 67, 68, 
- 	69, 70, 73, 80, 81, 82, 124, 9, 
- 	13, 34, 34, 10, 13, 10, 13, 10, 
- 	32, 34, 9, 13, 10, 32, 34, 9, 
- 	13, 10, 32, 34, 9, 13, 10, 32, 
- 	34, 9, 13, 10, 32, 9, 13, 10, 
- 	32, 9, 13, 10, 13, 10, 95, 70, 
- 	69, 65, 84, 85, 82, 69, 95, 69, 
- 	78, 68, 95, 37, 32, 10, 13, 10, 
- 	13, 13, 32, 64, 9, 10, 9, 10, 
- 	13, 32, 64, 11, 12, 10, 32, 64, 
- 	9, 13, 108, 110, 116, 101, 115, 104, 
- 	111, 114, 101, 115, 116, 101, 99, 101, 
- 	100, 101, 110, 116, 115, 58, 10, 10, 
- 	10, 32, 35, 37, 42, 64, 65, 67, 
- 	68, 69, 70, 73, 80, 81, 9, 13, 
- 	10, 95, 10, 70, 10, 69, 10, 65, 
- 	10, 84, 10, 85, 10, 82, 10, 69, 
- 	10, 95, 10, 69, 10, 78, 10, 68, 
- 	10, 95, 10, 37, 10, 32, 10, 32, 
- 	34, 35, 37, 42, 64, 65, 67, 68, 
- 	69, 70, 73, 80, 81, 82, 124, 9, 
- 	13, 97, 108, 114, 97, 99, 116, 101, 
- 	114, -61, -83, 115, 116, 105, 99, 97, 
- 	58, 10, 10, 10, 32, 35, 37, 64, 
- 	65, 67, 69, 70, 82, 9, 13, 10, 
- 	95, 10, 70, 10, 69, 10, 65, 10, 
- 	84, 10, 85, 10, 82, 10, 69, 10, 
- 	95, 10, 69, 10, 78, 10, 68, 10, 
- 	95, 10, 37, 10, 110, 10, 116, 10, 
- 	101, 10, 99, 10, 101, 10, 100, 10, 
- 	101, 10, 110, 10, 116, 10, 115, 10, 
- 	58, 10, 97, 10, 114, 10, 97, 10, 
- 	99, 10, 116, 10, 101, 10, 114, -61, 
- 	10, -83, 10, 10, 115, 10, 116, 10, 
- 	105, 10, 99, 10, 97, 10, 115, 120, 
- 	10, 99, 113, 10, 101, 10, 110, 10, 
- 	97, 10, 114, 10, 105, 10, 117, 10, 
- 	101, 10, 109, 10, 97, 10, 32, 10, 
- 	100, 10, 101, 10, 32, 10, 108, 10, 
- 	39, 10, 101, 10, 115, 10, 99, 10, 
- 	101, 10, 109, 10, 112, 10, 108, 10, 
- 	101, 10, 117, 10, 110, 10, 99, 10, 
- 	105, 10, 111, 10, 110, 10, 97, 10, 
- 	108, 10, 105, 10, 116, 10, 97, 10, 
- 	116, 10, 101, 10, 114, 10, 101, 10, 
- 	102, 10, 111, 10, 110, 111, 110, 97, 
- 	100, 116, 97, 115, 120, 99, 113, 101, 
- 	110, 97, 114, 105, 58, 10, 10, 10, 
- 	32, 35, 37, 42, 64, 65, 67, 68, 
- 	69, 70, 73, 80, 81, 82, 9, 13, 
- 	10, 95, 10, 70, 10, 69, 10, 65, 
- 	10, 84, 10, 85, 10, 82, 10, 69, 
- 	10, 95, 10, 69, 10, 78, 10, 68, 
- 	10, 95, 10, 37, 10, 32, 10, 108, 
- 	110, 116, 10, 101, 10, 115, 10, 104, 
- 	10, 111, 10, 114, 10, 101, 10, 115, 
- 	10, 116, 10, 101, 10, 99, 10, 101, 
- 	10, 100, 10, 101, 10, 110, 10, 116, 
- 	10, 115, 10, 58, -61, 10, 101, -88, 
- 	10, 10, 115, 10, 97, 10, 97, 10, 
- 	108, 114, 10, 97, 10, 99, 10, 116, 
- 	10, 101, 10, 114, -61, 10, -83, 10, 
- 	10, 115, 10, 116, 10, 105, 10, 99, 
- 	10, 97, 10, 111, 10, 110, 10, 97, 
- 	10, 100, 116, 10, 115, 10, 99, 113, 
- 	10, 101, 10, 110, 10, 97, 10, 114, 
- 	10, 105, 10, 117, 10, 101, 10, 109, 
- 	10, 97, 10, 32, 10, 100, 10, 101, 
- 	10, 32, 10, 108, 10, 39, 10, 101, 
- 	10, 115, 10, 99, 10, 117, 10, 110, 
- 	10, 99, 10, 105, 10, 111, 10, 110, 
- 	10, 97, 10, 108, 10, 105, 10, 116, 
- 	10, 97, 10, 116, 10, 101, 10, 114, 
- 	-61, 10, -78, 10, 10, 117, 10, 97, 
- 	10, 110, 10, 101, 10, 114, 10, 101, 
- 	10, 102, 10, 111, 10, 110, 117, 101, 
- 	109, 97, 32, 100, 101, 32, 108, 39, 
- 	101, 115, 99, 101, 110, 97, 114, 105, 
- 	58, 10, 10, 10, 32, 35, 37, 42, 
- 	64, 65, 67, 68, 69, 70, 73, 80, 
- 	81, 9, 13, 10, 95, 10, 70, 10, 
- 	69, 10, 65, 10, 84, 10, 85, 10, 
- 	82, 10, 69, 10, 95, 10, 69, 10, 
- 	78, 10, 68, 10, 95, 10, 37, 10, 
- 	32, 10, 108, 116, 10, 101, 10, 115, 
- 	10, 104, 10, 111, 10, 114, 10, 101, 
- 	10, 115, -61, 10, 101, -88, 10, 10, 
- 	115, 10, 97, 10, 97, 10, 108, 114, 
- 	10, 97, 10, 99, 10, 116, 10, 101, 
- 	10, 114, -61, 10, -83, 10, 10, 115, 
- 	10, 116, 10, 105, 10, 99, 10, 97, 
- 	10, 58, 10, 111, 10, 110, 10, 97, 
- 	10, 100, 116, 10, 115, 10, 99, 10, 
- 	101, 10, 110, 10, 97, 10, 114, 10, 
- 	105, 10, 117, 10, 110, 10, 99, 10, 
- 	105, 10, 111, 10, 110, 10, 97, 10, 
- 	108, 10, 105, 10, 116, 10, 97, 10, 
- 	116, 10, 101, 10, 114, -61, 10, -78, 
- 	10, 10, 117, 10, 97, 10, 110, 101, 
- 	109, 112, 108, 101, 115, 58, 10, 10, 
- 	10, 32, 35, 67, 70, 124, 9, 13, 
- 	10, 97, 10, 114, 10, 97, 10, 99, 
- 	10, 116, 10, 101, 10, 114, -61, 10, 
- 	-83, 10, 10, 115, 10, 116, 10, 105, 
- 	10, 99, 10, 97, 10, 58, 10, 117, 
- 	10, 110, 10, 99, 10, 105, 10, 111, 
- 	10, 110, 10, 97, 10, 108, 10, 105, 
- 	10, 116, 10, 97, 10, 116, 117, 110, 
- 	99, 105, 111, 110, 97, 108, 105, 116, 
- 	97, 116, 101, 114, -61, -78, 117, 97, 
- 	110, 101, 114, 101, 102, 111, 110, 32, 
- 	124, 9, 13, 10, 32, 92, 124, 9, 
- 	13, 10, 92, 124, 10, 92, 10, 32, 
- 	92, 124, 9, 13, 10, 32, 34, 35, 
- 	37, 42, 64, 65, 67, 68, 69, 70, 
- 	73, 80, 81, 82, 124, 9, 13, 10, 
- 	108, 116, 10, 101, 10, 115, 10, 104, 
- 	10, 111, 10, 114, 10, 101, 10, 115, 
- 	-61, 10, 101, -88, 10, 10, 115, 10, 
- 	97, 10, 97, 10, 108, 114, 10, 97, 
- 	10, 99, 10, 116, 10, 101, 10, 114, 
- 	-61, 10, -83, 10, 10, 115, 10, 116, 
- 	10, 105, 10, 99, 10, 97, 10, 58, 
- 	10, 111, 10, 110, 10, 97, 10, 100, 
- 	116, 10, 115, 10, 99, 113, 10, 101, 
- 	10, 110, 10, 97, 10, 114, 10, 105, 
- 	10, 117, 10, 101, 10, 109, 10, 97, 
- 	10, 32, 10, 100, 10, 101, 10, 32, 
- 	10, 108, 10, 39, 10, 101, 10, 115, 
- 	10, 99, 10, 117, 10, 110, 10, 99, 
- 	10, 105, 10, 111, 10, 110, 10, 97, 
- 	10, 108, 10, 105, 10, 116, 10, 97, 
- 	10, 116, 10, 101, 10, 114, -61, 10, 
- 	-78, 10, 10, 117, 10, 97, 10, 110, 
- 	-61, 101, -88, 115, 0
- };
- 
- static const char _lexer_single_lengths[] = {
- 	0, 18, 1, 1, 17, 1, 1, 2, 
- 	2, 3, 3, 3, 3, 2, 2, 2, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	2, 2, 3, 5, 3, 3, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 14, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 17, 1, 2, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 10, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 3, 3, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 1, 1, 
- 	1, 2, 1, 2, 2, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 15, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 4, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 3, 
- 	2, 2, 2, 2, 3, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 3, 2, 3, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 14, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 3, 
- 	2, 2, 2, 2, 2, 2, 2, 3, 
- 	2, 2, 2, 2, 3, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 3, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 6, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 2, 4, 
- 	3, 2, 4, 17, 3, 2, 2, 2, 
- 	2, 2, 2, 2, 3, 2, 2, 2, 
- 	2, 3, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 3, 2, 3, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 1, 1, 0
- };
- 
- static const char _lexer_range_lengths[] = {
- 	0, 1, 0, 0, 1, 0, 0, 0, 
- 	0, 1, 1, 1, 1, 1, 1, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 1, 1, 1, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 1, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 1, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 1, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 1, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 1, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 1, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 1, 1, 
- 	0, 0, 1, 1, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0
- };
- 
- static const short _lexer_index_offsets[] = {
- 	0, 0, 20, 22, 24, 43, 45, 47, 
- 	50, 53, 58, 63, 68, 73, 77, 81, 
- 	84, 86, 88, 90, 92, 94, 96, 98, 
- 	100, 102, 104, 106, 108, 110, 112, 114, 
- 	116, 119, 122, 127, 134, 139, 143, 145, 
- 	147, 149, 151, 153, 155, 157, 159, 161, 
- 	163, 165, 167, 169, 171, 173, 175, 177, 
- 	179, 181, 197, 200, 203, 206, 209, 212, 
- 	215, 218, 221, 224, 227, 230, 233, 236, 
- 	239, 242, 261, 263, 266, 268, 270, 272, 
- 	274, 276, 278, 280, 282, 284, 286, 288, 
- 	290, 292, 294, 296, 308, 311, 314, 317, 
- 	320, 323, 326, 329, 332, 335, 338, 341, 
- 	344, 347, 350, 353, 356, 359, 362, 365, 
- 	368, 371, 374, 377, 380, 383, 386, 389, 
- 	392, 395, 398, 401, 404, 407, 410, 413, 
- 	416, 419, 422, 425, 429, 433, 436, 439, 
- 	442, 445, 448, 451, 454, 457, 460, 463, 
- 	466, 469, 472, 475, 478, 481, 484, 487, 
- 	490, 493, 496, 499, 502, 505, 508, 511, 
- 	514, 517, 520, 523, 526, 529, 532, 535, 
- 	538, 541, 544, 547, 550, 553, 556, 558, 
- 	560, 562, 565, 567, 570, 573, 575, 577, 
- 	579, 581, 583, 585, 587, 589, 606, 609, 
- 	612, 615, 618, 621, 624, 627, 630, 633, 
- 	636, 639, 642, 645, 648, 651, 656, 659, 
- 	662, 665, 668, 671, 674, 677, 680, 683, 
- 	686, 689, 692, 695, 698, 701, 704, 707, 
- 	711, 714, 717, 720, 723, 727, 730, 733, 
- 	736, 739, 742, 745, 748, 751, 754, 757, 
- 	760, 763, 766, 769, 772, 776, 779, 783, 
- 	786, 789, 792, 795, 798, 801, 804, 807, 
- 	810, 813, 816, 819, 822, 825, 828, 831, 
- 	834, 837, 840, 843, 846, 849, 852, 855, 
- 	858, 861, 864, 867, 870, 873, 876, 879, 
- 	882, 885, 888, 891, 894, 897, 900, 903, 
- 	906, 909, 912, 914, 916, 918, 920, 922, 
- 	924, 926, 928, 930, 932, 934, 936, 938, 
- 	940, 942, 944, 946, 948, 950, 952, 954, 
- 	970, 973, 976, 979, 982, 985, 988, 991, 
- 	994, 997, 1000, 1003, 1006, 1009, 1012, 1015, 
- 	1019, 1022, 1025, 1028, 1031, 1034, 1037, 1040, 
- 	1044, 1047, 1050, 1053, 1056, 1060, 1063, 1066, 
- 	1069, 1072, 1075, 1078, 1081, 1084, 1087, 1090, 
- 	1093, 1096, 1099, 1102, 1105, 1108, 1112, 1115, 
- 	1118, 1121, 1124, 1127, 1130, 1133, 1136, 1139, 
- 	1142, 1145, 1148, 1151, 1154, 1157, 1160, 1163, 
- 	1166, 1169, 1172, 1175, 1178, 1181, 1184, 1187, 
- 	1190, 1192, 1194, 1196, 1198, 1200, 1202, 1204, 
- 	1206, 1208, 1216, 1219, 1222, 1225, 1228, 1231, 
- 	1234, 1237, 1240, 1243, 1246, 1249, 1252, 1255, 
- 	1258, 1261, 1264, 1267, 1270, 1273, 1276, 1279, 
- 	1282, 1285, 1288, 1291, 1294, 1297, 1299, 1301, 
- 	1303, 1305, 1307, 1309, 1311, 1313, 1315, 1317, 
- 	1319, 1321, 1323, 1325, 1327, 1329, 1331, 1333, 
- 	1335, 1337, 1339, 1341, 1343, 1345, 1347, 1351, 
- 	1357, 1361, 1364, 1370, 1389, 1393, 1396, 1399, 
- 	1402, 1405, 1408, 1411, 1414, 1418, 1421, 1424, 
- 	1427, 1430, 1434, 1437, 1440, 1443, 1446, 1449, 
- 	1452, 1455, 1458, 1461, 1464, 1467, 1470, 1473, 
- 	1476, 1479, 1482, 1486, 1489, 1493, 1496, 1499, 
- 	1502, 1505, 1508, 1511, 1514, 1517, 1520, 1523, 
- 	1526, 1529, 1532, 1535, 1538, 1541, 1544, 1547, 
- 	1550, 1553, 1556, 1559, 1562, 1565, 1568, 1571, 
- 	1574, 1577, 1580, 1583, 1586, 1589, 1592, 1595, 
- 	1598, 1601, 1604, 1607, 1609, 1611
- };
- 
- static const short _lexer_trans_targs[] = {
- 	2, 4, 4, 5, 15, 17, 31, 34, 
- 	37, 74, 174, 179, 421, 31, 433, 437, 
- 	440, 446, 4, 0, 3, 0, 4, 0, 
- 	4, 4, 5, 15, 17, 31, 34, 37, 
- 	74, 174, 179, 421, 31, 433, 437, 440, 
- 	446, 4, 0, 6, 0, 7, 0, 9, 
- 	8, 8, 9, 8, 8, 10, 10, 11, 
- 	10, 10, 10, 10, 11, 10, 10, 10, 
- 	10, 12, 10, 10, 10, 10, 13, 10, 
- 	10, 4, 14, 14, 0, 4, 14, 14, 
- 	0, 4, 16, 15, 4, 0, 18, 0, 
- 	19, 0, 20, 0, 21, 0, 22, 0, 
- 	23, 0, 24, 0, 25, 0, 26, 0, 
- 	27, 0, 28, 0, 29, 0, 30, 0, 
- 	525, 0, 32, 0, 4, 16, 33, 4, 
- 	16, 33, 0, 0, 0, 0, 35, 36, 
- 	4, 36, 36, 34, 35, 35, 4, 36, 
- 	34, 36, 0, 38, 45, 522, 0, 39, 
- 	0, 40, 0, 41, 0, 42, 0, 43, 
- 	0, 44, 0, 31, 0, 46, 0, 47, 
- 	0, 48, 0, 49, 0, 50, 0, 51, 
- 	0, 52, 0, 53, 0, 54, 0, 55, 
- 	0, 57, 56, 57, 56, 57, 57, 4, 
- 	58, 72, 4, 452, 464, 479, 483, 503, 
- 	72, 515, 519, 57, 56, 57, 59, 56, 
- 	57, 60, 56, 57, 61, 56, 57, 62, 
- 	56, 57, 63, 56, 57, 64, 56, 57, 
- 	65, 56, 57, 66, 56, 57, 67, 56, 
- 	57, 68, 56, 57, 69, 56, 57, 70, 
- 	56, 57, 71, 56, 57, 4, 56, 57, 
- 	73, 56, 4, 4, 5, 15, 17, 31, 
- 	34, 37, 74, 174, 179, 421, 31, 433, 
- 	437, 440, 446, 4, 0, 75, 0, 31, 
- 	76, 0, 77, 0, 78, 0, 79, 0, 
- 	80, 0, 81, 0, 82, 0, 83, 0, 
- 	84, 0, 85, 0, 86, 0, 87, 0, 
- 	88, 0, 89, 0, 91, 90, 91, 90, 
- 	91, 91, 4, 92, 4, 106, 117, 131, 
- 	156, 168, 91, 90, 91, 93, 90, 91, 
- 	94, 90, 91, 95, 90, 91, 96, 90, 
- 	91, 97, 90, 91, 98, 90, 91, 99, 
- 	90, 91, 100, 90, 91, 101, 90, 91, 
- 	102, 90, 91, 103, 90, 91, 104, 90, 
- 	91, 105, 90, 91, 4, 90, 91, 107, 
- 	90, 91, 108, 90, 91, 109, 90, 91, 
- 	110, 90, 91, 111, 90, 91, 112, 90, 
- 	91, 113, 90, 91, 114, 90, 91, 115, 
- 	90, 91, 116, 90, 91, 73, 90, 91, 
- 	118, 90, 91, 119, 90, 91, 120, 90, 
- 	91, 121, 90, 91, 122, 90, 91, 123, 
- 	90, 91, 124, 90, 125, 91, 90, 126, 
- 	91, 90, 91, 127, 90, 91, 128, 90, 
- 	91, 129, 90, 91, 130, 90, 91, 116, 
- 	90, 91, 132, 151, 90, 91, 133, 138, 
- 	90, 91, 134, 90, 91, 135, 90, 91, 
- 	136, 90, 91, 137, 90, 91, 116, 90, 
- 	91, 139, 90, 91, 140, 90, 91, 141, 
- 	90, 91, 142, 90, 91, 143, 90, 91, 
- 	144, 90, 91, 145, 90, 91, 146, 90, 
- 	91, 147, 90, 91, 148, 90, 91, 149, 
- 	90, 91, 150, 90, 91, 133, 90, 91, 
- 	152, 90, 91, 153, 90, 91, 154, 90, 
- 	91, 155, 90, 91, 115, 90, 91, 157, 
- 	90, 91, 158, 90, 91, 159, 90, 91, 
- 	160, 90, 91, 161, 90, 91, 162, 90, 
- 	91, 163, 90, 91, 164, 90, 91, 165, 
- 	90, 91, 166, 90, 91, 167, 90, 91, 
- 	116, 90, 91, 169, 90, 91, 170, 90, 
- 	91, 171, 90, 91, 172, 90, 91, 173, 
- 	90, 91, 115, 90, 175, 0, 176, 0, 
- 	177, 0, 178, 31, 0, 31, 0, 180, 
- 	384, 0, 181, 290, 0, 182, 0, 183, 
- 	0, 184, 0, 185, 0, 186, 0, 187, 
- 	0, 189, 188, 189, 188, 189, 189, 4, 
- 	190, 204, 4, 205, 227, 241, 245, 265, 
- 	204, 277, 281, 284, 189, 188, 189, 191, 
- 	188, 189, 192, 188, 189, 193, 188, 189, 
- 	194, 188, 189, 195, 188, 189, 196, 188, 
- 	189, 197, 188, 189, 198, 188, 189, 199, 
- 	188, 189, 200, 188, 189, 201, 188, 189, 
- 	202, 188, 189, 203, 188, 189, 4, 188, 
- 	189, 73, 188, 189, 206, 213, 223, 188, 
- 	189, 207, 188, 189, 208, 188, 189, 209, 
- 	188, 189, 210, 188, 189, 211, 188, 189, 
- 	212, 188, 189, 204, 188, 189, 214, 188, 
- 	189, 215, 188, 189, 216, 188, 189, 217, 
- 	188, 189, 218, 188, 189, 219, 188, 189, 
- 	220, 188, 189, 221, 188, 189, 222, 188, 
- 	189, 73, 188, 224, 189, 225, 188, 212, 
- 	189, 188, 189, 226, 188, 189, 204, 188, 
- 	189, 228, 188, 189, 204, 229, 188, 189, 
- 	230, 188, 189, 231, 188, 189, 232, 188, 
- 	189, 233, 188, 189, 234, 188, 235, 189, 
- 	188, 236, 189, 188, 189, 237, 188, 189, 
- 	238, 188, 189, 239, 188, 189, 240, 188, 
- 	189, 222, 188, 189, 242, 188, 189, 243, 
- 	188, 189, 244, 188, 189, 226, 204, 188, 
- 	189, 246, 188, 189, 247, 252, 188, 189, 
- 	248, 188, 189, 249, 188, 189, 250, 188, 
- 	189, 251, 188, 189, 222, 188, 189, 253, 
- 	188, 189, 254, 188, 189, 255, 188, 189, 
- 	256, 188, 189, 257, 188, 189, 258, 188, 
- 	189, 259, 188, 189, 260, 188, 189, 261, 
- 	188, 189, 262, 188, 189, 263, 188, 189, 
- 	264, 188, 189, 247, 188, 189, 266, 188, 
- 	189, 267, 188, 189, 268, 188, 189, 269, 
- 	188, 189, 270, 188, 189, 271, 188, 189, 
- 	272, 188, 189, 273, 188, 189, 274, 188, 
- 	189, 275, 188, 189, 276, 188, 189, 222, 
- 	188, 189, 278, 188, 189, 279, 188, 280, 
- 	189, 188, 204, 189, 188, 189, 282, 188, 
- 	189, 283, 188, 189, 204, 188, 189, 285, 
- 	188, 189, 286, 188, 189, 287, 188, 189, 
- 	288, 188, 189, 289, 188, 189, 221, 188, 
- 	291, 0, 292, 0, 293, 0, 294, 0, 
- 	295, 0, 296, 0, 297, 0, 298, 0, 
- 	299, 0, 300, 0, 301, 0, 302, 0, 
- 	303, 0, 304, 0, 305, 0, 306, 0, 
- 	307, 0, 308, 0, 309, 0, 311, 310, 
- 	311, 310, 311, 311, 4, 312, 326, 4, 
- 	327, 339, 354, 358, 365, 326, 377, 381, 
- 	311, 310, 311, 313, 310, 311, 314, 310, 
- 	311, 315, 310, 311, 316, 310, 311, 317, 
- 	310, 311, 318, 310, 311, 319, 310, 311, 
- 	320, 310, 311, 321, 310, 311, 322, 310, 
- 	311, 323, 310, 311, 324, 310, 311, 325, 
- 	310, 311, 4, 310, 311, 73, 310, 311, 
- 	328, 335, 310, 311, 329, 310, 311, 330, 
- 	310, 311, 331, 310, 311, 332, 310, 311, 
- 	333, 310, 311, 334, 310, 311, 326, 310, 
- 	336, 311, 337, 310, 334, 311, 310, 311, 
- 	338, 310, 311, 326, 310, 311, 340, 310, 
- 	311, 326, 341, 310, 311, 342, 310, 311, 
- 	343, 310, 311, 344, 310, 311, 345, 310, 
- 	311, 346, 310, 347, 311, 310, 348, 311, 
- 	310, 311, 349, 310, 311, 350, 310, 311, 
- 	351, 310, 311, 352, 310, 311, 353, 310, 
- 	311, 73, 310, 311, 355, 310, 311, 356, 
- 	310, 311, 357, 310, 311, 338, 326, 310, 
- 	311, 359, 310, 311, 360, 310, 311, 361, 
- 	310, 311, 362, 310, 311, 363, 310, 311, 
- 	364, 310, 311, 353, 310, 311, 366, 310, 
- 	311, 367, 310, 311, 368, 310, 311, 369, 
- 	310, 311, 370, 310, 311, 371, 310, 311, 
- 	372, 310, 311, 373, 310, 311, 374, 310, 
- 	311, 375, 310, 311, 376, 310, 311, 353, 
- 	310, 311, 378, 310, 311, 379, 310, 380, 
- 	311, 310, 326, 311, 310, 311, 382, 310, 
- 	311, 383, 310, 311, 326, 310, 385, 0, 
- 	386, 0, 387, 0, 388, 0, 389, 0, 
- 	390, 0, 391, 0, 393, 392, 393, 392, 
- 	393, 393, 4, 394, 409, 4, 393, 392, 
- 	393, 395, 392, 393, 396, 392, 393, 397, 
- 	392, 393, 398, 392, 393, 399, 392, 393, 
- 	400, 392, 393, 401, 392, 402, 393, 392, 
- 	403, 393, 392, 393, 404, 392, 393, 405, 
- 	392, 393, 406, 392, 393, 407, 392, 393, 
- 	408, 392, 393, 73, 392, 393, 410, 392, 
- 	393, 411, 392, 393, 412, 392, 393, 413, 
- 	392, 393, 414, 392, 393, 415, 392, 393, 
- 	416, 392, 393, 417, 392, 393, 418, 392, 
- 	393, 419, 392, 393, 420, 392, 393, 408, 
- 	392, 422, 0, 423, 0, 424, 0, 425, 
- 	0, 426, 0, 427, 0, 428, 0, 429, 
- 	0, 430, 0, 431, 0, 432, 0, 88, 
- 	0, 434, 0, 435, 0, 436, 0, 31, 
- 	0, 438, 0, 439, 0, 31, 0, 441, 
- 	0, 442, 0, 443, 0, 444, 0, 445, 
- 	0, 53, 0, 446, 447, 446, 0, 451, 
- 	450, 449, 447, 450, 448, 0, 449, 447, 
- 	448, 0, 449, 448, 451, 450, 449, 447, 
- 	450, 448, 451, 451, 5, 15, 17, 31, 
- 	34, 37, 74, 174, 179, 421, 31, 433, 
- 	437, 440, 446, 451, 0, 57, 453, 460, 
- 	56, 57, 454, 56, 57, 455, 56, 57, 
- 	456, 56, 57, 457, 56, 57, 458, 56, 
- 	57, 459, 56, 57, 72, 56, 461, 57, 
- 	462, 56, 459, 57, 56, 57, 463, 56, 
- 	57, 72, 56, 57, 465, 56, 57, 72, 
- 	466, 56, 57, 467, 56, 57, 468, 56, 
- 	57, 469, 56, 57, 470, 56, 57, 471, 
- 	56, 472, 57, 56, 473, 57, 56, 57, 
- 	474, 56, 57, 475, 56, 57, 476, 56, 
- 	57, 477, 56, 57, 478, 56, 57, 73, 
- 	56, 57, 480, 56, 57, 481, 56, 57, 
- 	482, 56, 57, 463, 72, 56, 57, 484, 
- 	56, 57, 485, 490, 56, 57, 486, 56, 
- 	57, 487, 56, 57, 488, 56, 57, 489, 
- 	56, 57, 478, 56, 57, 491, 56, 57, 
- 	492, 56, 57, 493, 56, 57, 494, 56, 
- 	57, 495, 56, 57, 496, 56, 57, 497, 
- 	56, 57, 498, 56, 57, 499, 56, 57, 
- 	500, 56, 57, 501, 56, 57, 502, 56, 
- 	57, 485, 56, 57, 504, 56, 57, 505, 
- 	56, 57, 506, 56, 57, 507, 56, 57, 
- 	508, 56, 57, 509, 56, 57, 510, 56, 
- 	57, 511, 56, 57, 512, 56, 57, 513, 
- 	56, 57, 514, 56, 57, 478, 56, 57, 
- 	516, 56, 57, 517, 56, 518, 57, 56, 
- 	72, 57, 56, 57, 520, 56, 57, 521, 
- 	56, 57, 72, 56, 523, 524, 0, 44, 
- 	0, 178, 0, 0, 0
- };
- 
- static const unsigned char _lexer_trans_actions[] = {
- 	0, 54, 0, 5, 1, 0, 29, 1, 
- 	29, 29, 29, 29, 29, 29, 29, 29, 
- 	29, 35, 0, 43, 0, 43, 0, 43, 
- 	54, 0, 5, 1, 0, 29, 1, 29, 
- 	29, 29, 29, 29, 29, 29, 29, 29, 
- 	35, 0, 43, 0, 43, 0, 43, 139, 
- 	48, 9, 106, 11, 0, 134, 45, 45, 
- 	45, 3, 122, 33, 33, 33, 0, 122, 
- 	33, 33, 33, 0, 122, 33, 0, 33, 
- 	0, 102, 7, 7, 43, 54, 0, 0, 
- 	43, 114, 25, 0, 54, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 149, 126, 57, 110, 
- 	23, 0, 43, 43, 43, 43, 0, 27, 
- 	118, 27, 27, 51, 27, 0, 54, 0, 
- 	1, 0, 43, 0, 0, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 144, 57, 54, 0, 54, 0, 72, 
- 	33, 84, 72, 84, 84, 84, 84, 84, 
- 	84, 84, 84, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 15, 0, 54, 
- 	15, 0, 130, 31, 60, 57, 31, 63, 
- 	57, 63, 63, 63, 63, 63, 63, 63, 
- 	63, 63, 66, 31, 43, 0, 43, 0, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 144, 57, 54, 0, 
- 	54, 0, 69, 33, 69, 84, 84, 84, 
- 	84, 84, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 13, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 13, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 0, 54, 0, 0, 
- 	54, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 0, 54, 0, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 0, 43, 0, 43, 
- 	0, 43, 0, 0, 43, 0, 43, 0, 
- 	0, 43, 0, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 144, 57, 54, 0, 54, 0, 75, 
- 	33, 84, 75, 84, 84, 84, 84, 84, 
- 	84, 84, 84, 84, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 17, 0, 
- 	54, 17, 0, 54, 0, 0, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 17, 0, 0, 54, 0, 0, 0, 
- 	54, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 0, 54, 
- 	0, 0, 54, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 0, 
- 	54, 0, 0, 54, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 144, 57, 
- 	54, 0, 54, 0, 78, 33, 84, 78, 
- 	84, 84, 84, 84, 84, 84, 84, 84, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 19, 0, 54, 19, 0, 54, 
- 	0, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	0, 54, 0, 0, 0, 54, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 0, 54, 0, 0, 54, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 19, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 0, 
- 	54, 0, 0, 54, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 144, 57, 54, 0, 
- 	54, 0, 81, 84, 84, 81, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 0, 54, 0, 
- 	0, 54, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 21, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 0, 0, 43, 54, 
- 	37, 37, 87, 37, 37, 43, 0, 39, 
- 	0, 43, 0, 0, 54, 0, 0, 39, 
- 	0, 0, 54, 0, 93, 90, 41, 96, 
- 	90, 96, 96, 96, 96, 96, 96, 96, 
- 	96, 96, 99, 0, 43, 54, 0, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 0, 54, 
- 	0, 0, 0, 54, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 0, 54, 0, 0, 54, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 15, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 0, 54, 0, 
- 	0, 54, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 0, 0, 43, 0, 
- 	43, 0, 43, 0, 0
- };
- 
- static const unsigned char _lexer_eof_actions[] = {
- 	0, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43
- };
- 
- static const int lexer_start = 1;
- static const int lexer_first_final = 525;
- static const int lexer_error = 0;
- 
- static const int lexer_en_main = 1;
- 
- 
- #line 258 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ca.c.rl"
- 
- static VALUE 
- unindent(VALUE con, int start_col)
- {
-   VALUE re;
-   // Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters
-   char pat[32]; 
-   snprintf(pat, 32, "^[\t ]{0,%d}", start_col); 
-   re = rb_reg_regcomp(rb_str_new2(pat));
-   rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2(""));
- 
-   return Qnil;
- 
- }
- 
- static void 
- store_kw_con(VALUE listener, const char * event_name, 
-              const char * keyword_at, size_t keyword_length, 
-              const char * at,         size_t length, 
-              int current_line)
- {
-   VALUE con = Qnil, kw = Qnil;
-   kw = ENCODED_STR_NEW(keyword_at, keyword_length);
-   con = ENCODED_STR_NEW(at, length);
-   rb_funcall(con, rb_intern("strip!"), 0);
-   rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); 
- }
- 
- static void
- store_multiline_kw_con(VALUE listener, const char * event_name,
-                       const char * keyword_at, size_t keyword_length,
-                       const char * at,         size_t length,
-                       int current_line, int start_col)
- {
-   VALUE split;
-   VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil;
- 
-   kw = ENCODED_STR_NEW(keyword_at, keyword_length);
-   con = ENCODED_STR_NEW(at, length);
- 
-   unindent(con, start_col);
-   
-   split = rb_str_split(con, "\n");
- 
-   name = rb_funcall(split, rb_intern("shift"), 0);
-   desc = rb_ary_join(split, rb_str_new2( "\n" ));
- 
-   if( name == Qnil ) 
-   {
-     name = rb_str_new2("");
-   }
-   if( rb_funcall(desc, rb_intern("size"), 0) == 0) 
-   {
-     desc = rb_str_new2("");
-   }
-   rb_funcall(name, rb_intern("strip!"), 0);
-   rb_funcall(desc, rb_intern("rstrip!"), 0);
-   rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); 
- }
- 
- static void 
- store_attr(VALUE listener, const char * attr_type,
-            const char * at, size_t length, 
-            int line)
- {
-   VALUE val = ENCODED_STR_NEW(at, length);
-   rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line));
- }
- static void 
- store_docstring_content(VALUE listener, 
-           int start_col, 
-           const char *type_at, size_t type_length,
-           const char *at, size_t length, 
-           int current_line)
- {
-   VALUE re2;
-   VALUE unescape_escaped_quotes;
-   VALUE con = ENCODED_STR_NEW(at, length);
-   VALUE con_type = ENCODED_STR_NEW(type_at, type_length);
- 
-   unindent(con, start_col);
- 
-   re2 = rb_reg_regcomp(rb_str_new2("\r\\Z"));
-   unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\""));
-   rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2(""));
-   rb_funcall(con_type, rb_intern("strip!"), 0);
-   rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\""));
-   rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line));
- }
- static void 
- raise_lexer_error(const char * at, int line)
- { 
-   rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at);
- }
- 
- static void lexer_init(lexer_state *lexer) {
-   lexer->content_start = 0;
-   lexer->content_end = 0;
-   lexer->content_len = 0;
-   lexer->docstring_content_type_start = 0;
-   lexer->docstring_content_type_end = 0;
-   lexer->mark = 0;
-   lexer->keyword_start = 0;
-   lexer->keyword_end = 0;
-   lexer->next_keyword_start = 0;
-   lexer->line_number = 1;
-   lexer->last_newline = 0;
-   lexer->final_newline = 0;
-   lexer->start_col = 0;
- }
- 
- static VALUE CLexer_alloc(VALUE klass)
- {
-   VALUE obj;
-   lexer_state *lxr = ALLOC(lexer_state);
-   lexer_init(lxr);
- 
-   obj = Data_Wrap_Struct(klass, NULL, -1, lxr);
- 
-   return obj;
- }
- 
- static VALUE CLexer_init(VALUE self, VALUE listener)
- {
-   lexer_state *lxr; 
-   rb_iv_set(self, "@listener", listener);
-   
-   lxr = NULL;
-   DATA_GET(self, lexer_state, lxr);
-   lexer_init(lxr);
-   
-   return self;
- }
- 
- static VALUE CLexer_scan(VALUE self, VALUE input)
- {
-   VALUE input_copy;
-   char *data;
-   size_t len;
-   VALUE listener = rb_iv_get(self, "@listener");
- 
-   lexer_state *lexer;
-   lexer = NULL;
-   DATA_GET(self, lexer_state, lexer);
- 
-   input_copy = rb_str_dup(input);
- 
-   rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%"));
-   data = RSTRING_PTR(input_copy);
-   len = RSTRING_LEN(input_copy);
-   
-   if (len == 0) { 
-     rb_raise(rb_eGherkinLexingError, "No content to lex.");
-   } else {
- 
-     const char *p, *pe, *eof;
-     int cs = 0;
-     
-     VALUE current_row = Qnil;
- 
-     p = data;
-     pe = data + len;
-     eof = pe;
-     
-     assert(*pe == '\0' && "pointer does not end on NULL");
-     
-     
- #line 1185 "ext/gherkin_lexer_ca/gherkin_lexer_ca.c"
- 	{
- 	cs = lexer_start;
- 	}
- 
- #line 425 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ca.c.rl"
-     
- #line 1192 "ext/gherkin_lexer_ca/gherkin_lexer_ca.c"
- 	{
- 	int _klen;
- 	unsigned int _trans;
- 	const char *_acts;
- 	unsigned int _nacts;
- 	const char *_keys;
- 
- 	if ( p == pe )
- 		goto _test_eof;
- 	if ( cs == 0 )
- 		goto _out;
- _resume:
- 	_keys = _lexer_trans_keys + _lexer_key_offsets[cs];
- 	_trans = _lexer_index_offsets[cs];
- 
- 	_klen = _lexer_single_lengths[cs];
- 	if ( _klen > 0 ) {
- 		const char *_lower = _keys;
- 		const char *_mid;
- 		const char *_upper = _keys + _klen - 1;
- 		while (1) {
- 			if ( _upper < _lower )
- 				break;
- 
- 			_mid = _lower + ((_upper-_lower) >> 1);
- 			if ( (*p) < *_mid )
- 				_upper = _mid - 1;
- 			else if ( (*p) > *_mid )
- 				_lower = _mid + 1;
- 			else {
- 				_trans += (_mid - _keys);
- 				goto _match;
- 			}
- 		}
- 		_keys += _klen;
- 		_trans += _klen;
- 	}
- 
- 	_klen = _lexer_range_lengths[cs];
- 	if ( _klen > 0 ) {
- 		const char *_lower = _keys;
- 		const char *_mid;
- 		const char *_upper = _keys + (_klen<<1) - 2;
- 		while (1) {
- 			if ( _upper < _lower )
- 				break;
- 
- 			_mid = _lower + (((_upper-_lower) >> 1) & ~1);
- 			if ( (*p) < _mid[0] )
- 				_upper = _mid - 2;
- 			else if ( (*p) > _mid[1] )
- 				_lower = _mid + 2;
- 			else {
- 				_trans += ((_mid - _keys)>>1);
- 				goto _match;
- 			}
- 		}
- 		_trans += _klen;
- 	}
- 
- _match:
- 	cs = _lexer_trans_targs[_trans];
- 
- 	if ( _lexer_trans_actions[_trans] == 0 )
- 		goto _again;
- 
- 	_acts = _lexer_actions + _lexer_trans_actions[_trans];
- 	_nacts = (unsigned int) *_acts++;
- 	while ( _nacts-- > 0 )
- 	{
- 		switch ( *_acts++ )
- 		{
- 	case 0:
- #line 83 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ca.c.rl"
- 	{
- 		MARK(content_start, p);
-     lexer->current_line = lexer->line_number;
-     lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2;
-   }
- 	break;
- 	case 1:
- #line 89 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ca.c.rl"
- 	{
-     MARK(content_start, p);
-   }
- 	break;
- 	case 2:
- #line 93 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ca.c.rl"
- 	{
-     lexer->current_line = lexer->line_number;
-     lexer->start_col = p - data - lexer->last_newline;
-   }
- 	break;
- 	case 3:
- #line 98 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ca.c.rl"
- 	{
-     int len = LEN(content_start, PTR_TO(final_newline));
-     int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end));
- 
-     if (len < 0) len = 0;
-     if (type_len < 0) len = 0;
- 
-     store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line);
-   }
- 	break;
- 	case 4:
- #line 108 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ca.c.rl"
- 	{ 
-     MARK(docstring_content_type_start, p);
-   }
- 	break;
- 	case 5:
- #line 112 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ca.c.rl"
- 	{ 
-     MARK(docstring_content_type_end, p);
-   }
- 	break;
- 	case 6:
- #line 116 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ca.c.rl"
- 	{
-     STORE_KW_END_CON(feature);
-   }
- 	break;
- 	case 7:
- #line 120 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ca.c.rl"
- 	{
-     STORE_KW_END_CON(background);
-   }
- 	break;
- 	case 8:
- #line 124 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ca.c.rl"
- 	{
-     STORE_KW_END_CON(scenario);
-   }
- 	break;
- 	case 9:
- #line 128 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ca.c.rl"
- 	{
-     STORE_KW_END_CON(scenario_outline);
-   }
- 	break;
- 	case 10:
- #line 132 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ca.c.rl"
- 	{
-     STORE_KW_END_CON(examples);
-   }
- 	break;
- 	case 11:
- #line 136 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ca.c.rl"
- 	{
-     store_kw_con(listener, "step",
-       PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-       PTR_TO(content_start), LEN(content_start, p), 
-       lexer->current_line);
-   }
- 	break;
- 	case 12:
- #line 143 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ca.c.rl"
- 	{
-     STORE_ATTR(comment);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 13:
- #line 148 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ca.c.rl"
- 	{
-     STORE_ATTR(tag);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 14:
- #line 153 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ca.c.rl"
- 	{
-     lexer->line_number += 1;
-     MARK(final_newline, p);
-   }
- 	break;
- 	case 15:
- #line 158 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ca.c.rl"
- 	{
-     MARK(last_newline, p + 1);
-   }
- 	break;
- 	case 16:
- #line 162 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ca.c.rl"
- 	{
-     if (lexer->mark == 0) {
-       MARK(mark, p);
-     }
-   }
- 	break;
- 	case 17:
- #line 168 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ca.c.rl"
- 	{
-     MARK(keyword_end, p);
-     MARK(keyword_start, PTR_TO(mark));
-     MARK(content_start, p + 1);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 18:
- #line 175 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ca.c.rl"
- 	{
-     MARK(content_end, p);
-   }
- 	break;
- 	case 19:
- #line 179 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ca.c.rl"
- 	{
-     p = p - 1;
-     lexer->current_line = lexer->line_number;
-     current_row = rb_ary_new();
-   }
- 	break;
- 	case 20:
- #line 185 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ca.c.rl"
- 	{
- 		MARK(content_start, p);
-   }
- 	break;
- 	case 21:
- #line 189 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ca.c.rl"
- 	{
-     VALUE re_pipe, re_newline, re_backslash;
-     VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
-     rb_funcall(con, rb_intern("strip!"), 0);
-     re_pipe      = rb_reg_regcomp(rb_str_new2("\\\\\\|"));
-     re_newline   = rb_reg_regcomp(rb_str_new2("\\\\n"));
-     re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_pipe,      rb_str_new2("|"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_newline,   rb_str_new2("\n"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\"));
- 
-     rb_ary_push(current_row, con);
-   }
- 	break;
- 	case 22:
- #line 203 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ca.c.rl"
- 	{
-     rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
-   }
- 	break;
- 	case 23:
- #line 207 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ca.c.rl"
- 	{
-     int line;
-     if (cs < lexer_first_final) {
-       size_t count = 0;
-       VALUE newstr_val;
-       char *newstr;
-       int newstr_count = 0;        
-       size_t len;
-       const char *buff;
-       if (lexer->last_newline != 0) {
-         len = LEN(last_newline, eof);
-         buff = PTR_TO(last_newline);
-       } else {
-         len = strlen(data);
-         buff = data;
-       }
- 
-       // Allocate as a ruby string so that it gets cleaned up by GC
-       newstr_val = rb_str_new(buff, len);
-       newstr = RSTRING_PTR(newstr_val);
- 
- 
-       for (count = 0; count < len; count++) {
-         if(buff[count] == 10) {
-           newstr[newstr_count] = '\0'; // terminate new string at first newline found
-           break;
-         } else {
-           if (buff[count] == '%') {
-             newstr[newstr_count++] = buff[count];
-             newstr[newstr_count] = buff[count];
-           } else {
-             newstr[newstr_count] = buff[count];
-           }
-         }
-         newstr_count++;
-       }
- 
-       line = lexer->line_number;
-       lexer_init(lexer); // Re-initialize so we can scan again with the same lexer
-       raise_lexer_error(newstr, line);
-     } else {
-       rb_funcall(listener, rb_intern("eof"), 0);
-     }
-   }
- 	break;
- #line 1482 "ext/gherkin_lexer_ca/gherkin_lexer_ca.c"
- 		}
- 	}
- 
- _again:
- 	if ( cs == 0 )
- 		goto _out;
- 	if ( ++p != pe )
- 		goto _resume;
- 	_test_eof: {}
- 	if ( p == eof )
- 	{
- 	const char *__acts = _lexer_actions + _lexer_eof_actions[cs];
- 	unsigned int __nacts = (unsigned int) *__acts++;
- 	while ( __nacts-- > 0 ) {
- 		switch ( *__acts++ ) {
- 	case 23:
- #line 207 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ca.c.rl"
- 	{
-     int line;
-     if (cs < lexer_first_final) {
-       size_t count = 0;
-       VALUE newstr_val;
-       char *newstr;
-       int newstr_count = 0;        
-       size_t len;
-       const char *buff;
-       if (lexer->last_newline != 0) {
-         len = LEN(last_newline, eof);
-         buff = PTR_TO(last_newline);
-       } else {
-         len = strlen(data);
-         buff = data;
-       }
- 
-       // Allocate as a ruby string so that it gets cleaned up by GC
-       newstr_val = rb_str_new(buff, len);
-       newstr = RSTRING_PTR(newstr_val);
- 
- 
-       for (count = 0; count < len; count++) {
-         if(buff[count] == 10) {
-           newstr[newstr_count] = '\0'; // terminate new string at first newline found
-           break;
-         } else {
-           if (buff[count] == '%') {
-             newstr[newstr_count++] = buff[count];
-             newstr[newstr_count] = buff[count];
-           } else {
-             newstr[newstr_count] = buff[count];
-           }
-         }
-         newstr_count++;
-       }
- 
-       line = lexer->line_number;
-       lexer_init(lexer); // Re-initialize so we can scan again with the same lexer
-       raise_lexer_error(newstr, line);
-     } else {
-       rb_funcall(listener, rb_intern("eof"), 0);
-     }
-   }
- 	break;
- #line 1545 "ext/gherkin_lexer_ca/gherkin_lexer_ca.c"
- 		}
- 	}
- 	}
- 
- 	_out: {}
- 	}
- 
- #line 426 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ca.c.rl"
- 
-     assert(p <= pe && "data overflow after parsing execute");
-     assert(lexer->content_start <= len && "content starts after data end");
-     assert(lexer->mark < len && "mark is after data end");
-     
-     // Reset lexer by re-initializing the whole thing
-     lexer_init(lexer);
- 
-     if (cs == lexer_error) {
-       rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails.");
-     } else {
-       return Qtrue;
-     }
-   }
- }
- 
- void Init_gherkin_lexer_ca()
- {
-   mGherkin = rb_define_module("Gherkin");
-   mGherkinLexer = rb_define_module_under(mGherkin, "Lexer");
-   rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError"));
- 
-   mCLexer = rb_define_module_under(mGherkin, "CLexer");
-   cI18nLexer = rb_define_class_under(mCLexer, "Ca", rb_cObject);
-   rb_define_alloc_func(cI18nLexer, CLexer_alloc);
-   rb_define_method(cI18nLexer, "initialize", CLexer_init, 1);
-   rb_define_method(cI18nLexer, "scan", CLexer_scan, 1);
- }
- 
 -#line 1 "ragel/i18n/ca.c.rl"
 -#include <assert.h>
 -#include <ruby.h>
 -
 -#if defined(_WIN32)
 -#include <stddef.h>
 -#endif
 -
 -#ifdef HAVE_RUBY_RE_H
 -#include <ruby/re.h>
 -#else
 -#include <re.h>
 -#endif
 -
 -#ifdef HAVE_RUBY_ENCODING_H
 -#include <ruby/encoding.h>
 -#define ENCODED_STR_NEW(ptr, len) \
 -    rb_enc_str_new(ptr, len, rb_utf8_encoding())
 -#else
 -#define ENCODED_STR_NEW(ptr, len) \
 -    rb_str_new(ptr, len)
 -#endif
 -
 -#ifndef RSTRING_PTR
 -#define RSTRING_PTR(s) (RSTRING(s)->ptr)
 -#endif
 -
 -#ifndef RSTRING_LEN
 -#define RSTRING_LEN(s) (RSTRING(s)->len)
 -#endif
 -
 -#define DATA_GET(FROM, TYPE, NAME) \
 -  Data_Get_Struct(FROM, TYPE, NAME); \
 -  if (NAME == NULL) { \
 -    rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \
 -  }
 - 
 -typedef struct lexer_state {
 -  int content_len;
 -  int line_number;
 -  int current_line;
 -  int start_col;
 -  size_t mark;
 -  size_t keyword_start;
 -  size_t keyword_end;
 -  size_t next_keyword_start;
 -  size_t content_start;
 -  size_t content_end;
 -  size_t docstring_content_type_start;
 -  size_t docstring_content_type_end;
 -  size_t query_start;
 -  size_t last_newline;
 -  size_t final_newline;
 -} lexer_state;
 -
 -static VALUE mGherkin;
 -static VALUE mGherkinLexer;
 -static VALUE mCLexer;
 -static VALUE cI18nLexer;
 -static VALUE rb_eGherkinLexingError;
 -
 -#define LEN(AT, P) (P - data - lexer->AT)
 -#define MARK(M, P) (lexer->M = (P) - data)
 -#define PTR_TO(P) (data + lexer->P)
 -
 -#define STORE_KW_END_CON(EVENT) \
 -  store_multiline_kw_con(listener, # EVENT, \
 -    PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \
 -    PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \
 -    lexer->current_line, lexer->start_col); \
 -    if (lexer->content_end != 0) { \
 -      p = PTR_TO(content_end - 1); \
 -    } \
 -    lexer->content_end = 0
 -
 -#define STORE_ATTR(ATTR) \
 -    store_attr(listener, # ATTR, \
 -      PTR_TO(content_start), LEN(content_start, p), \
 -      lexer->line_number)
 -
 -
 -#line 254 "ragel/i18n/ca.c.rl"
 -
 -
 -/** Data **/
 -
 -#line 89 "ext/gherkin_lexer_ca/gherkin_lexer_ca.c"
 -static const char _lexer_actions[] = {
 -	0, 1, 0, 1, 1, 1, 2, 1, 
 -	3, 1, 4, 1, 5, 1, 6, 1, 
 -	7, 1, 8, 1, 9, 1, 10, 1, 
 -	11, 1, 12, 1, 13, 1, 16, 1, 
 -	17, 1, 18, 1, 19, 1, 20, 1, 
 -	21, 1, 22, 1, 23, 2, 1, 18, 
 -	2, 4, 5, 2, 13, 0, 2, 14, 
 -	15, 2, 17, 0, 2, 17, 2, 2, 
 -	17, 16, 2, 17, 19, 2, 18, 6, 
 -	2, 18, 7, 2, 18, 8, 2, 18, 
 -	9, 2, 18, 10, 2, 18, 16, 2, 
 -	20, 21, 2, 22, 0, 2, 22, 2, 
 -	2, 22, 16, 2, 22, 19, 3, 3, 
 -	14, 15, 3, 5, 14, 15, 3, 11, 
 -	14, 15, 3, 12, 14, 15, 3, 13, 
 -	14, 15, 3, 14, 15, 18, 3, 17, 
 -	0, 11, 3, 17, 14, 15, 4, 1, 
 -	14, 15, 18, 4, 4, 5, 14, 15, 
 -	4, 17, 0, 14, 15, 5, 17, 0, 
 -	11, 14, 15
 -};
 -
 -static const short _lexer_key_offsets[] = {
 -	0, 0, 20, 21, 22, 41, 42, 43, 
 -	45, 47, 52, 57, 62, 67, 71, 75, 
 -	77, 78, 79, 80, 81, 82, 83, 84, 
 -	85, 86, 87, 88, 89, 90, 91, 92, 
 -	93, 95, 97, 102, 109, 114, 117, 118, 
 -	119, 120, 121, 122, 123, 124, 125, 126, 
 -	127, 128, 129, 130, 131, 132, 133, 134, 
 -	135, 136, 152, 154, 156, 158, 160, 162, 
 -	164, 166, 168, 170, 172, 174, 176, 178, 
 -	180, 182, 201, 202, 204, 205, 206, 207, 
 -	208, 209, 210, 211, 212, 213, 214, 215, 
 -	216, 217, 218, 219, 231, 233, 235, 237, 
 -	239, 241, 243, 245, 247, 249, 251, 253, 
 -	255, 257, 259, 261, 263, 265, 267, 269, 
 -	271, 273, 275, 277, 279, 281, 283, 285, 
 -	287, 289, 291, 293, 295, 297, 299, 301, 
 -	303, 305, 307, 309, 312, 315, 317, 319, 
 -	321, 323, 325, 327, 329, 331, 333, 335, 
 -	337, 339, 341, 343, 345, 347, 349, 351, 
 -	353, 355, 357, 359, 361, 363, 365, 367, 
 -	369, 371, 373, 375, 377, 379, 381, 383, 
 -	385, 387, 389, 391, 393, 395, 397, 398, 
 -	399, 400, 402, 403, 405, 407, 408, 409, 
 -	410, 411, 412, 413, 414, 415, 432, 434, 
 -	436, 438, 440, 442, 444, 446, 448, 450, 
 -	452, 454, 456, 458, 460, 462, 466, 468, 
 -	470, 472, 474, 476, 478, 480, 482, 484, 
 -	486, 488, 490, 492, 494, 496, 498, 500, 
 -	503, 505, 507, 509, 511, 514, 516, 518, 
 -	520, 522, 524, 526, 528, 530, 532, 534, 
 -	536, 538, 540, 542, 544, 547, 549, 552, 
 -	554, 556, 558, 560, 562, 564, 566, 568, 
 -	570, 572, 574, 576, 578, 580, 582, 584, 
 -	586, 588, 590, 592, 594, 596, 598, 600, 
 -	602, 604, 606, 608, 610, 612, 614, 616, 
 -	618, 620, 622, 624, 626, 628, 630, 632, 
 -	634, 636, 638, 639, 640, 641, 642, 643, 
 -	644, 645, 646, 647, 648, 649, 650, 651, 
 -	652, 653, 654, 655, 656, 657, 658, 659, 
 -	675, 677, 679, 681, 683, 685, 687, 689, 
 -	691, 693, 695, 697, 699, 701, 703, 705, 
 -	708, 710, 712, 714, 716, 718, 720, 722, 
 -	725, 727, 729, 731, 733, 736, 738, 740, 
 -	742, 744, 746, 748, 750, 752, 754, 756, 
 -	758, 760, 762, 764, 766, 768, 771, 773, 
 -	775, 777, 779, 781, 783, 785, 787, 789, 
 -	791, 793, 795, 797, 799, 801, 803, 805, 
 -	807, 809, 811, 813, 815, 817, 819, 821, 
 -	823, 824, 825, 826, 827, 828, 829, 830, 
 -	831, 832, 840, 842, 844, 846, 848, 850, 
 -	852, 854, 856, 858, 860, 862, 864, 866, 
 -	868, 870, 872, 874, 876, 878, 880, 882, 
 -	884, 886, 888, 890, 892, 894, 895, 896, 
 -	897, 898, 899, 900, 901, 902, 903, 904, 
 -	905, 906, 907, 908, 909, 910, 911, 912, 
 -	913, 914, 915, 916, 917, 918, 919, 923, 
 -	929, 932, 934, 940, 959, 962, 964, 966, 
 -	968, 970, 972, 974, 976, 979, 981, 983, 
 -	985, 987, 990, 992, 994, 996, 998, 1000, 
 -	1002, 1004, 1006, 1008, 1010, 1012, 1014, 1016, 
 -	1018, 1020, 1022, 1025, 1027, 1030, 1032, 1034, 
 -	1036, 1038, 1040, 1042, 1044, 1046, 1048, 1050, 
 -	1052, 1054, 1056, 1058, 1060, 1062, 1064, 1066, 
 -	1068, 1070, 1072, 1074, 1076, 1078, 1080, 1082, 
 -	1084, 1086, 1088, 1090, 1092, 1094, 1096, 1098, 
 -	1100, 1102, 1104, 1106, 1107, 1108
 -};
 -
 -static const char _lexer_trans_keys[] = {
 -	-17, 10, 32, 34, 35, 37, 42, 64, 
 -	65, 67, 68, 69, 70, 73, 80, 81, 
 -	82, 124, 9, 13, -69, -65, 10, 32, 
 -	34, 35, 37, 42, 64, 65, 67, 68, 
 -	69, 70, 73, 80, 81, 82, 124, 9, 
 -	13, 34, 34, 10, 13, 10, 13, 10, 
 -	32, 34, 9, 13, 10, 32, 34, 9, 
 -	13, 10, 32, 34, 9, 13, 10, 32, 
 -	34, 9, 13, 10, 32, 9, 13, 10, 
 -	32, 9, 13, 10, 13, 10, 95, 70, 
 -	69, 65, 84, 85, 82, 69, 95, 69, 
 -	78, 68, 95, 37, 32, 10, 13, 10, 
 -	13, 13, 32, 64, 9, 10, 9, 10, 
 -	13, 32, 64, 11, 12, 10, 32, 64, 
 -	9, 13, 108, 110, 116, 101, 115, 104, 
 -	111, 114, 101, 115, 116, 101, 99, 101, 
 -	100, 101, 110, 116, 115, 58, 10, 10, 
 -	10, 32, 35, 37, 42, 64, 65, 67, 
 -	68, 69, 70, 73, 80, 81, 9, 13, 
 -	10, 95, 10, 70, 10, 69, 10, 65, 
 -	10, 84, 10, 85, 10, 82, 10, 69, 
 -	10, 95, 10, 69, 10, 78, 10, 68, 
 -	10, 95, 10, 37, 10, 32, 10, 32, 
 -	34, 35, 37, 42, 64, 65, 67, 68, 
 -	69, 70, 73, 80, 81, 82, 124, 9, 
 -	13, 97, 108, 114, 97, 99, 116, 101, 
 -	114, -61, -83, 115, 116, 105, 99, 97, 
 -	58, 10, 10, 10, 32, 35, 37, 64, 
 -	65, 67, 69, 70, 82, 9, 13, 10, 
 -	95, 10, 70, 10, 69, 10, 65, 10, 
 -	84, 10, 85, 10, 82, 10, 69, 10, 
 -	95, 10, 69, 10, 78, 10, 68, 10, 
 -	95, 10, 37, 10, 110, 10, 116, 10, 
 -	101, 10, 99, 10, 101, 10, 100, 10, 
 -	101, 10, 110, 10, 116, 10, 115, 10, 
 -	58, 10, 97, 10, 114, 10, 97, 10, 
 -	99, 10, 116, 10, 101, 10, 114, -61, 
 -	10, -83, 10, 10, 115, 10, 116, 10, 
 -	105, 10, 99, 10, 97, 10, 115, 120, 
 -	10, 99, 113, 10, 101, 10, 110, 10, 
 -	97, 10, 114, 10, 105, 10, 117, 10, 
 -	101, 10, 109, 10, 97, 10, 32, 10, 
 -	100, 10, 101, 10, 32, 10, 108, 10, 
 -	39, 10, 101, 10, 115, 10, 99, 10, 
 -	101, 10, 109, 10, 112, 10, 108, 10, 
 -	101, 10, 117, 10, 110, 10, 99, 10, 
 -	105, 10, 111, 10, 110, 10, 97, 10, 
 -	108, 10, 105, 10, 116, 10, 97, 10, 
 -	116, 10, 101, 10, 114, 10, 101, 10, 
 -	102, 10, 111, 10, 110, 111, 110, 97, 
 -	100, 116, 97, 115, 120, 99, 113, 101, 
 -	110, 97, 114, 105, 58, 10, 10, 10, 
 -	32, 35, 37, 42, 64, 65, 67, 68, 
 -	69, 70, 73, 80, 81, 82, 9, 13, 
 -	10, 95, 10, 70, 10, 69, 10, 65, 
 -	10, 84, 10, 85, 10, 82, 10, 69, 
 -	10, 95, 10, 69, 10, 78, 10, 68, 
 -	10, 95, 10, 37, 10, 32, 10, 108, 
 -	110, 116, 10, 101, 10, 115, 10, 104, 
 -	10, 111, 10, 114, 10, 101, 10, 115, 
 -	10, 116, 10, 101, 10, 99, 10, 101, 
 -	10, 100, 10, 101, 10, 110, 10, 116, 
 -	10, 115, 10, 58, -61, 10, 101, -88, 
 -	10, 10, 115, 10, 97, 10, 97, 10, 
 -	108, 114, 10, 97, 10, 99, 10, 116, 
 -	10, 101, 10, 114, -61, 10, -83, 10, 
 -	10, 115, 10, 116, 10, 105, 10, 99, 
 -	10, 97, 10, 111, 10, 110, 10, 97, 
 -	10, 100, 116, 10, 115, 10, 99, 113, 
 -	10, 101, 10, 110, 10, 97, 10, 114, 
 -	10, 105, 10, 117, 10, 101, 10, 109, 
 -	10, 97, 10, 32, 10, 100, 10, 101, 
 -	10, 32, 10, 108, 10, 39, 10, 101, 
 -	10, 115, 10, 99, 10, 117, 10, 110, 
 -	10, 99, 10, 105, 10, 111, 10, 110, 
 -	10, 97, 10, 108, 10, 105, 10, 116, 
 -	10, 97, 10, 116, 10, 101, 10, 114, 
 -	-61, 10, -78, 10, 10, 117, 10, 97, 
 -	10, 110, 10, 101, 10, 114, 10, 101, 
 -	10, 102, 10, 111, 10, 110, 117, 101, 
 -	109, 97, 32, 100, 101, 32, 108, 39, 
 -	101, 115, 99, 101, 110, 97, 114, 105, 
 -	58, 10, 10, 10, 32, 35, 37, 42, 
 -	64, 65, 67, 68, 69, 70, 73, 80, 
 -	81, 9, 13, 10, 95, 10, 70, 10, 
 -	69, 10, 65, 10, 84, 10, 85, 10, 
 -	82, 10, 69, 10, 95, 10, 69, 10, 
 -	78, 10, 68, 10, 95, 10, 37, 10, 
 -	32, 10, 108, 116, 10, 101, 10, 115, 
 -	10, 104, 10, 111, 10, 114, 10, 101, 
 -	10, 115, -61, 10, 101, -88, 10, 10, 
 -	115, 10, 97, 10, 97, 10, 108, 114, 
 -	10, 97, 10, 99, 10, 116, 10, 101, 
 -	10, 114, -61, 10, -83, 10, 10, 115, 
 -	10, 116, 10, 105, 10, 99, 10, 97, 
 -	10, 58, 10, 111, 10, 110, 10, 97, 
 -	10, 100, 116, 10, 115, 10, 99, 10, 
 -	101, 10, 110, 10, 97, 10, 114, 10, 
 -	105, 10, 117, 10, 110, 10, 99, 10, 
 -	105, 10, 111, 10, 110, 10, 97, 10, 
 -	108, 10, 105, 10, 116, 10, 97, 10, 
 -	116, 10, 101, 10, 114, -61, 10, -78, 
 -	10, 10, 117, 10, 97, 10, 110, 101, 
 -	109, 112, 108, 101, 115, 58, 10, 10, 
 -	10, 32, 35, 67, 70, 124, 9, 13, 
 -	10, 97, 10, 114, 10, 97, 10, 99, 
 -	10, 116, 10, 101, 10, 114, -61, 10, 
 -	-83, 10, 10, 115, 10, 116, 10, 105, 
 -	10, 99, 10, 97, 10, 58, 10, 117, 
 -	10, 110, 10, 99, 10, 105, 10, 111, 
 -	10, 110, 10, 97, 10, 108, 10, 105, 
 -	10, 116, 10, 97, 10, 116, 117, 110, 
 -	99, 105, 111, 110, 97, 108, 105, 116, 
 -	97, 116, 101, 114, -61, -78, 117, 97, 
 -	110, 101, 114, 101, 102, 111, 110, 32, 
 -	124, 9, 13, 10, 32, 92, 124, 9, 
 -	13, 10, 92, 124, 10, 92, 10, 32, 
 -	92, 124, 9, 13, 10, 32, 34, 35, 
 -	37, 42, 64, 65, 67, 68, 69, 70, 
 -	73, 80, 81, 82, 124, 9, 13, 10, 
 -	108, 116, 10, 101, 10, 115, 10, 104, 
 -	10, 111, 10, 114, 10, 101, 10, 115, 
 -	-61, 10, 101, -88, 10, 10, 115, 10, 
 -	97, 10, 97, 10, 108, 114, 10, 97, 
 -	10, 99, 10, 116, 10, 101, 10, 114, 
 -	-61, 10, -83, 10, 10, 115, 10, 116, 
 -	10, 105, 10, 99, 10, 97, 10, 58, 
 -	10, 111, 10, 110, 10, 97, 10, 100, 
 -	116, 10, 115, 10, 99, 113, 10, 101, 
 -	10, 110, 10, 97, 10, 114, 10, 105, 
 -	10, 117, 10, 101, 10, 109, 10, 97, 
 -	10, 32, 10, 100, 10, 101, 10, 32, 
 -	10, 108, 10, 39, 10, 101, 10, 115, 
 -	10, 99, 10, 117, 10, 110, 10, 99, 
 -	10, 105, 10, 111, 10, 110, 10, 97, 
 -	10, 108, 10, 105, 10, 116, 10, 97, 
 -	10, 116, 10, 101, 10, 114, -61, 10, 
 -	-78, 10, 10, 117, 10, 97, 10, 110, 
 -	-61, 101, -88, 115, 0
 -};
 -
 -static const char _lexer_single_lengths[] = {
 -	0, 18, 1, 1, 17, 1, 1, 2, 
 -	2, 3, 3, 3, 3, 2, 2, 2, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	2, 2, 3, 5, 3, 3, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 14, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 17, 1, 2, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 10, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 3, 3, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 1, 1, 
 -	1, 2, 1, 2, 2, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 15, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 4, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 3, 
 -	2, 2, 2, 2, 3, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 3, 2, 3, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 14, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 3, 
 -	2, 2, 2, 2, 2, 2, 2, 3, 
 -	2, 2, 2, 2, 3, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 3, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 6, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 2, 4, 
 -	3, 2, 4, 17, 3, 2, 2, 2, 
 -	2, 2, 2, 2, 3, 2, 2, 2, 
 -	2, 3, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 3, 2, 3, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 1, 1, 0
 -};
 -
 -static const char _lexer_range_lengths[] = {
 -	0, 1, 0, 0, 1, 0, 0, 0, 
 -	0, 1, 1, 1, 1, 1, 1, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 1, 1, 1, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 1, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 1, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 1, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 1, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 1, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 1, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 1, 1, 
 -	0, 0, 1, 1, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0
 -};
 -
 -static const short _lexer_index_offsets[] = {
 -	0, 0, 20, 22, 24, 43, 45, 47, 
 -	50, 53, 58, 63, 68, 73, 77, 81, 
 -	84, 86, 88, 90, 92, 94, 96, 98, 
 -	100, 102, 104, 106, 108, 110, 112, 114, 
 -	116, 119, 122, 127, 134, 139, 143, 145, 
 -	147, 149, 151, 153, 155, 157, 159, 161, 
 -	163, 165, 167, 169, 171, 173, 175, 177, 
 -	179, 181, 197, 200, 203, 206, 209, 212, 
 -	215, 218, 221, 224, 227, 230, 233, 236, 
 -	239, 242, 261, 263, 266, 268, 270, 272, 
 -	274, 276, 278, 280, 282, 284, 286, 288, 
 -	290, 292, 294, 296, 308, 311, 314, 317, 
 -	320, 323, 326, 329, 332, 335, 338, 341, 
 -	344, 347, 350, 353, 356, 359, 362, 365, 
 -	368, 371, 374, 377, 380, 383, 386, 389, 
 -	392, 395, 398, 401, 404, 407, 410, 413, 
 -	416, 419, 422, 425, 429, 433, 436, 439, 
 -	442, 445, 448, 451, 454, 457, 460, 463, 
 -	466, 469, 472, 475, 478, 481, 484, 487, 
 -	490, 493, 496, 499, 502, 505, 508, 511, 
 -	514, 517, 520, 523, 526, 529, 532, 535, 
 -	538, 541, 544, 547, 550, 553, 556, 558, 
 -	560, 562, 565, 567, 570, 573, 575, 577, 
 -	579, 581, 583, 585, 587, 589, 606, 609, 
 -	612, 615, 618, 621, 624, 627, 630, 633, 
 -	636, 639, 642, 645, 648, 651, 656, 659, 
 -	662, 665, 668, 671, 674, 677, 680, 683, 
 -	686, 689, 692, 695, 698, 701, 704, 707, 
 -	711, 714, 717, 720, 723, 727, 730, 733, 
 -	736, 739, 742, 745, 748, 751, 754, 757, 
 -	760, 763, 766, 769, 772, 776, 779, 783, 
 -	786, 789, 792, 795, 798, 801, 804, 807, 
 -	810, 813, 816, 819, 822, 825, 828, 831, 
 -	834, 837, 840, 843, 846, 849, 852, 855, 
 -	858, 861, 864, 867, 870, 873, 876, 879, 
 -	882, 885, 888, 891, 894, 897, 900, 903, 
 -	906, 909, 912, 914, 916, 918, 920, 922, 
 -	924, 926, 928, 930, 932, 934, 936, 938, 
 -	940, 942, 944, 946, 948, 950, 952, 954, 
 -	970, 973, 976, 979, 982, 985, 988, 991, 
 -	994, 997, 1000, 1003, 1006, 1009, 1012, 1015, 
 -	1019, 1022, 1025, 1028, 1031, 1034, 1037, 1040, 
 -	1044, 1047, 1050, 1053, 1056, 1060, 1063, 1066, 
 -	1069, 1072, 1075, 1078, 1081, 1084, 1087, 1090, 
 -	1093, 1096, 1099, 1102, 1105, 1108, 1112, 1115, 
 -	1118, 1121, 1124, 1127, 1130, 1133, 1136, 1139, 
 -	1142, 1145, 1148, 1151, 1154, 1157, 1160, 1163, 
 -	1166, 1169, 1172, 1175, 1178, 1181, 1184, 1187, 
 -	1190, 1192, 1194, 1196, 1198, 1200, 1202, 1204, 
 -	1206, 1208, 1216, 1219, 1222, 1225, 1228, 1231, 
 -	1234, 1237, 1240, 1243, 1246, 1249, 1252, 1255, 
 -	1258, 1261, 1264, 1267, 1270, 1273, 1276, 1279, 
 -	1282, 1285, 1288, 1291, 1294, 1297, 1299, 1301, 
 -	1303, 1305, 1307, 1309, 1311, 1313, 1315, 1317, 
 -	1319, 1321, 1323, 1325, 1327, 1329, 1331, 1333, 
 -	1335, 1337, 1339, 1341, 1343, 1345, 1347, 1351, 
 -	1357, 1361, 1364, 1370, 1389, 1393, 1396, 1399, 
 -	1402, 1405, 1408, 1411, 1414, 1418, 1421, 1424, 
 -	1427, 1430, 1434, 1437, 1440, 1443, 1446, 1449, 
 -	1452, 1455, 1458, 1461, 1464, 1467, 1470, 1473, 
 -	1476, 1479, 1482, 1486, 1489, 1493, 1496, 1499, 
 -	1502, 1505, 1508, 1511, 1514, 1517, 1520, 1523, 
 -	1526, 1529, 1532, 1535, 1538, 1541, 1544, 1547, 
 -	1550, 1553, 1556, 1559, 1562, 1565, 1568, 1571, 
 -	1574, 1577, 1580, 1583, 1586, 1589, 1592, 1595, 
 -	1598, 1601, 1604, 1607, 1609, 1611
 -};
 -
 -static const short _lexer_trans_targs[] = {
 -	2, 4, 4, 5, 15, 17, 31, 34, 
 -	37, 74, 174, 179, 421, 31, 433, 437, 
 -	440, 446, 4, 0, 3, 0, 4, 0, 
 -	4, 4, 5, 15, 17, 31, 34, 37, 
 -	74, 174, 179, 421, 31, 433, 437, 440, 
 -	446, 4, 0, 6, 0, 7, 0, 9, 
 -	8, 8, 9, 8, 8, 10, 10, 11, 
 -	10, 10, 10, 10, 11, 10, 10, 10, 
 -	10, 12, 10, 10, 10, 10, 13, 10, 
 -	10, 4, 14, 14, 0, 4, 14, 14, 
 -	0, 4, 16, 15, 4, 0, 18, 0, 
 -	19, 0, 20, 0, 21, 0, 22, 0, 
 -	23, 0, 24, 0, 25, 0, 26, 0, 
 -	27, 0, 28, 0, 29, 0, 30, 0, 
 -	525, 0, 32, 0, 4, 16, 33, 4, 
 -	16, 33, 0, 0, 0, 0, 35, 36, 
 -	4, 36, 36, 34, 35, 35, 4, 36, 
 -	34, 36, 0, 38, 45, 522, 0, 39, 
 -	0, 40, 0, 41, 0, 42, 0, 43, 
 -	0, 44, 0, 31, 0, 46, 0, 47, 
 -	0, 48, 0, 49, 0, 50, 0, 51, 
 -	0, 52, 0, 53, 0, 54, 0, 55, 
 -	0, 57, 56, 57, 56, 57, 57, 4, 
 -	58, 72, 4, 452, 464, 479, 483, 503, 
 -	72, 515, 519, 57, 56, 57, 59, 56, 
 -	57, 60, 56, 57, 61, 56, 57, 62, 
 -	56, 57, 63, 56, 57, 64, 56, 57, 
 -	65, 56, 57, 66, 56, 57, 67, 56, 
 -	57, 68, 56, 57, 69, 56, 57, 70, 
 -	56, 57, 71, 56, 57, 4, 56, 57, 
 -	73, 56, 4, 4, 5, 15, 17, 31, 
 -	34, 37, 74, 174, 179, 421, 31, 433, 
 -	437, 440, 446, 4, 0, 75, 0, 31, 
 -	76, 0, 77, 0, 78, 0, 79, 0, 
 -	80, 0, 81, 0, 82, 0, 83, 0, 
 -	84, 0, 85, 0, 86, 0, 87, 0, 
 -	88, 0, 89, 0, 91, 90, 91, 90, 
 -	91, 91, 4, 92, 4, 106, 117, 131, 
 -	156, 168, 91, 90, 91, 93, 90, 91, 
 -	94, 90, 91, 95, 90, 91, 96, 90, 
 -	91, 97, 90, 91, 98, 90, 91, 99, 
 -	90, 91, 100, 90, 91, 101, 90, 91, 
 -	102, 90, 91, 103, 90, 91, 104, 90, 
 -	91, 105, 90, 91, 4, 90, 91, 107, 
 -	90, 91, 108, 90, 91, 109, 90, 91, 
 -	110, 90, 91, 111, 90, 91, 112, 90, 
 -	91, 113, 90, 91, 114, 90, 91, 115, 
 -	90, 91, 116, 90, 91, 73, 90, 91, 
 -	118, 90, 91, 119, 90, 91, 120, 90, 
 -	91, 121, 90, 91, 122, 90, 91, 123, 
 -	90, 91, 124, 90, 125, 91, 90, 126, 
 -	91, 90, 91, 127, 90, 91, 128, 90, 
 -	91, 129, 90, 91, 130, 90, 91, 116, 
 -	90, 91, 132, 151, 90, 91, 133, 138, 
 -	90, 91, 134, 90, 91, 135, 90, 91, 
 -	136, 90, 91, 137, 90, 91, 116, 90, 
 -	91, 139, 90, 91, 140, 90, 91, 141, 
 -	90, 91, 142, 90, 91, 143, 90, 91, 
 -	144, 90, 91, 145, 90, 91, 146, 90, 
 -	91, 147, 90, 91, 148, 90, 91, 149, 
 -	90, 91, 150, 90, 91, 133, 90, 91, 
 -	152, 90, 91, 153, 90, 91, 154, 90, 
 -	91, 155, 90, 91, 115, 90, 91, 157, 
 -	90, 91, 158, 90, 91, 159, 90, 91, 
 -	160, 90, 91, 161, 90, 91, 162, 90, 
 -	91, 163, 90, 91, 164, 90, 91, 165, 
 -	90, 91, 166, 90, 91, 167, 90, 91, 
 -	116, 90, 91, 169, 90, 91, 170, 90, 
 -	91, 171, 90, 91, 172, 90, 91, 173, 
 -	90, 91, 115, 90, 175, 0, 176, 0, 
 -	177, 0, 178, 31, 0, 31, 0, 180, 
 -	384, 0, 181, 290, 0, 182, 0, 183, 
 -	0, 184, 0, 185, 0, 186, 0, 187, 
 -	0, 189, 188, 189, 188, 189, 189, 4, 
 -	190, 204, 4, 205, 227, 241, 245, 265, 
 -	204, 277, 281, 284, 189, 188, 189, 191, 
 -	188, 189, 192, 188, 189, 193, 188, 189, 
 -	194, 188, 189, 195, 188, 189, 196, 188, 
 -	189, 197, 188, 189, 198, 188, 189, 199, 
 -	188, 189, 200, 188, 189, 201, 188, 189, 
 -	202, 188, 189, 203, 188, 189, 4, 188, 
 -	189, 73, 188, 189, 206, 213, 223, 188, 
 -	189, 207, 188, 189, 208, 188, 189, 209, 
 -	188, 189, 210, 188, 189, 211, 188, 189, 
 -	212, 188, 189, 204, 188, 189, 214, 188, 
 -	189, 215, 188, 189, 216, 188, 189, 217, 
 -	188, 189, 218, 188, 189, 219, 188, 189, 
 -	220, 188, 189, 221, 188, 189, 222, 188, 
 -	189, 73, 188, 224, 189, 225, 188, 212, 
 -	189, 188, 189, 226, 188, 189, 204, 188, 
 -	189, 228, 188, 189, 204, 229, 188, 189, 
 -	230, 188, 189, 231, 188, 189, 232, 188, 
 -	189, 233, 188, 189, 234, 188, 235, 189, 
 -	188, 236, 189, 188, 189, 237, 188, 189, 
 -	238, 188, 189, 239, 188, 189, 240, 188, 
 -	189, 222, 188, 189, 242, 188, 189, 243, 
 -	188, 189, 244, 188, 189, 226, 204, 188, 
 -	189, 246, 188, 189, 247, 252, 188, 189, 
 -	248, 188, 189, 249, 188, 189, 250, 188, 
 -	189, 251, 188, 189, 222, 188, 189, 253, 
 -	188, 189, 254, 188, 189, 255, 188, 189, 
 -	256, 188, 189, 257, 188, 189, 258, 188, 
 -	189, 259, 188, 189, 260, 188, 189, 261, 
 -	188, 189, 262, 188, 189, 263, 188, 189, 
 -	264, 188, 189, 247, 188, 189, 266, 188, 
 -	189, 267, 188, 189, 268, 188, 189, 269, 
 -	188, 189, 270, 188, 189, 271, 188, 189, 
 -	272, 188, 189, 273, 188, 189, 274, 188, 
 -	189, 275, 188, 189, 276, 188, 189, 222, 
 -	188, 189, 278, 188, 189, 279, 188, 280, 
 -	189, 188, 204, 189, 188, 189, 282, 188, 
 -	189, 283, 188, 189, 204, 188, 189, 285, 
 -	188, 189, 286, 188, 189, 287, 188, 189, 
 -	288, 188, 189, 289, 188, 189, 221, 188, 
 -	291, 0, 292, 0, 293, 0, 294, 0, 
 -	295, 0, 296, 0, 297, 0, 298, 0, 
 -	299, 0, 300, 0, 301, 0, 302, 0, 
 -	303, 0, 304, 0, 305, 0, 306, 0, 
 -	307, 0, 308, 0, 309, 0, 311, 310, 
 -	311, 310, 311, 311, 4, 312, 326, 4, 
 -	327, 339, 354, 358, 365, 326, 377, 381, 
 -	311, 310, 311, 313, 310, 311, 314, 310, 
 -	311, 315, 310, 311, 316, 310, 311, 317, 
 -	310, 311, 318, 310, 311, 319, 310, 311, 
 -	320, 310, 311, 321, 310, 311, 322, 310, 
 -	311, 323, 310, 311, 324, 310, 311, 325, 
 -	310, 311, 4, 310, 311, 73, 310, 311, 
 -	328, 335, 310, 311, 329, 310, 311, 330, 
 -	310, 311, 331, 310, 311, 332, 310, 311, 
 -	333, 310, 311, 334, 310, 311, 326, 310, 
 -	336, 311, 337, 310, 334, 311, 310, 311, 
 -	338, 310, 311, 326, 310, 311, 340, 310, 
 -	311, 326, 341, 310, 311, 342, 310, 311, 
 -	343, 310, 311, 344, 310, 311, 345, 310, 
 -	311, 346, 310, 347, 311, 310, 348, 311, 
 -	310, 311, 349, 310, 311, 350, 310, 311, 
 -	351, 310, 311, 352, 310, 311, 353, 310, 
 -	311, 73, 310, 311, 355, 310, 311, 356, 
 -	310, 311, 357, 310, 311, 338, 326, 310, 
 -	311, 359, 310, 311, 360, 310, 311, 361, 
 -	310, 311, 362, 310, 311, 363, 310, 311, 
 -	364, 310, 311, 353, 310, 311, 366, 310, 
 -	311, 367, 310, 311, 368, 310, 311, 369, 
 -	310, 311, 370, 310, 311, 371, 310, 311, 
 -	372, 310, 311, 373, 310, 311, 374, 310, 
 -	311, 375, 310, 311, 376, 310, 311, 353, 
 -	310, 311, 378, 310, 311, 379, 310, 380, 
 -	311, 310, 326, 311, 310, 311, 382, 310, 
 -	311, 383, 310, 311, 326, 310, 385, 0, 
 -	386, 0, 387, 0, 388, 0, 389, 0, 
 -	390, 0, 391, 0, 393, 392, 393, 392, 
 -	393, 393, 4, 394, 409, 4, 393, 392, 
 -	393, 395, 392, 393, 396, 392, 393, 397, 
 -	392, 393, 398, 392, 393, 399, 392, 393, 
 -	400, 392, 393, 401, 392, 402, 393, 392, 
 -	403, 393, 392, 393, 404, 392, 393, 405, 
 -	392, 393, 406, 392, 393, 407, 392, 393, 
 -	408, 392, 393, 73, 392, 393, 410, 392, 
 -	393, 411, 392, 393, 412, 392, 393, 413, 
 -	392, 393, 414, 392, 393, 415, 392, 393, 
 -	416, 392, 393, 417, 392, 393, 418, 392, 
 -	393, 419, 392, 393, 420, 392, 393, 408, 
 -	392, 422, 0, 423, 0, 424, 0, 425, 
 -	0, 426, 0, 427, 0, 428, 0, 429, 
 -	0, 430, 0, 431, 0, 432, 0, 88, 
 -	0, 434, 0, 435, 0, 436, 0, 31, 
 -	0, 438, 0, 439, 0, 31, 0, 441, 
 -	0, 442, 0, 443, 0, 444, 0, 445, 
 -	0, 53, 0, 446, 447, 446, 0, 451, 
 -	450, 449, 447, 450, 448, 0, 449, 447, 
 -	448, 0, 449, 448, 451, 450, 449, 447, 
 -	450, 448, 451, 451, 5, 15, 17, 31, 
 -	34, 37, 74, 174, 179, 421, 31, 433, 
 -	437, 440, 446, 451, 0, 57, 453, 460, 
 -	56, 57, 454, 56, 57, 455, 56, 57, 
 -	456, 56, 57, 457, 56, 57, 458, 56, 
 -	57, 459, 56, 57, 72, 56, 461, 57, 
 -	462, 56, 459, 57, 56, 57, 463, 56, 
 -	57, 72, 56, 57, 465, 56, 57, 72, 
 -	466, 56, 57, 467, 56, 57, 468, 56, 
 -	57, 469, 56, 57, 470, 56, 57, 471, 
 -	56, 472, 57, 56, 473, 57, 56, 57, 
 -	474, 56, 57, 475, 56, 57, 476, 56, 
 -	57, 477, 56, 57, 478, 56, 57, 73, 
 -	56, 57, 480, 56, 57, 481, 56, 57, 
 -	482, 56, 57, 463, 72, 56, 57, 484, 
 -	56, 57, 485, 490, 56, 57, 486, 56, 
 -	57, 487, 56, 57, 488, 56, 57, 489, 
 -	56, 57, 478, 56, 57, 491, 56, 57, 
 -	492, 56, 57, 493, 56, 57, 494, 56, 
 -	57, 495, 56, 57, 496, 56, 57, 497, 
 -	56, 57, 498, 56, 57, 499, 56, 57, 
 -	500, 56, 57, 501, 56, 57, 502, 56, 
 -	57, 485, 56, 57, 504, 56, 57, 505, 
 -	56, 57, 506, 56, 57, 507, 56, 57, 
 -	508, 56, 57, 509, 56, 57, 510, 56, 
 -	57, 511, 56, 57, 512, 56, 57, 513, 
 -	56, 57, 514, 56, 57, 478, 56, 57, 
 -	516, 56, 57, 517, 56, 518, 57, 56, 
 -	72, 57, 56, 57, 520, 56, 57, 521, 
 -	56, 57, 72, 56, 523, 524, 0, 44, 
 -	0, 178, 0, 0, 0
 -};
 -
 -static const unsigned char _lexer_trans_actions[] = {
 -	0, 54, 0, 5, 1, 0, 29, 1, 
 -	29, 29, 29, 29, 29, 29, 29, 29, 
 -	29, 35, 0, 43, 0, 43, 0, 43, 
 -	54, 0, 5, 1, 0, 29, 1, 29, 
 -	29, 29, 29, 29, 29, 29, 29, 29, 
 -	35, 0, 43, 0, 43, 0, 43, 139, 
 -	48, 9, 106, 11, 0, 134, 45, 45, 
 -	45, 3, 122, 33, 33, 33, 0, 122, 
 -	33, 33, 33, 0, 122, 33, 0, 33, 
 -	0, 102, 7, 7, 43, 54, 0, 0, 
 -	43, 114, 25, 0, 54, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 149, 126, 57, 110, 
 -	23, 0, 43, 43, 43, 43, 0, 27, 
 -	118, 27, 27, 51, 27, 0, 54, 0, 
 -	1, 0, 43, 0, 0, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 144, 57, 54, 0, 54, 0, 72, 
 -	33, 84, 72, 84, 84, 84, 84, 84, 
 -	84, 84, 84, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 15, 0, 54, 
 -	15, 0, 130, 31, 60, 57, 31, 63, 
 -	57, 63, 63, 63, 63, 63, 63, 63, 
 -	63, 63, 66, 31, 43, 0, 43, 0, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 144, 57, 54, 0, 
 -	54, 0, 69, 33, 69, 84, 84, 84, 
 -	84, 84, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 13, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 13, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 0, 54, 0, 0, 
 -	54, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 0, 54, 0, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 0, 43, 0, 43, 
 -	0, 43, 0, 0, 43, 0, 43, 0, 
 -	0, 43, 0, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 144, 57, 54, 0, 54, 0, 75, 
 -	33, 84, 75, 84, 84, 84, 84, 84, 
 -	84, 84, 84, 84, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 17, 0, 
 -	54, 17, 0, 54, 0, 0, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 17, 0, 0, 54, 0, 0, 0, 
 -	54, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 0, 54, 
 -	0, 0, 54, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 0, 
 -	54, 0, 0, 54, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 144, 57, 
 -	54, 0, 54, 0, 78, 33, 84, 78, 
 -	84, 84, 84, 84, 84, 84, 84, 84, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 19, 0, 54, 19, 0, 54, 
 -	0, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	0, 54, 0, 0, 0, 54, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 0, 54, 0, 0, 54, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 19, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 0, 
 -	54, 0, 0, 54, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 144, 57, 54, 0, 
 -	54, 0, 81, 84, 84, 81, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 0, 54, 0, 
 -	0, 54, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 21, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 0, 0, 43, 54, 
 -	37, 37, 87, 37, 37, 43, 0, 39, 
 -	0, 43, 0, 0, 54, 0, 0, 39, 
 -	0, 0, 54, 0, 93, 90, 41, 96, 
 -	90, 96, 96, 96, 96, 96, 96, 96, 
 -	96, 96, 99, 0, 43, 54, 0, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 0, 54, 
 -	0, 0, 0, 54, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 0, 54, 0, 0, 54, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 15, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 0, 54, 0, 
 -	0, 54, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 0, 0, 43, 0, 
 -	43, 0, 43, 0, 0
 -};
 -
 -static const unsigned char _lexer_eof_actions[] = {
 -	0, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43
 -};
 -
 -static const int lexer_start = 1;
 -static const int lexer_first_final = 525;
 -static const int lexer_error = 0;
 -
 -static const int lexer_en_main = 1;
 -
 -
 -#line 258 "ragel/i18n/ca.c.rl"
 -
 -static VALUE 
 -unindent(VALUE con, int start_col)
 -{
 -  VALUE re;
 -  /* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */
 -  char pat[32]; 
 -  snprintf(pat, 32, "^[\t ]{0,%d}", start_col); 
 -  re = rb_reg_regcomp(rb_str_new2(pat));
 -  rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2(""));
 -
 -  return Qnil;
 -
 -}
 -
 -static void 
 -store_kw_con(VALUE listener, const char * event_name, 
 -             const char * keyword_at, size_t keyword_length, 
 -             const char * at,         size_t length, 
 -             int current_line)
 -{
 -  VALUE con = Qnil, kw = Qnil;
 -  kw = ENCODED_STR_NEW(keyword_at, keyword_length);
 -  con = ENCODED_STR_NEW(at, length);
 -  rb_funcall(con, rb_intern("strip!"), 0);
 -  rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); 
 -}
 -
 -static void
 -store_multiline_kw_con(VALUE listener, const char * event_name,
 -                      const char * keyword_at, size_t keyword_length,
 -                      const char * at,         size_t length,
 -                      int current_line, int start_col)
 -{
 -  VALUE split;
 -  VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil;
 -
 -  kw = ENCODED_STR_NEW(keyword_at, keyword_length);
 -  con = ENCODED_STR_NEW(at, length);
 -
 -  unindent(con, start_col);
 -  
 -  split = rb_str_split(con, "\n");
 -
 -  name = rb_funcall(split, rb_intern("shift"), 0);
 -  desc = rb_ary_join(split, rb_str_new2( "\n" ));
 -
 -  if( name == Qnil ) 
 -  {
 -    name = rb_str_new2("");
 -  }
 -  if( rb_funcall(desc, rb_intern("size"), 0) == 0) 
 -  {
 -    desc = rb_str_new2("");
 -  }
 -  rb_funcall(name, rb_intern("strip!"), 0);
 -  rb_funcall(desc, rb_intern("rstrip!"), 0);
 -  rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); 
 -}
 -
 -static void 
 -store_attr(VALUE listener, const char * attr_type,
 -           const char * at, size_t length, 
 -           int line)
 -{
 -  VALUE val = ENCODED_STR_NEW(at, length);
 -  rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line));
 -}
 -static void 
 -store_docstring_content(VALUE listener, 
 -          int start_col, 
 -          const char *type_at, size_t type_length,
 -          const char *at, size_t length, 
 -          int current_line)
 -{
 -  VALUE re2;
 -  VALUE unescape_escaped_quotes;
 -  VALUE con = ENCODED_STR_NEW(at, length);
 -  VALUE con_type = ENCODED_STR_NEW(type_at, type_length);
 -
 -  unindent(con, start_col);
 -
 -  re2 = rb_reg_regcomp(rb_str_new2("\r\\Z"));
 -  unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\""));
 -  rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2(""));
 -  rb_funcall(con_type, rb_intern("strip!"), 0);
 -  rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\""));
 -  rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line));
 -}
 -static void 
 -raise_lexer_error(const char * at, int line)
 -{ 
 -  rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at);
 -}
 -
 -static void lexer_init(lexer_state *lexer) {
 -  lexer->content_start = 0;
 -  lexer->content_end = 0;
 -  lexer->content_len = 0;
 -  lexer->docstring_content_type_start = 0;
 -  lexer->docstring_content_type_end = 0;
 -  lexer->mark = 0;
 -  lexer->keyword_start = 0;
 -  lexer->keyword_end = 0;
 -  lexer->next_keyword_start = 0;
 -  lexer->line_number = 1;
 -  lexer->last_newline = 0;
 -  lexer->final_newline = 0;
 -  lexer->start_col = 0;
 -}
 -
 -static VALUE CLexer_alloc(VALUE klass)
 -{
 -  VALUE obj;
 -  lexer_state *lxr = ALLOC(lexer_state);
 -  lexer_init(lxr);
 -
 -  obj = Data_Wrap_Struct(klass, NULL, -1, lxr);
 -
 -  return obj;
 -}
 -
 -static VALUE CLexer_init(VALUE self, VALUE listener)
 -{
 -  lexer_state *lxr; 
 -  rb_iv_set(self, "@listener", listener);
 -  
 -  lxr = NULL;
 -  DATA_GET(self, lexer_state, lxr);
 -  lexer_init(lxr);
 -  
 -  return self;
 -}
 -
 -static VALUE CLexer_scan(VALUE self, VALUE input)
 -{
 -  VALUE input_copy;
 -  char *data;
 -  size_t len;
 -  VALUE listener = rb_iv_get(self, "@listener");
 -
 -  lexer_state *lexer;
 -  lexer = NULL;
 -  DATA_GET(self, lexer_state, lexer);
 -
 -  input_copy = rb_str_dup(input);
 -
 -  rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%"));
 -  data = RSTRING_PTR(input_copy);
 -  len = RSTRING_LEN(input_copy);
 -  
 -  if (len == 0) { 
 -    rb_raise(rb_eGherkinLexingError, "No content to lex.");
 -  } else {
 -
 -    const char *p, *pe, *eof;
 -    int cs = 0;
 -    
 -    VALUE current_row = Qnil;
 -
 -    p = data;
 -    pe = data + len;
 -    eof = pe;
 -    
 -    assert(*pe == '\0' && "pointer does not end on NULL");
 -    
 -    
 -#line 1185 "ext/gherkin_lexer_ca/gherkin_lexer_ca.c"
 -	{
 -	cs = lexer_start;
 -	}
 -
 -#line 425 "ragel/i18n/ca.c.rl"
 -    
 -#line 1192 "ext/gherkin_lexer_ca/gherkin_lexer_ca.c"
 -	{
 -	int _klen;
 -	unsigned int _trans;
 -	const char *_acts;
 -	unsigned int _nacts;
 -	const char *_keys;
 -
 -	if ( p == pe )
 -		goto _test_eof;
 -	if ( cs == 0 )
 -		goto _out;
 -_resume:
 -	_keys = _lexer_trans_keys + _lexer_key_offsets[cs];
 -	_trans = _lexer_index_offsets[cs];
 -
 -	_klen = _lexer_single_lengths[cs];
 -	if ( _klen > 0 ) {
 -		const char *_lower = _keys;
 -		const char *_mid;
 -		const char *_upper = _keys + _klen - 1;
 -		while (1) {
 -			if ( _upper < _lower )
 -				break;
 -
 -			_mid = _lower + ((_upper-_lower) >> 1);
 -			if ( (*p) < *_mid )
 -				_upper = _mid - 1;
 -			else if ( (*p) > *_mid )
 -				_lower = _mid + 1;
 -			else {
 -				_trans += (unsigned int)(_mid - _keys);
 -				goto _match;
 -			}
 -		}
 -		_keys += _klen;
 -		_trans += _klen;
 -	}
 -
 -	_klen = _lexer_range_lengths[cs];
 -	if ( _klen > 0 ) {
 -		const char *_lower = _keys;
 -		const char *_mid;
 -		const char *_upper = _keys + (_klen<<1) - 2;
 -		while (1) {
 -			if ( _upper < _lower )
 -				break;
 -
 -			_mid = _lower + (((_upper-_lower) >> 1) & ~1);
 -			if ( (*p) < _mid[0] )
 -				_upper = _mid - 2;
 -			else if ( (*p) > _mid[1] )
 -				_lower = _mid + 2;
 -			else {
 -				_trans += (unsigned int)((_mid - _keys)>>1);
 -				goto _match;
 -			}
 -		}
 -		_trans += _klen;
 -	}
 -
 -_match:
 -	cs = _lexer_trans_targs[_trans];
 -
 -	if ( _lexer_trans_actions[_trans] == 0 )
 -		goto _again;
 -
 -	_acts = _lexer_actions + _lexer_trans_actions[_trans];
 -	_nacts = (unsigned int) *_acts++;
 -	while ( _nacts-- > 0 )
 -	{
 -		switch ( *_acts++ )
 -		{
 -	case 0:
 -#line 83 "ragel/i18n/ca.c.rl"
 -	{
 -		MARK(content_start, p);
 -    lexer->current_line = lexer->line_number;
 -    lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2;
 -  }
 -	break;
 -	case 1:
 -#line 89 "ragel/i18n/ca.c.rl"
 -	{
 -    MARK(content_start, p);
 -  }
 -	break;
 -	case 2:
 -#line 93 "ragel/i18n/ca.c.rl"
 -	{
 -    lexer->current_line = lexer->line_number;
 -    lexer->start_col = p - data - lexer->last_newline;
 -  }
 -	break;
 -	case 3:
 -#line 98 "ragel/i18n/ca.c.rl"
 -	{
 -    int len = LEN(content_start, PTR_TO(final_newline));
 -    int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end));
 -
 -    if (len < 0) len = 0;
 -    if (type_len < 0) len = 0;
 -
 -    store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line);
 -  }
 -	break;
 -	case 4:
 -#line 108 "ragel/i18n/ca.c.rl"
 -	{ 
 -    MARK(docstring_content_type_start, p);
 -  }
 -	break;
 -	case 5:
 -#line 112 "ragel/i18n/ca.c.rl"
 -	{ 
 -    MARK(docstring_content_type_end, p);
 -  }
 -	break;
 -	case 6:
 -#line 116 "ragel/i18n/ca.c.rl"
 -	{
 -    STORE_KW_END_CON(feature);
 -  }
 -	break;
 -	case 7:
 -#line 120 "ragel/i18n/ca.c.rl"
 -	{
 -    STORE_KW_END_CON(background);
 -  }
 -	break;
 -	case 8:
 -#line 124 "ragel/i18n/ca.c.rl"
 -	{
 -    STORE_KW_END_CON(scenario);
 -  }
 -	break;
 -	case 9:
 -#line 128 "ragel/i18n/ca.c.rl"
 -	{
 -    STORE_KW_END_CON(scenario_outline);
 -  }
 -	break;
 -	case 10:
 -#line 132 "ragel/i18n/ca.c.rl"
 -	{
 -    STORE_KW_END_CON(examples);
 -  }
 -	break;
 -	case 11:
 -#line 136 "ragel/i18n/ca.c.rl"
 -	{
 -    store_kw_con(listener, "step",
 -      PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
 -      PTR_TO(content_start), LEN(content_start, p), 
 -      lexer->current_line);
 -  }
 -	break;
 -	case 12:
 -#line 143 "ragel/i18n/ca.c.rl"
 -	{
 -    STORE_ATTR(comment);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 13:
 -#line 148 "ragel/i18n/ca.c.rl"
 -	{
 -    STORE_ATTR(tag);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 14:
 -#line 153 "ragel/i18n/ca.c.rl"
 -	{
 -    lexer->line_number += 1;
 -    MARK(final_newline, p);
 -  }
 -	break;
 -	case 15:
 -#line 158 "ragel/i18n/ca.c.rl"
 -	{
 -    MARK(last_newline, p + 1);
 -  }
 -	break;
 -	case 16:
 -#line 162 "ragel/i18n/ca.c.rl"
 -	{
 -    if (lexer->mark == 0) {
 -      MARK(mark, p);
 -    }
 -  }
 -	break;
 -	case 17:
 -#line 168 "ragel/i18n/ca.c.rl"
 -	{
 -    MARK(keyword_end, p);
 -    MARK(keyword_start, PTR_TO(mark));
 -    MARK(content_start, p + 1);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 18:
 -#line 175 "ragel/i18n/ca.c.rl"
 -	{
 -    MARK(content_end, p);
 -  }
 -	break;
 -	case 19:
 -#line 179 "ragel/i18n/ca.c.rl"
 -	{
 -    p = p - 1;
 -    lexer->current_line = lexer->line_number;
 -    current_row = rb_ary_new();
 -  }
 -	break;
 -	case 20:
 -#line 185 "ragel/i18n/ca.c.rl"
 -	{
 -		MARK(content_start, p);
 -  }
 -	break;
 -	case 21:
 -#line 189 "ragel/i18n/ca.c.rl"
 -	{
 -    VALUE re_pipe, re_newline, re_backslash;
 -    VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
 -    rb_funcall(con, rb_intern("strip!"), 0);
 -    re_pipe      = rb_reg_regcomp(rb_str_new2("\\\\\\|"));
 -    re_newline   = rb_reg_regcomp(rb_str_new2("\\\\n"));
 -    re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_pipe,      rb_str_new2("|"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_newline,   rb_str_new2("\n"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\"));
 -
 -    rb_ary_push(current_row, con);
 -  }
 -	break;
 -	case 22:
 -#line 203 "ragel/i18n/ca.c.rl"
 -	{
 -    rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
 -  }
 -	break;
 -	case 23:
 -#line 207 "ragel/i18n/ca.c.rl"
 -	{
 -    int line;
 -    if (cs < lexer_first_final) {
 -      size_t count = 0;
 -      VALUE newstr_val;
 -      char *newstr;
 -      int newstr_count = 0;        
 -      size_t len;
 -      const char *buff;
 -      if (lexer->last_newline != 0) {
 -        len = LEN(last_newline, eof);
 -        buff = PTR_TO(last_newline);
 -      } else {
 -        len = strlen(data);
 -        buff = data;
 -      }
 -
 -      /* Allocate as a ruby string so that it gets cleaned up by GC */
 -      newstr_val = rb_str_new(buff, len);
 -      newstr = RSTRING_PTR(newstr_val);
 -
 -
 -      for (count = 0; count < len; count++) {
 -        if(buff[count] == 10) {
 -          newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
 -          break;
 -        } else {
 -          if (buff[count] == '%') {
 -            newstr[newstr_count++] = buff[count];
 -            newstr[newstr_count] = buff[count];
 -          } else {
 -            newstr[newstr_count] = buff[count];
 -          }
 -        }
 -        newstr_count++;
 -      }
 -
 -      line = lexer->line_number;
 -      lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
 -      raise_lexer_error(newstr, line);
 -    } else {
 -      rb_funcall(listener, rb_intern("eof"), 0);
 -    }
 -  }
 -	break;
 -#line 1482 "ext/gherkin_lexer_ca/gherkin_lexer_ca.c"
 -		}
 -	}
 -
 -_again:
 -	if ( cs == 0 )
 -		goto _out;
 -	if ( ++p != pe )
 -		goto _resume;
 -	_test_eof: {}
 -	if ( p == eof )
 -	{
 -	const char *__acts = _lexer_actions + _lexer_eof_actions[cs];
 -	unsigned int __nacts = (unsigned int) *__acts++;
 -	while ( __nacts-- > 0 ) {
 -		switch ( *__acts++ ) {
 -	case 23:
 -#line 207 "ragel/i18n/ca.c.rl"
 -	{
 -    int line;
 -    if (cs < lexer_first_final) {
 -      size_t count = 0;
 -      VALUE newstr_val;
 -      char *newstr;
 -      int newstr_count = 0;        
 -      size_t len;
 -      const char *buff;
 -      if (lexer->last_newline != 0) {
 -        len = LEN(last_newline, eof);
 -        buff = PTR_TO(last_newline);
 -      } else {
 -        len = strlen(data);
 -        buff = data;
 -      }
 -
 -      /* Allocate as a ruby string so that it gets cleaned up by GC */
 -      newstr_val = rb_str_new(buff, len);
 -      newstr = RSTRING_PTR(newstr_val);
 -
 -
 -      for (count = 0; count < len; count++) {
 -        if(buff[count] == 10) {
 -          newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
 -          break;
 -        } else {
 -          if (buff[count] == '%') {
 -            newstr[newstr_count++] = buff[count];
 -            newstr[newstr_count] = buff[count];
 -          } else {
 -            newstr[newstr_count] = buff[count];
 -          }
 -        }
 -        newstr_count++;
 -      }
 -
 -      line = lexer->line_number;
 -      lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
 -      raise_lexer_error(newstr, line);
 -    } else {
 -      rb_funcall(listener, rb_intern("eof"), 0);
 -    }
 -  }
 -	break;
 -#line 1545 "ext/gherkin_lexer_ca/gherkin_lexer_ca.c"
 -		}
 -	}
 -	}
 -
 -	_out: {}
 -	}
 -
 -#line 426 "ragel/i18n/ca.c.rl"
 -
 -    assert(p <= pe && "data overflow after parsing execute");
 -    assert(lexer->content_start <= len && "content starts after data end");
 -    assert(lexer->mark < len && "mark is after data end");
 -    
 -    /* Reset lexer by re-initializing the whole thing */
 -    lexer_init(lexer);
 -
 -    if (cs == lexer_error) {
 -      rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails.");
 -    } else {
 -      return Qtrue;
 -    }
 -  }
 -}
 -
 -void Init_gherkin_lexer_ca()
 -{
 -  mGherkin = rb_define_module("Gherkin");
 -  mGherkinLexer = rb_define_module_under(mGherkin, "Lexer");
 -  rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError"));
 -
 -  mCLexer = rb_define_module_under(mGherkin, "CLexer");
 -  cI18nLexer = rb_define_class_under(mCLexer, "Ca", rb_cObject);
 -  rb_define_alloc_func(cI18nLexer, CLexer_alloc);
 -  rb_define_method(cI18nLexer, "initialize", CLexer_init, 1);
 -  rb_define_method(cI18nLexer, "scan", CLexer_scan, 1);
 -}
 -
diff --cc ext/gherkin_lexer_cs/extconf.rb
index a5272a1,a5272a1..0000000
deleted file mode 100644,100644
--- a/ext/gherkin_lexer_cs/extconf.rb
+++ /dev/null
@@@ -1,6 -1,6 +1,0 @@@
--require 'mkmf'
--CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags']
--$CFLAGS << ' -O0 -Wall' if CONFIG['CC'] =~ /gcc|clang/
--dir_config("gherkin_lexer_cs")
--have_library("c", "main")
--create_makefile("gherkin_lexer_cs")
diff --cc ext/gherkin_lexer_cs/gherkin_lexer_cs.c
index 72e4b20,34e9b4d..0000000
deleted file mode 100644,100644
--- a/ext/gherkin_lexer_cs/gherkin_lexer_cs.c
+++ /dev/null
@@@ -1,1427 -1,1515 +1,0 @@@
--
- #line 1 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/cs.c.rl"
- #include <assert.h>
- #include <ruby.h>
- 
- #if defined(_WIN32)
- #include <stddef.h>
- #endif
- 
- #ifdef HAVE_RUBY_RE_H
- #include <ruby/re.h>
- #else
- #include <re.h>
- #endif
- 
- #ifdef HAVE_RUBY_ENCODING_H
- #include <ruby/encoding.h>
- #define ENCODED_STR_NEW(ptr, len) \
-     rb_enc_str_new(ptr, len, rb_utf8_encoding())
- #else
- #define ENCODED_STR_NEW(ptr, len) \
-     rb_str_new(ptr, len)
- #endif
- 
- #ifndef RSTRING_PTR
- #define RSTRING_PTR(s) (RSTRING(s)->ptr)
- #endif
- 
- #ifndef RSTRING_LEN
- #define RSTRING_LEN(s) (RSTRING(s)->len)
- #endif
- 
- #define DATA_GET(FROM, TYPE, NAME) \
-   Data_Get_Struct(FROM, TYPE, NAME); \
-   if (NAME == NULL) { \
-     rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \
-   }
-  
- typedef struct lexer_state {
-   int content_len;
-   int line_number;
-   int current_line;
-   int start_col;
-   size_t mark;
-   size_t keyword_start;
-   size_t keyword_end;
-   size_t next_keyword_start;
-   size_t content_start;
-   size_t content_end;
-   size_t docstring_content_type_start;
-   size_t docstring_content_type_end;
-   size_t query_start;
-   size_t last_newline;
-   size_t final_newline;
- } lexer_state;
- 
- static VALUE mGherkin;
- static VALUE mGherkinLexer;
- static VALUE mCLexer;
- static VALUE cI18nLexer;
- static VALUE rb_eGherkinLexingError;
- 
- #define LEN(AT, P) (P - data - lexer->AT)
- #define MARK(M, P) (lexer->M = (P) - data)
- #define PTR_TO(P) (data + lexer->P)
- 
- #define STORE_KW_END_CON(EVENT) \
-   store_multiline_kw_con(listener, # EVENT, \
-     PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \
-     PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \
-     lexer->current_line, lexer->start_col); \
-     if (lexer->content_end != 0) { \
-       p = PTR_TO(content_end - 1); \
-     } \
-     lexer->content_end = 0
- 
- #define STORE_ATTR(ATTR) \
-     store_attr(listener, # ATTR, \
-       PTR_TO(content_start), LEN(content_start, p), \
-       lexer->line_number)
- 
- 
- #line 254 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/cs.c.rl"
- 
- 
- /** Data **/
- 
- #line 89 "ext/gherkin_lexer_cs/gherkin_lexer_cs.c"
- static const char _lexer_actions[] = {
- 	0, 1, 0, 1, 1, 1, 2, 1, 
- 	3, 1, 4, 1, 5, 1, 6, 1, 
- 	7, 1, 8, 1, 9, 1, 10, 1, 
- 	11, 1, 12, 1, 13, 1, 16, 1, 
- 	17, 1, 18, 1, 19, 1, 20, 1, 
- 	21, 1, 22, 1, 23, 2, 1, 18, 
- 	2, 4, 5, 2, 13, 0, 2, 14, 
- 	15, 2, 17, 0, 2, 17, 2, 2, 
- 	17, 16, 2, 17, 19, 2, 18, 6, 
- 	2, 18, 7, 2, 18, 8, 2, 18, 
- 	9, 2, 18, 10, 2, 18, 16, 2, 
- 	20, 21, 2, 22, 0, 2, 22, 2, 
- 	2, 22, 16, 2, 22, 19, 3, 3, 
- 	14, 15, 3, 5, 14, 15, 3, 11, 
- 	14, 15, 3, 12, 14, 15, 3, 13, 
- 	14, 15, 3, 14, 15, 18, 3, 17, 
- 	0, 11, 3, 17, 14, 15, 4, 1, 
- 	14, 15, 18, 4, 4, 5, 14, 15, 
- 	4, 17, 0, 14, 15, 5, 17, 0, 
- 	11, 14, 15
- };
- 
- static const short _lexer_key_offsets[] = {
- 	0, 0, 17, 18, 19, 35, 36, 37, 
- 	39, 41, 46, 51, 56, 61, 65, 69, 
- 	71, 72, 73, 74, 75, 76, 77, 78, 
- 	79, 80, 81, 82, 83, 84, 85, 86, 
- 	87, 89, 91, 96, 103, 108, 110, 113, 
- 	116, 119, 122, 125, 128, 129, 131, 132, 
- 	133, 134, 135, 136, 137, 138, 139, 140, 
- 	141, 142, 156, 158, 160, 162, 164, 166, 
- 	168, 170, 172, 174, 176, 178, 180, 182, 
- 	184, 186, 202, 203, 204, 205, 206, 207, 
- 	208, 209, 210, 211, 212, 213, 214, 215, 
- 	216, 217, 218, 219, 220, 221, 222, 234, 
- 	236, 238, 240, 242, 244, 246, 248, 250, 
- 	252, 254, 256, 258, 260, 262, 264, 267, 
- 	284, 285, 286, 287, 288, 289, 290, 291, 
- 	294, 295, 296, 297, 298, 299, 300, 301, 
- 	302, 303, 304, 305, 312, 314, 316, 318, 
- 	320, 322, 324, 326, 328, 330, 332, 333, 
- 	336, 337, 338, 339, 340, 341, 342, 343, 
- 	344, 345, 346, 358, 360, 362, 364, 366, 
- 	368, 370, 372, 374, 376, 378, 380, 382, 
- 	384, 386, 388, 390, 392, 394, 396, 398, 
- 	400, 402, 404, 406, 408, 410, 412, 414, 
- 	416, 418, 420, 422, 424, 426, 428, 430, 
- 	432, 434, 436, 438, 440, 442, 444, 446, 
- 	448, 451, 453, 455, 457, 459, 461, 463, 
- 	465, 467, 470, 472, 474, 476, 478, 480, 
- 	482, 484, 486, 488, 490, 492, 494, 496, 
- 	498, 500, 502, 504, 506, 508, 509, 510, 
- 	511, 512, 513, 514, 515, 516, 517, 518, 
- 	519, 520, 521, 522, 523, 524, 525, 539, 
- 	541, 543, 545, 547, 549, 551, 553, 555, 
- 	557, 559, 561, 563, 565, 567, 569, 572, 
- 	589, 590, 591, 592, 593, 594, 598, 604, 
- 	607, 609, 615, 631, 633, 636, 638, 640, 
- 	642, 644, 646, 648, 650, 652, 654, 656, 
- 	658, 660, 662, 664, 666, 668, 670, 672, 
- 	674, 676, 678, 680, 682, 684, 686, 688, 
- 	690, 692, 694, 696, 698, 700, 702, 705, 
- 	707, 711, 713, 715, 717, 719, 721, 723, 
- 	725, 727, 729, 731, 733, 735, 737, 739, 
- 	741, 743, 745, 747, 749, 751, 753, 754, 
- 	755, 756, 757, 758, 760, 762, 764, 766, 
- 	768, 771, 773, 776, 778, 780, 782, 784, 
- 	786, 788, 790, 792, 794, 796, 798, 800, 
- 	802, 804, 806, 808, 810, 812, 815, 832, 
- 	833, 834, 835, 836, 837, 839, 841, 843, 
- 	845, 847, 849, 851, 853, 855, 857, 859, 
- 	861, 863, 865, 867, 869, 871, 873, 875, 
- 	877, 879, 881, 883, 885, 887, 889, 891, 
- 	893, 895, 897, 900, 902, 905, 907, 909, 
- 	911, 913, 915, 917, 919, 921, 923, 925, 
- 	927, 929, 931, 933, 935, 937, 939
- };
- 
- static const char _lexer_trans_keys[] = {
- 	-17, 10, 32, 34, 35, 37, 42, 64, 
- 	65, 75, 78, 79, 80, 83, 124, 9, 
- 	13, -69, -65, 10, 32, 34, 35, 37, 
- 	42, 64, 65, 75, 78, 79, 80, 83, 
- 	124, 9, 13, 34, 34, 10, 13, 10, 
- 	13, 10, 32, 34, 9, 13, 10, 32, 
- 	34, 9, 13, 10, 32, 34, 9, 13, 
- 	10, 32, 34, 9, 13, 10, 32, 9, 
- 	13, 10, 32, 9, 13, 10, 13, 10, 
- 	95, 70, 69, 65, 84, 85, 82, 69, 
- 	95, 69, 78, 68, 95, 37, 32, 10, 
- 	13, 10, 13, 13, 32, 64, 9, 10, 
- 	9, 10, 13, 32, 64, 11, 12, 10, 
- 	32, 64, 9, 13, 32, 108, 10, 13, 
- 	116, 10, 13, 97, 10, 13, 107, -61, 
- 	10, 13, -87, 10, 13, 10, 13, 32, 
- 	101, 100, 111, 121, -59, -66, 110, 116, 
- 	101, 120, 116, 58, 10, 10, 10, 32, 
- 	35, 37, 42, 64, 65, 75, 78, 79, 
- 	80, 83, 9, 13, 10, 95, 10, 70, 
- 	10, 69, 10, 65, 10, 84, 10, 85, 
- 	10, 82, 10, 69, 10, 95, 10, 69, 
- 	10, 78, 10, 68, 10, 95, 10, 37, 
- 	10, 32, 10, 32, 34, 35, 37, 42, 
- 	64, 65, 75, 78, 79, 80, 83, 124, 
- 	9, 13, -61, -95, -60, -115, 114, 116, 
- 	32, 83, 99, -61, -87, 110, -61, -95, 
- 	-59, -103, 101, 58, 10, 10, 10, 32, 
- 	35, 37, 42, 64, 65, 75, 80, 83, 
- 	9, 13, 10, 95, 10, 70, 10, 69, 
- 	10, 65, 10, 84, 10, 85, 10, 82, 
- 	10, 69, 10, 95, 10, 69, 10, 78, 
- 	10, 68, 10, 95, 10, 37, 10, 32, 
- 	10, 32, 108, 10, 32, 34, 35, 37, 
- 	42, 64, 65, 75, 78, 79, 80, 83, 
- 	116, 124, 9, 13, 115, 110, 111, 118, 
- 	97, 32, 115, -59, 97, 111, -103, -61, 
- 	-83, 107, 108, 97, 100, 121, 58, 10, 
- 	10, 10, 32, 35, 80, 124, 9, 13, 
- 	10, 111, -59, 10, -66, 10, 10, 97, 
- 	10, 100, 10, 97, 10, 118, 10, 101, 
- 	10, 107, 10, 58, 107, -59, 107, 122, 
- 	-66, 97, 100, 97, 118, 101, 107, 58, 
- 	10, 10, 10, 32, 35, 37, 64, 75, 
- 	78, 79, 80, 83, 9, 13, 10, 95, 
- 	10, 70, 10, 69, 10, 65, 10, 84, 
- 	10, 85, 10, 82, 10, 69, 10, 95, 
- 	10, 69, 10, 78, 10, 68, 10, 95, 
- 	10, 37, 10, 111, 10, 110, 10, 116, 
- 	10, 101, 10, 120, 10, 116, 10, 58, 
- 	-61, 10, -95, 10, -60, 10, -115, 10, 
- 	10, 114, 10, 116, 10, 32, 10, 83, 
- 	10, 99, -61, 10, -87, 10, 10, 110, 
- 	-61, 10, -95, 10, -59, 10, -103, 10, 
- 	10, 101, 10, 115, 10, 110, 10, 111, 
- 	10, 118, 10, 97, 10, 32, 10, 115, 
- 	-59, 10, 111, -103, 10, -61, 10, -83, 
- 	10, 10, 107, 10, 108, 10, 97, 10, 
- 	100, 10, 121, -59, 10, 122, -66, 10, 
- 	10, 97, 10, 100, 10, 97, 10, 118, 
- 	10, 101, 10, 107, 10, 97, 10, 100, 
- 	-61, 10, -83, 10, 10, 99, -61, 10, 
- 	-87, 10, 10, 110, -61, 10, -95, 10, 
- 	-59, 10, -103, 10, 117, 100, 97, 100, 
- 	-61, -83, 99, -61, -87, 110, -61, -95, 
- 	-59, -103, 58, 10, 10, 10, 32, 35, 
- 	37, 42, 64, 65, 75, 78, 79, 80, 
- 	83, 9, 13, 10, 95, 10, 70, 10, 
- 	69, 10, 65, 10, 84, 10, 85, 10, 
- 	82, 10, 69, 10, 95, 10, 69, 10, 
- 	78, 10, 68, 10, 95, 10, 37, 10, 
- 	32, 10, 32, 108, 10, 32, 34, 35, 
- 	37, 42, 64, 65, 75, 78, 79, 80, 
- 	83, 116, 124, 9, 13, 97, 107, -61, 
- 	-87, 32, 32, 124, 9, 13, 10, 32, 
- 	92, 124, 9, 13, 10, 92, 124, 10, 
- 	92, 10, 32, 92, 124, 9, 13, 10, 
- 	32, 34, 35, 37, 42, 64, 65, 75, 
- 	78, 79, 80, 83, 124, 9, 13, 10, 
- 	101, 10, 100, 111, 10, 121, -59, 10, 
- 	-66, 10, 10, 110, 10, 116, 10, 101, 
- 	10, 120, 10, 116, 10, 58, -61, 10, 
- 	-95, 10, -60, 10, -115, 10, 10, 114, 
- 	10, 116, 10, 32, 10, 83, 10, 99, 
- 	-61, 10, -87, 10, 10, 110, -61, 10, 
- 	-95, 10, -59, 10, -103, 10, 10, 101, 
- 	10, 115, 10, 110, 10, 111, 10, 118, 
- 	10, 97, 10, 32, 10, 115, 10, 97, 
- 	111, 10, 107, -59, 10, 107, 122, -66, 
- 	10, 10, 97, 10, 100, 10, 97, 10, 
- 	118, 10, 101, 10, 107, 10, 117, 10, 
- 	100, 10, 97, 10, 100, -61, 10, -83, 
- 	10, 10, 99, -61, 10, -87, 10, 10, 
- 	110, -61, 10, -95, 10, -59, 10, -103, 
- 	10, 97, 107, -61, -87, 32, 10, 101, 
- 	10, 100, 10, 121, -59, 10, -66, 10, 
- 	10, 97, 111, 10, 107, -59, 10, 107, 
- 	-66, 10, 10, 97, 10, 100, 10, 97, 
- 	10, 118, 10, 101, 10, 107, 10, 58, 
- 	10, 117, 10, 100, 10, 99, -61, 10, 
- 	-87, 10, 10, 110, -61, 10, -95, 10, 
- 	-59, 10, -103, 10, 10, 32, 108, 10, 
- 	32, 34, 35, 37, 42, 64, 65, 75, 
- 	78, 79, 80, 83, 116, 124, 9, 13, 
- 	97, 107, -61, -87, 32, 10, 101, 10, 
- 	100, 10, 121, -59, 10, -66, 10, -61, 
- 	10, -95, 10, -60, 10, -115, 10, 10, 
- 	114, 10, 116, 10, 32, 10, 83, 10, 
- 	99, -61, 10, -87, 10, 10, 110, -61, 
- 	10, -95, 10, -59, 10, -103, 10, 10, 
- 	101, 10, 58, 10, 115, 10, 110, 10, 
- 	111, 10, 118, 10, 97, 10, 32, 10, 
- 	115, 10, 97, 111, 10, 107, -59, 10, 
- 	107, -66, 10, 10, 97, 10, 100, 10, 
- 	97, 10, 118, 10, 101, 10, 107, 10, 
- 	117, 10, 100, 10, 99, -61, 10, -87, 
- 	10, 10, 110, -61, 10, -95, 10, -59, 
- 	10, -103, 10, 0
- };
- 
- static const char _lexer_single_lengths[] = {
- 	0, 15, 1, 1, 14, 1, 1, 2, 
- 	2, 3, 3, 3, 3, 2, 2, 2, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	2, 2, 3, 5, 3, 2, 3, 3, 
- 	3, 3, 3, 3, 1, 2, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 12, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 14, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 10, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 3, 15, 
- 	1, 1, 1, 1, 1, 1, 1, 3, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 5, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 1, 3, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 10, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	3, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 3, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 12, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 3, 15, 
- 	1, 1, 1, 1, 1, 2, 4, 3, 
- 	2, 4, 14, 2, 3, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 3, 2, 
- 	4, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 1, 1, 
- 	1, 1, 1, 2, 2, 2, 2, 2, 
- 	3, 2, 3, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 3, 15, 1, 
- 	1, 1, 1, 1, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 3, 2, 3, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 0
- };
- 
- static const char _lexer_range_lengths[] = {
- 	0, 1, 0, 0, 1, 0, 0, 0, 
- 	0, 1, 1, 1, 1, 1, 1, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 1, 1, 1, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 1, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 1, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 1, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 1, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 1, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 1, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 1, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 1, 
- 	0, 0, 0, 0, 0, 1, 1, 0, 
- 	0, 1, 1, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 1, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0
- };
- 
- static const short _lexer_index_offsets[] = {
- 	0, 0, 17, 19, 21, 37, 39, 41, 
- 	44, 47, 52, 57, 62, 67, 71, 75, 
- 	78, 80, 82, 84, 86, 88, 90, 92, 
- 	94, 96, 98, 100, 102, 104, 106, 108, 
- 	110, 113, 116, 121, 128, 133, 136, 140, 
- 	144, 148, 152, 156, 160, 162, 165, 167, 
- 	169, 171, 173, 175, 177, 179, 181, 183, 
- 	185, 187, 201, 204, 207, 210, 213, 216, 
- 	219, 222, 225, 228, 231, 234, 237, 240, 
- 	243, 246, 262, 264, 266, 268, 270, 272, 
- 	274, 276, 278, 280, 282, 284, 286, 288, 
- 	290, 292, 294, 296, 298, 300, 302, 314, 
- 	317, 320, 323, 326, 329, 332, 335, 338, 
- 	341, 344, 347, 350, 353, 356, 359, 363, 
- 	380, 382, 384, 386, 388, 390, 392, 394, 
- 	398, 400, 402, 404, 406, 408, 410, 412, 
- 	414, 416, 418, 420, 427, 430, 433, 436, 
- 	439, 442, 445, 448, 451, 454, 457, 459, 
- 	463, 465, 467, 469, 471, 473, 475, 477, 
- 	479, 481, 483, 495, 498, 501, 504, 507, 
- 	510, 513, 516, 519, 522, 525, 528, 531, 
- 	534, 537, 540, 543, 546, 549, 552, 555, 
- 	558, 561, 564, 567, 570, 573, 576, 579, 
- 	582, 585, 588, 591, 594, 597, 600, 603, 
- 	606, 609, 612, 615, 618, 621, 624, 627, 
- 	630, 634, 637, 640, 643, 646, 649, 652, 
- 	655, 658, 662, 665, 668, 671, 674, 677, 
- 	680, 683, 686, 689, 692, 695, 698, 701, 
- 	704, 707, 710, 713, 716, 719, 721, 723, 
- 	725, 727, 729, 731, 733, 735, 737, 739, 
- 	741, 743, 745, 747, 749, 751, 753, 767, 
- 	770, 773, 776, 779, 782, 785, 788, 791, 
- 	794, 797, 800, 803, 806, 809, 812, 816, 
- 	833, 835, 837, 839, 841, 843, 847, 853, 
- 	857, 860, 866, 882, 885, 889, 892, 895, 
- 	898, 901, 904, 907, 910, 913, 916, 919, 
- 	922, 925, 928, 931, 934, 937, 940, 943, 
- 	946, 949, 952, 955, 958, 961, 964, 967, 
- 	970, 973, 976, 979, 982, 985, 988, 992, 
- 	995, 1000, 1003, 1006, 1009, 1012, 1015, 1018, 
- 	1021, 1024, 1027, 1030, 1033, 1036, 1039, 1042, 
- 	1045, 1048, 1051, 1054, 1057, 1060, 1063, 1065, 
- 	1067, 1069, 1071, 1073, 1076, 1079, 1082, 1085, 
- 	1088, 1092, 1095, 1099, 1102, 1105, 1108, 1111, 
- 	1114, 1117, 1120, 1123, 1126, 1129, 1132, 1135, 
- 	1138, 1141, 1144, 1147, 1150, 1153, 1157, 1174, 
- 	1176, 1178, 1180, 1182, 1184, 1187, 1190, 1193, 
- 	1196, 1199, 1202, 1205, 1208, 1211, 1214, 1217, 
- 	1220, 1223, 1226, 1229, 1232, 1235, 1238, 1241, 
- 	1244, 1247, 1250, 1253, 1256, 1259, 1262, 1265, 
- 	1268, 1271, 1274, 1278, 1281, 1285, 1288, 1291, 
- 	1294, 1297, 1300, 1303, 1306, 1309, 1312, 1315, 
- 	1318, 1321, 1324, 1327, 1330, 1333, 1336
- };
- 
- static const short _lexer_trans_targs[] = {
- 	2, 4, 4, 5, 15, 17, 31, 34, 
- 	37, 45, 74, 112, 119, 235, 269, 4, 
- 	0, 3, 0, 4, 0, 4, 4, 5, 
- 	15, 17, 31, 34, 37, 45, 74, 112, 
- 	119, 235, 269, 4, 0, 6, 0, 7, 
- 	0, 9, 8, 8, 9, 8, 8, 10, 
- 	10, 11, 10, 10, 10, 10, 11, 10, 
- 	10, 10, 10, 12, 10, 10, 10, 10, 
- 	13, 10, 10, 4, 14, 14, 0, 4, 
- 	14, 14, 0, 4, 16, 15, 4, 0, 
- 	18, 0, 19, 0, 20, 0, 21, 0, 
- 	22, 0, 23, 0, 24, 0, 25, 0, 
- 	26, 0, 27, 0, 28, 0, 29, 0, 
- 	30, 0, 422, 0, 32, 0, 4, 16, 
- 	33, 4, 16, 33, 0, 0, 0, 0, 
- 	35, 36, 4, 36, 36, 34, 35, 35, 
- 	4, 36, 34, 36, 0, 38, 44, 0, 
- 	4, 16, 39, 33, 4, 16, 40, 33, 
- 	4, 16, 41, 33, 42, 4, 16, 33, 
- 	43, 4, 16, 33, 4, 16, 32, 33, 
- 	31, 0, 46, 49, 0, 47, 0, 48, 
- 	0, 31, 0, 50, 0, 51, 0, 52, 
- 	0, 53, 0, 54, 0, 55, 0, 57, 
- 	56, 57, 56, 57, 57, 4, 58, 72, 
- 	4, 365, 373, 377, 395, 402, 414, 57, 
- 	56, 57, 59, 56, 57, 60, 56, 57, 
- 	61, 56, 57, 62, 56, 57, 63, 56, 
- 	57, 64, 56, 57, 65, 56, 57, 66, 
- 	56, 57, 67, 56, 57, 68, 56, 57, 
- 	69, 56, 57, 70, 56, 57, 71, 56, 
- 	57, 4, 56, 57, 73, 56, 4, 4, 
- 	5, 15, 17, 31, 34, 37, 45, 74, 
- 	112, 119, 235, 269, 4, 0, 75, 0, 
- 	76, 0, 77, 0, 78, 0, 79, 0, 
- 	80, 0, 81, 0, 82, 0, 83, 0, 
- 	84, 0, 85, 0, 86, 0, 87, 0, 
- 	88, 0, 89, 0, 90, 0, 91, 0, 
- 	92, 0, 94, 93, 94, 93, 94, 94, 
- 	4, 95, 109, 4, 110, 340, 344, 357, 
- 	94, 93, 94, 96, 93, 94, 97, 93, 
- 	94, 98, 93, 94, 99, 93, 94, 100, 
- 	93, 94, 101, 93, 94, 102, 93, 94, 
- 	103, 93, 94, 104, 93, 94, 105, 93, 
- 	94, 106, 93, 94, 107, 93, 94, 108, 
- 	93, 94, 4, 93, 94, 73, 93, 94, 
- 	111, 339, 93, 4, 4, 5, 15, 17, 
- 	31, 34, 37, 45, 74, 112, 119, 235, 
- 	334, 269, 4, 0, 113, 0, 114, 0, 
- 	115, 0, 116, 0, 117, 0, 118, 0, 
- 	82, 0, 120, 142, 143, 0, 121, 0, 
- 	122, 0, 123, 0, 124, 0, 125, 0, 
- 	126, 0, 127, 0, 128, 0, 129, 0, 
- 	131, 130, 131, 130, 131, 131, 4, 132, 
- 	4, 131, 130, 131, 133, 130, 134, 131, 
- 	130, 135, 131, 130, 131, 136, 130, 131, 
- 	137, 130, 131, 138, 130, 131, 139, 130, 
- 	131, 140, 130, 131, 141, 130, 131, 73, 
- 	130, 31, 0, 144, 229, 231, 0, 145, 
- 	0, 146, 0, 147, 0, 148, 0, 149, 
- 	0, 150, 0, 151, 0, 152, 0, 154, 
- 	153, 154, 153, 154, 154, 4, 155, 4, 
- 	169, 176, 193, 200, 221, 154, 153, 154, 
- 	156, 153, 154, 157, 153, 154, 158, 153, 
- 	154, 159, 153, 154, 160, 153, 154, 161, 
- 	153, 154, 162, 153, 154, 163, 153, 154, 
- 	164, 153, 154, 165, 153, 154, 166, 153, 
- 	154, 167, 153, 154, 168, 153, 154, 4, 
- 	153, 154, 170, 153, 154, 171, 153, 154, 
- 	172, 153, 154, 173, 153, 154, 174, 153, 
- 	154, 175, 153, 154, 73, 153, 177, 154, 
- 	153, 178, 154, 153, 179, 154, 153, 180, 
- 	154, 153, 154, 181, 153, 154, 182, 153, 
- 	154, 183, 153, 154, 184, 153, 154, 185, 
- 	153, 186, 154, 153, 187, 154, 153, 154, 
- 	188, 153, 189, 154, 153, 190, 154, 153, 
- 	191, 154, 153, 192, 154, 153, 154, 175, 
- 	153, 154, 194, 153, 154, 195, 153, 154, 
- 	196, 153, 154, 197, 153, 154, 198, 153, 
- 	154, 199, 153, 154, 184, 153, 201, 154, 
- 	209, 153, 202, 154, 153, 203, 154, 153, 
- 	204, 154, 153, 154, 205, 153, 154, 206, 
- 	153, 154, 207, 153, 154, 208, 153, 154, 
- 	175, 153, 210, 154, 217, 153, 211, 154, 
- 	153, 154, 212, 153, 154, 213, 153, 154, 
- 	214, 153, 154, 215, 153, 154, 216, 153, 
- 	154, 175, 153, 154, 218, 153, 154, 219, 
- 	153, 220, 154, 153, 175, 154, 153, 154, 
- 	222, 153, 223, 154, 153, 224, 154, 153, 
- 	154, 225, 153, 226, 154, 153, 227, 154, 
- 	153, 228, 154, 153, 175, 154, 153, 230, 
- 	0, 31, 0, 232, 0, 233, 0, 234, 
- 	0, 54, 0, 236, 0, 237, 0, 238, 
- 	0, 239, 0, 240, 0, 241, 0, 242, 
- 	0, 243, 0, 244, 0, 246, 245, 246, 
- 	245, 246, 246, 4, 247, 261, 4, 262, 
- 	276, 286, 303, 310, 326, 246, 245, 246, 
- 	248, 245, 246, 249, 245, 246, 250, 245, 
- 	246, 251, 245, 246, 252, 245, 246, 253, 
- 	245, 246, 254, 245, 246, 255, 245, 246, 
- 	256, 245, 246, 257, 245, 246, 258, 245, 
- 	246, 259, 245, 246, 260, 245, 246, 4, 
- 	245, 246, 73, 245, 246, 263, 275, 245, 
- 	4, 4, 5, 15, 17, 31, 34, 37, 
- 	45, 74, 112, 119, 235, 264, 269, 4, 
- 	0, 265, 0, 266, 0, 267, 0, 268, 
- 	0, 73, 0, 269, 270, 269, 0, 274, 
- 	273, 272, 270, 273, 271, 0, 272, 270, 
- 	271, 0, 272, 271, 274, 273, 272, 270, 
- 	273, 271, 274, 274, 5, 15, 17, 31, 
- 	34, 37, 45, 74, 112, 119, 235, 269, 
- 	274, 0, 246, 261, 245, 246, 277, 280, 
- 	245, 246, 278, 245, 279, 246, 245, 261, 
- 	246, 245, 246, 281, 245, 246, 282, 245, 
- 	246, 283, 245, 246, 284, 245, 246, 285, 
- 	245, 246, 73, 245, 287, 246, 245, 288, 
- 	246, 245, 289, 246, 245, 290, 246, 245, 
- 	246, 291, 245, 246, 292, 245, 246, 293, 
- 	245, 246, 294, 245, 246, 295, 245, 296, 
- 	246, 245, 297, 246, 245, 246, 298, 245, 
- 	299, 246, 245, 300, 246, 245, 301, 246, 
- 	245, 302, 246, 245, 246, 285, 245, 246, 
- 	304, 245, 246, 305, 245, 246, 306, 245, 
- 	246, 307, 245, 246, 308, 245, 246, 309, 
- 	245, 246, 294, 245, 246, 311, 312, 245, 
- 	246, 261, 245, 313, 246, 320, 322, 245, 
- 	314, 246, 245, 246, 315, 245, 246, 316, 
- 	245, 246, 317, 245, 246, 318, 245, 246, 
- 	319, 245, 246, 285, 245, 246, 321, 245, 
- 	246, 261, 245, 246, 323, 245, 246, 324, 
- 	245, 325, 246, 245, 285, 246, 245, 246, 
- 	327, 245, 328, 246, 245, 329, 246, 245, 
- 	246, 330, 245, 331, 246, 245, 332, 246, 
- 	245, 333, 246, 245, 285, 246, 245, 335, 
- 	0, 336, 0, 337, 0, 338, 0, 73, 
- 	0, 94, 109, 93, 94, 341, 93, 94, 
- 	342, 93, 343, 94, 93, 109, 94, 93, 
- 	94, 345, 346, 93, 94, 109, 93, 347, 
- 	94, 355, 93, 348, 94, 93, 94, 349, 
- 	93, 94, 350, 93, 94, 351, 93, 94, 
- 	352, 93, 94, 353, 93, 94, 354, 93, 
- 	94, 73, 93, 94, 356, 93, 94, 109, 
- 	93, 94, 358, 93, 359, 94, 93, 360, 
- 	94, 93, 94, 361, 93, 362, 94, 93, 
- 	363, 94, 93, 364, 94, 93, 354, 94, 
- 	93, 57, 366, 372, 56, 4, 4, 5, 
- 	15, 17, 31, 34, 37, 45, 74, 112, 
- 	119, 235, 367, 269, 4, 0, 368, 0, 
- 	369, 0, 370, 0, 371, 0, 73, 0, 
- 	57, 72, 56, 57, 374, 56, 57, 375, 
- 	56, 376, 57, 56, 72, 57, 56, 378, 
- 	57, 56, 379, 57, 56, 380, 57, 56, 
- 	381, 57, 56, 57, 382, 56, 57, 383, 
- 	56, 57, 384, 56, 57, 385, 56, 57, 
- 	386, 56, 387, 57, 56, 388, 57, 56, 
- 	57, 389, 56, 390, 57, 56, 391, 57, 
- 	56, 392, 57, 56, 393, 57, 56, 57, 
- 	394, 56, 57, 73, 56, 57, 396, 56, 
- 	57, 397, 56, 57, 398, 56, 57, 399, 
- 	56, 57, 400, 56, 57, 401, 56, 57, 
- 	385, 56, 57, 403, 404, 56, 57, 72, 
- 	56, 405, 57, 412, 56, 406, 57, 56, 
- 	57, 407, 56, 57, 408, 56, 57, 409, 
- 	56, 57, 410, 56, 57, 411, 56, 57, 
- 	394, 56, 57, 413, 56, 57, 72, 56, 
- 	57, 415, 56, 416, 57, 56, 417, 57, 
- 	56, 57, 418, 56, 419, 57, 56, 420, 
- 	57, 56, 421, 57, 56, 394, 57, 56, 
- 	0, 0
- };
- 
- static const unsigned char _lexer_trans_actions[] = {
- 	0, 54, 0, 5, 1, 0, 29, 1, 
- 	29, 29, 29, 29, 29, 29, 35, 0, 
- 	43, 0, 43, 0, 43, 54, 0, 5, 
- 	1, 0, 29, 1, 29, 29, 29, 29, 
- 	29, 29, 35, 0, 43, 0, 43, 0, 
- 	43, 139, 48, 9, 106, 11, 0, 134, 
- 	45, 45, 45, 3, 122, 33, 33, 33, 
- 	0, 122, 33, 33, 33, 0, 122, 33, 
- 	0, 33, 0, 102, 7, 7, 43, 54, 
- 	0, 0, 43, 114, 25, 0, 54, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 149, 126, 
- 	57, 110, 23, 0, 43, 43, 43, 43, 
- 	0, 27, 118, 27, 27, 51, 27, 0, 
- 	54, 0, 1, 0, 43, 0, 0, 43, 
- 	149, 126, 57, 57, 110, 23, 0, 0, 
- 	110, 23, 0, 0, 0, 110, 23, 0, 
- 	0, 110, 23, 0, 110, 23, 0, 0, 
- 	0, 43, 0, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 144, 
- 	57, 54, 0, 54, 0, 72, 33, 84, 
- 	72, 84, 84, 84, 84, 84, 84, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 15, 0, 54, 15, 0, 130, 31, 
- 	60, 57, 31, 63, 57, 63, 63, 63, 
- 	63, 63, 63, 66, 31, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 144, 57, 54, 0, 54, 0, 
- 	78, 33, 84, 78, 84, 84, 84, 84, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 19, 0, 54, 19, 0, 54, 
- 	19, 0, 0, 130, 31, 60, 57, 31, 
- 	63, 57, 63, 63, 63, 63, 63, 63, 
- 	0, 66, 31, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 0, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	144, 57, 54, 0, 54, 0, 81, 84, 
- 	81, 0, 0, 54, 0, 0, 0, 54, 
- 	0, 0, 54, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 21, 
- 	0, 0, 43, 0, 0, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 144, 
- 	57, 54, 0, 54, 0, 69, 33, 69, 
- 	84, 84, 84, 84, 84, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 13, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 13, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 0, 54, 0, 0, 54, 0, 54, 
- 	0, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 0, 54, 
- 	0, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 0, 54, 0, 0, 0, 54, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 0, 54, 0, 0, 54, 0, 54, 
- 	0, 0, 0, 54, 0, 0, 54, 0, 
- 	54, 0, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 144, 57, 54, 
- 	0, 54, 0, 75, 33, 84, 75, 84, 
- 	84, 84, 84, 84, 84, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 17, 
- 	0, 54, 17, 0, 54, 17, 0, 0, 
- 	130, 31, 60, 57, 31, 63, 57, 63, 
- 	63, 63, 63, 63, 63, 0, 66, 31, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 17, 43, 0, 0, 0, 43, 54, 
- 	37, 37, 87, 37, 37, 43, 0, 39, 
- 	0, 43, 0, 0, 54, 0, 0, 39, 
- 	0, 0, 54, 0, 93, 90, 41, 96, 
- 	90, 96, 96, 96, 96, 96, 96, 99, 
- 	0, 43, 54, 0, 0, 54, 0, 0, 
- 	0, 54, 0, 0, 0, 54, 0, 0, 
- 	54, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 17, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 0, 
- 	54, 0, 0, 54, 0, 54, 0, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 0, 
- 	54, 0, 0, 0, 54, 0, 0, 0, 
- 	0, 54, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 0, 54, 0, 0, 54, 0, 54, 
- 	0, 0, 0, 54, 0, 0, 54, 0, 
- 	54, 0, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 19, 
- 	43, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 0, 54, 0, 0, 54, 0, 
- 	54, 0, 0, 0, 54, 0, 0, 0, 
- 	54, 0, 0, 0, 54, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 19, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 0, 54, 0, 0, 
- 	54, 0, 54, 0, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 54, 15, 0, 0, 130, 31, 60, 
- 	57, 31, 63, 57, 63, 63, 63, 63, 
- 	63, 63, 0, 66, 31, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 15, 43, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 0, 54, 0, 0, 54, 0, 
- 	54, 0, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 54, 
- 	0, 0, 54, 15, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 0, 54, 0, 
- 	0, 0, 54, 0, 0, 0, 54, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 0, 54, 0, 0, 54, 
- 	0, 54, 0, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 0
- };
- 
- static const unsigned char _lexer_eof_actions[] = {
- 	0, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43
- };
- 
- static const int lexer_start = 1;
- static const int lexer_first_final = 422;
- static const int lexer_error = 0;
- 
- static const int lexer_en_main = 1;
- 
- 
- #line 258 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/cs.c.rl"
- 
- static VALUE 
- unindent(VALUE con, int start_col)
- {
-   VALUE re;
-   // Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters
-   char pat[32]; 
-   snprintf(pat, 32, "^[\t ]{0,%d}", start_col); 
-   re = rb_reg_regcomp(rb_str_new2(pat));
-   rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2(""));
- 
-   return Qnil;
- 
- }
- 
- static void 
- store_kw_con(VALUE listener, const char * event_name, 
-              const char * keyword_at, size_t keyword_length, 
-              const char * at,         size_t length, 
-              int current_line)
- {
-   VALUE con = Qnil, kw = Qnil;
-   kw = ENCODED_STR_NEW(keyword_at, keyword_length);
-   con = ENCODED_STR_NEW(at, length);
-   rb_funcall(con, rb_intern("strip!"), 0);
-   rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); 
- }
- 
- static void
- store_multiline_kw_con(VALUE listener, const char * event_name,
-                       const char * keyword_at, size_t keyword_length,
-                       const char * at,         size_t length,
-                       int current_line, int start_col)
- {
-   VALUE split;
-   VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil;
- 
-   kw = ENCODED_STR_NEW(keyword_at, keyword_length);
-   con = ENCODED_STR_NEW(at, length);
- 
-   unindent(con, start_col);
-   
-   split = rb_str_split(con, "\n");
- 
-   name = rb_funcall(split, rb_intern("shift"), 0);
-   desc = rb_ary_join(split, rb_str_new2( "\n" ));
- 
-   if( name == Qnil ) 
-   {
-     name = rb_str_new2("");
-   }
-   if( rb_funcall(desc, rb_intern("size"), 0) == 0) 
-   {
-     desc = rb_str_new2("");
-   }
-   rb_funcall(name, rb_intern("strip!"), 0);
-   rb_funcall(desc, rb_intern("rstrip!"), 0);
-   rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); 
- }
- 
- static void 
- store_attr(VALUE listener, const char * attr_type,
-            const char * at, size_t length, 
-            int line)
- {
-   VALUE val = ENCODED_STR_NEW(at, length);
-   rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line));
- }
- static void 
- store_docstring_content(VALUE listener, 
-           int start_col, 
-           const char *type_at, size_t type_length,
-           const char *at, size_t length, 
-           int current_line)
- {
-   VALUE re2;
-   VALUE unescape_escaped_quotes;
-   VALUE con = ENCODED_STR_NEW(at, length);
-   VALUE con_type = ENCODED_STR_NEW(type_at, type_length);
- 
-   unindent(con, start_col);
- 
-   re2 = rb_reg_regcomp(rb_str_new2("\r\\Z"));
-   unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\""));
-   rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2(""));
-   rb_funcall(con_type, rb_intern("strip!"), 0);
-   rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\""));
-   rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line));
- }
- static void 
- raise_lexer_error(const char * at, int line)
- { 
-   rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at);
- }
- 
- static void lexer_init(lexer_state *lexer) {
-   lexer->content_start = 0;
-   lexer->content_end = 0;
-   lexer->content_len = 0;
-   lexer->docstring_content_type_start = 0;
-   lexer->docstring_content_type_end = 0;
-   lexer->mark = 0;
-   lexer->keyword_start = 0;
-   lexer->keyword_end = 0;
-   lexer->next_keyword_start = 0;
-   lexer->line_number = 1;
-   lexer->last_newline = 0;
-   lexer->final_newline = 0;
-   lexer->start_col = 0;
- }
- 
- static VALUE CLexer_alloc(VALUE klass)
- {
-   VALUE obj;
-   lexer_state *lxr = ALLOC(lexer_state);
-   lexer_init(lxr);
- 
-   obj = Data_Wrap_Struct(klass, NULL, -1, lxr);
- 
-   return obj;
- }
- 
- static VALUE CLexer_init(VALUE self, VALUE listener)
- {
-   lexer_state *lxr; 
-   rb_iv_set(self, "@listener", listener);
-   
-   lxr = NULL;
-   DATA_GET(self, lexer_state, lxr);
-   lexer_init(lxr);
-   
-   return self;
- }
- 
- static VALUE CLexer_scan(VALUE self, VALUE input)
- {
-   VALUE input_copy;
-   char *data;
-   size_t len;
-   VALUE listener = rb_iv_get(self, "@listener");
- 
-   lexer_state *lexer;
-   lexer = NULL;
-   DATA_GET(self, lexer_state, lexer);
- 
-   input_copy = rb_str_dup(input);
- 
-   rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%"));
-   data = RSTRING_PTR(input_copy);
-   len = RSTRING_LEN(input_copy);
-   
-   if (len == 0) { 
-     rb_raise(rb_eGherkinLexingError, "No content to lex.");
-   } else {
- 
-     const char *p, *pe, *eof;
-     int cs = 0;
-     
-     VALUE current_row = Qnil;
- 
-     p = data;
-     pe = data + len;
-     eof = pe;
-     
-     assert(*pe == '\0' && "pointer does not end on NULL");
-     
-     
- #line 1031 "ext/gherkin_lexer_cs/gherkin_lexer_cs.c"
- 	{
- 	cs = lexer_start;
- 	}
- 
- #line 425 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/cs.c.rl"
-     
- #line 1038 "ext/gherkin_lexer_cs/gherkin_lexer_cs.c"
- 	{
- 	int _klen;
- 	unsigned int _trans;
- 	const char *_acts;
- 	unsigned int _nacts;
- 	const char *_keys;
- 
- 	if ( p == pe )
- 		goto _test_eof;
- 	if ( cs == 0 )
- 		goto _out;
- _resume:
- 	_keys = _lexer_trans_keys + _lexer_key_offsets[cs];
- 	_trans = _lexer_index_offsets[cs];
- 
- 	_klen = _lexer_single_lengths[cs];
- 	if ( _klen > 0 ) {
- 		const char *_lower = _keys;
- 		const char *_mid;
- 		const char *_upper = _keys + _klen - 1;
- 		while (1) {
- 			if ( _upper < _lower )
- 				break;
- 
- 			_mid = _lower + ((_upper-_lower) >> 1);
- 			if ( (*p) < *_mid )
- 				_upper = _mid - 1;
- 			else if ( (*p) > *_mid )
- 				_lower = _mid + 1;
- 			else {
- 				_trans += (_mid - _keys);
- 				goto _match;
- 			}
- 		}
- 		_keys += _klen;
- 		_trans += _klen;
- 	}
- 
- 	_klen = _lexer_range_lengths[cs];
- 	if ( _klen > 0 ) {
- 		const char *_lower = _keys;
- 		const char *_mid;
- 		const char *_upper = _keys + (_klen<<1) - 2;
- 		while (1) {
- 			if ( _upper < _lower )
- 				break;
- 
- 			_mid = _lower + (((_upper-_lower) >> 1) & ~1);
- 			if ( (*p) < _mid[0] )
- 				_upper = _mid - 2;
- 			else if ( (*p) > _mid[1] )
- 				_lower = _mid + 2;
- 			else {
- 				_trans += ((_mid - _keys)>>1);
- 				goto _match;
- 			}
- 		}
- 		_trans += _klen;
- 	}
- 
- _match:
- 	cs = _lexer_trans_targs[_trans];
- 
- 	if ( _lexer_trans_actions[_trans] == 0 )
- 		goto _again;
- 
- 	_acts = _lexer_actions + _lexer_trans_actions[_trans];
- 	_nacts = (unsigned int) *_acts++;
- 	while ( _nacts-- > 0 )
- 	{
- 		switch ( *_acts++ )
- 		{
- 	case 0:
- #line 83 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/cs.c.rl"
- 	{
- 		MARK(content_start, p);
-     lexer->current_line = lexer->line_number;
-     lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2;
-   }
- 	break;
- 	case 1:
- #line 89 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/cs.c.rl"
- 	{
-     MARK(content_start, p);
-   }
- 	break;
- 	case 2:
- #line 93 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/cs.c.rl"
- 	{
-     lexer->current_line = lexer->line_number;
-     lexer->start_col = p - data - lexer->last_newline;
-   }
- 	break;
- 	case 3:
- #line 98 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/cs.c.rl"
- 	{
-     int len = LEN(content_start, PTR_TO(final_newline));
-     int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end));
- 
-     if (len < 0) len = 0;
-     if (type_len < 0) len = 0;
- 
-     store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line);
-   }
- 	break;
- 	case 4:
- #line 108 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/cs.c.rl"
- 	{ 
-     MARK(docstring_content_type_start, p);
-   }
- 	break;
- 	case 5:
- #line 112 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/cs.c.rl"
- 	{ 
-     MARK(docstring_content_type_end, p);
-   }
- 	break;
- 	case 6:
- #line 116 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/cs.c.rl"
- 	{
-     STORE_KW_END_CON(feature);
-   }
- 	break;
- 	case 7:
- #line 120 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/cs.c.rl"
- 	{
-     STORE_KW_END_CON(background);
-   }
- 	break;
- 	case 8:
- #line 124 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/cs.c.rl"
- 	{
-     STORE_KW_END_CON(scenario);
-   }
- 	break;
- 	case 9:
- #line 128 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/cs.c.rl"
- 	{
-     STORE_KW_END_CON(scenario_outline);
-   }
- 	break;
- 	case 10:
- #line 132 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/cs.c.rl"
- 	{
-     STORE_KW_END_CON(examples);
-   }
- 	break;
- 	case 11:
- #line 136 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/cs.c.rl"
- 	{
-     store_kw_con(listener, "step",
-       PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-       PTR_TO(content_start), LEN(content_start, p), 
-       lexer->current_line);
-   }
- 	break;
- 	case 12:
- #line 143 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/cs.c.rl"
- 	{
-     STORE_ATTR(comment);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 13:
- #line 148 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/cs.c.rl"
- 	{
-     STORE_ATTR(tag);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 14:
- #line 153 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/cs.c.rl"
- 	{
-     lexer->line_number += 1;
-     MARK(final_newline, p);
-   }
- 	break;
- 	case 15:
- #line 158 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/cs.c.rl"
- 	{
-     MARK(last_newline, p + 1);
-   }
- 	break;
- 	case 16:
- #line 162 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/cs.c.rl"
- 	{
-     if (lexer->mark == 0) {
-       MARK(mark, p);
-     }
-   }
- 	break;
- 	case 17:
- #line 168 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/cs.c.rl"
- 	{
-     MARK(keyword_end, p);
-     MARK(keyword_start, PTR_TO(mark));
-     MARK(content_start, p + 1);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 18:
- #line 175 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/cs.c.rl"
- 	{
-     MARK(content_end, p);
-   }
- 	break;
- 	case 19:
- #line 179 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/cs.c.rl"
- 	{
-     p = p - 1;
-     lexer->current_line = lexer->line_number;
-     current_row = rb_ary_new();
-   }
- 	break;
- 	case 20:
- #line 185 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/cs.c.rl"
- 	{
- 		MARK(content_start, p);
-   }
- 	break;
- 	case 21:
- #line 189 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/cs.c.rl"
- 	{
-     VALUE re_pipe, re_newline, re_backslash;
-     VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
-     rb_funcall(con, rb_intern("strip!"), 0);
-     re_pipe      = rb_reg_regcomp(rb_str_new2("\\\\\\|"));
-     re_newline   = rb_reg_regcomp(rb_str_new2("\\\\n"));
-     re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_pipe,      rb_str_new2("|"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_newline,   rb_str_new2("\n"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\"));
- 
-     rb_ary_push(current_row, con);
-   }
- 	break;
- 	case 22:
- #line 203 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/cs.c.rl"
- 	{
-     rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
-   }
- 	break;
- 	case 23:
- #line 207 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/cs.c.rl"
- 	{
-     int line;
-     if (cs < lexer_first_final) {
-       size_t count = 0;
-       VALUE newstr_val;
-       char *newstr;
-       int newstr_count = 0;        
-       size_t len;
-       const char *buff;
-       if (lexer->last_newline != 0) {
-         len = LEN(last_newline, eof);
-         buff = PTR_TO(last_newline);
-       } else {
-         len = strlen(data);
-         buff = data;
-       }
- 
-       // Allocate as a ruby string so that it gets cleaned up by GC
-       newstr_val = rb_str_new(buff, len);
-       newstr = RSTRING_PTR(newstr_val);
- 
- 
-       for (count = 0; count < len; count++) {
-         if(buff[count] == 10) {
-           newstr[newstr_count] = '\0'; // terminate new string at first newline found
-           break;
-         } else {
-           if (buff[count] == '%') {
-             newstr[newstr_count++] = buff[count];
-             newstr[newstr_count] = buff[count];
-           } else {
-             newstr[newstr_count] = buff[count];
-           }
-         }
-         newstr_count++;
-       }
- 
-       line = lexer->line_number;
-       lexer_init(lexer); // Re-initialize so we can scan again with the same lexer
-       raise_lexer_error(newstr, line);
-     } else {
-       rb_funcall(listener, rb_intern("eof"), 0);
-     }
-   }
- 	break;
- #line 1328 "ext/gherkin_lexer_cs/gherkin_lexer_cs.c"
- 		}
- 	}
- 
- _again:
- 	if ( cs == 0 )
- 		goto _out;
- 	if ( ++p != pe )
- 		goto _resume;
- 	_test_eof: {}
- 	if ( p == eof )
- 	{
- 	const char *__acts = _lexer_actions + _lexer_eof_actions[cs];
- 	unsigned int __nacts = (unsigned int) *__acts++;
- 	while ( __nacts-- > 0 ) {
- 		switch ( *__acts++ ) {
- 	case 23:
- #line 207 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/cs.c.rl"
- 	{
-     int line;
-     if (cs < lexer_first_final) {
-       size_t count = 0;
-       VALUE newstr_val;
-       char *newstr;
-       int newstr_count = 0;        
-       size_t len;
-       const char *buff;
-       if (lexer->last_newline != 0) {
-         len = LEN(last_newline, eof);
-         buff = PTR_TO(last_newline);
-       } else {
-         len = strlen(data);
-         buff = data;
-       }
- 
-       // Allocate as a ruby string so that it gets cleaned up by GC
-       newstr_val = rb_str_new(buff, len);
-       newstr = RSTRING_PTR(newstr_val);
- 
- 
-       for (count = 0; count < len; count++) {
-         if(buff[count] == 10) {
-           newstr[newstr_count] = '\0'; // terminate new string at first newline found
-           break;
-         } else {
-           if (buff[count] == '%') {
-             newstr[newstr_count++] = buff[count];
-             newstr[newstr_count] = buff[count];
-           } else {
-             newstr[newstr_count] = buff[count];
-           }
-         }
-         newstr_count++;
-       }
- 
-       line = lexer->line_number;
-       lexer_init(lexer); // Re-initialize so we can scan again with the same lexer
-       raise_lexer_error(newstr, line);
-     } else {
-       rb_funcall(listener, rb_intern("eof"), 0);
-     }
-   }
- 	break;
- #line 1391 "ext/gherkin_lexer_cs/gherkin_lexer_cs.c"
- 		}
- 	}
- 	}
- 
- 	_out: {}
- 	}
- 
- #line 426 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/cs.c.rl"
- 
-     assert(p <= pe && "data overflow after parsing execute");
-     assert(lexer->content_start <= len && "content starts after data end");
-     assert(lexer->mark < len && "mark is after data end");
-     
-     // Reset lexer by re-initializing the whole thing
-     lexer_init(lexer);
- 
-     if (cs == lexer_error) {
-       rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails.");
-     } else {
-       return Qtrue;
-     }
-   }
- }
- 
- void Init_gherkin_lexer_cs()
- {
-   mGherkin = rb_define_module("Gherkin");
-   mGherkinLexer = rb_define_module_under(mGherkin, "Lexer");
-   rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError"));
- 
-   mCLexer = rb_define_module_under(mGherkin, "CLexer");
-   cI18nLexer = rb_define_class_under(mCLexer, "Cs", rb_cObject);
-   rb_define_alloc_func(cI18nLexer, CLexer_alloc);
-   rb_define_method(cI18nLexer, "initialize", CLexer_init, 1);
-   rb_define_method(cI18nLexer, "scan", CLexer_scan, 1);
- }
- 
 -#line 1 "ragel/i18n/cs.c.rl"
 -#include <assert.h>
 -#include <ruby.h>
 -
 -#if defined(_WIN32)
 -#include <stddef.h>
 -#endif
 -
 -#ifdef HAVE_RUBY_RE_H
 -#include <ruby/re.h>
 -#else
 -#include <re.h>
 -#endif
 -
 -#ifdef HAVE_RUBY_ENCODING_H
 -#include <ruby/encoding.h>
 -#define ENCODED_STR_NEW(ptr, len) \
 -    rb_enc_str_new(ptr, len, rb_utf8_encoding())
 -#else
 -#define ENCODED_STR_NEW(ptr, len) \
 -    rb_str_new(ptr, len)
 -#endif
 -
 -#ifndef RSTRING_PTR
 -#define RSTRING_PTR(s) (RSTRING(s)->ptr)
 -#endif
 -
 -#ifndef RSTRING_LEN
 -#define RSTRING_LEN(s) (RSTRING(s)->len)
 -#endif
 -
 -#define DATA_GET(FROM, TYPE, NAME) \
 -  Data_Get_Struct(FROM, TYPE, NAME); \
 -  if (NAME == NULL) { \
 -    rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \
 -  }
 - 
 -typedef struct lexer_state {
 -  int content_len;
 -  int line_number;
 -  int current_line;
 -  int start_col;
 -  size_t mark;
 -  size_t keyword_start;
 -  size_t keyword_end;
 -  size_t next_keyword_start;
 -  size_t content_start;
 -  size_t content_end;
 -  size_t docstring_content_type_start;
 -  size_t docstring_content_type_end;
 -  size_t query_start;
 -  size_t last_newline;
 -  size_t final_newline;
 -} lexer_state;
 -
 -static VALUE mGherkin;
 -static VALUE mGherkinLexer;
 -static VALUE mCLexer;
 -static VALUE cI18nLexer;
 -static VALUE rb_eGherkinLexingError;
 -
 -#define LEN(AT, P) (P - data - lexer->AT)
 -#define MARK(M, P) (lexer->M = (P) - data)
 -#define PTR_TO(P) (data + lexer->P)
 -
 -#define STORE_KW_END_CON(EVENT) \
 -  store_multiline_kw_con(listener, # EVENT, \
 -    PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \
 -    PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \
 -    lexer->current_line, lexer->start_col); \
 -    if (lexer->content_end != 0) { \
 -      p = PTR_TO(content_end - 1); \
 -    } \
 -    lexer->content_end = 0
 -
 -#define STORE_ATTR(ATTR) \
 -    store_attr(listener, # ATTR, \
 -      PTR_TO(content_start), LEN(content_start, p), \
 -      lexer->line_number)
 -
 -
 -#line 254 "ragel/i18n/cs.c.rl"
 -
 -
 -/** Data **/
 -
 -#line 89 "ext/gherkin_lexer_cs/gherkin_lexer_cs.c"
 -static const char _lexer_actions[] = {
 -	0, 1, 0, 1, 1, 1, 2, 1, 
 -	3, 1, 4, 1, 5, 1, 6, 1, 
 -	7, 1, 8, 1, 9, 1, 10, 1, 
 -	11, 1, 12, 1, 13, 1, 16, 1, 
 -	17, 1, 18, 1, 19, 1, 20, 1, 
 -	21, 1, 22, 1, 23, 2, 1, 18, 
 -	2, 4, 5, 2, 13, 0, 2, 14, 
 -	15, 2, 17, 0, 2, 17, 2, 2, 
 -	17, 16, 2, 17, 19, 2, 18, 6, 
 -	2, 18, 7, 2, 18, 8, 2, 18, 
 -	9, 2, 18, 10, 2, 18, 16, 2, 
 -	20, 21, 2, 22, 0, 2, 22, 2, 
 -	2, 22, 16, 2, 22, 19, 3, 3, 
 -	14, 15, 3, 5, 14, 15, 3, 11, 
 -	14, 15, 3, 12, 14, 15, 3, 13, 
 -	14, 15, 3, 14, 15, 18, 3, 17, 
 -	0, 11, 3, 17, 14, 15, 4, 1, 
 -	14, 15, 18, 4, 4, 5, 14, 15, 
 -	4, 17, 0, 14, 15, 5, 17, 0, 
 -	11, 14, 15
 -};
 -
 -static const short _lexer_key_offsets[] = {
 -	0, 0, 18, 19, 20, 37, 38, 39, 
 -	41, 43, 48, 53, 58, 63, 67, 71, 
 -	73, 74, 75, 76, 77, 78, 79, 80, 
 -	81, 82, 83, 84, 85, 86, 87, 88, 
 -	89, 91, 93, 98, 105, 110, 112, 115, 
 -	118, 121, 124, 127, 130, 131, 133, 134, 
 -	135, 136, 137, 138, 139, 140, 141, 142, 
 -	143, 144, 159, 161, 163, 165, 167, 169, 
 -	171, 173, 175, 177, 179, 181, 183, 185, 
 -	187, 189, 206, 207, 208, 209, 210, 211, 
 -	212, 213, 214, 215, 216, 217, 218, 219, 
 -	220, 221, 222, 223, 224, 225, 226, 239, 
 -	241, 243, 245, 247, 249, 251, 253, 255, 
 -	257, 259, 261, 263, 265, 267, 269, 272, 
 -	290, 291, 292, 293, 294, 295, 296, 297, 
 -	300, 301, 302, 303, 304, 305, 306, 307, 
 -	308, 309, 310, 311, 318, 320, 322, 324, 
 -	326, 328, 330, 332, 334, 336, 338, 339, 
 -	342, 343, 344, 345, 346, 347, 348, 349, 
 -	350, 351, 352, 364, 366, 368, 370, 372, 
 -	374, 376, 378, 380, 382, 384, 386, 388, 
 -	390, 392, 394, 396, 398, 400, 402, 404, 
 -	406, 408, 410, 412, 414, 416, 418, 420, 
 -	422, 424, 426, 428, 430, 432, 434, 436, 
 -	438, 440, 442, 444, 446, 448, 450, 452, 
 -	454, 457, 459, 461, 463, 465, 467, 469, 
 -	471, 473, 476, 478, 480, 482, 484, 486, 
 -	488, 490, 492, 494, 496, 498, 500, 502, 
 -	504, 506, 508, 510, 512, 514, 515, 516, 
 -	517, 518, 519, 520, 521, 522, 523, 524, 
 -	525, 526, 527, 528, 529, 530, 531, 546, 
 -	548, 550, 552, 554, 556, 558, 560, 562, 
 -	564, 566, 568, 570, 572, 574, 576, 579, 
 -	597, 598, 599, 600, 601, 602, 603, 604, 
 -	605, 606, 607, 608, 609, 610, 611, 612, 
 -	613, 614, 615, 616, 620, 626, 629, 631, 
 -	637, 654, 656, 659, 661, 663, 665, 667, 
 -	669, 671, 673, 675, 677, 679, 681, 683, 
 -	685, 687, 689, 691, 693, 695, 697, 699, 
 -	701, 703, 705, 707, 709, 711, 713, 715, 
 -	717, 719, 721, 723, 725, 728, 730, 734, 
 -	736, 738, 740, 742, 744, 746, 748, 750, 
 -	752, 754, 756, 758, 760, 762, 764, 766, 
 -	768, 770, 772, 774, 776, 778, 780, 782, 
 -	784, 786, 788, 790, 792, 794, 796, 798, 
 -	800, 802, 804, 805, 806, 807, 808, 809, 
 -	811, 813, 815, 817, 819, 822, 824, 827, 
 -	829, 831, 833, 835, 837, 839, 841, 843, 
 -	845, 847, 849, 851, 853, 855, 857, 859, 
 -	861, 863, 865, 867, 869, 871, 873, 875, 
 -	877, 879, 881, 883, 885, 887, 889, 891, 
 -	894, 912, 913, 914, 915, 916, 917, 919, 
 -	921, 923, 925, 927, 929, 931, 933, 935, 
 -	937, 939, 941, 943, 945, 947, 949, 951, 
 -	953, 955, 957, 959, 961, 963, 965, 967, 
 -	969, 971, 973, 975, 977, 980, 982, 985, 
 -	987, 989, 991, 993, 995, 997, 999, 1001, 
 -	1003, 1005, 1007, 1009, 1011, 1013, 1015, 1017, 
 -	1019, 1021, 1023, 1025, 1027, 1029, 1031, 1033, 
 -	1035, 1037, 1039, 1041, 1043, 1045, 1047
 -};
 -
 -static const char _lexer_trans_keys[] = {
 -	-17, 10, 32, 34, 35, 37, 42, 64, 
 -	65, 75, 78, 79, 80, 83, 90, 124, 
 -	9, 13, -69, -65, 10, 32, 34, 35, 
 -	37, 42, 64, 65, 75, 78, 79, 80, 
 -	83, 90, 124, 9, 13, 34, 34, 10, 
 -	13, 10, 13, 10, 32, 34, 9, 13, 
 -	10, 32, 34, 9, 13, 10, 32, 34, 
 -	9, 13, 10, 32, 34, 9, 13, 10, 
 -	32, 9, 13, 10, 32, 9, 13, 10, 
 -	13, 10, 95, 70, 69, 65, 84, 85, 
 -	82, 69, 95, 69, 78, 68, 95, 37, 
 -	32, 10, 13, 10, 13, 13, 32, 64, 
 -	9, 10, 9, 10, 13, 32, 64, 11, 
 -	12, 10, 32, 64, 9, 13, 32, 108, 
 -	10, 13, 116, 10, 13, 97, 10, 13, 
 -	107, -61, 10, 13, -87, 10, 13, 10, 
 -	13, 32, 101, 100, 111, 121, -59, -66, 
 -	110, 116, 101, 120, 116, 58, 10, 10, 
 -	10, 32, 35, 37, 42, 64, 65, 75, 
 -	78, 79, 80, 83, 90, 9, 13, 10, 
 -	95, 10, 70, 10, 69, 10, 65, 10, 
 -	84, 10, 85, 10, 82, 10, 69, 10, 
 -	95, 10, 69, 10, 78, 10, 68, 10, 
 -	95, 10, 37, 10, 32, 10, 32, 34, 
 -	35, 37, 42, 64, 65, 75, 78, 79, 
 -	80, 83, 90, 124, 9, 13, -61, -95, 
 -	-60, -115, 114, 116, 32, 83, 99, -61, 
 -	-87, 110, -61, -95, -59, -103, 101, 58, 
 -	10, 10, 10, 32, 35, 37, 42, 64, 
 -	65, 75, 80, 83, 90, 9, 13, 10, 
 -	95, 10, 70, 10, 69, 10, 65, 10, 
 -	84, 10, 85, 10, 82, 10, 69, 10, 
 -	95, 10, 69, 10, 78, 10, 68, 10, 
 -	95, 10, 37, 10, 32, 10, 32, 108, 
 -	10, 32, 34, 35, 37, 42, 64, 65, 
 -	75, 78, 79, 80, 83, 90, 116, 124, 
 -	9, 13, 115, 110, 111, 118, 97, 32, 
 -	115, -59, 97, 111, -103, -61, -83, 107, 
 -	108, 97, 100, 121, 58, 10, 10, 10, 
 -	32, 35, 80, 124, 9, 13, 10, 111, 
 -	-59, 10, -66, 10, 10, 97, 10, 100, 
 -	10, 97, 10, 118, 10, 101, 10, 107, 
 -	10, 58, 107, -59, 107, 122, -66, 97, 
 -	100, 97, 118, 101, 107, 58, 10, 10, 
 -	10, 32, 35, 37, 64, 75, 78, 79, 
 -	80, 83, 9, 13, 10, 95, 10, 70, 
 -	10, 69, 10, 65, 10, 84, 10, 85, 
 -	10, 82, 10, 69, 10, 95, 10, 69, 
 -	10, 78, 10, 68, 10, 95, 10, 37, 
 -	10, 111, 10, 110, 10, 116, 10, 101, 
 -	10, 120, 10, 116, 10, 58, -61, 10, 
 -	-95, 10, -60, 10, -115, 10, 10, 114, 
 -	10, 116, 10, 32, 10, 83, 10, 99, 
 -	-61, 10, -87, 10, 10, 110, -61, 10, 
 -	-95, 10, -59, 10, -103, 10, 10, 101, 
 -	10, 115, 10, 110, 10, 111, 10, 118, 
 -	10, 97, 10, 32, 10, 115, -59, 10, 
 -	111, -103, 10, -61, 10, -83, 10, 10, 
 -	107, 10, 108, 10, 97, 10, 100, 10, 
 -	121, -59, 10, 122, -66, 10, 10, 97, 
 -	10, 100, 10, 97, 10, 118, 10, 101, 
 -	10, 107, 10, 97, 10, 100, -61, 10, 
 -	-83, 10, 10, 99, -61, 10, -87, 10, 
 -	10, 110, -61, 10, -95, 10, -59, 10, 
 -	-103, 10, 117, 100, 97, 100, -61, -83, 
 -	99, -61, -87, 110, -61, -95, -59, -103, 
 -	58, 10, 10, 10, 32, 35, 37, 42, 
 -	64, 65, 75, 78, 79, 80, 83, 90, 
 -	9, 13, 10, 95, 10, 70, 10, 69, 
 -	10, 65, 10, 84, 10, 85, 10, 82, 
 -	10, 69, 10, 95, 10, 69, 10, 78, 
 -	10, 68, 10, 95, 10, 37, 10, 32, 
 -	10, 32, 108, 10, 32, 34, 35, 37, 
 -	42, 64, 65, 75, 78, 79, 80, 83, 
 -	90, 116, 124, 9, 13, 97, 32, 112, 
 -	-59, -103, 101, 100, 112, 111, 107, 108, 
 -	97, 100, 117, 97, 107, -61, -87, 32, 
 -	32, 124, 9, 13, 10, 32, 92, 124, 
 -	9, 13, 10, 92, 124, 10, 92, 10, 
 -	32, 92, 124, 9, 13, 10, 32, 34, 
 -	35, 37, 42, 64, 65, 75, 78, 79, 
 -	80, 83, 90, 124, 9, 13, 10, 101, 
 -	10, 100, 111, 10, 121, -59, 10, -66, 
 -	10, 10, 110, 10, 116, 10, 101, 10, 
 -	120, 10, 116, 10, 58, -61, 10, -95, 
 -	10, -60, 10, -115, 10, 10, 114, 10, 
 -	116, 10, 32, 10, 83, 10, 99, -61, 
 -	10, -87, 10, 10, 110, -61, 10, -95, 
 -	10, -59, 10, -103, 10, 10, 101, 10, 
 -	115, 10, 110, 10, 111, 10, 118, 10, 
 -	97, 10, 32, 10, 115, 10, 97, 111, 
 -	10, 107, -59, 10, 107, 122, -66, 10, 
 -	10, 97, 10, 100, 10, 97, 10, 118, 
 -	10, 101, 10, 107, 10, 117, 10, 100, 
 -	10, 97, 10, 100, -61, 10, -83, 10, 
 -	10, 99, -61, 10, -87, 10, 10, 110, 
 -	-61, 10, -95, 10, -59, 10, -103, 10, 
 -	10, 97, 10, 32, 10, 112, -59, 10, 
 -	-103, 10, 10, 101, 10, 100, 10, 112, 
 -	10, 111, 10, 107, 10, 108, 10, 97, 
 -	10, 100, 10, 117, 97, 107, -61, -87, 
 -	32, 10, 101, 10, 100, 10, 121, -59, 
 -	10, -66, 10, 10, 97, 111, 10, 107, 
 -	-59, 10, 107, -66, 10, 10, 97, 10, 
 -	100, 10, 97, 10, 118, 10, 101, 10, 
 -	107, 10, 58, 10, 117, 10, 100, 10, 
 -	99, -61, 10, -87, 10, 10, 110, -61, 
 -	10, -95, 10, -59, 10, -103, 10, 10, 
 -	97, 10, 32, 10, 112, -59, 10, -103, 
 -	10, 10, 101, 10, 100, 10, 112, 10, 
 -	111, 10, 107, 10, 108, 10, 97, 10, 
 -	100, 10, 117, 10, 32, 108, 10, 32, 
 -	34, 35, 37, 42, 64, 65, 75, 78, 
 -	79, 80, 83, 90, 116, 124, 9, 13, 
 -	97, 107, -61, -87, 32, 10, 101, 10, 
 -	100, 10, 121, -59, 10, -66, 10, -61, 
 -	10, -95, 10, -60, 10, -115, 10, 10, 
 -	114, 10, 116, 10, 32, 10, 83, 10, 
 -	99, -61, 10, -87, 10, 10, 110, -61, 
 -	10, -95, 10, -59, 10, -103, 10, 10, 
 -	101, 10, 58, 10, 115, 10, 110, 10, 
 -	111, 10, 118, 10, 97, 10, 32, 10, 
 -	115, 10, 97, 111, 10, 107, -59, 10, 
 -	107, -66, 10, 10, 97, 10, 100, 10, 
 -	97, 10, 118, 10, 101, 10, 107, 10, 
 -	117, 10, 100, 10, 99, -61, 10, -87, 
 -	10, 10, 110, -61, 10, -95, 10, -59, 
 -	10, -103, 10, 10, 97, 10, 32, 10, 
 -	112, -59, 10, -103, 10, 10, 101, 10, 
 -	100, 10, 112, 10, 111, 10, 107, 10, 
 -	108, 10, 97, 10, 100, 10, 117, 0
 -};
 -
 -static const char _lexer_single_lengths[] = {
 -	0, 16, 1, 1, 15, 1, 1, 2, 
 -	2, 3, 3, 3, 3, 2, 2, 2, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	2, 2, 3, 5, 3, 2, 3, 3, 
 -	3, 3, 3, 3, 1, 2, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 13, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 15, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 11, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 3, 16, 
 -	1, 1, 1, 1, 1, 1, 1, 3, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 5, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 1, 3, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 10, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	3, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 3, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 13, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 3, 16, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 2, 4, 3, 2, 4, 
 -	15, 2, 3, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 3, 2, 4, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 1, 1, 1, 1, 1, 2, 
 -	2, 2, 2, 2, 3, 2, 3, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 3, 
 -	16, 1, 1, 1, 1, 1, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 3, 2, 3, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 0
 -};
 -
 -static const char _lexer_range_lengths[] = {
 -	0, 1, 0, 0, 1, 0, 0, 0, 
 -	0, 1, 1, 1, 1, 1, 1, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 1, 1, 1, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 1, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 1, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 1, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 1, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 1, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 1, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 1, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 1, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 1, 1, 0, 0, 1, 
 -	1, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	1, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0
 -};
 -
 -static const short _lexer_index_offsets[] = {
 -	0, 0, 18, 20, 22, 39, 41, 43, 
 -	46, 49, 54, 59, 64, 69, 73, 77, 
 -	80, 82, 84, 86, 88, 90, 92, 94, 
 -	96, 98, 100, 102, 104, 106, 108, 110, 
 -	112, 115, 118, 123, 130, 135, 138, 142, 
 -	146, 150, 154, 158, 162, 164, 167, 169, 
 -	171, 173, 175, 177, 179, 181, 183, 185, 
 -	187, 189, 204, 207, 210, 213, 216, 219, 
 -	222, 225, 228, 231, 234, 237, 240, 243, 
 -	246, 249, 266, 268, 270, 272, 274, 276, 
 -	278, 280, 282, 284, 286, 288, 290, 292, 
 -	294, 296, 298, 300, 302, 304, 306, 319, 
 -	322, 325, 328, 331, 334, 337, 340, 343, 
 -	346, 349, 352, 355, 358, 361, 364, 368, 
 -	386, 388, 390, 392, 394, 396, 398, 400, 
 -	404, 406, 408, 410, 412, 414, 416, 418, 
 -	420, 422, 424, 426, 433, 436, 439, 442, 
 -	445, 448, 451, 454, 457, 460, 463, 465, 
 -	469, 471, 473, 475, 477, 479, 481, 483, 
 -	485, 487, 489, 501, 504, 507, 510, 513, 
 -	516, 519, 522, 525, 528, 531, 534, 537, 
 -	540, 543, 546, 549, 552, 555, 558, 561, 
 -	564, 567, 570, 573, 576, 579, 582, 585, 
 -	588, 591, 594, 597, 600, 603, 606, 609, 
 -	612, 615, 618, 621, 624, 627, 630, 633, 
 -	636, 640, 643, 646, 649, 652, 655, 658, 
 -	661, 664, 668, 671, 674, 677, 680, 683, 
 -	686, 689, 692, 695, 698, 701, 704, 707, 
 -	710, 713, 716, 719, 722, 725, 727, 729, 
 -	731, 733, 735, 737, 739, 741, 743, 745, 
 -	747, 749, 751, 753, 755, 757, 759, 774, 
 -	777, 780, 783, 786, 789, 792, 795, 798, 
 -	801, 804, 807, 810, 813, 816, 819, 823, 
 -	841, 843, 845, 847, 849, 851, 853, 855, 
 -	857, 859, 861, 863, 865, 867, 869, 871, 
 -	873, 875, 877, 879, 883, 889, 893, 896, 
 -	902, 919, 922, 926, 929, 932, 935, 938, 
 -	941, 944, 947, 950, 953, 956, 959, 962, 
 -	965, 968, 971, 974, 977, 980, 983, 986, 
 -	989, 992, 995, 998, 1001, 1004, 1007, 1010, 
 -	1013, 1016, 1019, 1022, 1025, 1029, 1032, 1037, 
 -	1040, 1043, 1046, 1049, 1052, 1055, 1058, 1061, 
 -	1064, 1067, 1070, 1073, 1076, 1079, 1082, 1085, 
 -	1088, 1091, 1094, 1097, 1100, 1103, 1106, 1109, 
 -	1112, 1115, 1118, 1121, 1124, 1127, 1130, 1133, 
 -	1136, 1139, 1142, 1144, 1146, 1148, 1150, 1152, 
 -	1155, 1158, 1161, 1164, 1167, 1171, 1174, 1178, 
 -	1181, 1184, 1187, 1190, 1193, 1196, 1199, 1202, 
 -	1205, 1208, 1211, 1214, 1217, 1220, 1223, 1226, 
 -	1229, 1232, 1235, 1238, 1241, 1244, 1247, 1250, 
 -	1253, 1256, 1259, 1262, 1265, 1268, 1271, 1274, 
 -	1278, 1296, 1298, 1300, 1302, 1304, 1306, 1309, 
 -	1312, 1315, 1318, 1321, 1324, 1327, 1330, 1333, 
 -	1336, 1339, 1342, 1345, 1348, 1351, 1354, 1357, 
 -	1360, 1363, 1366, 1369, 1372, 1375, 1378, 1381, 
 -	1384, 1387, 1390, 1393, 1396, 1400, 1403, 1407, 
 -	1410, 1413, 1416, 1419, 1422, 1425, 1428, 1431, 
 -	1434, 1437, 1440, 1443, 1446, 1449, 1452, 1455, 
 -	1458, 1461, 1464, 1467, 1470, 1473, 1476, 1479, 
 -	1482, 1485, 1488, 1491, 1494, 1497, 1500
 -};
 -
 -static const short _lexer_trans_targs[] = {
 -	2, 4, 4, 5, 15, 17, 31, 34, 
 -	37, 45, 74, 112, 119, 235, 264, 283, 
 -	4, 0, 3, 0, 4, 0, 4, 4, 
 -	5, 15, 17, 31, 34, 37, 45, 74, 
 -	112, 119, 235, 264, 283, 4, 0, 6, 
 -	0, 7, 0, 9, 8, 8, 9, 8, 
 -	8, 10, 10, 11, 10, 10, 10, 10, 
 -	11, 10, 10, 10, 10, 12, 10, 10, 
 -	10, 10, 13, 10, 10, 4, 14, 14, 
 -	0, 4, 14, 14, 0, 4, 16, 15, 
 -	4, 0, 18, 0, 19, 0, 20, 0, 
 -	21, 0, 22, 0, 23, 0, 24, 0, 
 -	25, 0, 26, 0, 27, 0, 28, 0, 
 -	29, 0, 30, 0, 478, 0, 32, 0, 
 -	4, 16, 33, 4, 16, 33, 0, 0, 
 -	0, 0, 35, 36, 4, 36, 36, 34, 
 -	35, 35, 4, 36, 34, 36, 0, 38, 
 -	44, 0, 4, 16, 39, 33, 4, 16, 
 -	40, 33, 4, 16, 41, 33, 42, 4, 
 -	16, 33, 43, 4, 16, 33, 4, 16, 
 -	32, 33, 31, 0, 46, 49, 0, 47, 
 -	0, 48, 0, 31, 0, 50, 0, 51, 
 -	0, 52, 0, 53, 0, 54, 0, 55, 
 -	0, 57, 56, 57, 56, 57, 57, 4, 
 -	58, 72, 4, 407, 415, 419, 437, 444, 
 -	456, 464, 57, 56, 57, 59, 56, 57, 
 -	60, 56, 57, 61, 56, 57, 62, 56, 
 -	57, 63, 56, 57, 64, 56, 57, 65, 
 -	56, 57, 66, 56, 57, 67, 56, 57, 
 -	68, 56, 57, 69, 56, 57, 70, 56, 
 -	57, 71, 56, 57, 4, 56, 57, 73, 
 -	56, 4, 4, 5, 15, 17, 31, 34, 
 -	37, 45, 74, 112, 119, 235, 264, 283, 
 -	4, 0, 75, 0, 76, 0, 77, 0, 
 -	78, 0, 79, 0, 80, 0, 81, 0, 
 -	82, 0, 83, 0, 84, 0, 85, 0, 
 -	86, 0, 87, 0, 88, 0, 89, 0, 
 -	90, 0, 91, 0, 92, 0, 94, 93, 
 -	94, 93, 94, 94, 4, 95, 109, 4, 
 -	110, 368, 372, 385, 393, 94, 93, 94, 
 -	96, 93, 94, 97, 93, 94, 98, 93, 
 -	94, 99, 93, 94, 100, 93, 94, 101, 
 -	93, 94, 102, 93, 94, 103, 93, 94, 
 -	104, 93, 94, 105, 93, 94, 106, 93, 
 -	94, 107, 93, 94, 108, 93, 94, 4, 
 -	93, 94, 73, 93, 94, 111, 367, 93, 
 -	4, 4, 5, 15, 17, 31, 34, 37, 
 -	45, 74, 112, 119, 235, 264, 362, 283, 
 -	4, 0, 113, 0, 114, 0, 115, 0, 
 -	116, 0, 117, 0, 118, 0, 82, 0, 
 -	120, 142, 143, 0, 121, 0, 122, 0, 
 -	123, 0, 124, 0, 125, 0, 126, 0, 
 -	127, 0, 128, 0, 129, 0, 131, 130, 
 -	131, 130, 131, 131, 4, 132, 4, 131, 
 -	130, 131, 133, 130, 134, 131, 130, 135, 
 -	131, 130, 131, 136, 130, 131, 137, 130, 
 -	131, 138, 130, 131, 139, 130, 131, 140, 
 -	130, 131, 141, 130, 131, 73, 130, 31, 
 -	0, 144, 229, 231, 0, 145, 0, 146, 
 -	0, 147, 0, 148, 0, 149, 0, 150, 
 -	0, 151, 0, 152, 0, 154, 153, 154, 
 -	153, 154, 154, 4, 155, 4, 169, 176, 
 -	193, 200, 221, 154, 153, 154, 156, 153, 
 -	154, 157, 153, 154, 158, 153, 154, 159, 
 -	153, 154, 160, 153, 154, 161, 153, 154, 
 -	162, 153, 154, 163, 153, 154, 164, 153, 
 -	154, 165, 153, 154, 166, 153, 154, 167, 
 -	153, 154, 168, 153, 154, 4, 153, 154, 
 -	170, 153, 154, 171, 153, 154, 172, 153, 
 -	154, 173, 153, 154, 174, 153, 154, 175, 
 -	153, 154, 73, 153, 177, 154, 153, 178, 
 -	154, 153, 179, 154, 153, 180, 154, 153, 
 -	154, 181, 153, 154, 182, 153, 154, 183, 
 -	153, 154, 184, 153, 154, 185, 153, 186, 
 -	154, 153, 187, 154, 153, 154, 188, 153, 
 -	189, 154, 153, 190, 154, 153, 191, 154, 
 -	153, 192, 154, 153, 154, 175, 153, 154, 
 -	194, 153, 154, 195, 153, 154, 196, 153, 
 -	154, 197, 153, 154, 198, 153, 154, 199, 
 -	153, 154, 184, 153, 201, 154, 209, 153, 
 -	202, 154, 153, 203, 154, 153, 204, 154, 
 -	153, 154, 205, 153, 154, 206, 153, 154, 
 -	207, 153, 154, 208, 153, 154, 175, 153, 
 -	210, 154, 217, 153, 211, 154, 153, 154, 
 -	212, 153, 154, 213, 153, 154, 214, 153, 
 -	154, 215, 153, 154, 216, 153, 154, 175, 
 -	153, 154, 218, 153, 154, 219, 153, 220, 
 -	154, 153, 175, 154, 153, 154, 222, 153, 
 -	223, 154, 153, 224, 154, 153, 154, 225, 
 -	153, 226, 154, 153, 227, 154, 153, 228, 
 -	154, 153, 175, 154, 153, 230, 0, 31, 
 -	0, 232, 0, 233, 0, 234, 0, 54, 
 -	0, 236, 0, 237, 0, 238, 0, 239, 
 -	0, 240, 0, 241, 0, 242, 0, 243, 
 -	0, 244, 0, 246, 245, 246, 245, 246, 
 -	246, 4, 247, 261, 4, 262, 290, 300, 
 -	317, 324, 340, 348, 246, 245, 246, 248, 
 -	245, 246, 249, 245, 246, 250, 245, 246, 
 -	251, 245, 246, 252, 245, 246, 253, 245, 
 -	246, 254, 245, 246, 255, 245, 246, 256, 
 -	245, 246, 257, 245, 246, 258, 245, 246, 
 -	259, 245, 246, 260, 245, 246, 4, 245, 
 -	246, 73, 245, 246, 263, 289, 245, 4, 
 -	4, 5, 15, 17, 31, 34, 37, 45, 
 -	74, 112, 119, 235, 264, 278, 283, 4, 
 -	0, 265, 0, 266, 0, 267, 0, 268, 
 -	0, 269, 0, 270, 0, 271, 0, 272, 
 -	0, 273, 0, 274, 0, 275, 0, 276, 
 -	0, 277, 0, 31, 0, 279, 0, 280, 
 -	0, 281, 0, 282, 0, 73, 0, 283, 
 -	284, 283, 0, 288, 287, 286, 284, 287, 
 -	285, 0, 286, 284, 285, 0, 286, 285, 
 -	288, 287, 286, 284, 287, 285, 288, 288, 
 -	5, 15, 17, 31, 34, 37, 45, 74, 
 -	112, 119, 235, 264, 283, 288, 0, 246, 
 -	261, 245, 246, 291, 294, 245, 246, 292, 
 -	245, 293, 246, 245, 261, 246, 245, 246, 
 -	295, 245, 246, 296, 245, 246, 297, 245, 
 -	246, 298, 245, 246, 299, 245, 246, 73, 
 -	245, 301, 246, 245, 302, 246, 245, 303, 
 -	246, 245, 304, 246, 245, 246, 305, 245, 
 -	246, 306, 245, 246, 307, 245, 246, 308, 
 -	245, 246, 309, 245, 310, 246, 245, 311, 
 -	246, 245, 246, 312, 245, 313, 246, 245, 
 -	314, 246, 245, 315, 246, 245, 316, 246, 
 -	245, 246, 299, 245, 246, 318, 245, 246, 
 -	319, 245, 246, 320, 245, 246, 321, 245, 
 -	246, 322, 245, 246, 323, 245, 246, 308, 
 -	245, 246, 325, 326, 245, 246, 261, 245, 
 -	327, 246, 334, 336, 245, 328, 246, 245, 
 -	246, 329, 245, 246, 330, 245, 246, 331, 
 -	245, 246, 332, 245, 246, 333, 245, 246, 
 -	299, 245, 246, 335, 245, 246, 261, 245, 
 -	246, 337, 245, 246, 338, 245, 339, 246, 
 -	245, 299, 246, 245, 246, 341, 245, 342, 
 -	246, 245, 343, 246, 245, 246, 344, 245, 
 -	345, 246, 245, 346, 246, 245, 347, 246, 
 -	245, 299, 246, 245, 246, 349, 245, 246, 
 -	350, 245, 246, 351, 245, 352, 246, 245, 
 -	353, 246, 245, 246, 354, 245, 246, 355, 
 -	245, 246, 356, 245, 246, 357, 245, 246, 
 -	358, 245, 246, 359, 245, 246, 360, 245, 
 -	246, 361, 245, 246, 261, 245, 363, 0, 
 -	364, 0, 365, 0, 366, 0, 73, 0, 
 -	94, 109, 93, 94, 369, 93, 94, 370, 
 -	93, 371, 94, 93, 109, 94, 93, 94, 
 -	373, 374, 93, 94, 109, 93, 375, 94, 
 -	383, 93, 376, 94, 93, 94, 377, 93, 
 -	94, 378, 93, 94, 379, 93, 94, 380, 
 -	93, 94, 381, 93, 94, 382, 93, 94, 
 -	73, 93, 94, 384, 93, 94, 109, 93, 
 -	94, 386, 93, 387, 94, 93, 388, 94, 
 -	93, 94, 389, 93, 390, 94, 93, 391, 
 -	94, 93, 392, 94, 93, 382, 94, 93, 
 -	94, 394, 93, 94, 395, 93, 94, 396, 
 -	93, 397, 94, 93, 398, 94, 93, 94, 
 -	399, 93, 94, 400, 93, 94, 401, 93, 
 -	94, 402, 93, 94, 403, 93, 94, 404, 
 -	93, 94, 405, 93, 94, 406, 93, 94, 
 -	109, 93, 57, 408, 414, 56, 4, 4, 
 -	5, 15, 17, 31, 34, 37, 45, 74, 
 -	112, 119, 235, 264, 409, 283, 4, 0, 
 -	410, 0, 411, 0, 412, 0, 413, 0, 
 -	73, 0, 57, 72, 56, 57, 416, 56, 
 -	57, 417, 56, 418, 57, 56, 72, 57, 
 -	56, 420, 57, 56, 421, 57, 56, 422, 
 -	57, 56, 423, 57, 56, 57, 424, 56, 
 -	57, 425, 56, 57, 426, 56, 57, 427, 
 -	56, 57, 428, 56, 429, 57, 56, 430, 
 -	57, 56, 57, 431, 56, 432, 57, 56, 
 -	433, 57, 56, 434, 57, 56, 435, 57, 
 -	56, 57, 436, 56, 57, 73, 56, 57, 
 -	438, 56, 57, 439, 56, 57, 440, 56, 
 -	57, 441, 56, 57, 442, 56, 57, 443, 
 -	56, 57, 427, 56, 57, 445, 446, 56, 
 -	57, 72, 56, 447, 57, 454, 56, 448, 
 -	57, 56, 57, 449, 56, 57, 450, 56, 
 -	57, 451, 56, 57, 452, 56, 57, 453, 
 -	56, 57, 436, 56, 57, 455, 56, 57, 
 -	72, 56, 57, 457, 56, 458, 57, 56, 
 -	459, 57, 56, 57, 460, 56, 461, 57, 
 -	56, 462, 57, 56, 463, 57, 56, 436, 
 -	57, 56, 57, 465, 56, 57, 466, 56, 
 -	57, 467, 56, 468, 57, 56, 469, 57, 
 -	56, 57, 470, 56, 57, 471, 56, 57, 
 -	472, 56, 57, 473, 56, 57, 474, 56, 
 -	57, 475, 56, 57, 476, 56, 57, 477, 
 -	56, 57, 72, 56, 0, 0
 -};
 -
 -static const unsigned char _lexer_trans_actions[] = {
 -	0, 54, 0, 5, 1, 0, 29, 1, 
 -	29, 29, 29, 29, 29, 29, 29, 35, 
 -	0, 43, 0, 43, 0, 43, 54, 0, 
 -	5, 1, 0, 29, 1, 29, 29, 29, 
 -	29, 29, 29, 29, 35, 0, 43, 0, 
 -	43, 0, 43, 139, 48, 9, 106, 11, 
 -	0, 134, 45, 45, 45, 3, 122, 33, 
 -	33, 33, 0, 122, 33, 33, 33, 0, 
 -	122, 33, 0, 33, 0, 102, 7, 7, 
 -	43, 54, 0, 0, 43, 114, 25, 0, 
 -	54, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	149, 126, 57, 110, 23, 0, 43, 43, 
 -	43, 43, 0, 27, 118, 27, 27, 51, 
 -	27, 0, 54, 0, 1, 0, 43, 0, 
 -	0, 43, 149, 126, 57, 57, 110, 23, 
 -	0, 0, 110, 23, 0, 0, 0, 110, 
 -	23, 0, 0, 110, 23, 0, 110, 23, 
 -	0, 0, 0, 43, 0, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 144, 57, 54, 0, 54, 0, 72, 
 -	33, 84, 72, 84, 84, 84, 84, 84, 
 -	84, 84, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 15, 0, 54, 15, 
 -	0, 130, 31, 60, 57, 31, 63, 57, 
 -	63, 63, 63, 63, 63, 63, 63, 66, 
 -	31, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 144, 57, 
 -	54, 0, 54, 0, 78, 33, 84, 78, 
 -	84, 84, 84, 84, 84, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 19, 
 -	0, 54, 19, 0, 54, 19, 0, 0, 
 -	130, 31, 60, 57, 31, 63, 57, 63, 
 -	63, 63, 63, 63, 63, 63, 0, 66, 
 -	31, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 0, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 144, 57, 
 -	54, 0, 54, 0, 81, 84, 81, 0, 
 -	0, 54, 0, 0, 0, 54, 0, 0, 
 -	54, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 21, 0, 0, 
 -	43, 0, 0, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 144, 57, 54, 
 -	0, 54, 0, 69, 33, 69, 84, 84, 
 -	84, 84, 84, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 13, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 13, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 0, 
 -	54, 0, 0, 54, 0, 54, 0, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 0, 54, 0, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	0, 54, 0, 0, 0, 54, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 0, 
 -	54, 0, 0, 54, 0, 54, 0, 0, 
 -	0, 54, 0, 0, 54, 0, 54, 0, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 144, 57, 54, 0, 54, 
 -	0, 75, 33, 84, 75, 84, 84, 84, 
 -	84, 84, 84, 84, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 17, 0, 
 -	54, 17, 0, 54, 17, 0, 0, 130, 
 -	31, 60, 57, 31, 63, 57, 63, 63, 
 -	63, 63, 63, 63, 63, 0, 66, 31, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 17, 43, 0, 
 -	0, 0, 43, 54, 37, 37, 87, 37, 
 -	37, 43, 0, 39, 0, 43, 0, 0, 
 -	54, 0, 0, 39, 0, 0, 54, 0, 
 -	93, 90, 41, 96, 90, 96, 96, 96, 
 -	96, 96, 96, 96, 99, 0, 43, 54, 
 -	0, 0, 54, 0, 0, 0, 54, 0, 
 -	0, 0, 54, 0, 0, 54, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 17, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 0, 54, 0, 0, 
 -	54, 0, 54, 0, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 0, 54, 0, 0, 
 -	0, 54, 0, 0, 0, 0, 54, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 0, 54, 
 -	0, 0, 54, 0, 54, 0, 0, 0, 
 -	54, 0, 0, 54, 0, 54, 0, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 0, 54, 0, 
 -	0, 54, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 19, 43, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 0, 54, 0, 0, 54, 0, 54, 
 -	0, 0, 0, 54, 0, 0, 0, 54, 
 -	0, 0, 0, 54, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	19, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 0, 54, 0, 0, 54, 
 -	0, 54, 0, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 0, 54, 0, 0, 54, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 15, 0, 0, 130, 31, 
 -	60, 57, 31, 63, 57, 63, 63, 63, 
 -	63, 63, 63, 63, 0, 66, 31, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	15, 43, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 0, 54, 0, 0, 
 -	54, 0, 54, 0, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 54, 0, 0, 54, 15, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 0, 
 -	54, 0, 0, 0, 54, 0, 0, 0, 
 -	54, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 0, 54, 0, 
 -	0, 54, 0, 54, 0, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 0, 54, 0, 0, 54, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 0, 0
 -};
 -
 -static const unsigned char _lexer_eof_actions[] = {
 -	0, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43
 -};
 -
 -static const int lexer_start = 1;
 -static const int lexer_first_final = 478;
 -static const int lexer_error = 0;
 -
 -static const int lexer_en_main = 1;
 -
 -
 -#line 258 "ragel/i18n/cs.c.rl"
 -
 -static VALUE 
 -unindent(VALUE con, int start_col)
 -{
 -  VALUE re;
 -  /* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */
 -  char pat[32]; 
 -  snprintf(pat, 32, "^[\t ]{0,%d}", start_col); 
 -  re = rb_reg_regcomp(rb_str_new2(pat));
 -  rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2(""));
 -
 -  return Qnil;
 -
 -}
 -
 -static void 
 -store_kw_con(VALUE listener, const char * event_name, 
 -             const char * keyword_at, size_t keyword_length, 
 -             const char * at,         size_t length, 
 -             int current_line)
 -{
 -  VALUE con = Qnil, kw = Qnil;
 -  kw = ENCODED_STR_NEW(keyword_at, keyword_length);
 -  con = ENCODED_STR_NEW(at, length);
 -  rb_funcall(con, rb_intern("strip!"), 0);
 -  rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); 
 -}
 -
 -static void
 -store_multiline_kw_con(VALUE listener, const char * event_name,
 -                      const char * keyword_at, size_t keyword_length,
 -                      const char * at,         size_t length,
 -                      int current_line, int start_col)
 -{
 -  VALUE split;
 -  VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil;
 -
 -  kw = ENCODED_STR_NEW(keyword_at, keyword_length);
 -  con = ENCODED_STR_NEW(at, length);
 -
 -  unindent(con, start_col);
 -  
 -  split = rb_str_split(con, "\n");
 -
 -  name = rb_funcall(split, rb_intern("shift"), 0);
 -  desc = rb_ary_join(split, rb_str_new2( "\n" ));
 -
 -  if( name == Qnil ) 
 -  {
 -    name = rb_str_new2("");
 -  }
 -  if( rb_funcall(desc, rb_intern("size"), 0) == 0) 
 -  {
 -    desc = rb_str_new2("");
 -  }
 -  rb_funcall(name, rb_intern("strip!"), 0);
 -  rb_funcall(desc, rb_intern("rstrip!"), 0);
 -  rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); 
 -}
 -
 -static void 
 -store_attr(VALUE listener, const char * attr_type,
 -           const char * at, size_t length, 
 -           int line)
 -{
 -  VALUE val = ENCODED_STR_NEW(at, length);
 -  rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line));
 -}
 -static void 
 -store_docstring_content(VALUE listener, 
 -          int start_col, 
 -          const char *type_at, size_t type_length,
 -          const char *at, size_t length, 
 -          int current_line)
 -{
 -  VALUE re2;
 -  VALUE unescape_escaped_quotes;
 -  VALUE con = ENCODED_STR_NEW(at, length);
 -  VALUE con_type = ENCODED_STR_NEW(type_at, type_length);
 -
 -  unindent(con, start_col);
 -
 -  re2 = rb_reg_regcomp(rb_str_new2("\r\\Z"));
 -  unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\""));
 -  rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2(""));
 -  rb_funcall(con_type, rb_intern("strip!"), 0);
 -  rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\""));
 -  rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line));
 -}
 -static void 
 -raise_lexer_error(const char * at, int line)
 -{ 
 -  rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at);
 -}
 -
 -static void lexer_init(lexer_state *lexer) {
 -  lexer->content_start = 0;
 -  lexer->content_end = 0;
 -  lexer->content_len = 0;
 -  lexer->docstring_content_type_start = 0;
 -  lexer->docstring_content_type_end = 0;
 -  lexer->mark = 0;
 -  lexer->keyword_start = 0;
 -  lexer->keyword_end = 0;
 -  lexer->next_keyword_start = 0;
 -  lexer->line_number = 1;
 -  lexer->last_newline = 0;
 -  lexer->final_newline = 0;
 -  lexer->start_col = 0;
 -}
 -
 -static VALUE CLexer_alloc(VALUE klass)
 -{
 -  VALUE obj;
 -  lexer_state *lxr = ALLOC(lexer_state);
 -  lexer_init(lxr);
 -
 -  obj = Data_Wrap_Struct(klass, NULL, -1, lxr);
 -
 -  return obj;
 -}
 -
 -static VALUE CLexer_init(VALUE self, VALUE listener)
 -{
 -  lexer_state *lxr; 
 -  rb_iv_set(self, "@listener", listener);
 -  
 -  lxr = NULL;
 -  DATA_GET(self, lexer_state, lxr);
 -  lexer_init(lxr);
 -  
 -  return self;
 -}
 -
 -static VALUE CLexer_scan(VALUE self, VALUE input)
 -{
 -  VALUE input_copy;
 -  char *data;
 -  size_t len;
 -  VALUE listener = rb_iv_get(self, "@listener");
 -
 -  lexer_state *lexer;
 -  lexer = NULL;
 -  DATA_GET(self, lexer_state, lexer);
 -
 -  input_copy = rb_str_dup(input);
 -
 -  rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%"));
 -  data = RSTRING_PTR(input_copy);
 -  len = RSTRING_LEN(input_copy);
 -  
 -  if (len == 0) { 
 -    rb_raise(rb_eGherkinLexingError, "No content to lex.");
 -  } else {
 -
 -    const char *p, *pe, *eof;
 -    int cs = 0;
 -    
 -    VALUE current_row = Qnil;
 -
 -    p = data;
 -    pe = data + len;
 -    eof = pe;
 -    
 -    assert(*pe == '\0' && "pointer does not end on NULL");
 -    
 -    
 -#line 1119 "ext/gherkin_lexer_cs/gherkin_lexer_cs.c"
 -	{
 -	cs = lexer_start;
 -	}
 -
 -#line 425 "ragel/i18n/cs.c.rl"
 -    
 -#line 1126 "ext/gherkin_lexer_cs/gherkin_lexer_cs.c"
 -	{
 -	int _klen;
 -	unsigned int _trans;
 -	const char *_acts;
 -	unsigned int _nacts;
 -	const char *_keys;
 -
 -	if ( p == pe )
 -		goto _test_eof;
 -	if ( cs == 0 )
 -		goto _out;
 -_resume:
 -	_keys = _lexer_trans_keys + _lexer_key_offsets[cs];
 -	_trans = _lexer_index_offsets[cs];
 -
 -	_klen = _lexer_single_lengths[cs];
 -	if ( _klen > 0 ) {
 -		const char *_lower = _keys;
 -		const char *_mid;
 -		const char *_upper = _keys + _klen - 1;
 -		while (1) {
 -			if ( _upper < _lower )
 -				break;
 -
 -			_mid = _lower + ((_upper-_lower) >> 1);
 -			if ( (*p) < *_mid )
 -				_upper = _mid - 1;
 -			else if ( (*p) > *_mid )
 -				_lower = _mid + 1;
 -			else {
 -				_trans += (unsigned int)(_mid - _keys);
 -				goto _match;
 -			}
 -		}
 -		_keys += _klen;
 -		_trans += _klen;
 -	}
 -
 -	_klen = _lexer_range_lengths[cs];
 -	if ( _klen > 0 ) {
 -		const char *_lower = _keys;
 -		const char *_mid;
 -		const char *_upper = _keys + (_klen<<1) - 2;
 -		while (1) {
 -			if ( _upper < _lower )
 -				break;
 -
 -			_mid = _lower + (((_upper-_lower) >> 1) & ~1);
 -			if ( (*p) < _mid[0] )
 -				_upper = _mid - 2;
 -			else if ( (*p) > _mid[1] )
 -				_lower = _mid + 2;
 -			else {
 -				_trans += (unsigned int)((_mid - _keys)>>1);
 -				goto _match;
 -			}
 -		}
 -		_trans += _klen;
 -	}
 -
 -_match:
 -	cs = _lexer_trans_targs[_trans];
 -
 -	if ( _lexer_trans_actions[_trans] == 0 )
 -		goto _again;
 -
 -	_acts = _lexer_actions + _lexer_trans_actions[_trans];
 -	_nacts = (unsigned int) *_acts++;
 -	while ( _nacts-- > 0 )
 -	{
 -		switch ( *_acts++ )
 -		{
 -	case 0:
 -#line 83 "ragel/i18n/cs.c.rl"
 -	{
 -		MARK(content_start, p);
 -    lexer->current_line = lexer->line_number;
 -    lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2;
 -  }
 -	break;
 -	case 1:
 -#line 89 "ragel/i18n/cs.c.rl"
 -	{
 -    MARK(content_start, p);
 -  }
 -	break;
 -	case 2:
 -#line 93 "ragel/i18n/cs.c.rl"
 -	{
 -    lexer->current_line = lexer->line_number;
 -    lexer->start_col = p - data - lexer->last_newline;
 -  }
 -	break;
 -	case 3:
 -#line 98 "ragel/i18n/cs.c.rl"
 -	{
 -    int len = LEN(content_start, PTR_TO(final_newline));
 -    int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end));
 -
 -    if (len < 0) len = 0;
 -    if (type_len < 0) len = 0;
 -
 -    store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line);
 -  }
 -	break;
 -	case 4:
 -#line 108 "ragel/i18n/cs.c.rl"
 -	{ 
 -    MARK(docstring_content_type_start, p);
 -  }
 -	break;
 -	case 5:
 -#line 112 "ragel/i18n/cs.c.rl"
 -	{ 
 -    MARK(docstring_content_type_end, p);
 -  }
 -	break;
 -	case 6:
 -#line 116 "ragel/i18n/cs.c.rl"
 -	{
 -    STORE_KW_END_CON(feature);
 -  }
 -	break;
 -	case 7:
 -#line 120 "ragel/i18n/cs.c.rl"
 -	{
 -    STORE_KW_END_CON(background);
 -  }
 -	break;
 -	case 8:
 -#line 124 "ragel/i18n/cs.c.rl"
 -	{
 -    STORE_KW_END_CON(scenario);
 -  }
 -	break;
 -	case 9:
 -#line 128 "ragel/i18n/cs.c.rl"
 -	{
 -    STORE_KW_END_CON(scenario_outline);
 -  }
 -	break;
 -	case 10:
 -#line 132 "ragel/i18n/cs.c.rl"
 -	{
 -    STORE_KW_END_CON(examples);
 -  }
 -	break;
 -	case 11:
 -#line 136 "ragel/i18n/cs.c.rl"
 -	{
 -    store_kw_con(listener, "step",
 -      PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
 -      PTR_TO(content_start), LEN(content_start, p), 
 -      lexer->current_line);
 -  }
 -	break;
 -	case 12:
 -#line 143 "ragel/i18n/cs.c.rl"
 -	{
 -    STORE_ATTR(comment);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 13:
 -#line 148 "ragel/i18n/cs.c.rl"
 -	{
 -    STORE_ATTR(tag);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 14:
 -#line 153 "ragel/i18n/cs.c.rl"
 -	{
 -    lexer->line_number += 1;
 -    MARK(final_newline, p);
 -  }
 -	break;
 -	case 15:
 -#line 158 "ragel/i18n/cs.c.rl"
 -	{
 -    MARK(last_newline, p + 1);
 -  }
 -	break;
 -	case 16:
 -#line 162 "ragel/i18n/cs.c.rl"
 -	{
 -    if (lexer->mark == 0) {
 -      MARK(mark, p);
 -    }
 -  }
 -	break;
 -	case 17:
 -#line 168 "ragel/i18n/cs.c.rl"
 -	{
 -    MARK(keyword_end, p);
 -    MARK(keyword_start, PTR_TO(mark));
 -    MARK(content_start, p + 1);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 18:
 -#line 175 "ragel/i18n/cs.c.rl"
 -	{
 -    MARK(content_end, p);
 -  }
 -	break;
 -	case 19:
 -#line 179 "ragel/i18n/cs.c.rl"
 -	{
 -    p = p - 1;
 -    lexer->current_line = lexer->line_number;
 -    current_row = rb_ary_new();
 -  }
 -	break;
 -	case 20:
 -#line 185 "ragel/i18n/cs.c.rl"
 -	{
 -		MARK(content_start, p);
 -  }
 -	break;
 -	case 21:
 -#line 189 "ragel/i18n/cs.c.rl"
 -	{
 -    VALUE re_pipe, re_newline, re_backslash;
 -    VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
 -    rb_funcall(con, rb_intern("strip!"), 0);
 -    re_pipe      = rb_reg_regcomp(rb_str_new2("\\\\\\|"));
 -    re_newline   = rb_reg_regcomp(rb_str_new2("\\\\n"));
 -    re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_pipe,      rb_str_new2("|"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_newline,   rb_str_new2("\n"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\"));
 -
 -    rb_ary_push(current_row, con);
 -  }
 -	break;
 -	case 22:
 -#line 203 "ragel/i18n/cs.c.rl"
 -	{
 -    rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
 -  }
 -	break;
 -	case 23:
 -#line 207 "ragel/i18n/cs.c.rl"
 -	{
 -    int line;
 -    if (cs < lexer_first_final) {
 -      size_t count = 0;
 -      VALUE newstr_val;
 -      char *newstr;
 -      int newstr_count = 0;        
 -      size_t len;
 -      const char *buff;
 -      if (lexer->last_newline != 0) {
 -        len = LEN(last_newline, eof);
 -        buff = PTR_TO(last_newline);
 -      } else {
 -        len = strlen(data);
 -        buff = data;
 -      }
 -
 -      /* Allocate as a ruby string so that it gets cleaned up by GC */
 -      newstr_val = rb_str_new(buff, len);
 -      newstr = RSTRING_PTR(newstr_val);
 -
 -
 -      for (count = 0; count < len; count++) {
 -        if(buff[count] == 10) {
 -          newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
 -          break;
 -        } else {
 -          if (buff[count] == '%') {
 -            newstr[newstr_count++] = buff[count];
 -            newstr[newstr_count] = buff[count];
 -          } else {
 -            newstr[newstr_count] = buff[count];
 -          }
 -        }
 -        newstr_count++;
 -      }
 -
 -      line = lexer->line_number;
 -      lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
 -      raise_lexer_error(newstr, line);
 -    } else {
 -      rb_funcall(listener, rb_intern("eof"), 0);
 -    }
 -  }
 -	break;
 -#line 1416 "ext/gherkin_lexer_cs/gherkin_lexer_cs.c"
 -		}
 -	}
 -
 -_again:
 -	if ( cs == 0 )
 -		goto _out;
 -	if ( ++p != pe )
 -		goto _resume;
 -	_test_eof: {}
 -	if ( p == eof )
 -	{
 -	const char *__acts = _lexer_actions + _lexer_eof_actions[cs];
 -	unsigned int __nacts = (unsigned int) *__acts++;
 -	while ( __nacts-- > 0 ) {
 -		switch ( *__acts++ ) {
 -	case 23:
 -#line 207 "ragel/i18n/cs.c.rl"
 -	{
 -    int line;
 -    if (cs < lexer_first_final) {
 -      size_t count = 0;
 -      VALUE newstr_val;
 -      char *newstr;
 -      int newstr_count = 0;        
 -      size_t len;
 -      const char *buff;
 -      if (lexer->last_newline != 0) {
 -        len = LEN(last_newline, eof);
 -        buff = PTR_TO(last_newline);
 -      } else {
 -        len = strlen(data);
 -        buff = data;
 -      }
 -
 -      /* Allocate as a ruby string so that it gets cleaned up by GC */
 -      newstr_val = rb_str_new(buff, len);
 -      newstr = RSTRING_PTR(newstr_val);
 -
 -
 -      for (count = 0; count < len; count++) {
 -        if(buff[count] == 10) {
 -          newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
 -          break;
 -        } else {
 -          if (buff[count] == '%') {
 -            newstr[newstr_count++] = buff[count];
 -            newstr[newstr_count] = buff[count];
 -          } else {
 -            newstr[newstr_count] = buff[count];
 -          }
 -        }
 -        newstr_count++;
 -      }
 -
 -      line = lexer->line_number;
 -      lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
 -      raise_lexer_error(newstr, line);
 -    } else {
 -      rb_funcall(listener, rb_intern("eof"), 0);
 -    }
 -  }
 -	break;
 -#line 1479 "ext/gherkin_lexer_cs/gherkin_lexer_cs.c"
 -		}
 -	}
 -	}
 -
 -	_out: {}
 -	}
 -
 -#line 426 "ragel/i18n/cs.c.rl"
 -
 -    assert(p <= pe && "data overflow after parsing execute");
 -    assert(lexer->content_start <= len && "content starts after data end");
 -    assert(lexer->mark < len && "mark is after data end");
 -    
 -    /* Reset lexer by re-initializing the whole thing */
 -    lexer_init(lexer);
 -
 -    if (cs == lexer_error) {
 -      rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails.");
 -    } else {
 -      return Qtrue;
 -    }
 -  }
 -}
 -
 -void Init_gherkin_lexer_cs()
 -{
 -  mGherkin = rb_define_module("Gherkin");
 -  mGherkinLexer = rb_define_module_under(mGherkin, "Lexer");
 -  rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError"));
 -
 -  mCLexer = rb_define_module_under(mGherkin, "CLexer");
 -  cI18nLexer = rb_define_class_under(mCLexer, "Cs", rb_cObject);
 -  rb_define_alloc_func(cI18nLexer, CLexer_alloc);
 -  rb_define_method(cI18nLexer, "initialize", CLexer_init, 1);
 -  rb_define_method(cI18nLexer, "scan", CLexer_scan, 1);
 -}
 -
diff --cc ext/gherkin_lexer_cy_gb/extconf.rb
index 9482f02,9482f02..0000000
deleted file mode 100644,100644
--- a/ext/gherkin_lexer_cy_gb/extconf.rb
+++ /dev/null
@@@ -1,6 -1,6 +1,0 @@@
--require 'mkmf'
--CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags']
--$CFLAGS << ' -O0 -Wall' if CONFIG['CC'] =~ /gcc|clang/
--dir_config("gherkin_lexer_cy_gb")
--have_library("c", "main")
--create_makefile("gherkin_lexer_cy_gb")
diff --cc ext/gherkin_lexer_cy_gb/gherkin_lexer_cy_gb.c
index d1e5105,a939a28..0000000
deleted file mode 100644,100644
--- a/ext/gherkin_lexer_cy_gb/gherkin_lexer_cy_gb.c
+++ /dev/null
@@@ -1,1282 -1,1282 +1,0 @@@
--
- #line 1 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
- #include <assert.h>
- #include <ruby.h>
- 
- #if defined(_WIN32)
- #include <stddef.h>
- #endif
- 
- #ifdef HAVE_RUBY_RE_H
- #include <ruby/re.h>
- #else
- #include <re.h>
- #endif
- 
- #ifdef HAVE_RUBY_ENCODING_H
- #include <ruby/encoding.h>
- #define ENCODED_STR_NEW(ptr, len) \
-     rb_enc_str_new(ptr, len, rb_utf8_encoding())
- #else
- #define ENCODED_STR_NEW(ptr, len) \
-     rb_str_new(ptr, len)
- #endif
- 
- #ifndef RSTRING_PTR
- #define RSTRING_PTR(s) (RSTRING(s)->ptr)
- #endif
- 
- #ifndef RSTRING_LEN
- #define RSTRING_LEN(s) (RSTRING(s)->len)
- #endif
- 
- #define DATA_GET(FROM, TYPE, NAME) \
-   Data_Get_Struct(FROM, TYPE, NAME); \
-   if (NAME == NULL) { \
-     rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \
-   }
-  
- typedef struct lexer_state {
-   int content_len;
-   int line_number;
-   int current_line;
-   int start_col;
-   size_t mark;
-   size_t keyword_start;
-   size_t keyword_end;
-   size_t next_keyword_start;
-   size_t content_start;
-   size_t content_end;
-   size_t docstring_content_type_start;
-   size_t docstring_content_type_end;
-   size_t query_start;
-   size_t last_newline;
-   size_t final_newline;
- } lexer_state;
- 
- static VALUE mGherkin;
- static VALUE mGherkinLexer;
- static VALUE mCLexer;
- static VALUE cI18nLexer;
- static VALUE rb_eGherkinLexingError;
- 
- #define LEN(AT, P) (P - data - lexer->AT)
- #define MARK(M, P) (lexer->M = (P) - data)
- #define PTR_TO(P) (data + lexer->P)
- 
- #define STORE_KW_END_CON(EVENT) \
-   store_multiline_kw_con(listener, # EVENT, \
-     PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \
-     PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \
-     lexer->current_line, lexer->start_col); \
-     if (lexer->content_end != 0) { \
-       p = PTR_TO(content_end - 1); \
-     } \
-     lexer->content_end = 0
- 
- #define STORE_ATTR(ATTR) \
-     store_attr(listener, # ATTR, \
-       PTR_TO(content_start), LEN(content_start, p), \
-       lexer->line_number)
- 
- 
- #line 254 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
- 
- 
- /** Data **/
- 
- #line 89 "ext/gherkin_lexer_cy_gb/gherkin_lexer_cy_gb.c"
- static const char _lexer_actions[] = {
- 	0, 1, 0, 1, 1, 1, 2, 1, 
- 	3, 1, 4, 1, 5, 1, 6, 1, 
- 	7, 1, 8, 1, 9, 1, 10, 1, 
- 	11, 1, 12, 1, 13, 1, 16, 1, 
- 	17, 1, 18, 1, 19, 1, 20, 1, 
- 	21, 1, 22, 1, 23, 2, 1, 18, 
- 	2, 4, 5, 2, 13, 0, 2, 14, 
- 	15, 2, 17, 0, 2, 17, 2, 2, 
- 	17, 16, 2, 17, 19, 2, 18, 6, 
- 	2, 18, 7, 2, 18, 8, 2, 18, 
- 	9, 2, 18, 10, 2, 18, 16, 2, 
- 	20, 21, 2, 22, 0, 2, 22, 2, 
- 	2, 22, 16, 2, 22, 19, 3, 3, 
- 	14, 15, 3, 5, 14, 15, 3, 11, 
- 	14, 15, 3, 12, 14, 15, 3, 13, 
- 	14, 15, 3, 14, 15, 18, 3, 17, 
- 	0, 11, 3, 17, 14, 15, 4, 1, 
- 	14, 15, 18, 4, 4, 5, 14, 15, 
- 	4, 17, 0, 14, 15, 5, 17, 0, 
- 	11, 14, 15
- };
- 
- static const short _lexer_key_offsets[] = {
- 	0, 0, 18, 19, 20, 37, 38, 39, 
- 	41, 43, 48, 53, 58, 63, 67, 71, 
- 	73, 74, 75, 76, 77, 78, 79, 80, 
- 	81, 82, 83, 84, 85, 86, 87, 88, 
- 	89, 91, 93, 98, 105, 110, 113, 114, 
- 	115, 116, 117, 118, 119, 120, 121, 122, 
- 	123, 124, 125, 126, 127, 128, 129, 130, 
- 	141, 143, 145, 147, 149, 151, 153, 155, 
- 	157, 159, 161, 163, 165, 167, 169, 171, 
- 	173, 175, 177, 179, 181, 198, 199, 200, 
- 	201, 202, 203, 204, 205, 206, 207, 220, 
- 	222, 224, 226, 228, 230, 232, 234, 236, 
- 	238, 240, 242, 244, 246, 248, 250, 254, 
- 	256, 258, 260, 262, 264, 266, 268, 270, 
- 	272, 274, 276, 278, 280, 282, 284, 286, 
- 	288, 290, 292, 294, 296, 298, 300, 302, 
- 	304, 306, 309, 311, 313, 315, 317, 319, 
- 	321, 323, 325, 327, 329, 331, 332, 333, 
- 	334, 335, 336, 337, 338, 339, 340, 341, 
- 	342, 343, 344, 345, 346, 353, 355, 357, 
- 	359, 361, 363, 365, 366, 367, 368, 369, 
- 	370, 371, 372, 373, 374, 375, 376, 378, 
- 	379, 380, 381, 382, 383, 384, 385, 386, 
- 	387, 388, 389, 390, 391, 404, 406, 408, 
- 	410, 412, 414, 416, 418, 420, 422, 424, 
- 	426, 428, 430, 432, 434, 438, 440, 442, 
- 	444, 446, 448, 450, 452, 454, 456, 458, 
- 	460, 462, 464, 466, 468, 470, 472, 474, 
- 	476, 478, 480, 482, 484, 486, 488, 490, 
- 	492, 493, 494, 508, 510, 512, 514, 516, 
- 	518, 520, 522, 524, 526, 528, 530, 532, 
- 	534, 536, 538, 542, 544, 546, 548, 550, 
- 	552, 554, 556, 558, 560, 562, 564, 566, 
- 	568, 570, 572, 574, 576, 578, 580, 582, 
- 	584, 586, 588, 590, 592, 594, 596, 598, 
- 	600, 602, 604, 606, 609, 611, 613, 615, 
- 	617, 619, 621, 623, 625, 627, 629, 631, 
- 	632, 636, 642, 645, 647, 653, 670, 672, 
- 	674, 676, 678, 680, 682, 684, 686, 688, 
- 	690, 692, 694, 696, 698, 700, 702, 704, 
- 	706, 708, 710, 712, 714, 716, 718, 720, 
- 	723, 725, 727, 729, 731, 733, 735, 737, 
- 	739, 741, 743
- };
- 
- static const char _lexer_trans_keys[] = {
- 	-17, 10, 32, 34, 35, 37, 42, 64, 
- 	65, 67, 69, 79, 80, 83, 89, 124, 
- 	9, 13, -69, -65, 10, 32, 34, 35, 
- 	37, 42, 64, 65, 67, 69, 79, 80, 
- 	83, 89, 124, 9, 13, 34, 34, 10, 
- 	13, 10, 13, 10, 32, 34, 9, 13, 
- 	10, 32, 34, 9, 13, 10, 32, 34, 
- 	9, 13, 10, 32, 34, 9, 13, 10, 
- 	32, 9, 13, 10, 32, 9, 13, 10, 
- 	13, 10, 95, 70, 69, 65, 84, 85, 
- 	82, 69, 95, 69, 78, 68, 95, 37, 
- 	32, 10, 13, 10, 13, 13, 32, 64, 
- 	9, 10, 9, 10, 13, 32, 64, 11, 
- 	12, 10, 32, 64, 9, 13, 32, 110, 
- 	114, 114, 104, 101, 103, 101, 100, 105, 
- 	103, 32, 97, 119, 101, 100, 100, 58, 
- 	10, 10, 10, 32, 35, 37, 64, 65, 
- 	67, 69, 83, 9, 13, 10, 95, 10, 
- 	70, 10, 69, 10, 65, 10, 84, 10, 
- 	85, 10, 82, 10, 69, 10, 95, 10, 
- 	69, 10, 78, 10, 68, 10, 95, 10, 
- 	37, 10, 114, 10, 119, 10, 101, 10, 
- 	100, 10, 100, 10, 58, 10, 32, 34, 
- 	35, 37, 42, 64, 65, 67, 69, 79, 
- 	80, 83, 89, 124, 9, 13, 101, 102, 
- 	110, 100, 105, 114, 58, 10, 10, 10, 
- 	32, 35, 37, 42, 64, 65, 79, 80, 
- 	83, 89, 9, 13, 10, 95, 10, 70, 
- 	10, 69, 10, 65, 10, 84, 10, 85, 
- 	10, 82, 10, 69, 10, 95, 10, 69, 
- 	10, 78, 10, 68, 10, 95, 10, 37, 
- 	10, 32, 10, 32, 110, 114, 10, 114, 
- 	10, 104, 10, 101, 10, 103, 10, 101, 
- 	10, 100, 10, 105, 10, 103, 10, 32, 
- 	10, 97, 10, 119, 10, 101, 10, 100, 
- 	10, 100, 10, 58, 10, 110, 10, 100, 
- 	10, 114, 10, 121, 10, 99, 10, 101, 
- 	10, 110, 10, 97, 10, 114, 10, 105, 
- 	10, 111, 10, 32, 58, 10, 65, 10, 
- 	109, 10, 108, 10, 105, 10, 110, 10, 
- 	101, 10, 108, 10, 108, 10, 111, 10, 
- 	108, 10, 110, 110, 103, 104, 114, 101, 
- 	105, 102, 102, 116, 105, 97, 117, 58, 
- 	10, 10, 10, 32, 35, 65, 124, 9, 
- 	13, 10, 114, 10, 119, 10, 101, 10, 
- 	100, 10, 100, 10, 58, 110, 100, 114, 
- 	121, 99, 101, 110, 97, 114, 105, 111, 
- 	32, 58, 65, 109, 108, 105, 110, 101, 
- 	108, 108, 111, 108, 58, 10, 10, 10, 
- 	32, 35, 37, 42, 64, 65, 79, 80, 
- 	83, 89, 9, 13, 10, 95, 10, 70, 
- 	10, 69, 10, 65, 10, 84, 10, 85, 
- 	10, 82, 10, 69, 10, 95, 10, 69, 
- 	10, 78, 10, 68, 10, 95, 10, 37, 
- 	10, 32, 10, 32, 110, 114, 10, 114, 
- 	10, 104, 10, 101, 10, 103, 10, 101, 
- 	10, 100, 10, 105, 10, 103, 10, 32, 
- 	10, 97, 10, 119, 10, 101, 10, 100, 
- 	10, 100, 10, 58, 10, 110, 10, 100, 
- 	10, 114, 10, 121, 10, 99, 10, 101, 
- 	10, 110, 10, 97, 10, 114, 10, 105, 
- 	10, 111, 10, 110, 10, 10, 10, 32, 
- 	35, 37, 42, 64, 65, 67, 79, 80, 
- 	83, 89, 9, 13, 10, 95, 10, 70, 
- 	10, 69, 10, 65, 10, 84, 10, 85, 
- 	10, 82, 10, 69, 10, 95, 10, 69, 
- 	10, 78, 10, 68, 10, 95, 10, 37, 
- 	10, 32, 10, 32, 110, 114, 10, 114, 
- 	10, 104, 10, 101, 10, 103, 10, 101, 
- 	10, 100, 10, 105, 10, 103, 10, 32, 
- 	10, 97, 10, 119, 10, 101, 10, 100, 
- 	10, 100, 10, 58, 10, 101, 10, 102, 
- 	10, 110, 10, 100, 10, 105, 10, 114, 
- 	10, 110, 10, 100, 10, 114, 10, 121, 
- 	10, 99, 10, 101, 10, 110, 10, 97, 
- 	10, 114, 10, 105, 10, 111, 10, 32, 
- 	58, 10, 65, 10, 109, 10, 108, 10, 
- 	105, 10, 110, 10, 101, 10, 108, 10, 
- 	108, 10, 111, 10, 108, 10, 110, 110, 
- 	32, 124, 9, 13, 10, 32, 92, 124, 
- 	9, 13, 10, 92, 124, 10, 92, 10, 
- 	32, 92, 124, 9, 13, 10, 32, 34, 
- 	35, 37, 42, 64, 65, 67, 69, 79, 
- 	80, 83, 89, 124, 9, 13, 10, 101, 
- 	10, 102, 10, 110, 10, 100, 10, 105, 
- 	10, 114, 10, 110, 10, 103, 10, 104, 
- 	10, 114, 10, 101, 10, 105, 10, 102, 
- 	10, 102, 10, 116, 10, 105, 10, 97, 
- 	10, 117, 10, 99, 10, 101, 10, 110, 
- 	10, 97, 10, 114, 10, 105, 10, 111, 
- 	10, 32, 58, 10, 65, 10, 109, 10, 
- 	108, 10, 105, 10, 110, 10, 101, 10, 
- 	108, 10, 108, 10, 111, 10, 108, 0
- };
- 
- static const char _lexer_single_lengths[] = {
- 	0, 16, 1, 1, 15, 1, 1, 2, 
- 	2, 3, 3, 3, 3, 2, 2, 2, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	2, 2, 3, 5, 3, 3, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 9, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 15, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 11, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 4, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 3, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 5, 2, 2, 2, 
- 	2, 2, 2, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 2, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 11, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 4, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	1, 1, 12, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 4, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 3, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 1, 
- 	2, 4, 3, 2, 4, 15, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 3, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 0
- };
- 
- static const char _lexer_range_lengths[] = {
- 	0, 1, 0, 0, 1, 0, 0, 0, 
- 	0, 1, 1, 1, 1, 1, 1, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 1, 1, 1, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 1, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 1, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 1, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 1, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 1, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 1, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	1, 1, 0, 0, 1, 1, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0
- };
- 
- static const short _lexer_index_offsets[] = {
- 	0, 0, 18, 20, 22, 39, 41, 43, 
- 	46, 49, 54, 59, 64, 69, 73, 77, 
- 	80, 82, 84, 86, 88, 90, 92, 94, 
- 	96, 98, 100, 102, 104, 106, 108, 110, 
- 	112, 115, 118, 123, 130, 135, 139, 141, 
- 	143, 145, 147, 149, 151, 153, 155, 157, 
- 	159, 161, 163, 165, 167, 169, 171, 173, 
- 	184, 187, 190, 193, 196, 199, 202, 205, 
- 	208, 211, 214, 217, 220, 223, 226, 229, 
- 	232, 235, 238, 241, 244, 261, 263, 265, 
- 	267, 269, 271, 273, 275, 277, 279, 292, 
- 	295, 298, 301, 304, 307, 310, 313, 316, 
- 	319, 322, 325, 328, 331, 334, 337, 342, 
- 	345, 348, 351, 354, 357, 360, 363, 366, 
- 	369, 372, 375, 378, 381, 384, 387, 390, 
- 	393, 396, 399, 402, 405, 408, 411, 414, 
- 	417, 420, 424, 427, 430, 433, 436, 439, 
- 	442, 445, 448, 451, 454, 457, 459, 461, 
- 	463, 465, 467, 469, 471, 473, 475, 477, 
- 	479, 481, 483, 485, 487, 494, 497, 500, 
- 	503, 506, 509, 512, 514, 516, 518, 520, 
- 	522, 524, 526, 528, 530, 532, 534, 537, 
- 	539, 541, 543, 545, 547, 549, 551, 553, 
- 	555, 557, 559, 561, 563, 576, 579, 582, 
- 	585, 588, 591, 594, 597, 600, 603, 606, 
- 	609, 612, 615, 618, 621, 626, 629, 632, 
- 	635, 638, 641, 644, 647, 650, 653, 656, 
- 	659, 662, 665, 668, 671, 674, 677, 680, 
- 	683, 686, 689, 692, 695, 698, 701, 704, 
- 	707, 709, 711, 725, 728, 731, 734, 737, 
- 	740, 743, 746, 749, 752, 755, 758, 761, 
- 	764, 767, 770, 775, 778, 781, 784, 787, 
- 	790, 793, 796, 799, 802, 805, 808, 811, 
- 	814, 817, 820, 823, 826, 829, 832, 835, 
- 	838, 841, 844, 847, 850, 853, 856, 859, 
- 	862, 865, 868, 871, 875, 878, 881, 884, 
- 	887, 890, 893, 896, 899, 902, 905, 908, 
- 	910, 914, 920, 924, 927, 933, 950, 953, 
- 	956, 959, 962, 965, 968, 971, 974, 977, 
- 	980, 983, 986, 989, 992, 995, 998, 1001, 
- 	1004, 1007, 1010, 1013, 1016, 1019, 1022, 1025, 
- 	1029, 1032, 1035, 1038, 1041, 1044, 1047, 1050, 
- 	1053, 1056, 1059
- };
- 
- static const short _lexer_trans_targs[] = {
- 	2, 4, 4, 5, 15, 17, 31, 34, 
- 	37, 77, 141, 163, 165, 167, 295, 296, 
- 	4, 0, 3, 0, 4, 0, 4, 4, 
- 	5, 15, 17, 31, 34, 37, 77, 141, 
- 	163, 165, 167, 295, 296, 4, 0, 6, 
- 	0, 7, 0, 9, 8, 8, 9, 8, 
- 	8, 10, 10, 11, 10, 10, 10, 10, 
- 	11, 10, 10, 10, 10, 12, 10, 10, 
- 	10, 10, 13, 10, 10, 4, 14, 14, 
- 	0, 4, 14, 14, 0, 4, 16, 15, 
- 	4, 0, 18, 0, 19, 0, 20, 0, 
- 	21, 0, 22, 0, 23, 0, 24, 0, 
- 	25, 0, 26, 0, 27, 0, 28, 0, 
- 	29, 0, 30, 0, 338, 0, 32, 0, 
- 	4, 16, 33, 4, 16, 33, 0, 0, 
- 	0, 0, 35, 36, 4, 36, 36, 34, 
- 	35, 35, 4, 36, 34, 36, 0, 32, 
- 	38, 48, 0, 39, 0, 40, 0, 41, 
- 	0, 42, 0, 43, 0, 44, 0, 45, 
- 	0, 46, 0, 47, 0, 31, 0, 49, 
- 	0, 50, 0, 51, 0, 52, 0, 53, 
- 	0, 55, 54, 55, 54, 55, 55, 4, 
- 	56, 4, 70, 302, 308, 320, 55, 54, 
- 	55, 57, 54, 55, 58, 54, 55, 59, 
- 	54, 55, 60, 54, 55, 61, 54, 55, 
- 	62, 54, 55, 63, 54, 55, 64, 54, 
- 	55, 65, 54, 55, 66, 54, 55, 67, 
- 	54, 55, 68, 54, 55, 69, 54, 55, 
- 	4, 54, 55, 71, 54, 55, 72, 54, 
- 	55, 73, 54, 55, 74, 54, 55, 75, 
- 	54, 55, 76, 54, 4, 4, 5, 15, 
- 	17, 31, 34, 37, 77, 141, 163, 165, 
- 	167, 295, 296, 4, 0, 78, 0, 79, 
- 	0, 80, 0, 81, 0, 82, 0, 83, 
- 	0, 84, 0, 86, 85, 86, 85, 86, 
- 	86, 4, 87, 101, 4, 102, 118, 120, 
- 	122, 140, 86, 85, 86, 88, 85, 86, 
- 	89, 85, 86, 90, 85, 86, 91, 85, 
- 	86, 92, 85, 86, 93, 85, 86, 94, 
- 	85, 86, 95, 85, 86, 96, 85, 86, 
- 	97, 85, 86, 98, 85, 86, 99, 85, 
- 	86, 100, 85, 86, 4, 85, 86, 76, 
- 	85, 86, 76, 103, 113, 85, 86, 104, 
- 	85, 86, 105, 85, 86, 106, 85, 86, 
- 	107, 85, 86, 108, 85, 86, 109, 85, 
- 	86, 110, 85, 86, 111, 85, 86, 112, 
- 	85, 86, 101, 85, 86, 114, 85, 86, 
- 	115, 85, 86, 116, 85, 86, 117, 85, 
- 	86, 76, 85, 86, 119, 85, 86, 101, 
- 	85, 86, 121, 85, 86, 119, 85, 86, 
- 	123, 85, 86, 124, 85, 86, 125, 85, 
- 	86, 126, 85, 86, 127, 85, 86, 128, 
- 	85, 86, 129, 85, 86, 130, 76, 85, 
- 	86, 131, 85, 86, 132, 85, 86, 133, 
- 	85, 86, 134, 85, 86, 135, 85, 86, 
- 	136, 85, 86, 137, 85, 86, 138, 85, 
- 	86, 139, 85, 86, 117, 85, 86, 112, 
- 	85, 142, 0, 143, 0, 144, 0, 145, 
- 	0, 146, 0, 147, 0, 148, 0, 149, 
- 	0, 150, 0, 151, 0, 152, 0, 153, 
- 	0, 154, 0, 156, 155, 156, 155, 156, 
- 	156, 4, 157, 4, 156, 155, 156, 158, 
- 	155, 156, 159, 155, 156, 160, 155, 156, 
- 	161, 155, 156, 162, 155, 156, 76, 155, 
- 	164, 0, 31, 0, 166, 0, 164, 0, 
- 	168, 0, 169, 0, 170, 0, 171, 0, 
- 	172, 0, 173, 0, 174, 0, 175, 232, 
- 	0, 176, 0, 177, 0, 178, 0, 179, 
- 	0, 180, 0, 181, 0, 182, 0, 183, 
- 	0, 184, 0, 185, 0, 186, 0, 188, 
- 	187, 188, 187, 188, 188, 4, 189, 203, 
- 	4, 204, 220, 222, 224, 231, 188, 187, 
- 	188, 190, 187, 188, 191, 187, 188, 192, 
- 	187, 188, 193, 187, 188, 194, 187, 188, 
- 	195, 187, 188, 196, 187, 188, 197, 187, 
- 	188, 198, 187, 188, 199, 187, 188, 200, 
- 	187, 188, 201, 187, 188, 202, 187, 188, 
- 	4, 187, 188, 76, 187, 188, 76, 205, 
- 	215, 187, 188, 206, 187, 188, 207, 187, 
- 	188, 208, 187, 188, 209, 187, 188, 210, 
- 	187, 188, 211, 187, 188, 212, 187, 188, 
- 	213, 187, 188, 214, 187, 188, 203, 187, 
- 	188, 216, 187, 188, 217, 187, 188, 218, 
- 	187, 188, 219, 187, 188, 76, 187, 188, 
- 	221, 187, 188, 203, 187, 188, 223, 187, 
- 	188, 221, 187, 188, 225, 187, 188, 226, 
- 	187, 188, 227, 187, 188, 228, 187, 188, 
- 	229, 187, 188, 230, 187, 188, 219, 187, 
- 	188, 214, 187, 234, 233, 234, 233, 234, 
- 	234, 4, 235, 249, 4, 250, 266, 272, 
- 	274, 276, 294, 234, 233, 234, 236, 233, 
- 	234, 237, 233, 234, 238, 233, 234, 239, 
- 	233, 234, 240, 233, 234, 241, 233, 234, 
- 	242, 233, 234, 243, 233, 234, 244, 233, 
- 	234, 245, 233, 234, 246, 233, 234, 247, 
- 	233, 234, 248, 233, 234, 4, 233, 234, 
- 	76, 233, 234, 76, 251, 261, 233, 234, 
- 	252, 233, 234, 253, 233, 234, 254, 233, 
- 	234, 255, 233, 234, 256, 233, 234, 257, 
- 	233, 234, 258, 233, 234, 259, 233, 234, 
- 	260, 233, 234, 249, 233, 234, 262, 233, 
- 	234, 263, 233, 234, 264, 233, 234, 265, 
- 	233, 234, 76, 233, 234, 267, 233, 234, 
- 	268, 233, 234, 269, 233, 234, 270, 233, 
- 	234, 271, 233, 234, 265, 233, 234, 273, 
- 	233, 234, 249, 233, 234, 275, 233, 234, 
- 	273, 233, 234, 277, 233, 234, 278, 233, 
- 	234, 279, 233, 234, 280, 233, 234, 281, 
- 	233, 234, 282, 233, 234, 283, 233, 234, 
- 	284, 76, 233, 234, 285, 233, 234, 286, 
- 	233, 234, 287, 233, 234, 288, 233, 234, 
- 	289, 233, 234, 290, 233, 234, 291, 233, 
- 	234, 292, 233, 234, 293, 233, 234, 265, 
- 	233, 234, 260, 233, 47, 0, 296, 297, 
- 	296, 0, 301, 300, 299, 297, 300, 298, 
- 	0, 299, 297, 298, 0, 299, 298, 301, 
- 	300, 299, 297, 300, 298, 301, 301, 5, 
- 	15, 17, 31, 34, 37, 77, 141, 163, 
- 	165, 167, 295, 296, 301, 0, 55, 303, 
- 	54, 55, 304, 54, 55, 305, 54, 55, 
- 	306, 54, 55, 307, 54, 55, 75, 54, 
- 	55, 309, 54, 55, 310, 54, 55, 311, 
- 	54, 55, 312, 54, 55, 313, 54, 55, 
- 	314, 54, 55, 315, 54, 55, 316, 54, 
- 	55, 317, 54, 55, 318, 54, 55, 319, 
- 	54, 55, 75, 54, 55, 321, 54, 55, 
- 	322, 54, 55, 323, 54, 55, 324, 54, 
- 	55, 325, 54, 55, 326, 54, 55, 327, 
- 	54, 55, 328, 76, 54, 55, 329, 54, 
- 	55, 330, 54, 55, 331, 54, 55, 332, 
- 	54, 55, 333, 54, 55, 334, 54, 55, 
- 	335, 54, 55, 336, 54, 55, 337, 54, 
- 	55, 75, 54, 0, 0
- };
- 
- static const unsigned char _lexer_trans_actions[] = {
- 	0, 54, 0, 5, 1, 0, 29, 1, 
- 	29, 29, 29, 29, 29, 29, 29, 35, 
- 	0, 43, 0, 43, 0, 43, 54, 0, 
- 	5, 1, 0, 29, 1, 29, 29, 29, 
- 	29, 29, 29, 29, 35, 0, 43, 0, 
- 	43, 0, 43, 139, 48, 9, 106, 11, 
- 	0, 134, 45, 45, 45, 3, 122, 33, 
- 	33, 33, 0, 122, 33, 33, 33, 0, 
- 	122, 33, 0, 33, 0, 102, 7, 7, 
- 	43, 54, 0, 0, 43, 114, 25, 0, 
- 	54, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	149, 126, 57, 110, 23, 0, 43, 43, 
- 	43, 43, 0, 27, 118, 27, 27, 51, 
- 	27, 0, 54, 0, 1, 0, 43, 0, 
- 	0, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 144, 57, 54, 0, 54, 0, 69, 
- 	33, 69, 84, 84, 84, 84, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	13, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 13, 0, 130, 31, 60, 57, 
- 	31, 63, 57, 63, 63, 63, 63, 63, 
- 	63, 63, 66, 31, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 144, 57, 54, 0, 54, 
- 	0, 72, 33, 84, 72, 84, 84, 84, 
- 	84, 84, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 15, 0, 54, 15, 
- 	0, 54, 15, 0, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 15, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 15, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 144, 57, 54, 0, 54, 
- 	0, 81, 84, 81, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 21, 0, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 144, 
- 	57, 54, 0, 54, 0, 78, 33, 84, 
- 	78, 84, 84, 84, 84, 84, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	19, 0, 54, 19, 0, 54, 19, 0, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 19, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 144, 57, 54, 0, 54, 
- 	0, 75, 33, 84, 75, 84, 84, 84, 
- 	84, 84, 84, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 17, 0, 54, 
- 	17, 0, 54, 17, 0, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 17, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 17, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 0, 43, 0, 0, 
- 	0, 43, 54, 37, 37, 87, 37, 37, 
- 	43, 0, 39, 0, 43, 0, 0, 54, 
- 	0, 0, 39, 0, 0, 54, 0, 93, 
- 	90, 41, 96, 90, 96, 96, 96, 96, 
- 	96, 96, 96, 99, 0, 43, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 13, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 0, 0
- };
- 
- static const unsigned char _lexer_eof_actions[] = {
- 	0, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43
- };
- 
- static const int lexer_start = 1;
- static const int lexer_first_final = 338;
- static const int lexer_error = 0;
- 
- static const int lexer_en_main = 1;
- 
- 
- #line 258 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
- 
- static VALUE 
- unindent(VALUE con, int start_col)
- {
-   VALUE re;
-   // Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters
-   char pat[32]; 
-   snprintf(pat, 32, "^[\t ]{0,%d}", start_col); 
-   re = rb_reg_regcomp(rb_str_new2(pat));
-   rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2(""));
- 
-   return Qnil;
- 
- }
- 
- static void 
- store_kw_con(VALUE listener, const char * event_name, 
-              const char * keyword_at, size_t keyword_length, 
-              const char * at,         size_t length, 
-              int current_line)
- {
-   VALUE con = Qnil, kw = Qnil;
-   kw = ENCODED_STR_NEW(keyword_at, keyword_length);
-   con = ENCODED_STR_NEW(at, length);
-   rb_funcall(con, rb_intern("strip!"), 0);
-   rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); 
- }
- 
- static void
- store_multiline_kw_con(VALUE listener, const char * event_name,
-                       const char * keyword_at, size_t keyword_length,
-                       const char * at,         size_t length,
-                       int current_line, int start_col)
- {
-   VALUE split;
-   VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil;
- 
-   kw = ENCODED_STR_NEW(keyword_at, keyword_length);
-   con = ENCODED_STR_NEW(at, length);
- 
-   unindent(con, start_col);
-   
-   split = rb_str_split(con, "\n");
- 
-   name = rb_funcall(split, rb_intern("shift"), 0);
-   desc = rb_ary_join(split, rb_str_new2( "\n" ));
- 
-   if( name == Qnil ) 
-   {
-     name = rb_str_new2("");
-   }
-   if( rb_funcall(desc, rb_intern("size"), 0) == 0) 
-   {
-     desc = rb_str_new2("");
-   }
-   rb_funcall(name, rb_intern("strip!"), 0);
-   rb_funcall(desc, rb_intern("rstrip!"), 0);
-   rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); 
- }
- 
- static void 
- store_attr(VALUE listener, const char * attr_type,
-            const char * at, size_t length, 
-            int line)
- {
-   VALUE val = ENCODED_STR_NEW(at, length);
-   rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line));
- }
- static void 
- store_docstring_content(VALUE listener, 
-           int start_col, 
-           const char *type_at, size_t type_length,
-           const char *at, size_t length, 
-           int current_line)
- {
-   VALUE re2;
-   VALUE unescape_escaped_quotes;
-   VALUE con = ENCODED_STR_NEW(at, length);
-   VALUE con_type = ENCODED_STR_NEW(type_at, type_length);
- 
-   unindent(con, start_col);
- 
-   re2 = rb_reg_regcomp(rb_str_new2("\r\\Z"));
-   unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\""));
-   rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2(""));
-   rb_funcall(con_type, rb_intern("strip!"), 0);
-   rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\""));
-   rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line));
- }
- static void 
- raise_lexer_error(const char * at, int line)
- { 
-   rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at);
- }
- 
- static void lexer_init(lexer_state *lexer) {
-   lexer->content_start = 0;
-   lexer->content_end = 0;
-   lexer->content_len = 0;
-   lexer->docstring_content_type_start = 0;
-   lexer->docstring_content_type_end = 0;
-   lexer->mark = 0;
-   lexer->keyword_start = 0;
-   lexer->keyword_end = 0;
-   lexer->next_keyword_start = 0;
-   lexer->line_number = 1;
-   lexer->last_newline = 0;
-   lexer->final_newline = 0;
-   lexer->start_col = 0;
- }
- 
- static VALUE CLexer_alloc(VALUE klass)
- {
-   VALUE obj;
-   lexer_state *lxr = ALLOC(lexer_state);
-   lexer_init(lxr);
- 
-   obj = Data_Wrap_Struct(klass, NULL, -1, lxr);
- 
-   return obj;
- }
- 
- static VALUE CLexer_init(VALUE self, VALUE listener)
- {
-   lexer_state *lxr; 
-   rb_iv_set(self, "@listener", listener);
-   
-   lxr = NULL;
-   DATA_GET(self, lexer_state, lxr);
-   lexer_init(lxr);
-   
-   return self;
- }
- 
- static VALUE CLexer_scan(VALUE self, VALUE input)
- {
-   VALUE input_copy;
-   char *data;
-   size_t len;
-   VALUE listener = rb_iv_get(self, "@listener");
- 
-   lexer_state *lexer;
-   lexer = NULL;
-   DATA_GET(self, lexer_state, lexer);
- 
-   input_copy = rb_str_dup(input);
- 
-   rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%"));
-   data = RSTRING_PTR(input_copy);
-   len = RSTRING_LEN(input_copy);
-   
-   if (len == 0) { 
-     rb_raise(rb_eGherkinLexingError, "No content to lex.");
-   } else {
- 
-     const char *p, *pe, *eof;
-     int cs = 0;
-     
-     VALUE current_row = Qnil;
- 
-     p = data;
-     pe = data + len;
-     eof = pe;
-     
-     assert(*pe == '\0' && "pointer does not end on NULL");
-     
-     
- #line 886 "ext/gherkin_lexer_cy_gb/gherkin_lexer_cy_gb.c"
- 	{
- 	cs = lexer_start;
- 	}
- 
- #line 425 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
-     
- #line 893 "ext/gherkin_lexer_cy_gb/gherkin_lexer_cy_gb.c"
- 	{
- 	int _klen;
- 	unsigned int _trans;
- 	const char *_acts;
- 	unsigned int _nacts;
- 	const char *_keys;
- 
- 	if ( p == pe )
- 		goto _test_eof;
- 	if ( cs == 0 )
- 		goto _out;
- _resume:
- 	_keys = _lexer_trans_keys + _lexer_key_offsets[cs];
- 	_trans = _lexer_index_offsets[cs];
- 
- 	_klen = _lexer_single_lengths[cs];
- 	if ( _klen > 0 ) {
- 		const char *_lower = _keys;
- 		const char *_mid;
- 		const char *_upper = _keys + _klen - 1;
- 		while (1) {
- 			if ( _upper < _lower )
- 				break;
- 
- 			_mid = _lower + ((_upper-_lower) >> 1);
- 			if ( (*p) < *_mid )
- 				_upper = _mid - 1;
- 			else if ( (*p) > *_mid )
- 				_lower = _mid + 1;
- 			else {
- 				_trans += (_mid - _keys);
- 				goto _match;
- 			}
- 		}
- 		_keys += _klen;
- 		_trans += _klen;
- 	}
- 
- 	_klen = _lexer_range_lengths[cs];
- 	if ( _klen > 0 ) {
- 		const char *_lower = _keys;
- 		const char *_mid;
- 		const char *_upper = _keys + (_klen<<1) - 2;
- 		while (1) {
- 			if ( _upper < _lower )
- 				break;
- 
- 			_mid = _lower + (((_upper-_lower) >> 1) & ~1);
- 			if ( (*p) < _mid[0] )
- 				_upper = _mid - 2;
- 			else if ( (*p) > _mid[1] )
- 				_lower = _mid + 2;
- 			else {
- 				_trans += ((_mid - _keys)>>1);
- 				goto _match;
- 			}
- 		}
- 		_trans += _klen;
- 	}
- 
- _match:
- 	cs = _lexer_trans_targs[_trans];
- 
- 	if ( _lexer_trans_actions[_trans] == 0 )
- 		goto _again;
- 
- 	_acts = _lexer_actions + _lexer_trans_actions[_trans];
- 	_nacts = (unsigned int) *_acts++;
- 	while ( _nacts-- > 0 )
- 	{
- 		switch ( *_acts++ )
- 		{
- 	case 0:
- #line 83 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
- 	{
- 		MARK(content_start, p);
-     lexer->current_line = lexer->line_number;
-     lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2;
-   }
- 	break;
- 	case 1:
- #line 89 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
- 	{
-     MARK(content_start, p);
-   }
- 	break;
- 	case 2:
- #line 93 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
- 	{
-     lexer->current_line = lexer->line_number;
-     lexer->start_col = p - data - lexer->last_newline;
-   }
- 	break;
- 	case 3:
- #line 98 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
- 	{
-     int len = LEN(content_start, PTR_TO(final_newline));
-     int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end));
- 
-     if (len < 0) len = 0;
-     if (type_len < 0) len = 0;
- 
-     store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line);
-   }
- 	break;
- 	case 4:
- #line 108 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
- 	{ 
-     MARK(docstring_content_type_start, p);
-   }
- 	break;
- 	case 5:
- #line 112 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
- 	{ 
-     MARK(docstring_content_type_end, p);
-   }
- 	break;
- 	case 6:
- #line 116 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
- 	{
-     STORE_KW_END_CON(feature);
-   }
- 	break;
- 	case 7:
- #line 120 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
- 	{
-     STORE_KW_END_CON(background);
-   }
- 	break;
- 	case 8:
- #line 124 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
- 	{
-     STORE_KW_END_CON(scenario);
-   }
- 	break;
- 	case 9:
- #line 128 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
- 	{
-     STORE_KW_END_CON(scenario_outline);
-   }
- 	break;
- 	case 10:
- #line 132 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
- 	{
-     STORE_KW_END_CON(examples);
-   }
- 	break;
- 	case 11:
- #line 136 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
- 	{
-     store_kw_con(listener, "step",
-       PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-       PTR_TO(content_start), LEN(content_start, p), 
-       lexer->current_line);
-   }
- 	break;
- 	case 12:
- #line 143 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
- 	{
-     STORE_ATTR(comment);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 13:
- #line 148 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
- 	{
-     STORE_ATTR(tag);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 14:
- #line 153 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
- 	{
-     lexer->line_number += 1;
-     MARK(final_newline, p);
-   }
- 	break;
- 	case 15:
- #line 158 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
- 	{
-     MARK(last_newline, p + 1);
-   }
- 	break;
- 	case 16:
- #line 162 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
- 	{
-     if (lexer->mark == 0) {
-       MARK(mark, p);
-     }
-   }
- 	break;
- 	case 17:
- #line 168 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
- 	{
-     MARK(keyword_end, p);
-     MARK(keyword_start, PTR_TO(mark));
-     MARK(content_start, p + 1);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 18:
- #line 175 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
- 	{
-     MARK(content_end, p);
-   }
- 	break;
- 	case 19:
- #line 179 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
- 	{
-     p = p - 1;
-     lexer->current_line = lexer->line_number;
-     current_row = rb_ary_new();
-   }
- 	break;
- 	case 20:
- #line 185 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
- 	{
- 		MARK(content_start, p);
-   }
- 	break;
- 	case 21:
- #line 189 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
- 	{
-     VALUE re_pipe, re_newline, re_backslash;
-     VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
-     rb_funcall(con, rb_intern("strip!"), 0);
-     re_pipe      = rb_reg_regcomp(rb_str_new2("\\\\\\|"));
-     re_newline   = rb_reg_regcomp(rb_str_new2("\\\\n"));
-     re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_pipe,      rb_str_new2("|"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_newline,   rb_str_new2("\n"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\"));
- 
-     rb_ary_push(current_row, con);
-   }
- 	break;
- 	case 22:
- #line 203 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
- 	{
-     rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
-   }
- 	break;
- 	case 23:
- #line 207 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
- 	{
-     int line;
-     if (cs < lexer_first_final) {
-       size_t count = 0;
-       VALUE newstr_val;
-       char *newstr;
-       int newstr_count = 0;        
-       size_t len;
-       const char *buff;
-       if (lexer->last_newline != 0) {
-         len = LEN(last_newline, eof);
-         buff = PTR_TO(last_newline);
-       } else {
-         len = strlen(data);
-         buff = data;
-       }
- 
-       // Allocate as a ruby string so that it gets cleaned up by GC
-       newstr_val = rb_str_new(buff, len);
-       newstr = RSTRING_PTR(newstr_val);
- 
- 
-       for (count = 0; count < len; count++) {
-         if(buff[count] == 10) {
-           newstr[newstr_count] = '\0'; // terminate new string at first newline found
-           break;
-         } else {
-           if (buff[count] == '%') {
-             newstr[newstr_count++] = buff[count];
-             newstr[newstr_count] = buff[count];
-           } else {
-             newstr[newstr_count] = buff[count];
-           }
-         }
-         newstr_count++;
-       }
- 
-       line = lexer->line_number;
-       lexer_init(lexer); // Re-initialize so we can scan again with the same lexer
-       raise_lexer_error(newstr, line);
-     } else {
-       rb_funcall(listener, rb_intern("eof"), 0);
-     }
-   }
- 	break;
- #line 1183 "ext/gherkin_lexer_cy_gb/gherkin_lexer_cy_gb.c"
- 		}
- 	}
- 
- _again:
- 	if ( cs == 0 )
- 		goto _out;
- 	if ( ++p != pe )
- 		goto _resume;
- 	_test_eof: {}
- 	if ( p == eof )
- 	{
- 	const char *__acts = _lexer_actions + _lexer_eof_actions[cs];
- 	unsigned int __nacts = (unsigned int) *__acts++;
- 	while ( __nacts-- > 0 ) {
- 		switch ( *__acts++ ) {
- 	case 23:
- #line 207 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
- 	{
-     int line;
-     if (cs < lexer_first_final) {
-       size_t count = 0;
-       VALUE newstr_val;
-       char *newstr;
-       int newstr_count = 0;        
-       size_t len;
-       const char *buff;
-       if (lexer->last_newline != 0) {
-         len = LEN(last_newline, eof);
-         buff = PTR_TO(last_newline);
-       } else {
-         len = strlen(data);
-         buff = data;
-       }
- 
-       // Allocate as a ruby string so that it gets cleaned up by GC
-       newstr_val = rb_str_new(buff, len);
-       newstr = RSTRING_PTR(newstr_val);
- 
- 
-       for (count = 0; count < len; count++) {
-         if(buff[count] == 10) {
-           newstr[newstr_count] = '\0'; // terminate new string at first newline found
-           break;
-         } else {
-           if (buff[count] == '%') {
-             newstr[newstr_count++] = buff[count];
-             newstr[newstr_count] = buff[count];
-           } else {
-             newstr[newstr_count] = buff[count];
-           }
-         }
-         newstr_count++;
-       }
- 
-       line = lexer->line_number;
-       lexer_init(lexer); // Re-initialize so we can scan again with the same lexer
-       raise_lexer_error(newstr, line);
-     } else {
-       rb_funcall(listener, rb_intern("eof"), 0);
-     }
-   }
- 	break;
- #line 1246 "ext/gherkin_lexer_cy_gb/gherkin_lexer_cy_gb.c"
- 		}
- 	}
- 	}
- 
- 	_out: {}
- 	}
- 
- #line 426 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/cy_gb.c.rl"
- 
-     assert(p <= pe && "data overflow after parsing execute");
-     assert(lexer->content_start <= len && "content starts after data end");
-     assert(lexer->mark < len && "mark is after data end");
-     
-     // Reset lexer by re-initializing the whole thing
-     lexer_init(lexer);
- 
-     if (cs == lexer_error) {
-       rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails.");
-     } else {
-       return Qtrue;
-     }
-   }
- }
- 
- void Init_gherkin_lexer_cy_gb()
- {
-   mGherkin = rb_define_module("Gherkin");
-   mGherkinLexer = rb_define_module_under(mGherkin, "Lexer");
-   rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError"));
- 
-   mCLexer = rb_define_module_under(mGherkin, "CLexer");
-   cI18nLexer = rb_define_class_under(mCLexer, "Cy_gb", rb_cObject);
-   rb_define_alloc_func(cI18nLexer, CLexer_alloc);
-   rb_define_method(cI18nLexer, "initialize", CLexer_init, 1);
-   rb_define_method(cI18nLexer, "scan", CLexer_scan, 1);
- }
- 
 -#line 1 "ragel/i18n/cy_gb.c.rl"
 -#include <assert.h>
 -#include <ruby.h>
 -
 -#if defined(_WIN32)
 -#include <stddef.h>
 -#endif
 -
 -#ifdef HAVE_RUBY_RE_H
 -#include <ruby/re.h>
 -#else
 -#include <re.h>
 -#endif
 -
 -#ifdef HAVE_RUBY_ENCODING_H
 -#include <ruby/encoding.h>
 -#define ENCODED_STR_NEW(ptr, len) \
 -    rb_enc_str_new(ptr, len, rb_utf8_encoding())
 -#else
 -#define ENCODED_STR_NEW(ptr, len) \
 -    rb_str_new(ptr, len)
 -#endif
 -
 -#ifndef RSTRING_PTR
 -#define RSTRING_PTR(s) (RSTRING(s)->ptr)
 -#endif
 -
 -#ifndef RSTRING_LEN
 -#define RSTRING_LEN(s) (RSTRING(s)->len)
 -#endif
 -
 -#define DATA_GET(FROM, TYPE, NAME) \
 -  Data_Get_Struct(FROM, TYPE, NAME); \
 -  if (NAME == NULL) { \
 -    rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \
 -  }
 - 
 -typedef struct lexer_state {
 -  int content_len;
 -  int line_number;
 -  int current_line;
 -  int start_col;
 -  size_t mark;
 -  size_t keyword_start;
 -  size_t keyword_end;
 -  size_t next_keyword_start;
 -  size_t content_start;
 -  size_t content_end;
 -  size_t docstring_content_type_start;
 -  size_t docstring_content_type_end;
 -  size_t query_start;
 -  size_t last_newline;
 -  size_t final_newline;
 -} lexer_state;
 -
 -static VALUE mGherkin;
 -static VALUE mGherkinLexer;
 -static VALUE mCLexer;
 -static VALUE cI18nLexer;
 -static VALUE rb_eGherkinLexingError;
 -
 -#define LEN(AT, P) (P - data - lexer->AT)
 -#define MARK(M, P) (lexer->M = (P) - data)
 -#define PTR_TO(P) (data + lexer->P)
 -
 -#define STORE_KW_END_CON(EVENT) \
 -  store_multiline_kw_con(listener, # EVENT, \
 -    PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \
 -    PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \
 -    lexer->current_line, lexer->start_col); \
 -    if (lexer->content_end != 0) { \
 -      p = PTR_TO(content_end - 1); \
 -    } \
 -    lexer->content_end = 0
 -
 -#define STORE_ATTR(ATTR) \
 -    store_attr(listener, # ATTR, \
 -      PTR_TO(content_start), LEN(content_start, p), \
 -      lexer->line_number)
 -
 -
 -#line 254 "ragel/i18n/cy_gb.c.rl"
 -
 -
 -/** Data **/
 -
 -#line 89 "ext/gherkin_lexer_cy_gb/gherkin_lexer_cy_gb.c"
 -static const char _lexer_actions[] = {
 -	0, 1, 0, 1, 1, 1, 2, 1, 
 -	3, 1, 4, 1, 5, 1, 6, 1, 
 -	7, 1, 8, 1, 9, 1, 10, 1, 
 -	11, 1, 12, 1, 13, 1, 16, 1, 
 -	17, 1, 18, 1, 19, 1, 20, 1, 
 -	21, 1, 22, 1, 23, 2, 1, 18, 
 -	2, 4, 5, 2, 13, 0, 2, 14, 
 -	15, 2, 17, 0, 2, 17, 2, 2, 
 -	17, 16, 2, 17, 19, 2, 18, 6, 
 -	2, 18, 7, 2, 18, 8, 2, 18, 
 -	9, 2, 18, 10, 2, 18, 16, 2, 
 -	20, 21, 2, 22, 0, 2, 22, 2, 
 -	2, 22, 16, 2, 22, 19, 3, 3, 
 -	14, 15, 3, 5, 14, 15, 3, 11, 
 -	14, 15, 3, 12, 14, 15, 3, 13, 
 -	14, 15, 3, 14, 15, 18, 3, 17, 
 -	0, 11, 3, 17, 14, 15, 4, 1, 
 -	14, 15, 18, 4, 4, 5, 14, 15, 
 -	4, 17, 0, 14, 15, 5, 17, 0, 
 -	11, 14, 15
 -};
 -
 -static const short _lexer_key_offsets[] = {
 -	0, 0, 18, 19, 20, 37, 38, 39, 
 -	41, 43, 48, 53, 58, 63, 67, 71, 
 -	73, 74, 75, 76, 77, 78, 79, 80, 
 -	81, 82, 83, 84, 85, 86, 87, 88, 
 -	89, 91, 93, 98, 105, 110, 113, 114, 
 -	115, 116, 117, 118, 119, 120, 121, 122, 
 -	123, 124, 125, 126, 127, 128, 129, 130, 
 -	141, 143, 145, 147, 149, 151, 153, 155, 
 -	157, 159, 161, 163, 165, 167, 169, 171, 
 -	173, 175, 177, 179, 181, 198, 199, 200, 
 -	201, 202, 203, 204, 205, 206, 207, 220, 
 -	222, 224, 226, 228, 230, 232, 234, 236, 
 -	238, 240, 242, 244, 246, 248, 250, 254, 
 -	256, 258, 260, 262, 264, 266, 268, 270, 
 -	272, 274, 276, 278, 280, 282, 284, 286, 
 -	288, 290, 292, 294, 296, 298, 300, 302, 
 -	304, 306, 309, 311, 313, 315, 317, 319, 
 -	321, 323, 325, 327, 329, 331, 332, 333, 
 -	334, 335, 336, 337, 338, 339, 340, 341, 
 -	342, 343, 344, 345, 346, 353, 355, 357, 
 -	359, 361, 363, 365, 366, 367, 368, 369, 
 -	370, 371, 372, 373, 374, 375, 376, 378, 
 -	379, 380, 381, 382, 383, 384, 385, 386, 
 -	387, 388, 389, 390, 391, 404, 406, 408, 
 -	410, 412, 414, 416, 418, 420, 422, 424, 
 -	426, 428, 430, 432, 434, 438, 440, 442, 
 -	444, 446, 448, 450, 452, 454, 456, 458, 
 -	460, 462, 464, 466, 468, 470, 472, 474, 
 -	476, 478, 480, 482, 484, 486, 488, 490, 
 -	492, 493, 494, 508, 510, 512, 514, 516, 
 -	518, 520, 522, 524, 526, 528, 530, 532, 
 -	534, 536, 538, 542, 544, 546, 548, 550, 
 -	552, 554, 556, 558, 560, 562, 564, 566, 
 -	568, 570, 572, 574, 576, 578, 580, 582, 
 -	584, 586, 588, 590, 592, 594, 596, 598, 
 -	600, 602, 604, 606, 609, 611, 613, 615, 
 -	617, 619, 621, 623, 625, 627, 629, 631, 
 -	632, 636, 642, 645, 647, 653, 670, 672, 
 -	674, 676, 678, 680, 682, 684, 686, 688, 
 -	690, 692, 694, 696, 698, 700, 702, 704, 
 -	706, 708, 710, 712, 714, 716, 718, 720, 
 -	723, 725, 727, 729, 731, 733, 735, 737, 
 -	739, 741, 743
 -};
 -
 -static const char _lexer_trans_keys[] = {
 -	-17, 10, 32, 34, 35, 37, 42, 64, 
 -	65, 67, 69, 79, 80, 83, 89, 124, 
 -	9, 13, -69, -65, 10, 32, 34, 35, 
 -	37, 42, 64, 65, 67, 69, 79, 80, 
 -	83, 89, 124, 9, 13, 34, 34, 10, 
 -	13, 10, 13, 10, 32, 34, 9, 13, 
 -	10, 32, 34, 9, 13, 10, 32, 34, 
 -	9, 13, 10, 32, 34, 9, 13, 10, 
 -	32, 9, 13, 10, 32, 9, 13, 10, 
 -	13, 10, 95, 70, 69, 65, 84, 85, 
 -	82, 69, 95, 69, 78, 68, 95, 37, 
 -	32, 10, 13, 10, 13, 13, 32, 64, 
 -	9, 10, 9, 10, 13, 32, 64, 11, 
 -	12, 10, 32, 64, 9, 13, 32, 110, 
 -	114, 114, 104, 101, 103, 101, 100, 105, 
 -	103, 32, 97, 119, 101, 100, 100, 58, 
 -	10, 10, 10, 32, 35, 37, 64, 65, 
 -	67, 69, 83, 9, 13, 10, 95, 10, 
 -	70, 10, 69, 10, 65, 10, 84, 10, 
 -	85, 10, 82, 10, 69, 10, 95, 10, 
 -	69, 10, 78, 10, 68, 10, 95, 10, 
 -	37, 10, 114, 10, 119, 10, 101, 10, 
 -	100, 10, 100, 10, 58, 10, 32, 34, 
 -	35, 37, 42, 64, 65, 67, 69, 79, 
 -	80, 83, 89, 124, 9, 13, 101, 102, 
 -	110, 100, 105, 114, 58, 10, 10, 10, 
 -	32, 35, 37, 42, 64, 65, 79, 80, 
 -	83, 89, 9, 13, 10, 95, 10, 70, 
 -	10, 69, 10, 65, 10, 84, 10, 85, 
 -	10, 82, 10, 69, 10, 95, 10, 69, 
 -	10, 78, 10, 68, 10, 95, 10, 37, 
 -	10, 32, 10, 32, 110, 114, 10, 114, 
 -	10, 104, 10, 101, 10, 103, 10, 101, 
 -	10, 100, 10, 105, 10, 103, 10, 32, 
 -	10, 97, 10, 119, 10, 101, 10, 100, 
 -	10, 100, 10, 58, 10, 110, 10, 100, 
 -	10, 114, 10, 121, 10, 99, 10, 101, 
 -	10, 110, 10, 97, 10, 114, 10, 105, 
 -	10, 111, 10, 32, 58, 10, 65, 10, 
 -	109, 10, 108, 10, 105, 10, 110, 10, 
 -	101, 10, 108, 10, 108, 10, 111, 10, 
 -	108, 10, 110, 110, 103, 104, 114, 101, 
 -	105, 102, 102, 116, 105, 97, 117, 58, 
 -	10, 10, 10, 32, 35, 65, 124, 9, 
 -	13, 10, 114, 10, 119, 10, 101, 10, 
 -	100, 10, 100, 10, 58, 110, 100, 114, 
 -	121, 99, 101, 110, 97, 114, 105, 111, 
 -	32, 58, 65, 109, 108, 105, 110, 101, 
 -	108, 108, 111, 108, 58, 10, 10, 10, 
 -	32, 35, 37, 42, 64, 65, 79, 80, 
 -	83, 89, 9, 13, 10, 95, 10, 70, 
 -	10, 69, 10, 65, 10, 84, 10, 85, 
 -	10, 82, 10, 69, 10, 95, 10, 69, 
 -	10, 78, 10, 68, 10, 95, 10, 37, 
 -	10, 32, 10, 32, 110, 114, 10, 114, 
 -	10, 104, 10, 101, 10, 103, 10, 101, 
 -	10, 100, 10, 105, 10, 103, 10, 32, 
 -	10, 97, 10, 119, 10, 101, 10, 100, 
 -	10, 100, 10, 58, 10, 110, 10, 100, 
 -	10, 114, 10, 121, 10, 99, 10, 101, 
 -	10, 110, 10, 97, 10, 114, 10, 105, 
 -	10, 111, 10, 110, 10, 10, 10, 32, 
 -	35, 37, 42, 64, 65, 67, 79, 80, 
 -	83, 89, 9, 13, 10, 95, 10, 70, 
 -	10, 69, 10, 65, 10, 84, 10, 85, 
 -	10, 82, 10, 69, 10, 95, 10, 69, 
 -	10, 78, 10, 68, 10, 95, 10, 37, 
 -	10, 32, 10, 32, 110, 114, 10, 114, 
 -	10, 104, 10, 101, 10, 103, 10, 101, 
 -	10, 100, 10, 105, 10, 103, 10, 32, 
 -	10, 97, 10, 119, 10, 101, 10, 100, 
 -	10, 100, 10, 58, 10, 101, 10, 102, 
 -	10, 110, 10, 100, 10, 105, 10, 114, 
 -	10, 110, 10, 100, 10, 114, 10, 121, 
 -	10, 99, 10, 101, 10, 110, 10, 97, 
 -	10, 114, 10, 105, 10, 111, 10, 32, 
 -	58, 10, 65, 10, 109, 10, 108, 10, 
 -	105, 10, 110, 10, 101, 10, 108, 10, 
 -	108, 10, 111, 10, 108, 10, 110, 110, 
 -	32, 124, 9, 13, 10, 32, 92, 124, 
 -	9, 13, 10, 92, 124, 10, 92, 10, 
 -	32, 92, 124, 9, 13, 10, 32, 34, 
 -	35, 37, 42, 64, 65, 67, 69, 79, 
 -	80, 83, 89, 124, 9, 13, 10, 101, 
 -	10, 102, 10, 110, 10, 100, 10, 105, 
 -	10, 114, 10, 110, 10, 103, 10, 104, 
 -	10, 114, 10, 101, 10, 105, 10, 102, 
 -	10, 102, 10, 116, 10, 105, 10, 97, 
 -	10, 117, 10, 99, 10, 101, 10, 110, 
 -	10, 97, 10, 114, 10, 105, 10, 111, 
 -	10, 32, 58, 10, 65, 10, 109, 10, 
 -	108, 10, 105, 10, 110, 10, 101, 10, 
 -	108, 10, 108, 10, 111, 10, 108, 0
 -};
 -
 -static const char _lexer_single_lengths[] = {
 -	0, 16, 1, 1, 15, 1, 1, 2, 
 -	2, 3, 3, 3, 3, 2, 2, 2, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	2, 2, 3, 5, 3, 3, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 9, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 15, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 11, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 4, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 3, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 5, 2, 2, 2, 
 -	2, 2, 2, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 2, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 11, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 4, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	1, 1, 12, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 4, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 3, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 1, 
 -	2, 4, 3, 2, 4, 15, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 3, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 0
 -};
 -
 -static const char _lexer_range_lengths[] = {
 -	0, 1, 0, 0, 1, 0, 0, 0, 
 -	0, 1, 1, 1, 1, 1, 1, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 1, 1, 1, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 1, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 1, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 1, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 1, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 1, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 1, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	1, 1, 0, 0, 1, 1, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0
 -};
 -
 -static const short _lexer_index_offsets[] = {
 -	0, 0, 18, 20, 22, 39, 41, 43, 
 -	46, 49, 54, 59, 64, 69, 73, 77, 
 -	80, 82, 84, 86, 88, 90, 92, 94, 
 -	96, 98, 100, 102, 104, 106, 108, 110, 
 -	112, 115, 118, 123, 130, 135, 139, 141, 
 -	143, 145, 147, 149, 151, 153, 155, 157, 
 -	159, 161, 163, 165, 167, 169, 171, 173, 
 -	184, 187, 190, 193, 196, 199, 202, 205, 
 -	208, 211, 214, 217, 220, 223, 226, 229, 
 -	232, 235, 238, 241, 244, 261, 263, 265, 
 -	267, 269, 271, 273, 275, 277, 279, 292, 
 -	295, 298, 301, 304, 307, 310, 313, 316, 
 -	319, 322, 325, 328, 331, 334, 337, 342, 
 -	345, 348, 351, 354, 357, 360, 363, 366, 
 -	369, 372, 375, 378, 381, 384, 387, 390, 
 -	393, 396, 399, 402, 405, 408, 411, 414, 
 -	417, 420, 424, 427, 430, 433, 436, 439, 
 -	442, 445, 448, 451, 454, 457, 459, 461, 
 -	463, 465, 467, 469, 471, 473, 475, 477, 
 -	479, 481, 483, 485, 487, 494, 497, 500, 
 -	503, 506, 509, 512, 514, 516, 518, 520, 
 -	522, 524, 526, 528, 530, 532, 534, 537, 
 -	539, 541, 543, 545, 547, 549, 551, 553, 
 -	555, 557, 559, 561, 563, 576, 579, 582, 
 -	585, 588, 591, 594, 597, 600, 603, 606, 
 -	609, 612, 615, 618, 621, 626, 629, 632, 
 -	635, 638, 641, 644, 647, 650, 653, 656, 
 -	659, 662, 665, 668, 671, 674, 677, 680, 
 -	683, 686, 689, 692, 695, 698, 701, 704, 
 -	707, 709, 711, 725, 728, 731, 734, 737, 
 -	740, 743, 746, 749, 752, 755, 758, 761, 
 -	764, 767, 770, 775, 778, 781, 784, 787, 
 -	790, 793, 796, 799, 802, 805, 808, 811, 
 -	814, 817, 820, 823, 826, 829, 832, 835, 
 -	838, 841, 844, 847, 850, 853, 856, 859, 
 -	862, 865, 868, 871, 875, 878, 881, 884, 
 -	887, 890, 893, 896, 899, 902, 905, 908, 
 -	910, 914, 920, 924, 927, 933, 950, 953, 
 -	956, 959, 962, 965, 968, 971, 974, 977, 
 -	980, 983, 986, 989, 992, 995, 998, 1001, 
 -	1004, 1007, 1010, 1013, 1016, 1019, 1022, 1025, 
 -	1029, 1032, 1035, 1038, 1041, 1044, 1047, 1050, 
 -	1053, 1056, 1059
 -};
 -
 -static const short _lexer_trans_targs[] = {
 -	2, 4, 4, 5, 15, 17, 31, 34, 
 -	37, 77, 141, 163, 165, 167, 295, 296, 
 -	4, 0, 3, 0, 4, 0, 4, 4, 
 -	5, 15, 17, 31, 34, 37, 77, 141, 
 -	163, 165, 167, 295, 296, 4, 0, 6, 
 -	0, 7, 0, 9, 8, 8, 9, 8, 
 -	8, 10, 10, 11, 10, 10, 10, 10, 
 -	11, 10, 10, 10, 10, 12, 10, 10, 
 -	10, 10, 13, 10, 10, 4, 14, 14, 
 -	0, 4, 14, 14, 0, 4, 16, 15, 
 -	4, 0, 18, 0, 19, 0, 20, 0, 
 -	21, 0, 22, 0, 23, 0, 24, 0, 
 -	25, 0, 26, 0, 27, 0, 28, 0, 
 -	29, 0, 30, 0, 338, 0, 32, 0, 
 -	4, 16, 33, 4, 16, 33, 0, 0, 
 -	0, 0, 35, 36, 4, 36, 36, 34, 
 -	35, 35, 4, 36, 34, 36, 0, 32, 
 -	38, 48, 0, 39, 0, 40, 0, 41, 
 -	0, 42, 0, 43, 0, 44, 0, 45, 
 -	0, 46, 0, 47, 0, 31, 0, 49, 
 -	0, 50, 0, 51, 0, 52, 0, 53, 
 -	0, 55, 54, 55, 54, 55, 55, 4, 
 -	56, 4, 70, 302, 308, 320, 55, 54, 
 -	55, 57, 54, 55, 58, 54, 55, 59, 
 -	54, 55, 60, 54, 55, 61, 54, 55, 
 -	62, 54, 55, 63, 54, 55, 64, 54, 
 -	55, 65, 54, 55, 66, 54, 55, 67, 
 -	54, 55, 68, 54, 55, 69, 54, 55, 
 -	4, 54, 55, 71, 54, 55, 72, 54, 
 -	55, 73, 54, 55, 74, 54, 55, 75, 
 -	54, 55, 76, 54, 4, 4, 5, 15, 
 -	17, 31, 34, 37, 77, 141, 163, 165, 
 -	167, 295, 296, 4, 0, 78, 0, 79, 
 -	0, 80, 0, 81, 0, 82, 0, 83, 
 -	0, 84, 0, 86, 85, 86, 85, 86, 
 -	86, 4, 87, 101, 4, 102, 118, 120, 
 -	122, 140, 86, 85, 86, 88, 85, 86, 
 -	89, 85, 86, 90, 85, 86, 91, 85, 
 -	86, 92, 85, 86, 93, 85, 86, 94, 
 -	85, 86, 95, 85, 86, 96, 85, 86, 
 -	97, 85, 86, 98, 85, 86, 99, 85, 
 -	86, 100, 85, 86, 4, 85, 86, 76, 
 -	85, 86, 76, 103, 113, 85, 86, 104, 
 -	85, 86, 105, 85, 86, 106, 85, 86, 
 -	107, 85, 86, 108, 85, 86, 109, 85, 
 -	86, 110, 85, 86, 111, 85, 86, 112, 
 -	85, 86, 101, 85, 86, 114, 85, 86, 
 -	115, 85, 86, 116, 85, 86, 117, 85, 
 -	86, 76, 85, 86, 119, 85, 86, 101, 
 -	85, 86, 121, 85, 86, 119, 85, 86, 
 -	123, 85, 86, 124, 85, 86, 125, 85, 
 -	86, 126, 85, 86, 127, 85, 86, 128, 
 -	85, 86, 129, 85, 86, 130, 76, 85, 
 -	86, 131, 85, 86, 132, 85, 86, 133, 
 -	85, 86, 134, 85, 86, 135, 85, 86, 
 -	136, 85, 86, 137, 85, 86, 138, 85, 
 -	86, 139, 85, 86, 117, 85, 86, 112, 
 -	85, 142, 0, 143, 0, 144, 0, 145, 
 -	0, 146, 0, 147, 0, 148, 0, 149, 
 -	0, 150, 0, 151, 0, 152, 0, 153, 
 -	0, 154, 0, 156, 155, 156, 155, 156, 
 -	156, 4, 157, 4, 156, 155, 156, 158, 
 -	155, 156, 159, 155, 156, 160, 155, 156, 
 -	161, 155, 156, 162, 155, 156, 76, 155, 
 -	164, 0, 31, 0, 166, 0, 164, 0, 
 -	168, 0, 169, 0, 170, 0, 171, 0, 
 -	172, 0, 173, 0, 174, 0, 175, 232, 
 -	0, 176, 0, 177, 0, 178, 0, 179, 
 -	0, 180, 0, 181, 0, 182, 0, 183, 
 -	0, 184, 0, 185, 0, 186, 0, 188, 
 -	187, 188, 187, 188, 188, 4, 189, 203, 
 -	4, 204, 220, 222, 224, 231, 188, 187, 
 -	188, 190, 187, 188, 191, 187, 188, 192, 
 -	187, 188, 193, 187, 188, 194, 187, 188, 
 -	195, 187, 188, 196, 187, 188, 197, 187, 
 -	188, 198, 187, 188, 199, 187, 188, 200, 
 -	187, 188, 201, 187, 188, 202, 187, 188, 
 -	4, 187, 188, 76, 187, 188, 76, 205, 
 -	215, 187, 188, 206, 187, 188, 207, 187, 
 -	188, 208, 187, 188, 209, 187, 188, 210, 
 -	187, 188, 211, 187, 188, 212, 187, 188, 
 -	213, 187, 188, 214, 187, 188, 203, 187, 
 -	188, 216, 187, 188, 217, 187, 188, 218, 
 -	187, 188, 219, 187, 188, 76, 187, 188, 
 -	221, 187, 188, 203, 187, 188, 223, 187, 
 -	188, 221, 187, 188, 225, 187, 188, 226, 
 -	187, 188, 227, 187, 188, 228, 187, 188, 
 -	229, 187, 188, 230, 187, 188, 219, 187, 
 -	188, 214, 187, 234, 233, 234, 233, 234, 
 -	234, 4, 235, 249, 4, 250, 266, 272, 
 -	274, 276, 294, 234, 233, 234, 236, 233, 
 -	234, 237, 233, 234, 238, 233, 234, 239, 
 -	233, 234, 240, 233, 234, 241, 233, 234, 
 -	242, 233, 234, 243, 233, 234, 244, 233, 
 -	234, 245, 233, 234, 246, 233, 234, 247, 
 -	233, 234, 248, 233, 234, 4, 233, 234, 
 -	76, 233, 234, 76, 251, 261, 233, 234, 
 -	252, 233, 234, 253, 233, 234, 254, 233, 
 -	234, 255, 233, 234, 256, 233, 234, 257, 
 -	233, 234, 258, 233, 234, 259, 233, 234, 
 -	260, 233, 234, 249, 233, 234, 262, 233, 
 -	234, 263, 233, 234, 264, 233, 234, 265, 
 -	233, 234, 76, 233, 234, 267, 233, 234, 
 -	268, 233, 234, 269, 233, 234, 270, 233, 
 -	234, 271, 233, 234, 265, 233, 234, 273, 
 -	233, 234, 249, 233, 234, 275, 233, 234, 
 -	273, 233, 234, 277, 233, 234, 278, 233, 
 -	234, 279, 233, 234, 280, 233, 234, 281, 
 -	233, 234, 282, 233, 234, 283, 233, 234, 
 -	284, 76, 233, 234, 285, 233, 234, 286, 
 -	233, 234, 287, 233, 234, 288, 233, 234, 
 -	289, 233, 234, 290, 233, 234, 291, 233, 
 -	234, 292, 233, 234, 293, 233, 234, 265, 
 -	233, 234, 260, 233, 47, 0, 296, 297, 
 -	296, 0, 301, 300, 299, 297, 300, 298, 
 -	0, 299, 297, 298, 0, 299, 298, 301, 
 -	300, 299, 297, 300, 298, 301, 301, 5, 
 -	15, 17, 31, 34, 37, 77, 141, 163, 
 -	165, 167, 295, 296, 301, 0, 55, 303, 
 -	54, 55, 304, 54, 55, 305, 54, 55, 
 -	306, 54, 55, 307, 54, 55, 75, 54, 
 -	55, 309, 54, 55, 310, 54, 55, 311, 
 -	54, 55, 312, 54, 55, 313, 54, 55, 
 -	314, 54, 55, 315, 54, 55, 316, 54, 
 -	55, 317, 54, 55, 318, 54, 55, 319, 
 -	54, 55, 75, 54, 55, 321, 54, 55, 
 -	322, 54, 55, 323, 54, 55, 324, 54, 
 -	55, 325, 54, 55, 326, 54, 55, 327, 
 -	54, 55, 328, 76, 54, 55, 329, 54, 
 -	55, 330, 54, 55, 331, 54, 55, 332, 
 -	54, 55, 333, 54, 55, 334, 54, 55, 
 -	335, 54, 55, 336, 54, 55, 337, 54, 
 -	55, 75, 54, 0, 0
 -};
 -
 -static const unsigned char _lexer_trans_actions[] = {
 -	0, 54, 0, 5, 1, 0, 29, 1, 
 -	29, 29, 29, 29, 29, 29, 29, 35, 
 -	0, 43, 0, 43, 0, 43, 54, 0, 
 -	5, 1, 0, 29, 1, 29, 29, 29, 
 -	29, 29, 29, 29, 35, 0, 43, 0, 
 -	43, 0, 43, 139, 48, 9, 106, 11, 
 -	0, 134, 45, 45, 45, 3, 122, 33, 
 -	33, 33, 0, 122, 33, 33, 33, 0, 
 -	122, 33, 0, 33, 0, 102, 7, 7, 
 -	43, 54, 0, 0, 43, 114, 25, 0, 
 -	54, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	149, 126, 57, 110, 23, 0, 43, 43, 
 -	43, 43, 0, 27, 118, 27, 27, 51, 
 -	27, 0, 54, 0, 1, 0, 43, 0, 
 -	0, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 144, 57, 54, 0, 54, 0, 69, 
 -	33, 69, 84, 84, 84, 84, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	13, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 13, 0, 130, 31, 60, 57, 
 -	31, 63, 57, 63, 63, 63, 63, 63, 
 -	63, 63, 66, 31, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 144, 57, 54, 0, 54, 
 -	0, 72, 33, 84, 72, 84, 84, 84, 
 -	84, 84, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 15, 0, 54, 15, 
 -	0, 54, 15, 0, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 15, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 15, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 144, 57, 54, 0, 54, 
 -	0, 81, 84, 81, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 21, 0, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 144, 
 -	57, 54, 0, 54, 0, 78, 33, 84, 
 -	78, 84, 84, 84, 84, 84, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	19, 0, 54, 19, 0, 54, 19, 0, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 19, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 144, 57, 54, 0, 54, 
 -	0, 75, 33, 84, 75, 84, 84, 84, 
 -	84, 84, 84, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 17, 0, 54, 
 -	17, 0, 54, 17, 0, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 17, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 17, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 0, 43, 0, 0, 
 -	0, 43, 54, 37, 37, 87, 37, 37, 
 -	43, 0, 39, 0, 43, 0, 0, 54, 
 -	0, 0, 39, 0, 0, 54, 0, 93, 
 -	90, 41, 96, 90, 96, 96, 96, 96, 
 -	96, 96, 96, 99, 0, 43, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 13, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 0, 0
 -};
 -
 -static const unsigned char _lexer_eof_actions[] = {
 -	0, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43
 -};
 -
 -static const int lexer_start = 1;
 -static const int lexer_first_final = 338;
 -static const int lexer_error = 0;
 -
 -static const int lexer_en_main = 1;
 -
 -
 -#line 258 "ragel/i18n/cy_gb.c.rl"
 -
 -static VALUE 
 -unindent(VALUE con, int start_col)
 -{
 -  VALUE re;
 -  /* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */
 -  char pat[32]; 
 -  snprintf(pat, 32, "^[\t ]{0,%d}", start_col); 
 -  re = rb_reg_regcomp(rb_str_new2(pat));
 -  rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2(""));
 -
 -  return Qnil;
 -
 -}
 -
 -static void 
 -store_kw_con(VALUE listener, const char * event_name, 
 -             const char * keyword_at, size_t keyword_length, 
 -             const char * at,         size_t length, 
 -             int current_line)
 -{
 -  VALUE con = Qnil, kw = Qnil;
 -  kw = ENCODED_STR_NEW(keyword_at, keyword_length);
 -  con = ENCODED_STR_NEW(at, length);
 -  rb_funcall(con, rb_intern("strip!"), 0);
 -  rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); 
 -}
 -
 -static void
 -store_multiline_kw_con(VALUE listener, const char * event_name,
 -                      const char * keyword_at, size_t keyword_length,
 -                      const char * at,         size_t length,
 -                      int current_line, int start_col)
 -{
 -  VALUE split;
 -  VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil;
 -
 -  kw = ENCODED_STR_NEW(keyword_at, keyword_length);
 -  con = ENCODED_STR_NEW(at, length);
 -
 -  unindent(con, start_col);
 -  
 -  split = rb_str_split(con, "\n");
 -
 -  name = rb_funcall(split, rb_intern("shift"), 0);
 -  desc = rb_ary_join(split, rb_str_new2( "\n" ));
 -
 -  if( name == Qnil ) 
 -  {
 -    name = rb_str_new2("");
 -  }
 -  if( rb_funcall(desc, rb_intern("size"), 0) == 0) 
 -  {
 -    desc = rb_str_new2("");
 -  }
 -  rb_funcall(name, rb_intern("strip!"), 0);
 -  rb_funcall(desc, rb_intern("rstrip!"), 0);
 -  rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); 
 -}
 -
 -static void 
 -store_attr(VALUE listener, const char * attr_type,
 -           const char * at, size_t length, 
 -           int line)
 -{
 -  VALUE val = ENCODED_STR_NEW(at, length);
 -  rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line));
 -}
 -static void 
 -store_docstring_content(VALUE listener, 
 -          int start_col, 
 -          const char *type_at, size_t type_length,
 -          const char *at, size_t length, 
 -          int current_line)
 -{
 -  VALUE re2;
 -  VALUE unescape_escaped_quotes;
 -  VALUE con = ENCODED_STR_NEW(at, length);
 -  VALUE con_type = ENCODED_STR_NEW(type_at, type_length);
 -
 -  unindent(con, start_col);
 -
 -  re2 = rb_reg_regcomp(rb_str_new2("\r\\Z"));
 -  unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\""));
 -  rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2(""));
 -  rb_funcall(con_type, rb_intern("strip!"), 0);
 -  rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\""));
 -  rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line));
 -}
 -static void 
 -raise_lexer_error(const char * at, int line)
 -{ 
 -  rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at);
 -}
 -
 -static void lexer_init(lexer_state *lexer) {
 -  lexer->content_start = 0;
 -  lexer->content_end = 0;
 -  lexer->content_len = 0;
 -  lexer->docstring_content_type_start = 0;
 -  lexer->docstring_content_type_end = 0;
 -  lexer->mark = 0;
 -  lexer->keyword_start = 0;
 -  lexer->keyword_end = 0;
 -  lexer->next_keyword_start = 0;
 -  lexer->line_number = 1;
 -  lexer->last_newline = 0;
 -  lexer->final_newline = 0;
 -  lexer->start_col = 0;
 -}
 -
 -static VALUE CLexer_alloc(VALUE klass)
 -{
 -  VALUE obj;
 -  lexer_state *lxr = ALLOC(lexer_state);
 -  lexer_init(lxr);
 -
 -  obj = Data_Wrap_Struct(klass, NULL, -1, lxr);
 -
 -  return obj;
 -}
 -
 -static VALUE CLexer_init(VALUE self, VALUE listener)
 -{
 -  lexer_state *lxr; 
 -  rb_iv_set(self, "@listener", listener);
 -  
 -  lxr = NULL;
 -  DATA_GET(self, lexer_state, lxr);
 -  lexer_init(lxr);
 -  
 -  return self;
 -}
 -
 -static VALUE CLexer_scan(VALUE self, VALUE input)
 -{
 -  VALUE input_copy;
 -  char *data;
 -  size_t len;
 -  VALUE listener = rb_iv_get(self, "@listener");
 -
 -  lexer_state *lexer;
 -  lexer = NULL;
 -  DATA_GET(self, lexer_state, lexer);
 -
 -  input_copy = rb_str_dup(input);
 -
 -  rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%"));
 -  data = RSTRING_PTR(input_copy);
 -  len = RSTRING_LEN(input_copy);
 -  
 -  if (len == 0) { 
 -    rb_raise(rb_eGherkinLexingError, "No content to lex.");
 -  } else {
 -
 -    const char *p, *pe, *eof;
 -    int cs = 0;
 -    
 -    VALUE current_row = Qnil;
 -
 -    p = data;
 -    pe = data + len;
 -    eof = pe;
 -    
 -    assert(*pe == '\0' && "pointer does not end on NULL");
 -    
 -    
 -#line 886 "ext/gherkin_lexer_cy_gb/gherkin_lexer_cy_gb.c"
 -	{
 -	cs = lexer_start;
 -	}
 -
 -#line 425 "ragel/i18n/cy_gb.c.rl"
 -    
 -#line 893 "ext/gherkin_lexer_cy_gb/gherkin_lexer_cy_gb.c"
 -	{
 -	int _klen;
 -	unsigned int _trans;
 -	const char *_acts;
 -	unsigned int _nacts;
 -	const char *_keys;
 -
 -	if ( p == pe )
 -		goto _test_eof;
 -	if ( cs == 0 )
 -		goto _out;
 -_resume:
 -	_keys = _lexer_trans_keys + _lexer_key_offsets[cs];
 -	_trans = _lexer_index_offsets[cs];
 -
 -	_klen = _lexer_single_lengths[cs];
 -	if ( _klen > 0 ) {
 -		const char *_lower = _keys;
 -		const char *_mid;
 -		const char *_upper = _keys + _klen - 1;
 -		while (1) {
 -			if ( _upper < _lower )
 -				break;
 -
 -			_mid = _lower + ((_upper-_lower) >> 1);
 -			if ( (*p) < *_mid )
 -				_upper = _mid - 1;
 -			else if ( (*p) > *_mid )
 -				_lower = _mid + 1;
 -			else {
 -				_trans += (unsigned int)(_mid - _keys);
 -				goto _match;
 -			}
 -		}
 -		_keys += _klen;
 -		_trans += _klen;
 -	}
 -
 -	_klen = _lexer_range_lengths[cs];
 -	if ( _klen > 0 ) {
 -		const char *_lower = _keys;
 -		const char *_mid;
 -		const char *_upper = _keys + (_klen<<1) - 2;
 -		while (1) {
 -			if ( _upper < _lower )
 -				break;
 -
 -			_mid = _lower + (((_upper-_lower) >> 1) & ~1);
 -			if ( (*p) < _mid[0] )
 -				_upper = _mid - 2;
 -			else if ( (*p) > _mid[1] )
 -				_lower = _mid + 2;
 -			else {
 -				_trans += (unsigned int)((_mid - _keys)>>1);
 -				goto _match;
 -			}
 -		}
 -		_trans += _klen;
 -	}
 -
 -_match:
 -	cs = _lexer_trans_targs[_trans];
 -
 -	if ( _lexer_trans_actions[_trans] == 0 )
 -		goto _again;
 -
 -	_acts = _lexer_actions + _lexer_trans_actions[_trans];
 -	_nacts = (unsigned int) *_acts++;
 -	while ( _nacts-- > 0 )
 -	{
 -		switch ( *_acts++ )
 -		{
 -	case 0:
 -#line 83 "ragel/i18n/cy_gb.c.rl"
 -	{
 -		MARK(content_start, p);
 -    lexer->current_line = lexer->line_number;
 -    lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2;
 -  }
 -	break;
 -	case 1:
 -#line 89 "ragel/i18n/cy_gb.c.rl"
 -	{
 -    MARK(content_start, p);
 -  }
 -	break;
 -	case 2:
 -#line 93 "ragel/i18n/cy_gb.c.rl"
 -	{
 -    lexer->current_line = lexer->line_number;
 -    lexer->start_col = p - data - lexer->last_newline;
 -  }
 -	break;
 -	case 3:
 -#line 98 "ragel/i18n/cy_gb.c.rl"
 -	{
 -    int len = LEN(content_start, PTR_TO(final_newline));
 -    int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end));
 -
 -    if (len < 0) len = 0;
 -    if (type_len < 0) len = 0;
 -
 -    store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line);
 -  }
 -	break;
 -	case 4:
 -#line 108 "ragel/i18n/cy_gb.c.rl"
 -	{ 
 -    MARK(docstring_content_type_start, p);
 -  }
 -	break;
 -	case 5:
 -#line 112 "ragel/i18n/cy_gb.c.rl"
 -	{ 
 -    MARK(docstring_content_type_end, p);
 -  }
 -	break;
 -	case 6:
 -#line 116 "ragel/i18n/cy_gb.c.rl"
 -	{
 -    STORE_KW_END_CON(feature);
 -  }
 -	break;
 -	case 7:
 -#line 120 "ragel/i18n/cy_gb.c.rl"
 -	{
 -    STORE_KW_END_CON(background);
 -  }
 -	break;
 -	case 8:
 -#line 124 "ragel/i18n/cy_gb.c.rl"
 -	{
 -    STORE_KW_END_CON(scenario);
 -  }
 -	break;
 -	case 9:
 -#line 128 "ragel/i18n/cy_gb.c.rl"
 -	{
 -    STORE_KW_END_CON(scenario_outline);
 -  }
 -	break;
 -	case 10:
 -#line 132 "ragel/i18n/cy_gb.c.rl"
 -	{
 -    STORE_KW_END_CON(examples);
 -  }
 -	break;
 -	case 11:
 -#line 136 "ragel/i18n/cy_gb.c.rl"
 -	{
 -    store_kw_con(listener, "step",
 -      PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
 -      PTR_TO(content_start), LEN(content_start, p), 
 -      lexer->current_line);
 -  }
 -	break;
 -	case 12:
 -#line 143 "ragel/i18n/cy_gb.c.rl"
 -	{
 -    STORE_ATTR(comment);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 13:
 -#line 148 "ragel/i18n/cy_gb.c.rl"
 -	{
 -    STORE_ATTR(tag);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 14:
 -#line 153 "ragel/i18n/cy_gb.c.rl"
 -	{
 -    lexer->line_number += 1;
 -    MARK(final_newline, p);
 -  }
 -	break;
 -	case 15:
 -#line 158 "ragel/i18n/cy_gb.c.rl"
 -	{
 -    MARK(last_newline, p + 1);
 -  }
 -	break;
 -	case 16:
 -#line 162 "ragel/i18n/cy_gb.c.rl"
 -	{
 -    if (lexer->mark == 0) {
 -      MARK(mark, p);
 -    }
 -  }
 -	break;
 -	case 17:
 -#line 168 "ragel/i18n/cy_gb.c.rl"
 -	{
 -    MARK(keyword_end, p);
 -    MARK(keyword_start, PTR_TO(mark));
 -    MARK(content_start, p + 1);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 18:
 -#line 175 "ragel/i18n/cy_gb.c.rl"
 -	{
 -    MARK(content_end, p);
 -  }
 -	break;
 -	case 19:
 -#line 179 "ragel/i18n/cy_gb.c.rl"
 -	{
 -    p = p - 1;
 -    lexer->current_line = lexer->line_number;
 -    current_row = rb_ary_new();
 -  }
 -	break;
 -	case 20:
 -#line 185 "ragel/i18n/cy_gb.c.rl"
 -	{
 -		MARK(content_start, p);
 -  }
 -	break;
 -	case 21:
 -#line 189 "ragel/i18n/cy_gb.c.rl"
 -	{
 -    VALUE re_pipe, re_newline, re_backslash;
 -    VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
 -    rb_funcall(con, rb_intern("strip!"), 0);
 -    re_pipe      = rb_reg_regcomp(rb_str_new2("\\\\\\|"));
 -    re_newline   = rb_reg_regcomp(rb_str_new2("\\\\n"));
 -    re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_pipe,      rb_str_new2("|"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_newline,   rb_str_new2("\n"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\"));
 -
 -    rb_ary_push(current_row, con);
 -  }
 -	break;
 -	case 22:
 -#line 203 "ragel/i18n/cy_gb.c.rl"
 -	{
 -    rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
 -  }
 -	break;
 -	case 23:
 -#line 207 "ragel/i18n/cy_gb.c.rl"
 -	{
 -    int line;
 -    if (cs < lexer_first_final) {
 -      size_t count = 0;
 -      VALUE newstr_val;
 -      char *newstr;
 -      int newstr_count = 0;        
 -      size_t len;
 -      const char *buff;
 -      if (lexer->last_newline != 0) {
 -        len = LEN(last_newline, eof);
 -        buff = PTR_TO(last_newline);
 -      } else {
 -        len = strlen(data);
 -        buff = data;
 -      }
 -
 -      /* Allocate as a ruby string so that it gets cleaned up by GC */
 -      newstr_val = rb_str_new(buff, len);
 -      newstr = RSTRING_PTR(newstr_val);
 -
 -
 -      for (count = 0; count < len; count++) {
 -        if(buff[count] == 10) {
 -          newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
 -          break;
 -        } else {
 -          if (buff[count] == '%') {
 -            newstr[newstr_count++] = buff[count];
 -            newstr[newstr_count] = buff[count];
 -          } else {
 -            newstr[newstr_count] = buff[count];
 -          }
 -        }
 -        newstr_count++;
 -      }
 -
 -      line = lexer->line_number;
 -      lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
 -      raise_lexer_error(newstr, line);
 -    } else {
 -      rb_funcall(listener, rb_intern("eof"), 0);
 -    }
 -  }
 -	break;
 -#line 1183 "ext/gherkin_lexer_cy_gb/gherkin_lexer_cy_gb.c"
 -		}
 -	}
 -
 -_again:
 -	if ( cs == 0 )
 -		goto _out;
 -	if ( ++p != pe )
 -		goto _resume;
 -	_test_eof: {}
 -	if ( p == eof )
 -	{
 -	const char *__acts = _lexer_actions + _lexer_eof_actions[cs];
 -	unsigned int __nacts = (unsigned int) *__acts++;
 -	while ( __nacts-- > 0 ) {
 -		switch ( *__acts++ ) {
 -	case 23:
 -#line 207 "ragel/i18n/cy_gb.c.rl"
 -	{
 -    int line;
 -    if (cs < lexer_first_final) {
 -      size_t count = 0;
 -      VALUE newstr_val;
 -      char *newstr;
 -      int newstr_count = 0;        
 -      size_t len;
 -      const char *buff;
 -      if (lexer->last_newline != 0) {
 -        len = LEN(last_newline, eof);
 -        buff = PTR_TO(last_newline);
 -      } else {
 -        len = strlen(data);
 -        buff = data;
 -      }
 -
 -      /* Allocate as a ruby string so that it gets cleaned up by GC */
 -      newstr_val = rb_str_new(buff, len);
 -      newstr = RSTRING_PTR(newstr_val);
 -
 -
 -      for (count = 0; count < len; count++) {
 -        if(buff[count] == 10) {
 -          newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
 -          break;
 -        } else {
 -          if (buff[count] == '%') {
 -            newstr[newstr_count++] = buff[count];
 -            newstr[newstr_count] = buff[count];
 -          } else {
 -            newstr[newstr_count] = buff[count];
 -          }
 -        }
 -        newstr_count++;
 -      }
 -
 -      line = lexer->line_number;
 -      lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
 -      raise_lexer_error(newstr, line);
 -    } else {
 -      rb_funcall(listener, rb_intern("eof"), 0);
 -    }
 -  }
 -	break;
 -#line 1246 "ext/gherkin_lexer_cy_gb/gherkin_lexer_cy_gb.c"
 -		}
 -	}
 -	}
 -
 -	_out: {}
 -	}
 -
 -#line 426 "ragel/i18n/cy_gb.c.rl"
 -
 -    assert(p <= pe && "data overflow after parsing execute");
 -    assert(lexer->content_start <= len && "content starts after data end");
 -    assert(lexer->mark < len && "mark is after data end");
 -    
 -    /* Reset lexer by re-initializing the whole thing */
 -    lexer_init(lexer);
 -
 -    if (cs == lexer_error) {
 -      rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails.");
 -    } else {
 -      return Qtrue;
 -    }
 -  }
 -}
 -
 -void Init_gherkin_lexer_cy_gb()
 -{
 -  mGherkin = rb_define_module("Gherkin");
 -  mGherkinLexer = rb_define_module_under(mGherkin, "Lexer");
 -  rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError"));
 -
 -  mCLexer = rb_define_module_under(mGherkin, "CLexer");
 -  cI18nLexer = rb_define_class_under(mCLexer, "Cy_gb", rb_cObject);
 -  rb_define_alloc_func(cI18nLexer, CLexer_alloc);
 -  rb_define_method(cI18nLexer, "initialize", CLexer_init, 1);
 -  rb_define_method(cI18nLexer, "scan", CLexer_scan, 1);
 -}
 -
diff --cc ext/gherkin_lexer_da/extconf.rb
index 440e180,440e180..0000000
deleted file mode 100644,100644
--- a/ext/gherkin_lexer_da/extconf.rb
+++ /dev/null
@@@ -1,6 -1,6 +1,0 @@@
--require 'mkmf'
--CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags']
--$CFLAGS << ' -O0 -Wall' if CONFIG['CC'] =~ /gcc|clang/
--dir_config("gherkin_lexer_da")
--have_library("c", "main")
--create_makefile("gherkin_lexer_da")
diff --cc ext/gherkin_lexer_da/gherkin_lexer_da.c
index a3e1739,55e54d1..0000000
deleted file mode 100644,100644
--- a/ext/gherkin_lexer_da/gherkin_lexer_da.c
+++ /dev/null
@@@ -1,1298 -1,1298 +1,0 @@@
--
- #line 1 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/da.c.rl"
- #include <assert.h>
- #include <ruby.h>
- 
- #if defined(_WIN32)
- #include <stddef.h>
- #endif
- 
- #ifdef HAVE_RUBY_RE_H
- #include <ruby/re.h>
- #else
- #include <re.h>
- #endif
- 
- #ifdef HAVE_RUBY_ENCODING_H
- #include <ruby/encoding.h>
- #define ENCODED_STR_NEW(ptr, len) \
-     rb_enc_str_new(ptr, len, rb_utf8_encoding())
- #else
- #define ENCODED_STR_NEW(ptr, len) \
-     rb_str_new(ptr, len)
- #endif
- 
- #ifndef RSTRING_PTR
- #define RSTRING_PTR(s) (RSTRING(s)->ptr)
- #endif
- 
- #ifndef RSTRING_LEN
- #define RSTRING_LEN(s) (RSTRING(s)->len)
- #endif
- 
- #define DATA_GET(FROM, TYPE, NAME) \
-   Data_Get_Struct(FROM, TYPE, NAME); \
-   if (NAME == NULL) { \
-     rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \
-   }
-  
- typedef struct lexer_state {
-   int content_len;
-   int line_number;
-   int current_line;
-   int start_col;
-   size_t mark;
-   size_t keyword_start;
-   size_t keyword_end;
-   size_t next_keyword_start;
-   size_t content_start;
-   size_t content_end;
-   size_t docstring_content_type_start;
-   size_t docstring_content_type_end;
-   size_t query_start;
-   size_t last_newline;
-   size_t final_newline;
- } lexer_state;
- 
- static VALUE mGherkin;
- static VALUE mGherkinLexer;
- static VALUE mCLexer;
- static VALUE cI18nLexer;
- static VALUE rb_eGherkinLexingError;
- 
- #define LEN(AT, P) (P - data - lexer->AT)
- #define MARK(M, P) (lexer->M = (P) - data)
- #define PTR_TO(P) (data + lexer->P)
- 
- #define STORE_KW_END_CON(EVENT) \
-   store_multiline_kw_con(listener, # EVENT, \
-     PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \
-     PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \
-     lexer->current_line, lexer->start_col); \
-     if (lexer->content_end != 0) { \
-       p = PTR_TO(content_end - 1); \
-     } \
-     lexer->content_end = 0
- 
- #define STORE_ATTR(ATTR) \
-     store_attr(listener, # ATTR, \
-       PTR_TO(content_start), LEN(content_start, p), \
-       lexer->line_number)
- 
- 
- #line 254 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/da.c.rl"
- 
- 
- /** Data **/
- 
- #line 89 "ext/gherkin_lexer_da/gherkin_lexer_da.c"
- static const char _lexer_actions[] = {
- 	0, 1, 0, 1, 1, 1, 2, 1, 
- 	3, 1, 4, 1, 5, 1, 6, 1, 
- 	7, 1, 8, 1, 9, 1, 10, 1, 
- 	11, 1, 12, 1, 13, 1, 16, 1, 
- 	17, 1, 18, 1, 19, 1, 20, 1, 
- 	21, 1, 22, 1, 23, 2, 1, 18, 
- 	2, 4, 5, 2, 13, 0, 2, 14, 
- 	15, 2, 17, 0, 2, 17, 2, 2, 
- 	17, 16, 2, 17, 19, 2, 18, 6, 
- 	2, 18, 7, 2, 18, 8, 2, 18, 
- 	9, 2, 18, 10, 2, 18, 16, 2, 
- 	20, 21, 2, 22, 0, 2, 22, 2, 
- 	2, 22, 16, 2, 22, 19, 3, 3, 
- 	14, 15, 3, 5, 14, 15, 3, 11, 
- 	14, 15, 3, 12, 14, 15, 3, 13, 
- 	14, 15, 3, 14, 15, 18, 3, 17, 
- 	0, 11, 3, 17, 14, 15, 4, 1, 
- 	14, 15, 18, 4, 4, 5, 14, 15, 
- 	4, 17, 0, 14, 15, 5, 17, 0, 
- 	11, 14, 15
- };
- 
- static const short _lexer_key_offsets[] = {
- 	0, 0, 19, 20, 21, 39, 40, 41, 
- 	43, 45, 50, 55, 60, 65, 69, 73, 
- 	75, 76, 77, 78, 79, 80, 81, 82, 
- 	83, 84, 85, 86, 87, 88, 89, 90, 
- 	91, 93, 95, 100, 107, 112, 113, 114, 
- 	115, 116, 117, 118, 119, 120, 121, 122, 
- 	123, 124, 125, 126, 127, 128, 129, 130, 
- 	131, 145, 147, 149, 151, 153, 155, 157, 
- 	159, 161, 163, 165, 167, 169, 171, 173, 
- 	175, 193, 194, 195, 196, 197, 198, 199, 
- 	200, 201, 202, 203, 218, 220, 222, 224, 
- 	226, 228, 230, 232, 234, 236, 238, 240, 
- 	242, 244, 246, 248, 250, 252, 254, 256, 
- 	258, 260, 262, 264, 266, 268, 270, 272, 
- 	274, 276, 278, 280, 282, 284, 286, 288, 
- 	290, 292, 294, 296, 298, 300, 302, 304, 
- 	306, 308, 310, 312, 314, 316, 319, 321, 
- 	323, 325, 327, 329, 331, 333, 335, 336, 
- 	337, 338, 339, 340, 341, 342, 343, 344, 
- 	355, 357, 359, 361, 363, 365, 367, 369, 
- 	371, 373, 375, 377, 379, 381, 383, 385, 
- 	387, 389, 391, 393, 395, 397, 399, 401, 
- 	403, 405, 407, 409, 411, 413, 415, 417, 
- 	419, 421, 423, 425, 427, 429, 431, 434, 
- 	436, 438, 440, 442, 444, 446, 448, 450, 
- 	452, 454, 456, 458, 460, 462, 464, 466, 
- 	468, 470, 472, 474, 475, 476, 477, 478, 
- 	479, 480, 481, 482, 483, 484, 491, 493, 
- 	495, 497, 499, 501, 503, 505, 507, 508, 
- 	509, 510, 511, 512, 513, 514, 515, 516, 
- 	517, 519, 520, 521, 522, 523, 524, 525, 
- 	526, 527, 528, 529, 545, 547, 549, 551, 
- 	553, 555, 557, 559, 561, 563, 565, 567, 
- 	569, 571, 573, 575, 577, 579, 581, 583, 
- 	585, 587, 589, 591, 593, 595, 597, 599, 
- 	601, 603, 605, 607, 609, 611, 613, 615, 
- 	617, 619, 621, 623, 625, 627, 629, 631, 
- 	633, 635, 637, 639, 641, 643, 645, 647, 
- 	649, 651, 653, 655, 657, 660, 662, 664, 
- 	666, 668, 670, 672, 674, 678, 684, 687, 
- 	689, 695, 713, 715, 717, 719, 721, 723, 
- 	725, 727, 729, 731, 733, 735, 737, 739, 
- 	741, 743, 745, 747, 749, 752, 754, 756, 
- 	758, 760, 762, 764, 766
- };
- 
- static const char _lexer_trans_keys[] = {
- 	-17, 10, 32, 34, 35, 37, 42, 64, 
- 	65, 66, 69, 71, 77, 78, 79, 83, 
- 	124, 9, 13, -69, -65, 10, 32, 34, 
- 	35, 37, 42, 64, 65, 66, 69, 71, 
- 	77, 78, 79, 83, 124, 9, 13, 34, 
- 	34, 10, 13, 10, 13, 10, 32, 34, 
- 	9, 13, 10, 32, 34, 9, 13, 10, 
- 	32, 34, 9, 13, 10, 32, 34, 9, 
- 	13, 10, 32, 9, 13, 10, 32, 9, 
- 	13, 10, 13, 10, 95, 70, 69, 65, 
- 	84, 85, 82, 69, 95, 69, 78, 68, 
- 	95, 37, 32, 10, 13, 10, 13, 13, 
- 	32, 64, 9, 10, 9, 10, 13, 32, 
- 	64, 11, 12, 10, 32, 64, 9, 13, 
- 	98, 115, 116, 114, 97, 107, 116, 32, 
- 	83, 99, 101, 110, 97, 114, 105, 111, 
- 	58, 10, 10, 10, 32, 35, 37, 42, 
- 	64, 69, 71, 77, 78, 79, 83, 9, 
- 	13, 10, 95, 10, 70, 10, 69, 10, 
- 	65, 10, 84, 10, 85, 10, 82, 10, 
- 	69, 10, 95, 10, 69, 10, 78, 10, 
- 	68, 10, 95, 10, 37, 10, 32, 10, 
- 	32, 34, 35, 37, 42, 64, 65, 66, 
- 	69, 71, 77, 78, 79, 83, 124, 9, 
- 	13, 97, 103, 103, 114, 117, 110, 100, 
- 	58, 10, 10, 10, 32, 35, 37, 42, 
- 	64, 65, 69, 71, 77, 78, 79, 83, 
- 	9, 13, 10, 95, 10, 70, 10, 69, 
- 	10, 65, 10, 84, 10, 85, 10, 82, 
- 	10, 69, 10, 95, 10, 69, 10, 78, 
- 	10, 68, 10, 95, 10, 37, 10, 32, 
- 	10, 98, 10, 115, 10, 116, 10, 114, 
- 	10, 97, 10, 107, 10, 116, 10, 32, 
- 	10, 83, 10, 99, 10, 101, 10, 110, 
- 	10, 97, 10, 114, 10, 105, 10, 111, 
- 	10, 58, 10, 103, 10, 101, 10, 110, 
- 	10, 115, 10, 107, 10, 97, 10, 98, 
- 	10, 105, 10, 118, 10, 101, 10, 116, 
- 	10, 101, 10, 110, -61, 10, -91, 10, 
- 	10, 114, 10, 103, -61, 10, 99, -91, 
- 	10, 10, 101, 10, 110, 10, 97, 10, 
- 	114, 10, 105, 10, 101, 103, 107, 101, 
- 	110, 115, 107, 97, 98, 58, 10, 10, 
- 	10, 32, 35, 37, 64, 65, 66, 69, 
- 	83, 9, 13, 10, 95, 10, 70, 10, 
- 	69, 10, 65, 10, 84, 10, 85, 10, 
- 	82, 10, 69, 10, 95, 10, 69, 10, 
- 	78, 10, 68, 10, 95, 10, 37, 10, 
- 	98, 10, 115, 10, 116, 10, 114, 10, 
- 	97, 10, 107, 10, 116, 10, 32, 10, 
- 	83, 10, 99, 10, 101, 10, 110, 10, 
- 	97, 10, 114, 10, 105, 10, 111, 10, 
- 	58, 10, 97, 10, 103, 10, 103, 10, 
- 	114, 10, 117, 10, 110, 10, 100, 10, 
- 	103, 107, 10, 101, 10, 110, 10, 115, 
- 	10, 107, 10, 97, 10, 98, 10, 115, 
- 	10, 101, 10, 109, 10, 112, 10, 108, 
- 	10, 101, 10, 114, 10, 99, 10, 101, 
- 	10, 110, 10, 97, 10, 114, 10, 105, 
- 	10, 101, 115, 101, 109, 112, 108, 101, 
- 	114, 58, 10, 10, 10, 32, 35, 69, 
- 	124, 9, 13, 10, 103, 10, 101, 10, 
- 	110, 10, 115, 10, 107, 10, 97, 10, 
- 	98, 10, 58, 105, 118, 101, 116, 101, 
- 	110, -61, -91, 114, 103, -61, 99, -91, 
- 	101, 110, 97, 114, 105, 101, 58, 10, 
- 	10, 10, 32, 35, 37, 42, 64, 65, 
- 	66, 69, 71, 77, 78, 79, 83, 9, 
- 	13, 10, 95, 10, 70, 10, 69, 10, 
- 	65, 10, 84, 10, 85, 10, 82, 10, 
- 	69, 10, 95, 10, 69, 10, 78, 10, 
- 	68, 10, 95, 10, 37, 10, 32, 10, 
- 	98, 10, 115, 10, 116, 10, 114, 10, 
- 	97, 10, 107, 10, 116, 10, 32, 10, 
- 	83, 10, 99, 10, 101, 10, 110, 10, 
- 	97, 10, 114, 10, 105, 10, 111, 10, 
- 	58, 10, 97, 10, 103, 10, 103, 10, 
- 	114, 10, 117, 10, 110, 10, 100, 10, 
- 	103, 10, 101, 10, 110, 10, 115, 10, 
- 	107, 10, 97, 10, 98, 10, 105, 10, 
- 	118, 10, 101, 10, 116, 10, 101, 10, 
- 	110, -61, 10, -91, 10, 10, 114, 10, 
- 	103, -61, 10, 99, -91, 10, 10, 101, 
- 	10, 110, 10, 97, 10, 114, 10, 105, 
- 	10, 101, 32, 124, 9, 13, 10, 32, 
- 	92, 124, 9, 13, 10, 92, 124, 10, 
- 	92, 10, 32, 92, 124, 9, 13, 10, 
- 	32, 34, 35, 37, 42, 64, 65, 66, 
- 	69, 71, 77, 78, 79, 83, 124, 9, 
- 	13, 10, 103, 10, 101, 10, 110, 10, 
- 	115, 10, 107, 10, 97, 10, 98, 10, 
- 	58, 10, 105, 10, 118, 10, 101, 10, 
- 	116, 10, 101, 10, 110, -61, 10, -91, 
- 	10, 10, 114, 10, 103, -61, 10, 99, 
- 	-91, 10, 10, 101, 10, 110, 10, 97, 
- 	10, 114, 10, 105, 10, 101, 0
- };
- 
- static const char _lexer_single_lengths[] = {
- 	0, 17, 1, 1, 16, 1, 1, 2, 
- 	2, 3, 3, 3, 3, 2, 2, 2, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	2, 2, 3, 5, 3, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	12, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	16, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 13, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 3, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 9, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 3, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 5, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	2, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 14, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 3, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 4, 3, 2, 
- 	4, 16, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 3, 2, 2, 2, 
- 	2, 2, 2, 2, 0
- };
- 
- static const char _lexer_range_lengths[] = {
- 	0, 1, 0, 0, 1, 0, 0, 0, 
- 	0, 1, 1, 1, 1, 1, 1, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 1, 1, 1, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	1, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	1, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 1, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 1, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 1, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 1, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 1, 1, 0, 0, 
- 	1, 1, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0
- };
- 
- static const short _lexer_index_offsets[] = {
- 	0, 0, 19, 21, 23, 41, 43, 45, 
- 	48, 51, 56, 61, 66, 71, 75, 79, 
- 	82, 84, 86, 88, 90, 92, 94, 96, 
- 	98, 100, 102, 104, 106, 108, 110, 112, 
- 	114, 117, 120, 125, 132, 137, 139, 141, 
- 	143, 145, 147, 149, 151, 153, 155, 157, 
- 	159, 161, 163, 165, 167, 169, 171, 173, 
- 	175, 189, 192, 195, 198, 201, 204, 207, 
- 	210, 213, 216, 219, 222, 225, 228, 231, 
- 	234, 252, 254, 256, 258, 260, 262, 264, 
- 	266, 268, 270, 272, 287, 290, 293, 296, 
- 	299, 302, 305, 308, 311, 314, 317, 320, 
- 	323, 326, 329, 332, 335, 338, 341, 344, 
- 	347, 350, 353, 356, 359, 362, 365, 368, 
- 	371, 374, 377, 380, 383, 386, 389, 392, 
- 	395, 398, 401, 404, 407, 410, 413, 416, 
- 	419, 422, 425, 428, 431, 434, 438, 441, 
- 	444, 447, 450, 453, 456, 459, 462, 464, 
- 	466, 468, 470, 472, 474, 476, 478, 480, 
- 	491, 494, 497, 500, 503, 506, 509, 512, 
- 	515, 518, 521, 524, 527, 530, 533, 536, 
- 	539, 542, 545, 548, 551, 554, 557, 560, 
- 	563, 566, 569, 572, 575, 578, 581, 584, 
- 	587, 590, 593, 596, 599, 602, 605, 609, 
- 	612, 615, 618, 621, 624, 627, 630, 633, 
- 	636, 639, 642, 645, 648, 651, 654, 657, 
- 	660, 663, 666, 669, 671, 673, 675, 677, 
- 	679, 681, 683, 685, 687, 689, 696, 699, 
- 	702, 705, 708, 711, 714, 717, 720, 722, 
- 	724, 726, 728, 730, 732, 734, 736, 738, 
- 	740, 743, 745, 747, 749, 751, 753, 755, 
- 	757, 759, 761, 763, 779, 782, 785, 788, 
- 	791, 794, 797, 800, 803, 806, 809, 812, 
- 	815, 818, 821, 824, 827, 830, 833, 836, 
- 	839, 842, 845, 848, 851, 854, 857, 860, 
- 	863, 866, 869, 872, 875, 878, 881, 884, 
- 	887, 890, 893, 896, 899, 902, 905, 908, 
- 	911, 914, 917, 920, 923, 926, 929, 932, 
- 	935, 938, 941, 944, 947, 951, 954, 957, 
- 	960, 963, 966, 969, 972, 976, 982, 986, 
- 	989, 995, 1013, 1016, 1019, 1022, 1025, 1028, 
- 	1031, 1034, 1037, 1040, 1043, 1046, 1049, 1052, 
- 	1055, 1058, 1061, 1064, 1067, 1071, 1074, 1077, 
- 	1080, 1083, 1086, 1089, 1092
- };
- 
- static const short _lexer_trans_targs[] = {
- 	2, 4, 4, 5, 15, 17, 31, 34, 
- 	37, 73, 141, 230, 234, 236, 239, 240, 
- 	316, 4, 0, 3, 0, 4, 0, 4, 
- 	4, 5, 15, 17, 31, 34, 37, 73, 
- 	141, 230, 234, 236, 239, 240, 316, 4, 
- 	0, 6, 0, 7, 0, 9, 8, 8, 
- 	9, 8, 8, 10, 10, 11, 10, 10, 
- 	10, 10, 11, 10, 10, 10, 10, 12, 
- 	10, 10, 10, 10, 13, 10, 10, 4, 
- 	14, 14, 0, 4, 14, 14, 0, 4, 
- 	16, 15, 4, 0, 18, 0, 19, 0, 
- 	20, 0, 21, 0, 22, 0, 23, 0, 
- 	24, 0, 25, 0, 26, 0, 27, 0, 
- 	28, 0, 29, 0, 30, 0, 348, 0, 
- 	32, 0, 4, 16, 33, 4, 16, 33, 
- 	0, 0, 0, 0, 35, 36, 4, 36, 
- 	36, 34, 35, 35, 4, 36, 34, 36, 
- 	0, 38, 0, 39, 0, 40, 0, 41, 
- 	0, 42, 0, 43, 0, 44, 0, 45, 
- 	0, 46, 0, 47, 0, 48, 0, 49, 
- 	0, 50, 0, 51, 0, 52, 0, 53, 
- 	0, 54, 0, 56, 55, 56, 55, 56, 
- 	56, 4, 57, 71, 4, 322, 330, 334, 
- 	336, 339, 340, 56, 55, 56, 58, 55, 
- 	56, 59, 55, 56, 60, 55, 56, 61, 
- 	55, 56, 62, 55, 56, 63, 55, 56, 
- 	64, 55, 56, 65, 55, 56, 66, 55, 
- 	56, 67, 55, 56, 68, 55, 56, 69, 
- 	55, 56, 70, 55, 56, 4, 55, 56, 
- 	72, 55, 4, 4, 5, 15, 17, 31, 
- 	34, 37, 73, 141, 230, 234, 236, 239, 
- 	240, 316, 4, 0, 74, 0, 75, 0, 
- 	76, 0, 77, 0, 78, 0, 79, 0, 
- 	80, 0, 81, 0, 83, 82, 83, 82, 
- 	83, 83, 4, 84, 98, 4, 99, 116, 
- 	123, 127, 129, 132, 133, 83, 82, 83, 
- 	85, 82, 83, 86, 82, 83, 87, 82, 
- 	83, 88, 82, 83, 89, 82, 83, 90, 
- 	82, 83, 91, 82, 83, 92, 82, 83, 
- 	93, 82, 83, 94, 82, 83, 95, 82, 
- 	83, 96, 82, 83, 97, 82, 83, 4, 
- 	82, 83, 72, 82, 83, 100, 82, 83, 
- 	101, 82, 83, 102, 82, 83, 103, 82, 
- 	83, 104, 82, 83, 105, 82, 83, 106, 
- 	82, 83, 107, 82, 83, 108, 82, 83, 
- 	109, 82, 83, 110, 82, 83, 111, 82, 
- 	83, 112, 82, 83, 113, 82, 83, 114, 
- 	82, 83, 115, 82, 83, 72, 82, 83, 
- 	117, 82, 83, 118, 82, 83, 119, 82, 
- 	83, 120, 82, 83, 121, 82, 83, 122, 
- 	82, 83, 115, 82, 83, 124, 82, 83, 
- 	125, 82, 83, 126, 82, 83, 98, 82, 
- 	83, 128, 82, 83, 98, 82, 130, 83, 
- 	82, 131, 83, 82, 83, 98, 82, 83, 
- 	98, 82, 134, 83, 135, 82, 98, 83, 
- 	82, 83, 136, 82, 83, 137, 82, 83, 
- 	138, 82, 83, 139, 82, 83, 140, 82, 
- 	83, 115, 82, 142, 211, 0, 143, 0, 
- 	144, 0, 145, 0, 146, 0, 147, 0, 
- 	148, 0, 149, 0, 151, 150, 151, 150, 
- 	151, 151, 4, 152, 4, 166, 183, 190, 
- 	204, 151, 150, 151, 153, 150, 151, 154, 
- 	150, 151, 155, 150, 151, 156, 150, 151, 
- 	157, 150, 151, 158, 150, 151, 159, 150, 
- 	151, 160, 150, 151, 161, 150, 151, 162, 
- 	150, 151, 163, 150, 151, 164, 150, 151, 
- 	165, 150, 151, 4, 150, 151, 167, 150, 
- 	151, 168, 150, 151, 169, 150, 151, 170, 
- 	150, 151, 171, 150, 151, 172, 150, 151, 
- 	173, 150, 151, 174, 150, 151, 175, 150, 
- 	151, 176, 150, 151, 177, 150, 151, 178, 
- 	150, 151, 179, 150, 151, 180, 150, 151, 
- 	181, 150, 151, 182, 150, 151, 72, 150, 
- 	151, 184, 150, 151, 185, 150, 151, 186, 
- 	150, 151, 187, 150, 151, 188, 150, 151, 
- 	189, 150, 151, 182, 150, 151, 191, 197, 
- 	150, 151, 192, 150, 151, 193, 150, 151, 
- 	194, 150, 151, 195, 150, 151, 196, 150, 
- 	151, 182, 150, 151, 198, 150, 151, 199, 
- 	150, 151, 200, 150, 151, 201, 150, 151, 
- 	202, 150, 151, 203, 150, 151, 182, 150, 
- 	151, 205, 150, 151, 206, 150, 151, 207, 
- 	150, 151, 208, 150, 151, 209, 150, 151, 
- 	210, 150, 151, 182, 150, 212, 0, 213, 
- 	0, 214, 0, 215, 0, 216, 0, 217, 
- 	0, 218, 0, 219, 0, 221, 220, 221, 
- 	220, 221, 221, 4, 222, 4, 221, 220, 
- 	221, 223, 220, 221, 224, 220, 221, 225, 
- 	220, 221, 226, 220, 221, 227, 220, 221, 
- 	228, 220, 221, 229, 220, 221, 72, 220, 
- 	231, 0, 232, 0, 233, 0, 31, 0, 
- 	235, 0, 31, 0, 237, 0, 238, 0, 
- 	31, 0, 31, 0, 241, 242, 0, 31, 
- 	0, 243, 0, 244, 0, 245, 0, 246, 
- 	0, 247, 0, 248, 0, 249, 0, 251, 
- 	250, 251, 250, 251, 251, 4, 252, 266, 
- 	4, 267, 284, 291, 298, 302, 304, 307, 
- 	308, 251, 250, 251, 253, 250, 251, 254, 
- 	250, 251, 255, 250, 251, 256, 250, 251, 
- 	257, 250, 251, 258, 250, 251, 259, 250, 
- 	251, 260, 250, 251, 261, 250, 251, 262, 
- 	250, 251, 263, 250, 251, 264, 250, 251, 
- 	265, 250, 251, 4, 250, 251, 72, 250, 
- 	251, 268, 250, 251, 269, 250, 251, 270, 
- 	250, 251, 271, 250, 251, 272, 250, 251, 
- 	273, 250, 251, 274, 250, 251, 275, 250, 
- 	251, 276, 250, 251, 277, 250, 251, 278, 
- 	250, 251, 279, 250, 251, 280, 250, 251, 
- 	281, 250, 251, 282, 250, 251, 283, 250, 
- 	251, 72, 250, 251, 285, 250, 251, 286, 
- 	250, 251, 287, 250, 251, 288, 250, 251, 
- 	289, 250, 251, 290, 250, 251, 283, 250, 
- 	251, 292, 250, 251, 293, 250, 251, 294, 
- 	250, 251, 295, 250, 251, 296, 250, 251, 
- 	297, 250, 251, 283, 250, 251, 299, 250, 
- 	251, 300, 250, 251, 301, 250, 251, 266, 
- 	250, 251, 303, 250, 251, 266, 250, 305, 
- 	251, 250, 306, 251, 250, 251, 266, 250, 
- 	251, 266, 250, 309, 251, 310, 250, 266, 
- 	251, 250, 251, 311, 250, 251, 312, 250, 
- 	251, 313, 250, 251, 314, 250, 251, 315, 
- 	250, 251, 283, 250, 316, 317, 316, 0, 
- 	321, 320, 319, 317, 320, 318, 0, 319, 
- 	317, 318, 0, 319, 318, 321, 320, 319, 
- 	317, 320, 318, 321, 321, 5, 15, 17, 
- 	31, 34, 37, 73, 141, 230, 234, 236, 
- 	239, 240, 316, 321, 0, 56, 323, 55, 
- 	56, 324, 55, 56, 325, 55, 56, 326, 
- 	55, 56, 327, 55, 56, 328, 55, 56, 
- 	329, 55, 56, 72, 55, 56, 331, 55, 
- 	56, 332, 55, 56, 333, 55, 56, 71, 
- 	55, 56, 335, 55, 56, 71, 55, 337, 
- 	56, 55, 338, 56, 55, 56, 71, 55, 
- 	56, 71, 55, 341, 56, 342, 55, 71, 
- 	56, 55, 56, 343, 55, 56, 344, 55, 
- 	56, 345, 55, 56, 346, 55, 56, 347, 
- 	55, 56, 329, 55, 0, 0
- };
- 
- static const unsigned char _lexer_trans_actions[] = {
- 	0, 54, 0, 5, 1, 0, 29, 1, 
- 	29, 29, 29, 29, 29, 29, 29, 29, 
- 	35, 0, 43, 0, 43, 0, 43, 54, 
- 	0, 5, 1, 0, 29, 1, 29, 29, 
- 	29, 29, 29, 29, 29, 29, 35, 0, 
- 	43, 0, 43, 0, 43, 139, 48, 9, 
- 	106, 11, 0, 134, 45, 45, 45, 3, 
- 	122, 33, 33, 33, 0, 122, 33, 33, 
- 	33, 0, 122, 33, 0, 33, 0, 102, 
- 	7, 7, 43, 54, 0, 0, 43, 114, 
- 	25, 0, 54, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 149, 126, 57, 110, 23, 0, 
- 	43, 43, 43, 43, 0, 27, 118, 27, 
- 	27, 51, 27, 0, 54, 0, 1, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 144, 57, 54, 0, 54, 
- 	0, 78, 33, 84, 78, 84, 84, 84, 
- 	84, 84, 84, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 19, 0, 54, 
- 	19, 0, 130, 31, 60, 57, 31, 63, 
- 	57, 63, 63, 63, 63, 63, 63, 63, 
- 	63, 66, 31, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 144, 57, 54, 0, 
- 	54, 0, 72, 33, 84, 72, 84, 84, 
- 	84, 84, 84, 84, 84, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 15, 
- 	0, 54, 15, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 15, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 0, 54, 
- 	0, 0, 54, 0, 54, 0, 0, 54, 
- 	0, 0, 0, 54, 0, 0, 0, 54, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 0, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 144, 57, 54, 0, 
- 	54, 0, 69, 33, 69, 84, 84, 84, 
- 	84, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 13, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 13, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 144, 57, 54, 
- 	0, 54, 0, 81, 84, 81, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 21, 0, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 144, 
- 	57, 54, 0, 54, 0, 75, 33, 84, 
- 	75, 84, 84, 84, 84, 84, 84, 84, 
- 	84, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 17, 0, 54, 17, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 17, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 0, 
- 	54, 0, 0, 54, 0, 54, 0, 0, 
- 	54, 0, 0, 0, 54, 0, 0, 0, 
- 	54, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 0, 0, 0, 43, 
- 	54, 37, 37, 87, 37, 37, 43, 0, 
- 	39, 0, 43, 0, 0, 54, 0, 0, 
- 	39, 0, 0, 54, 0, 93, 90, 41, 
- 	96, 90, 96, 96, 96, 96, 96, 96, 
- 	96, 96, 99, 0, 43, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 19, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 0, 
- 	54, 0, 0, 54, 0, 54, 0, 0, 
- 	54, 0, 0, 0, 54, 0, 0, 0, 
- 	54, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 0, 0
- };
- 
- static const unsigned char _lexer_eof_actions[] = {
- 	0, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43
- };
- 
- static const int lexer_start = 1;
- static const int lexer_first_final = 348;
- static const int lexer_error = 0;
- 
- static const int lexer_en_main = 1;
- 
- 
- #line 258 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/da.c.rl"
- 
- static VALUE 
- unindent(VALUE con, int start_col)
- {
-   VALUE re;
-   // Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters
-   char pat[32]; 
-   snprintf(pat, 32, "^[\t ]{0,%d}", start_col); 
-   re = rb_reg_regcomp(rb_str_new2(pat));
-   rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2(""));
- 
-   return Qnil;
- 
- }
- 
- static void 
- store_kw_con(VALUE listener, const char * event_name, 
-              const char * keyword_at, size_t keyword_length, 
-              const char * at,         size_t length, 
-              int current_line)
- {
-   VALUE con = Qnil, kw = Qnil;
-   kw = ENCODED_STR_NEW(keyword_at, keyword_length);
-   con = ENCODED_STR_NEW(at, length);
-   rb_funcall(con, rb_intern("strip!"), 0);
-   rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); 
- }
- 
- static void
- store_multiline_kw_con(VALUE listener, const char * event_name,
-                       const char * keyword_at, size_t keyword_length,
-                       const char * at,         size_t length,
-                       int current_line, int start_col)
- {
-   VALUE split;
-   VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil;
- 
-   kw = ENCODED_STR_NEW(keyword_at, keyword_length);
-   con = ENCODED_STR_NEW(at, length);
- 
-   unindent(con, start_col);
-   
-   split = rb_str_split(con, "\n");
- 
-   name = rb_funcall(split, rb_intern("shift"), 0);
-   desc = rb_ary_join(split, rb_str_new2( "\n" ));
- 
-   if( name == Qnil ) 
-   {
-     name = rb_str_new2("");
-   }
-   if( rb_funcall(desc, rb_intern("size"), 0) == 0) 
-   {
-     desc = rb_str_new2("");
-   }
-   rb_funcall(name, rb_intern("strip!"), 0);
-   rb_funcall(desc, rb_intern("rstrip!"), 0);
-   rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); 
- }
- 
- static void 
- store_attr(VALUE listener, const char * attr_type,
-            const char * at, size_t length, 
-            int line)
- {
-   VALUE val = ENCODED_STR_NEW(at, length);
-   rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line));
- }
- static void 
- store_docstring_content(VALUE listener, 
-           int start_col, 
-           const char *type_at, size_t type_length,
-           const char *at, size_t length, 
-           int current_line)
- {
-   VALUE re2;
-   VALUE unescape_escaped_quotes;
-   VALUE con = ENCODED_STR_NEW(at, length);
-   VALUE con_type = ENCODED_STR_NEW(type_at, type_length);
- 
-   unindent(con, start_col);
- 
-   re2 = rb_reg_regcomp(rb_str_new2("\r\\Z"));
-   unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\""));
-   rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2(""));
-   rb_funcall(con_type, rb_intern("strip!"), 0);
-   rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\""));
-   rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line));
- }
- static void 
- raise_lexer_error(const char * at, int line)
- { 
-   rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at);
- }
- 
- static void lexer_init(lexer_state *lexer) {
-   lexer->content_start = 0;
-   lexer->content_end = 0;
-   lexer->content_len = 0;
-   lexer->docstring_content_type_start = 0;
-   lexer->docstring_content_type_end = 0;
-   lexer->mark = 0;
-   lexer->keyword_start = 0;
-   lexer->keyword_end = 0;
-   lexer->next_keyword_start = 0;
-   lexer->line_number = 1;
-   lexer->last_newline = 0;
-   lexer->final_newline = 0;
-   lexer->start_col = 0;
- }
- 
- static VALUE CLexer_alloc(VALUE klass)
- {
-   VALUE obj;
-   lexer_state *lxr = ALLOC(lexer_state);
-   lexer_init(lxr);
- 
-   obj = Data_Wrap_Struct(klass, NULL, -1, lxr);
- 
-   return obj;
- }
- 
- static VALUE CLexer_init(VALUE self, VALUE listener)
- {
-   lexer_state *lxr; 
-   rb_iv_set(self, "@listener", listener);
-   
-   lxr = NULL;
-   DATA_GET(self, lexer_state, lxr);
-   lexer_init(lxr);
-   
-   return self;
- }
- 
- static VALUE CLexer_scan(VALUE self, VALUE input)
- {
-   VALUE input_copy;
-   char *data;
-   size_t len;
-   VALUE listener = rb_iv_get(self, "@listener");
- 
-   lexer_state *lexer;
-   lexer = NULL;
-   DATA_GET(self, lexer_state, lexer);
- 
-   input_copy = rb_str_dup(input);
- 
-   rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%"));
-   data = RSTRING_PTR(input_copy);
-   len = RSTRING_LEN(input_copy);
-   
-   if (len == 0) { 
-     rb_raise(rb_eGherkinLexingError, "No content to lex.");
-   } else {
- 
-     const char *p, *pe, *eof;
-     int cs = 0;
-     
-     VALUE current_row = Qnil;
- 
-     p = data;
-     pe = data + len;
-     eof = pe;
-     
-     assert(*pe == '\0' && "pointer does not end on NULL");
-     
-     
- #line 902 "ext/gherkin_lexer_da/gherkin_lexer_da.c"
- 	{
- 	cs = lexer_start;
- 	}
- 
- #line 425 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/da.c.rl"
-     
- #line 909 "ext/gherkin_lexer_da/gherkin_lexer_da.c"
- 	{
- 	int _klen;
- 	unsigned int _trans;
- 	const char *_acts;
- 	unsigned int _nacts;
- 	const char *_keys;
- 
- 	if ( p == pe )
- 		goto _test_eof;
- 	if ( cs == 0 )
- 		goto _out;
- _resume:
- 	_keys = _lexer_trans_keys + _lexer_key_offsets[cs];
- 	_trans = _lexer_index_offsets[cs];
- 
- 	_klen = _lexer_single_lengths[cs];
- 	if ( _klen > 0 ) {
- 		const char *_lower = _keys;
- 		const char *_mid;
- 		const char *_upper = _keys + _klen - 1;
- 		while (1) {
- 			if ( _upper < _lower )
- 				break;
- 
- 			_mid = _lower + ((_upper-_lower) >> 1);
- 			if ( (*p) < *_mid )
- 				_upper = _mid - 1;
- 			else if ( (*p) > *_mid )
- 				_lower = _mid + 1;
- 			else {
- 				_trans += (_mid - _keys);
- 				goto _match;
- 			}
- 		}
- 		_keys += _klen;
- 		_trans += _klen;
- 	}
- 
- 	_klen = _lexer_range_lengths[cs];
- 	if ( _klen > 0 ) {
- 		const char *_lower = _keys;
- 		const char *_mid;
- 		const char *_upper = _keys + (_klen<<1) - 2;
- 		while (1) {
- 			if ( _upper < _lower )
- 				break;
- 
- 			_mid = _lower + (((_upper-_lower) >> 1) & ~1);
- 			if ( (*p) < _mid[0] )
- 				_upper = _mid - 2;
- 			else if ( (*p) > _mid[1] )
- 				_lower = _mid + 2;
- 			else {
- 				_trans += ((_mid - _keys)>>1);
- 				goto _match;
- 			}
- 		}
- 		_trans += _klen;
- 	}
- 
- _match:
- 	cs = _lexer_trans_targs[_trans];
- 
- 	if ( _lexer_trans_actions[_trans] == 0 )
- 		goto _again;
- 
- 	_acts = _lexer_actions + _lexer_trans_actions[_trans];
- 	_nacts = (unsigned int) *_acts++;
- 	while ( _nacts-- > 0 )
- 	{
- 		switch ( *_acts++ )
- 		{
- 	case 0:
- #line 83 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/da.c.rl"
- 	{
- 		MARK(content_start, p);
-     lexer->current_line = lexer->line_number;
-     lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2;
-   }
- 	break;
- 	case 1:
- #line 89 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/da.c.rl"
- 	{
-     MARK(content_start, p);
-   }
- 	break;
- 	case 2:
- #line 93 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/da.c.rl"
- 	{
-     lexer->current_line = lexer->line_number;
-     lexer->start_col = p - data - lexer->last_newline;
-   }
- 	break;
- 	case 3:
- #line 98 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/da.c.rl"
- 	{
-     int len = LEN(content_start, PTR_TO(final_newline));
-     int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end));
- 
-     if (len < 0) len = 0;
-     if (type_len < 0) len = 0;
- 
-     store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line);
-   }
- 	break;
- 	case 4:
- #line 108 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/da.c.rl"
- 	{ 
-     MARK(docstring_content_type_start, p);
-   }
- 	break;
- 	case 5:
- #line 112 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/da.c.rl"
- 	{ 
-     MARK(docstring_content_type_end, p);
-   }
- 	break;
- 	case 6:
- #line 116 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/da.c.rl"
- 	{
-     STORE_KW_END_CON(feature);
-   }
- 	break;
- 	case 7:
- #line 120 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/da.c.rl"
- 	{
-     STORE_KW_END_CON(background);
-   }
- 	break;
- 	case 8:
- #line 124 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/da.c.rl"
- 	{
-     STORE_KW_END_CON(scenario);
-   }
- 	break;
- 	case 9:
- #line 128 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/da.c.rl"
- 	{
-     STORE_KW_END_CON(scenario_outline);
-   }
- 	break;
- 	case 10:
- #line 132 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/da.c.rl"
- 	{
-     STORE_KW_END_CON(examples);
-   }
- 	break;
- 	case 11:
- #line 136 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/da.c.rl"
- 	{
-     store_kw_con(listener, "step",
-       PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-       PTR_TO(content_start), LEN(content_start, p), 
-       lexer->current_line);
-   }
- 	break;
- 	case 12:
- #line 143 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/da.c.rl"
- 	{
-     STORE_ATTR(comment);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 13:
- #line 148 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/da.c.rl"
- 	{
-     STORE_ATTR(tag);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 14:
- #line 153 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/da.c.rl"
- 	{
-     lexer->line_number += 1;
-     MARK(final_newline, p);
-   }
- 	break;
- 	case 15:
- #line 158 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/da.c.rl"
- 	{
-     MARK(last_newline, p + 1);
-   }
- 	break;
- 	case 16:
- #line 162 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/da.c.rl"
- 	{
-     if (lexer->mark == 0) {
-       MARK(mark, p);
-     }
-   }
- 	break;
- 	case 17:
- #line 168 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/da.c.rl"
- 	{
-     MARK(keyword_end, p);
-     MARK(keyword_start, PTR_TO(mark));
-     MARK(content_start, p + 1);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 18:
- #line 175 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/da.c.rl"
- 	{
-     MARK(content_end, p);
-   }
- 	break;
- 	case 19:
- #line 179 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/da.c.rl"
- 	{
-     p = p - 1;
-     lexer->current_line = lexer->line_number;
-     current_row = rb_ary_new();
-   }
- 	break;
- 	case 20:
- #line 185 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/da.c.rl"
- 	{
- 		MARK(content_start, p);
-   }
- 	break;
- 	case 21:
- #line 189 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/da.c.rl"
- 	{
-     VALUE re_pipe, re_newline, re_backslash;
-     VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
-     rb_funcall(con, rb_intern("strip!"), 0);
-     re_pipe      = rb_reg_regcomp(rb_str_new2("\\\\\\|"));
-     re_newline   = rb_reg_regcomp(rb_str_new2("\\\\n"));
-     re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_pipe,      rb_str_new2("|"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_newline,   rb_str_new2("\n"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\"));
- 
-     rb_ary_push(current_row, con);
-   }
- 	break;
- 	case 22:
- #line 203 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/da.c.rl"
- 	{
-     rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
-   }
- 	break;
- 	case 23:
- #line 207 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/da.c.rl"
- 	{
-     int line;
-     if (cs < lexer_first_final) {
-       size_t count = 0;
-       VALUE newstr_val;
-       char *newstr;
-       int newstr_count = 0;        
-       size_t len;
-       const char *buff;
-       if (lexer->last_newline != 0) {
-         len = LEN(last_newline, eof);
-         buff = PTR_TO(last_newline);
-       } else {
-         len = strlen(data);
-         buff = data;
-       }
- 
-       // Allocate as a ruby string so that it gets cleaned up by GC
-       newstr_val = rb_str_new(buff, len);
-       newstr = RSTRING_PTR(newstr_val);
- 
- 
-       for (count = 0; count < len; count++) {
-         if(buff[count] == 10) {
-           newstr[newstr_count] = '\0'; // terminate new string at first newline found
-           break;
-         } else {
-           if (buff[count] == '%') {
-             newstr[newstr_count++] = buff[count];
-             newstr[newstr_count] = buff[count];
-           } else {
-             newstr[newstr_count] = buff[count];
-           }
-         }
-         newstr_count++;
-       }
- 
-       line = lexer->line_number;
-       lexer_init(lexer); // Re-initialize so we can scan again with the same lexer
-       raise_lexer_error(newstr, line);
-     } else {
-       rb_funcall(listener, rb_intern("eof"), 0);
-     }
-   }
- 	break;
- #line 1199 "ext/gherkin_lexer_da/gherkin_lexer_da.c"
- 		}
- 	}
- 
- _again:
- 	if ( cs == 0 )
- 		goto _out;
- 	if ( ++p != pe )
- 		goto _resume;
- 	_test_eof: {}
- 	if ( p == eof )
- 	{
- 	const char *__acts = _lexer_actions + _lexer_eof_actions[cs];
- 	unsigned int __nacts = (unsigned int) *__acts++;
- 	while ( __nacts-- > 0 ) {
- 		switch ( *__acts++ ) {
- 	case 23:
- #line 207 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/da.c.rl"
- 	{
-     int line;
-     if (cs < lexer_first_final) {
-       size_t count = 0;
-       VALUE newstr_val;
-       char *newstr;
-       int newstr_count = 0;        
-       size_t len;
-       const char *buff;
-       if (lexer->last_newline != 0) {
-         len = LEN(last_newline, eof);
-         buff = PTR_TO(last_newline);
-       } else {
-         len = strlen(data);
-         buff = data;
-       }
- 
-       // Allocate as a ruby string so that it gets cleaned up by GC
-       newstr_val = rb_str_new(buff, len);
-       newstr = RSTRING_PTR(newstr_val);
- 
- 
-       for (count = 0; count < len; count++) {
-         if(buff[count] == 10) {
-           newstr[newstr_count] = '\0'; // terminate new string at first newline found
-           break;
-         } else {
-           if (buff[count] == '%') {
-             newstr[newstr_count++] = buff[count];
-             newstr[newstr_count] = buff[count];
-           } else {
-             newstr[newstr_count] = buff[count];
-           }
-         }
-         newstr_count++;
-       }
- 
-       line = lexer->line_number;
-       lexer_init(lexer); // Re-initialize so we can scan again with the same lexer
-       raise_lexer_error(newstr, line);
-     } else {
-       rb_funcall(listener, rb_intern("eof"), 0);
-     }
-   }
- 	break;
- #line 1262 "ext/gherkin_lexer_da/gherkin_lexer_da.c"
- 		}
- 	}
- 	}
- 
- 	_out: {}
- 	}
- 
- #line 426 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/da.c.rl"
- 
-     assert(p <= pe && "data overflow after parsing execute");
-     assert(lexer->content_start <= len && "content starts after data end");
-     assert(lexer->mark < len && "mark is after data end");
-     
-     // Reset lexer by re-initializing the whole thing
-     lexer_init(lexer);
- 
-     if (cs == lexer_error) {
-       rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails.");
-     } else {
-       return Qtrue;
-     }
-   }
- }
- 
- void Init_gherkin_lexer_da()
- {
-   mGherkin = rb_define_module("Gherkin");
-   mGherkinLexer = rb_define_module_under(mGherkin, "Lexer");
-   rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError"));
- 
-   mCLexer = rb_define_module_under(mGherkin, "CLexer");
-   cI18nLexer = rb_define_class_under(mCLexer, "Da", rb_cObject);
-   rb_define_alloc_func(cI18nLexer, CLexer_alloc);
-   rb_define_method(cI18nLexer, "initialize", CLexer_init, 1);
-   rb_define_method(cI18nLexer, "scan", CLexer_scan, 1);
- }
- 
 -#line 1 "ragel/i18n/da.c.rl"
 -#include <assert.h>
 -#include <ruby.h>
 -
 -#if defined(_WIN32)
 -#include <stddef.h>
 -#endif
 -
 -#ifdef HAVE_RUBY_RE_H
 -#include <ruby/re.h>
 -#else
 -#include <re.h>
 -#endif
 -
 -#ifdef HAVE_RUBY_ENCODING_H
 -#include <ruby/encoding.h>
 -#define ENCODED_STR_NEW(ptr, len) \
 -    rb_enc_str_new(ptr, len, rb_utf8_encoding())
 -#else
 -#define ENCODED_STR_NEW(ptr, len) \
 -    rb_str_new(ptr, len)
 -#endif
 -
 -#ifndef RSTRING_PTR
 -#define RSTRING_PTR(s) (RSTRING(s)->ptr)
 -#endif
 -
 -#ifndef RSTRING_LEN
 -#define RSTRING_LEN(s) (RSTRING(s)->len)
 -#endif
 -
 -#define DATA_GET(FROM, TYPE, NAME) \
 -  Data_Get_Struct(FROM, TYPE, NAME); \
 -  if (NAME == NULL) { \
 -    rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \
 -  }
 - 
 -typedef struct lexer_state {
 -  int content_len;
 -  int line_number;
 -  int current_line;
 -  int start_col;
 -  size_t mark;
 -  size_t keyword_start;
 -  size_t keyword_end;
 -  size_t next_keyword_start;
 -  size_t content_start;
 -  size_t content_end;
 -  size_t docstring_content_type_start;
 -  size_t docstring_content_type_end;
 -  size_t query_start;
 -  size_t last_newline;
 -  size_t final_newline;
 -} lexer_state;
 -
 -static VALUE mGherkin;
 -static VALUE mGherkinLexer;
 -static VALUE mCLexer;
 -static VALUE cI18nLexer;
 -static VALUE rb_eGherkinLexingError;
 -
 -#define LEN(AT, P) (P - data - lexer->AT)
 -#define MARK(M, P) (lexer->M = (P) - data)
 -#define PTR_TO(P) (data + lexer->P)
 -
 -#define STORE_KW_END_CON(EVENT) \
 -  store_multiline_kw_con(listener, # EVENT, \
 -    PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \
 -    PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \
 -    lexer->current_line, lexer->start_col); \
 -    if (lexer->content_end != 0) { \
 -      p = PTR_TO(content_end - 1); \
 -    } \
 -    lexer->content_end = 0
 -
 -#define STORE_ATTR(ATTR) \
 -    store_attr(listener, # ATTR, \
 -      PTR_TO(content_start), LEN(content_start, p), \
 -      lexer->line_number)
 -
 -
 -#line 254 "ragel/i18n/da.c.rl"
 -
 -
 -/** Data **/
 -
 -#line 89 "ext/gherkin_lexer_da/gherkin_lexer_da.c"
 -static const char _lexer_actions[] = {
 -	0, 1, 0, 1, 1, 1, 2, 1, 
 -	3, 1, 4, 1, 5, 1, 6, 1, 
 -	7, 1, 8, 1, 9, 1, 10, 1, 
 -	11, 1, 12, 1, 13, 1, 16, 1, 
 -	17, 1, 18, 1, 19, 1, 20, 1, 
 -	21, 1, 22, 1, 23, 2, 1, 18, 
 -	2, 4, 5, 2, 13, 0, 2, 14, 
 -	15, 2, 17, 0, 2, 17, 2, 2, 
 -	17, 16, 2, 17, 19, 2, 18, 6, 
 -	2, 18, 7, 2, 18, 8, 2, 18, 
 -	9, 2, 18, 10, 2, 18, 16, 2, 
 -	20, 21, 2, 22, 0, 2, 22, 2, 
 -	2, 22, 16, 2, 22, 19, 3, 3, 
 -	14, 15, 3, 5, 14, 15, 3, 11, 
 -	14, 15, 3, 12, 14, 15, 3, 13, 
 -	14, 15, 3, 14, 15, 18, 3, 17, 
 -	0, 11, 3, 17, 14, 15, 4, 1, 
 -	14, 15, 18, 4, 4, 5, 14, 15, 
 -	4, 17, 0, 14, 15, 5, 17, 0, 
 -	11, 14, 15
 -};
 -
 -static const short _lexer_key_offsets[] = {
 -	0, 0, 19, 20, 21, 39, 40, 41, 
 -	43, 45, 50, 55, 60, 65, 69, 73, 
 -	75, 76, 77, 78, 79, 80, 81, 82, 
 -	83, 84, 85, 86, 87, 88, 89, 90, 
 -	91, 93, 95, 100, 107, 112, 113, 114, 
 -	115, 116, 117, 118, 119, 120, 121, 122, 
 -	123, 124, 125, 126, 127, 128, 129, 130, 
 -	131, 145, 147, 149, 151, 153, 155, 157, 
 -	159, 161, 163, 165, 167, 169, 171, 173, 
 -	175, 193, 194, 195, 196, 197, 198, 199, 
 -	200, 201, 202, 203, 218, 220, 222, 224, 
 -	226, 228, 230, 232, 234, 236, 238, 240, 
 -	242, 244, 246, 248, 250, 252, 254, 256, 
 -	258, 260, 262, 264, 266, 268, 270, 272, 
 -	274, 276, 278, 280, 282, 284, 286, 288, 
 -	290, 292, 294, 296, 298, 300, 302, 304, 
 -	306, 308, 310, 312, 314, 316, 319, 321, 
 -	323, 325, 327, 329, 331, 333, 335, 336, 
 -	337, 338, 339, 340, 341, 342, 343, 344, 
 -	355, 357, 359, 361, 363, 365, 367, 369, 
 -	371, 373, 375, 377, 379, 381, 383, 385, 
 -	387, 389, 391, 393, 395, 397, 399, 401, 
 -	403, 405, 407, 409, 411, 413, 415, 417, 
 -	419, 421, 423, 425, 427, 429, 431, 434, 
 -	436, 438, 440, 442, 444, 446, 448, 450, 
 -	452, 454, 456, 458, 460, 462, 464, 466, 
 -	468, 470, 472, 474, 475, 476, 477, 478, 
 -	479, 480, 481, 482, 483, 484, 491, 493, 
 -	495, 497, 499, 501, 503, 505, 507, 508, 
 -	509, 510, 511, 512, 513, 514, 515, 516, 
 -	517, 519, 520, 521, 522, 523, 524, 525, 
 -	526, 527, 528, 529, 545, 547, 549, 551, 
 -	553, 555, 557, 559, 561, 563, 565, 567, 
 -	569, 571, 573, 575, 577, 579, 581, 583, 
 -	585, 587, 589, 591, 593, 595, 597, 599, 
 -	601, 603, 605, 607, 609, 611, 613, 615, 
 -	617, 619, 621, 623, 625, 627, 629, 631, 
 -	633, 635, 637, 639, 641, 643, 645, 647, 
 -	649, 651, 653, 655, 657, 660, 662, 664, 
 -	666, 668, 670, 672, 674, 678, 684, 687, 
 -	689, 695, 713, 715, 717, 719, 721, 723, 
 -	725, 727, 729, 731, 733, 735, 737, 739, 
 -	741, 743, 745, 747, 749, 752, 754, 756, 
 -	758, 760, 762, 764, 766
 -};
 -
 -static const char _lexer_trans_keys[] = {
 -	-17, 10, 32, 34, 35, 37, 42, 64, 
 -	65, 66, 69, 71, 77, 78, 79, 83, 
 -	124, 9, 13, -69, -65, 10, 32, 34, 
 -	35, 37, 42, 64, 65, 66, 69, 71, 
 -	77, 78, 79, 83, 124, 9, 13, 34, 
 -	34, 10, 13, 10, 13, 10, 32, 34, 
 -	9, 13, 10, 32, 34, 9, 13, 10, 
 -	32, 34, 9, 13, 10, 32, 34, 9, 
 -	13, 10, 32, 9, 13, 10, 32, 9, 
 -	13, 10, 13, 10, 95, 70, 69, 65, 
 -	84, 85, 82, 69, 95, 69, 78, 68, 
 -	95, 37, 32, 10, 13, 10, 13, 13, 
 -	32, 64, 9, 10, 9, 10, 13, 32, 
 -	64, 11, 12, 10, 32, 64, 9, 13, 
 -	98, 115, 116, 114, 97, 107, 116, 32, 
 -	83, 99, 101, 110, 97, 114, 105, 111, 
 -	58, 10, 10, 10, 32, 35, 37, 42, 
 -	64, 69, 71, 77, 78, 79, 83, 9, 
 -	13, 10, 95, 10, 70, 10, 69, 10, 
 -	65, 10, 84, 10, 85, 10, 82, 10, 
 -	69, 10, 95, 10, 69, 10, 78, 10, 
 -	68, 10, 95, 10, 37, 10, 32, 10, 
 -	32, 34, 35, 37, 42, 64, 65, 66, 
 -	69, 71, 77, 78, 79, 83, 124, 9, 
 -	13, 97, 103, 103, 114, 117, 110, 100, 
 -	58, 10, 10, 10, 32, 35, 37, 42, 
 -	64, 65, 69, 71, 77, 78, 79, 83, 
 -	9, 13, 10, 95, 10, 70, 10, 69, 
 -	10, 65, 10, 84, 10, 85, 10, 82, 
 -	10, 69, 10, 95, 10, 69, 10, 78, 
 -	10, 68, 10, 95, 10, 37, 10, 32, 
 -	10, 98, 10, 115, 10, 116, 10, 114, 
 -	10, 97, 10, 107, 10, 116, 10, 32, 
 -	10, 83, 10, 99, 10, 101, 10, 110, 
 -	10, 97, 10, 114, 10, 105, 10, 111, 
 -	10, 58, 10, 103, 10, 101, 10, 110, 
 -	10, 115, 10, 107, 10, 97, 10, 98, 
 -	10, 105, 10, 118, 10, 101, 10, 116, 
 -	10, 101, 10, 110, -61, 10, -91, 10, 
 -	10, 114, 10, 103, -61, 10, 99, -91, 
 -	10, 10, 101, 10, 110, 10, 97, 10, 
 -	114, 10, 105, 10, 101, 103, 107, 101, 
 -	110, 115, 107, 97, 98, 58, 10, 10, 
 -	10, 32, 35, 37, 64, 65, 66, 69, 
 -	83, 9, 13, 10, 95, 10, 70, 10, 
 -	69, 10, 65, 10, 84, 10, 85, 10, 
 -	82, 10, 69, 10, 95, 10, 69, 10, 
 -	78, 10, 68, 10, 95, 10, 37, 10, 
 -	98, 10, 115, 10, 116, 10, 114, 10, 
 -	97, 10, 107, 10, 116, 10, 32, 10, 
 -	83, 10, 99, 10, 101, 10, 110, 10, 
 -	97, 10, 114, 10, 105, 10, 111, 10, 
 -	58, 10, 97, 10, 103, 10, 103, 10, 
 -	114, 10, 117, 10, 110, 10, 100, 10, 
 -	103, 107, 10, 101, 10, 110, 10, 115, 
 -	10, 107, 10, 97, 10, 98, 10, 115, 
 -	10, 101, 10, 109, 10, 112, 10, 108, 
 -	10, 101, 10, 114, 10, 99, 10, 101, 
 -	10, 110, 10, 97, 10, 114, 10, 105, 
 -	10, 101, 115, 101, 109, 112, 108, 101, 
 -	114, 58, 10, 10, 10, 32, 35, 69, 
 -	124, 9, 13, 10, 103, 10, 101, 10, 
 -	110, 10, 115, 10, 107, 10, 97, 10, 
 -	98, 10, 58, 105, 118, 101, 116, 101, 
 -	110, -61, -91, 114, 103, -61, 99, -91, 
 -	101, 110, 97, 114, 105, 101, 58, 10, 
 -	10, 10, 32, 35, 37, 42, 64, 65, 
 -	66, 69, 71, 77, 78, 79, 83, 9, 
 -	13, 10, 95, 10, 70, 10, 69, 10, 
 -	65, 10, 84, 10, 85, 10, 82, 10, 
 -	69, 10, 95, 10, 69, 10, 78, 10, 
 -	68, 10, 95, 10, 37, 10, 32, 10, 
 -	98, 10, 115, 10, 116, 10, 114, 10, 
 -	97, 10, 107, 10, 116, 10, 32, 10, 
 -	83, 10, 99, 10, 101, 10, 110, 10, 
 -	97, 10, 114, 10, 105, 10, 111, 10, 
 -	58, 10, 97, 10, 103, 10, 103, 10, 
 -	114, 10, 117, 10, 110, 10, 100, 10, 
 -	103, 10, 101, 10, 110, 10, 115, 10, 
 -	107, 10, 97, 10, 98, 10, 105, 10, 
 -	118, 10, 101, 10, 116, 10, 101, 10, 
 -	110, -61, 10, -91, 10, 10, 114, 10, 
 -	103, -61, 10, 99, -91, 10, 10, 101, 
 -	10, 110, 10, 97, 10, 114, 10, 105, 
 -	10, 101, 32, 124, 9, 13, 10, 32, 
 -	92, 124, 9, 13, 10, 92, 124, 10, 
 -	92, 10, 32, 92, 124, 9, 13, 10, 
 -	32, 34, 35, 37, 42, 64, 65, 66, 
 -	69, 71, 77, 78, 79, 83, 124, 9, 
 -	13, 10, 103, 10, 101, 10, 110, 10, 
 -	115, 10, 107, 10, 97, 10, 98, 10, 
 -	58, 10, 105, 10, 118, 10, 101, 10, 
 -	116, 10, 101, 10, 110, -61, 10, -91, 
 -	10, 10, 114, 10, 103, -61, 10, 99, 
 -	-91, 10, 10, 101, 10, 110, 10, 97, 
 -	10, 114, 10, 105, 10, 101, 0
 -};
 -
 -static const char _lexer_single_lengths[] = {
 -	0, 17, 1, 1, 16, 1, 1, 2, 
 -	2, 3, 3, 3, 3, 2, 2, 2, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	2, 2, 3, 5, 3, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	12, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	16, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 13, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 3, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 9, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 3, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 5, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	2, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 14, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 3, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 4, 3, 2, 
 -	4, 16, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 3, 2, 2, 2, 
 -	2, 2, 2, 2, 0
 -};
 -
 -static const char _lexer_range_lengths[] = {
 -	0, 1, 0, 0, 1, 0, 0, 0, 
 -	0, 1, 1, 1, 1, 1, 1, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 1, 1, 1, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	1, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	1, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 1, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 1, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 1, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 1, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 1, 1, 0, 0, 
 -	1, 1, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0
 -};
 -
 -static const short _lexer_index_offsets[] = {
 -	0, 0, 19, 21, 23, 41, 43, 45, 
 -	48, 51, 56, 61, 66, 71, 75, 79, 
 -	82, 84, 86, 88, 90, 92, 94, 96, 
 -	98, 100, 102, 104, 106, 108, 110, 112, 
 -	114, 117, 120, 125, 132, 137, 139, 141, 
 -	143, 145, 147, 149, 151, 153, 155, 157, 
 -	159, 161, 163, 165, 167, 169, 171, 173, 
 -	175, 189, 192, 195, 198, 201, 204, 207, 
 -	210, 213, 216, 219, 222, 225, 228, 231, 
 -	234, 252, 254, 256, 258, 260, 262, 264, 
 -	266, 268, 270, 272, 287, 290, 293, 296, 
 -	299, 302, 305, 308, 311, 314, 317, 320, 
 -	323, 326, 329, 332, 335, 338, 341, 344, 
 -	347, 350, 353, 356, 359, 362, 365, 368, 
 -	371, 374, 377, 380, 383, 386, 389, 392, 
 -	395, 398, 401, 404, 407, 410, 413, 416, 
 -	419, 422, 425, 428, 431, 434, 438, 441, 
 -	444, 447, 450, 453, 456, 459, 462, 464, 
 -	466, 468, 470, 472, 474, 476, 478, 480, 
 -	491, 494, 497, 500, 503, 506, 509, 512, 
 -	515, 518, 521, 524, 527, 530, 533, 536, 
 -	539, 542, 545, 548, 551, 554, 557, 560, 
 -	563, 566, 569, 572, 575, 578, 581, 584, 
 -	587, 590, 593, 596, 599, 602, 605, 609, 
 -	612, 615, 618, 621, 624, 627, 630, 633, 
 -	636, 639, 642, 645, 648, 651, 654, 657, 
 -	660, 663, 666, 669, 671, 673, 675, 677, 
 -	679, 681, 683, 685, 687, 689, 696, 699, 
 -	702, 705, 708, 711, 714, 717, 720, 722, 
 -	724, 726, 728, 730, 732, 734, 736, 738, 
 -	740, 743, 745, 747, 749, 751, 753, 755, 
 -	757, 759, 761, 763, 779, 782, 785, 788, 
 -	791, 794, 797, 800, 803, 806, 809, 812, 
 -	815, 818, 821, 824, 827, 830, 833, 836, 
 -	839, 842, 845, 848, 851, 854, 857, 860, 
 -	863, 866, 869, 872, 875, 878, 881, 884, 
 -	887, 890, 893, 896, 899, 902, 905, 908, 
 -	911, 914, 917, 920, 923, 926, 929, 932, 
 -	935, 938, 941, 944, 947, 951, 954, 957, 
 -	960, 963, 966, 969, 972, 976, 982, 986, 
 -	989, 995, 1013, 1016, 1019, 1022, 1025, 1028, 
 -	1031, 1034, 1037, 1040, 1043, 1046, 1049, 1052, 
 -	1055, 1058, 1061, 1064, 1067, 1071, 1074, 1077, 
 -	1080, 1083, 1086, 1089, 1092
 -};
 -
 -static const short _lexer_trans_targs[] = {
 -	2, 4, 4, 5, 15, 17, 31, 34, 
 -	37, 73, 141, 230, 234, 236, 239, 240, 
 -	316, 4, 0, 3, 0, 4, 0, 4, 
 -	4, 5, 15, 17, 31, 34, 37, 73, 
 -	141, 230, 234, 236, 239, 240, 316, 4, 
 -	0, 6, 0, 7, 0, 9, 8, 8, 
 -	9, 8, 8, 10, 10, 11, 10, 10, 
 -	10, 10, 11, 10, 10, 10, 10, 12, 
 -	10, 10, 10, 10, 13, 10, 10, 4, 
 -	14, 14, 0, 4, 14, 14, 0, 4, 
 -	16, 15, 4, 0, 18, 0, 19, 0, 
 -	20, 0, 21, 0, 22, 0, 23, 0, 
 -	24, 0, 25, 0, 26, 0, 27, 0, 
 -	28, 0, 29, 0, 30, 0, 348, 0, 
 -	32, 0, 4, 16, 33, 4, 16, 33, 
 -	0, 0, 0, 0, 35, 36, 4, 36, 
 -	36, 34, 35, 35, 4, 36, 34, 36, 
 -	0, 38, 0, 39, 0, 40, 0, 41, 
 -	0, 42, 0, 43, 0, 44, 0, 45, 
 -	0, 46, 0, 47, 0, 48, 0, 49, 
 -	0, 50, 0, 51, 0, 52, 0, 53, 
 -	0, 54, 0, 56, 55, 56, 55, 56, 
 -	56, 4, 57, 71, 4, 322, 330, 334, 
 -	336, 339, 340, 56, 55, 56, 58, 55, 
 -	56, 59, 55, 56, 60, 55, 56, 61, 
 -	55, 56, 62, 55, 56, 63, 55, 56, 
 -	64, 55, 56, 65, 55, 56, 66, 55, 
 -	56, 67, 55, 56, 68, 55, 56, 69, 
 -	55, 56, 70, 55, 56, 4, 55, 56, 
 -	72, 55, 4, 4, 5, 15, 17, 31, 
 -	34, 37, 73, 141, 230, 234, 236, 239, 
 -	240, 316, 4, 0, 74, 0, 75, 0, 
 -	76, 0, 77, 0, 78, 0, 79, 0, 
 -	80, 0, 81, 0, 83, 82, 83, 82, 
 -	83, 83, 4, 84, 98, 4, 99, 116, 
 -	123, 127, 129, 132, 133, 83, 82, 83, 
 -	85, 82, 83, 86, 82, 83, 87, 82, 
 -	83, 88, 82, 83, 89, 82, 83, 90, 
 -	82, 83, 91, 82, 83, 92, 82, 83, 
 -	93, 82, 83, 94, 82, 83, 95, 82, 
 -	83, 96, 82, 83, 97, 82, 83, 4, 
 -	82, 83, 72, 82, 83, 100, 82, 83, 
 -	101, 82, 83, 102, 82, 83, 103, 82, 
 -	83, 104, 82, 83, 105, 82, 83, 106, 
 -	82, 83, 107, 82, 83, 108, 82, 83, 
 -	109, 82, 83, 110, 82, 83, 111, 82, 
 -	83, 112, 82, 83, 113, 82, 83, 114, 
 -	82, 83, 115, 82, 83, 72, 82, 83, 
 -	117, 82, 83, 118, 82, 83, 119, 82, 
 -	83, 120, 82, 83, 121, 82, 83, 122, 
 -	82, 83, 115, 82, 83, 124, 82, 83, 
 -	125, 82, 83, 126, 82, 83, 98, 82, 
 -	83, 128, 82, 83, 98, 82, 130, 83, 
 -	82, 131, 83, 82, 83, 98, 82, 83, 
 -	98, 82, 134, 83, 135, 82, 98, 83, 
 -	82, 83, 136, 82, 83, 137, 82, 83, 
 -	138, 82, 83, 139, 82, 83, 140, 82, 
 -	83, 115, 82, 142, 211, 0, 143, 0, 
 -	144, 0, 145, 0, 146, 0, 147, 0, 
 -	148, 0, 149, 0, 151, 150, 151, 150, 
 -	151, 151, 4, 152, 4, 166, 183, 190, 
 -	204, 151, 150, 151, 153, 150, 151, 154, 
 -	150, 151, 155, 150, 151, 156, 150, 151, 
 -	157, 150, 151, 158, 150, 151, 159, 150, 
 -	151, 160, 150, 151, 161, 150, 151, 162, 
 -	150, 151, 163, 150, 151, 164, 150, 151, 
 -	165, 150, 151, 4, 150, 151, 167, 150, 
 -	151, 168, 150, 151, 169, 150, 151, 170, 
 -	150, 151, 171, 150, 151, 172, 150, 151, 
 -	173, 150, 151, 174, 150, 151, 175, 150, 
 -	151, 176, 150, 151, 177, 150, 151, 178, 
 -	150, 151, 179, 150, 151, 180, 150, 151, 
 -	181, 150, 151, 182, 150, 151, 72, 150, 
 -	151, 184, 150, 151, 185, 150, 151, 186, 
 -	150, 151, 187, 150, 151, 188, 150, 151, 
 -	189, 150, 151, 182, 150, 151, 191, 197, 
 -	150, 151, 192, 150, 151, 193, 150, 151, 
 -	194, 150, 151, 195, 150, 151, 196, 150, 
 -	151, 182, 150, 151, 198, 150, 151, 199, 
 -	150, 151, 200, 150, 151, 201, 150, 151, 
 -	202, 150, 151, 203, 150, 151, 182, 150, 
 -	151, 205, 150, 151, 206, 150, 151, 207, 
 -	150, 151, 208, 150, 151, 209, 150, 151, 
 -	210, 150, 151, 182, 150, 212, 0, 213, 
 -	0, 214, 0, 215, 0, 216, 0, 217, 
 -	0, 218, 0, 219, 0, 221, 220, 221, 
 -	220, 221, 221, 4, 222, 4, 221, 220, 
 -	221, 223, 220, 221, 224, 220, 221, 225, 
 -	220, 221, 226, 220, 221, 227, 220, 221, 
 -	228, 220, 221, 229, 220, 221, 72, 220, 
 -	231, 0, 232, 0, 233, 0, 31, 0, 
 -	235, 0, 31, 0, 237, 0, 238, 0, 
 -	31, 0, 31, 0, 241, 242, 0, 31, 
 -	0, 243, 0, 244, 0, 245, 0, 246, 
 -	0, 247, 0, 248, 0, 249, 0, 251, 
 -	250, 251, 250, 251, 251, 4, 252, 266, 
 -	4, 267, 284, 291, 298, 302, 304, 307, 
 -	308, 251, 250, 251, 253, 250, 251, 254, 
 -	250, 251, 255, 250, 251, 256, 250, 251, 
 -	257, 250, 251, 258, 250, 251, 259, 250, 
 -	251, 260, 250, 251, 261, 250, 251, 262, 
 -	250, 251, 263, 250, 251, 264, 250, 251, 
 -	265, 250, 251, 4, 250, 251, 72, 250, 
 -	251, 268, 250, 251, 269, 250, 251, 270, 
 -	250, 251, 271, 250, 251, 272, 250, 251, 
 -	273, 250, 251, 274, 250, 251, 275, 250, 
 -	251, 276, 250, 251, 277, 250, 251, 278, 
 -	250, 251, 279, 250, 251, 280, 250, 251, 
 -	281, 250, 251, 282, 250, 251, 283, 250, 
 -	251, 72, 250, 251, 285, 250, 251, 286, 
 -	250, 251, 287, 250, 251, 288, 250, 251, 
 -	289, 250, 251, 290, 250, 251, 283, 250, 
 -	251, 292, 250, 251, 293, 250, 251, 294, 
 -	250, 251, 295, 250, 251, 296, 250, 251, 
 -	297, 250, 251, 283, 250, 251, 299, 250, 
 -	251, 300, 250, 251, 301, 250, 251, 266, 
 -	250, 251, 303, 250, 251, 266, 250, 305, 
 -	251, 250, 306, 251, 250, 251, 266, 250, 
 -	251, 266, 250, 309, 251, 310, 250, 266, 
 -	251, 250, 251, 311, 250, 251, 312, 250, 
 -	251, 313, 250, 251, 314, 250, 251, 315, 
 -	250, 251, 283, 250, 316, 317, 316, 0, 
 -	321, 320, 319, 317, 320, 318, 0, 319, 
 -	317, 318, 0, 319, 318, 321, 320, 319, 
 -	317, 320, 318, 321, 321, 5, 15, 17, 
 -	31, 34, 37, 73, 141, 230, 234, 236, 
 -	239, 240, 316, 321, 0, 56, 323, 55, 
 -	56, 324, 55, 56, 325, 55, 56, 326, 
 -	55, 56, 327, 55, 56, 328, 55, 56, 
 -	329, 55, 56, 72, 55, 56, 331, 55, 
 -	56, 332, 55, 56, 333, 55, 56, 71, 
 -	55, 56, 335, 55, 56, 71, 55, 337, 
 -	56, 55, 338, 56, 55, 56, 71, 55, 
 -	56, 71, 55, 341, 56, 342, 55, 71, 
 -	56, 55, 56, 343, 55, 56, 344, 55, 
 -	56, 345, 55, 56, 346, 55, 56, 347, 
 -	55, 56, 329, 55, 0, 0
 -};
 -
 -static const unsigned char _lexer_trans_actions[] = {
 -	0, 54, 0, 5, 1, 0, 29, 1, 
 -	29, 29, 29, 29, 29, 29, 29, 29, 
 -	35, 0, 43, 0, 43, 0, 43, 54, 
 -	0, 5, 1, 0, 29, 1, 29, 29, 
 -	29, 29, 29, 29, 29, 29, 35, 0, 
 -	43, 0, 43, 0, 43, 139, 48, 9, 
 -	106, 11, 0, 134, 45, 45, 45, 3, 
 -	122, 33, 33, 33, 0, 122, 33, 33, 
 -	33, 0, 122, 33, 0, 33, 0, 102, 
 -	7, 7, 43, 54, 0, 0, 43, 114, 
 -	25, 0, 54, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 149, 126, 57, 110, 23, 0, 
 -	43, 43, 43, 43, 0, 27, 118, 27, 
 -	27, 51, 27, 0, 54, 0, 1, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 144, 57, 54, 0, 54, 
 -	0, 78, 33, 84, 78, 84, 84, 84, 
 -	84, 84, 84, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 19, 0, 54, 
 -	19, 0, 130, 31, 60, 57, 31, 63, 
 -	57, 63, 63, 63, 63, 63, 63, 63, 
 -	63, 66, 31, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 144, 57, 54, 0, 
 -	54, 0, 72, 33, 84, 72, 84, 84, 
 -	84, 84, 84, 84, 84, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 15, 
 -	0, 54, 15, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 15, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 0, 54, 
 -	0, 0, 54, 0, 54, 0, 0, 54, 
 -	0, 0, 0, 54, 0, 0, 0, 54, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 0, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 144, 57, 54, 0, 
 -	54, 0, 69, 33, 69, 84, 84, 84, 
 -	84, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 13, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 13, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 144, 57, 54, 
 -	0, 54, 0, 81, 84, 81, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 21, 0, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 144, 
 -	57, 54, 0, 54, 0, 75, 33, 84, 
 -	75, 84, 84, 84, 84, 84, 84, 84, 
 -	84, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 17, 0, 54, 17, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 17, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 0, 
 -	54, 0, 0, 54, 0, 54, 0, 0, 
 -	54, 0, 0, 0, 54, 0, 0, 0, 
 -	54, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 0, 0, 0, 43, 
 -	54, 37, 37, 87, 37, 37, 43, 0, 
 -	39, 0, 43, 0, 0, 54, 0, 0, 
 -	39, 0, 0, 54, 0, 93, 90, 41, 
 -	96, 90, 96, 96, 96, 96, 96, 96, 
 -	96, 96, 99, 0, 43, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 19, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 0, 
 -	54, 0, 0, 54, 0, 54, 0, 0, 
 -	54, 0, 0, 0, 54, 0, 0, 0, 
 -	54, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 0, 0
 -};
 -
 -static const unsigned char _lexer_eof_actions[] = {
 -	0, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43
 -};
 -
 -static const int lexer_start = 1;
 -static const int lexer_first_final = 348;
 -static const int lexer_error = 0;
 -
 -static const int lexer_en_main = 1;
 -
 -
 -#line 258 "ragel/i18n/da.c.rl"
 -
 -static VALUE 
 -unindent(VALUE con, int start_col)
 -{
 -  VALUE re;
 -  /* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */
 -  char pat[32]; 
 -  snprintf(pat, 32, "^[\t ]{0,%d}", start_col); 
 -  re = rb_reg_regcomp(rb_str_new2(pat));
 -  rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2(""));
 -
 -  return Qnil;
 -
 -}
 -
 -static void 
 -store_kw_con(VALUE listener, const char * event_name, 
 -             const char * keyword_at, size_t keyword_length, 
 -             const char * at,         size_t length, 
 -             int current_line)
 -{
 -  VALUE con = Qnil, kw = Qnil;
 -  kw = ENCODED_STR_NEW(keyword_at, keyword_length);
 -  con = ENCODED_STR_NEW(at, length);
 -  rb_funcall(con, rb_intern("strip!"), 0);
 -  rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); 
 -}
 -
 -static void
 -store_multiline_kw_con(VALUE listener, const char * event_name,
 -                      const char * keyword_at, size_t keyword_length,
 -                      const char * at,         size_t length,
 -                      int current_line, int start_col)
 -{
 -  VALUE split;
 -  VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil;
 -
 -  kw = ENCODED_STR_NEW(keyword_at, keyword_length);
 -  con = ENCODED_STR_NEW(at, length);
 -
 -  unindent(con, start_col);
 -  
 -  split = rb_str_split(con, "\n");
 -
 -  name = rb_funcall(split, rb_intern("shift"), 0);
 -  desc = rb_ary_join(split, rb_str_new2( "\n" ));
 -
 -  if( name == Qnil ) 
 -  {
 -    name = rb_str_new2("");
 -  }
 -  if( rb_funcall(desc, rb_intern("size"), 0) == 0) 
 -  {
 -    desc = rb_str_new2("");
 -  }
 -  rb_funcall(name, rb_intern("strip!"), 0);
 -  rb_funcall(desc, rb_intern("rstrip!"), 0);
 -  rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); 
 -}
 -
 -static void 
 -store_attr(VALUE listener, const char * attr_type,
 -           const char * at, size_t length, 
 -           int line)
 -{
 -  VALUE val = ENCODED_STR_NEW(at, length);
 -  rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line));
 -}
 -static void 
 -store_docstring_content(VALUE listener, 
 -          int start_col, 
 -          const char *type_at, size_t type_length,
 -          const char *at, size_t length, 
 -          int current_line)
 -{
 -  VALUE re2;
 -  VALUE unescape_escaped_quotes;
 -  VALUE con = ENCODED_STR_NEW(at, length);
 -  VALUE con_type = ENCODED_STR_NEW(type_at, type_length);
 -
 -  unindent(con, start_col);
 -
 -  re2 = rb_reg_regcomp(rb_str_new2("\r\\Z"));
 -  unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\""));
 -  rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2(""));
 -  rb_funcall(con_type, rb_intern("strip!"), 0);
 -  rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\""));
 -  rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line));
 -}
 -static void 
 -raise_lexer_error(const char * at, int line)
 -{ 
 -  rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at);
 -}
 -
 -static void lexer_init(lexer_state *lexer) {
 -  lexer->content_start = 0;
 -  lexer->content_end = 0;
 -  lexer->content_len = 0;
 -  lexer->docstring_content_type_start = 0;
 -  lexer->docstring_content_type_end = 0;
 -  lexer->mark = 0;
 -  lexer->keyword_start = 0;
 -  lexer->keyword_end = 0;
 -  lexer->next_keyword_start = 0;
 -  lexer->line_number = 1;
 -  lexer->last_newline = 0;
 -  lexer->final_newline = 0;
 -  lexer->start_col = 0;
 -}
 -
 -static VALUE CLexer_alloc(VALUE klass)
 -{
 -  VALUE obj;
 -  lexer_state *lxr = ALLOC(lexer_state);
 -  lexer_init(lxr);
 -
 -  obj = Data_Wrap_Struct(klass, NULL, -1, lxr);
 -
 -  return obj;
 -}
 -
 -static VALUE CLexer_init(VALUE self, VALUE listener)
 -{
 -  lexer_state *lxr; 
 -  rb_iv_set(self, "@listener", listener);
 -  
 -  lxr = NULL;
 -  DATA_GET(self, lexer_state, lxr);
 -  lexer_init(lxr);
 -  
 -  return self;
 -}
 -
 -static VALUE CLexer_scan(VALUE self, VALUE input)
 -{
 -  VALUE input_copy;
 -  char *data;
 -  size_t len;
 -  VALUE listener = rb_iv_get(self, "@listener");
 -
 -  lexer_state *lexer;
 -  lexer = NULL;
 -  DATA_GET(self, lexer_state, lexer);
 -
 -  input_copy = rb_str_dup(input);
 -
 -  rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%"));
 -  data = RSTRING_PTR(input_copy);
 -  len = RSTRING_LEN(input_copy);
 -  
 -  if (len == 0) { 
 -    rb_raise(rb_eGherkinLexingError, "No content to lex.");
 -  } else {
 -
 -    const char *p, *pe, *eof;
 -    int cs = 0;
 -    
 -    VALUE current_row = Qnil;
 -
 -    p = data;
 -    pe = data + len;
 -    eof = pe;
 -    
 -    assert(*pe == '\0' && "pointer does not end on NULL");
 -    
 -    
 -#line 902 "ext/gherkin_lexer_da/gherkin_lexer_da.c"
 -	{
 -	cs = lexer_start;
 -	}
 -
 -#line 425 "ragel/i18n/da.c.rl"
 -    
 -#line 909 "ext/gherkin_lexer_da/gherkin_lexer_da.c"
 -	{
 -	int _klen;
 -	unsigned int _trans;
 -	const char *_acts;
 -	unsigned int _nacts;
 -	const char *_keys;
 -
 -	if ( p == pe )
 -		goto _test_eof;
 -	if ( cs == 0 )
 -		goto _out;
 -_resume:
 -	_keys = _lexer_trans_keys + _lexer_key_offsets[cs];
 -	_trans = _lexer_index_offsets[cs];
 -
 -	_klen = _lexer_single_lengths[cs];
 -	if ( _klen > 0 ) {
 -		const char *_lower = _keys;
 -		const char *_mid;
 -		const char *_upper = _keys + _klen - 1;
 -		while (1) {
 -			if ( _upper < _lower )
 -				break;
 -
 -			_mid = _lower + ((_upper-_lower) >> 1);
 -			if ( (*p) < *_mid )
 -				_upper = _mid - 1;
 -			else if ( (*p) > *_mid )
 -				_lower = _mid + 1;
 -			else {
 -				_trans += (unsigned int)(_mid - _keys);
 -				goto _match;
 -			}
 -		}
 -		_keys += _klen;
 -		_trans += _klen;
 -	}
 -
 -	_klen = _lexer_range_lengths[cs];
 -	if ( _klen > 0 ) {
 -		const char *_lower = _keys;
 -		const char *_mid;
 -		const char *_upper = _keys + (_klen<<1) - 2;
 -		while (1) {
 -			if ( _upper < _lower )
 -				break;
 -
 -			_mid = _lower + (((_upper-_lower) >> 1) & ~1);
 -			if ( (*p) < _mid[0] )
 -				_upper = _mid - 2;
 -			else if ( (*p) > _mid[1] )
 -				_lower = _mid + 2;
 -			else {
 -				_trans += (unsigned int)((_mid - _keys)>>1);
 -				goto _match;
 -			}
 -		}
 -		_trans += _klen;
 -	}
 -
 -_match:
 -	cs = _lexer_trans_targs[_trans];
 -
 -	if ( _lexer_trans_actions[_trans] == 0 )
 -		goto _again;
 -
 -	_acts = _lexer_actions + _lexer_trans_actions[_trans];
 -	_nacts = (unsigned int) *_acts++;
 -	while ( _nacts-- > 0 )
 -	{
 -		switch ( *_acts++ )
 -		{
 -	case 0:
 -#line 83 "ragel/i18n/da.c.rl"
 -	{
 -		MARK(content_start, p);
 -    lexer->current_line = lexer->line_number;
 -    lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2;
 -  }
 -	break;
 -	case 1:
 -#line 89 "ragel/i18n/da.c.rl"
 -	{
 -    MARK(content_start, p);
 -  }
 -	break;
 -	case 2:
 -#line 93 "ragel/i18n/da.c.rl"
 -	{
 -    lexer->current_line = lexer->line_number;
 -    lexer->start_col = p - data - lexer->last_newline;
 -  }
 -	break;
 -	case 3:
 -#line 98 "ragel/i18n/da.c.rl"
 -	{
 -    int len = LEN(content_start, PTR_TO(final_newline));
 -    int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end));
 -
 -    if (len < 0) len = 0;
 -    if (type_len < 0) len = 0;
 -
 -    store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line);
 -  }
 -	break;
 -	case 4:
 -#line 108 "ragel/i18n/da.c.rl"
 -	{ 
 -    MARK(docstring_content_type_start, p);
 -  }
 -	break;
 -	case 5:
 -#line 112 "ragel/i18n/da.c.rl"
 -	{ 
 -    MARK(docstring_content_type_end, p);
 -  }
 -	break;
 -	case 6:
 -#line 116 "ragel/i18n/da.c.rl"
 -	{
 -    STORE_KW_END_CON(feature);
 -  }
 -	break;
 -	case 7:
 -#line 120 "ragel/i18n/da.c.rl"
 -	{
 -    STORE_KW_END_CON(background);
 -  }
 -	break;
 -	case 8:
 -#line 124 "ragel/i18n/da.c.rl"
 -	{
 -    STORE_KW_END_CON(scenario);
 -  }
 -	break;
 -	case 9:
 -#line 128 "ragel/i18n/da.c.rl"
 -	{
 -    STORE_KW_END_CON(scenario_outline);
 -  }
 -	break;
 -	case 10:
 -#line 132 "ragel/i18n/da.c.rl"
 -	{
 -    STORE_KW_END_CON(examples);
 -  }
 -	break;
 -	case 11:
 -#line 136 "ragel/i18n/da.c.rl"
 -	{
 -    store_kw_con(listener, "step",
 -      PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
 -      PTR_TO(content_start), LEN(content_start, p), 
 -      lexer->current_line);
 -  }
 -	break;
 -	case 12:
 -#line 143 "ragel/i18n/da.c.rl"
 -	{
 -    STORE_ATTR(comment);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 13:
 -#line 148 "ragel/i18n/da.c.rl"
 -	{
 -    STORE_ATTR(tag);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 14:
 -#line 153 "ragel/i18n/da.c.rl"
 -	{
 -    lexer->line_number += 1;
 -    MARK(final_newline, p);
 -  }
 -	break;
 -	case 15:
 -#line 158 "ragel/i18n/da.c.rl"
 -	{
 -    MARK(last_newline, p + 1);
 -  }
 -	break;
 -	case 16:
 -#line 162 "ragel/i18n/da.c.rl"
 -	{
 -    if (lexer->mark == 0) {
 -      MARK(mark, p);
 -    }
 -  }
 -	break;
 -	case 17:
 -#line 168 "ragel/i18n/da.c.rl"
 -	{
 -    MARK(keyword_end, p);
 -    MARK(keyword_start, PTR_TO(mark));
 -    MARK(content_start, p + 1);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 18:
 -#line 175 "ragel/i18n/da.c.rl"
 -	{
 -    MARK(content_end, p);
 -  }
 -	break;
 -	case 19:
 -#line 179 "ragel/i18n/da.c.rl"
 -	{
 -    p = p - 1;
 -    lexer->current_line = lexer->line_number;
 -    current_row = rb_ary_new();
 -  }
 -	break;
 -	case 20:
 -#line 185 "ragel/i18n/da.c.rl"
 -	{
 -		MARK(content_start, p);
 -  }
 -	break;
 -	case 21:
 -#line 189 "ragel/i18n/da.c.rl"
 -	{
 -    VALUE re_pipe, re_newline, re_backslash;
 -    VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
 -    rb_funcall(con, rb_intern("strip!"), 0);
 -    re_pipe      = rb_reg_regcomp(rb_str_new2("\\\\\\|"));
 -    re_newline   = rb_reg_regcomp(rb_str_new2("\\\\n"));
 -    re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_pipe,      rb_str_new2("|"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_newline,   rb_str_new2("\n"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\"));
 -
 -    rb_ary_push(current_row, con);
 -  }
 -	break;
 -	case 22:
 -#line 203 "ragel/i18n/da.c.rl"
 -	{
 -    rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
 -  }
 -	break;
 -	case 23:
 -#line 207 "ragel/i18n/da.c.rl"
 -	{
 -    int line;
 -    if (cs < lexer_first_final) {
 -      size_t count = 0;
 -      VALUE newstr_val;
 -      char *newstr;
 -      int newstr_count = 0;        
 -      size_t len;
 -      const char *buff;
 -      if (lexer->last_newline != 0) {
 -        len = LEN(last_newline, eof);
 -        buff = PTR_TO(last_newline);
 -      } else {
 -        len = strlen(data);
 -        buff = data;
 -      }
 -
 -      /* Allocate as a ruby string so that it gets cleaned up by GC */
 -      newstr_val = rb_str_new(buff, len);
 -      newstr = RSTRING_PTR(newstr_val);
 -
 -
 -      for (count = 0; count < len; count++) {
 -        if(buff[count] == 10) {
 -          newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
 -          break;
 -        } else {
 -          if (buff[count] == '%') {
 -            newstr[newstr_count++] = buff[count];
 -            newstr[newstr_count] = buff[count];
 -          } else {
 -            newstr[newstr_count] = buff[count];
 -          }
 -        }
 -        newstr_count++;
 -      }
 -
 -      line = lexer->line_number;
 -      lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
 -      raise_lexer_error(newstr, line);
 -    } else {
 -      rb_funcall(listener, rb_intern("eof"), 0);
 -    }
 -  }
 -	break;
 -#line 1199 "ext/gherkin_lexer_da/gherkin_lexer_da.c"
 -		}
 -	}
 -
 -_again:
 -	if ( cs == 0 )
 -		goto _out;
 -	if ( ++p != pe )
 -		goto _resume;
 -	_test_eof: {}
 -	if ( p == eof )
 -	{
 -	const char *__acts = _lexer_actions + _lexer_eof_actions[cs];
 -	unsigned int __nacts = (unsigned int) *__acts++;
 -	while ( __nacts-- > 0 ) {
 -		switch ( *__acts++ ) {
 -	case 23:
 -#line 207 "ragel/i18n/da.c.rl"
 -	{
 -    int line;
 -    if (cs < lexer_first_final) {
 -      size_t count = 0;
 -      VALUE newstr_val;
 -      char *newstr;
 -      int newstr_count = 0;        
 -      size_t len;
 -      const char *buff;
 -      if (lexer->last_newline != 0) {
 -        len = LEN(last_newline, eof);
 -        buff = PTR_TO(last_newline);
 -      } else {
 -        len = strlen(data);
 -        buff = data;
 -      }
 -
 -      /* Allocate as a ruby string so that it gets cleaned up by GC */
 -      newstr_val = rb_str_new(buff, len);
 -      newstr = RSTRING_PTR(newstr_val);
 -
 -
 -      for (count = 0; count < len; count++) {
 -        if(buff[count] == 10) {
 -          newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
 -          break;
 -        } else {
 -          if (buff[count] == '%') {
 -            newstr[newstr_count++] = buff[count];
 -            newstr[newstr_count] = buff[count];
 -          } else {
 -            newstr[newstr_count] = buff[count];
 -          }
 -        }
 -        newstr_count++;
 -      }
 -
 -      line = lexer->line_number;
 -      lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
 -      raise_lexer_error(newstr, line);
 -    } else {
 -      rb_funcall(listener, rb_intern("eof"), 0);
 -    }
 -  }
 -	break;
 -#line 1262 "ext/gherkin_lexer_da/gherkin_lexer_da.c"
 -		}
 -	}
 -	}
 -
 -	_out: {}
 -	}
 -
 -#line 426 "ragel/i18n/da.c.rl"
 -
 -    assert(p <= pe && "data overflow after parsing execute");
 -    assert(lexer->content_start <= len && "content starts after data end");
 -    assert(lexer->mark < len && "mark is after data end");
 -    
 -    /* Reset lexer by re-initializing the whole thing */
 -    lexer_init(lexer);
 -
 -    if (cs == lexer_error) {
 -      rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails.");
 -    } else {
 -      return Qtrue;
 -    }
 -  }
 -}
 -
 -void Init_gherkin_lexer_da()
 -{
 -  mGherkin = rb_define_module("Gherkin");
 -  mGherkinLexer = rb_define_module_under(mGherkin, "Lexer");
 -  rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError"));
 -
 -  mCLexer = rb_define_module_under(mGherkin, "CLexer");
 -  cI18nLexer = rb_define_class_under(mCLexer, "Da", rb_cObject);
 -  rb_define_alloc_func(cI18nLexer, CLexer_alloc);
 -  rb_define_method(cI18nLexer, "initialize", CLexer_init, 1);
 -  rb_define_method(cI18nLexer, "scan", CLexer_scan, 1);
 -}
 -
diff --cc ext/gherkin_lexer_de/extconf.rb
index 47e8049,47e8049..0000000
deleted file mode 100644,100644
--- a/ext/gherkin_lexer_de/extconf.rb
+++ /dev/null
@@@ -1,6 -1,6 +1,0 @@@
--require 'mkmf'
--CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags']
--$CFLAGS << ' -O0 -Wall' if CONFIG['CC'] =~ /gcc|clang/
--dir_config("gherkin_lexer_de")
--have_library("c", "main")
--create_makefile("gherkin_lexer_de")
diff --cc ext/gherkin_lexer_de/gherkin_lexer_de.c
index 705a428,6dfc355..0000000
deleted file mode 100644,100644
--- a/ext/gherkin_lexer_de/gherkin_lexer_de.c
+++ /dev/null
@@@ -1,1415 -1,1425 +1,0 @@@
--
- #line 1 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/de.c.rl"
- #include <assert.h>
- #include <ruby.h>
- 
- #if defined(_WIN32)
- #include <stddef.h>
- #endif
- 
- #ifdef HAVE_RUBY_RE_H
- #include <ruby/re.h>
- #else
- #include <re.h>
- #endif
- 
- #ifdef HAVE_RUBY_ENCODING_H
- #include <ruby/encoding.h>
- #define ENCODED_STR_NEW(ptr, len) \
-     rb_enc_str_new(ptr, len, rb_utf8_encoding())
- #else
- #define ENCODED_STR_NEW(ptr, len) \
-     rb_str_new(ptr, len)
- #endif
- 
- #ifndef RSTRING_PTR
- #define RSTRING_PTR(s) (RSTRING(s)->ptr)
- #endif
- 
- #ifndef RSTRING_LEN
- #define RSTRING_LEN(s) (RSTRING(s)->len)
- #endif
- 
- #define DATA_GET(FROM, TYPE, NAME) \
-   Data_Get_Struct(FROM, TYPE, NAME); \
-   if (NAME == NULL) { \
-     rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \
-   }
-  
- typedef struct lexer_state {
-   int content_len;
-   int line_number;
-   int current_line;
-   int start_col;
-   size_t mark;
-   size_t keyword_start;
-   size_t keyword_end;
-   size_t next_keyword_start;
-   size_t content_start;
-   size_t content_end;
-   size_t docstring_content_type_start;
-   size_t docstring_content_type_end;
-   size_t query_start;
-   size_t last_newline;
-   size_t final_newline;
- } lexer_state;
- 
- static VALUE mGherkin;
- static VALUE mGherkinLexer;
- static VALUE mCLexer;
- static VALUE cI18nLexer;
- static VALUE rb_eGherkinLexingError;
- 
- #define LEN(AT, P) (P - data - lexer->AT)
- #define MARK(M, P) (lexer->M = (P) - data)
- #define PTR_TO(P) (data + lexer->P)
- 
- #define STORE_KW_END_CON(EVENT) \
-   store_multiline_kw_con(listener, # EVENT, \
-     PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \
-     PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \
-     lexer->current_line, lexer->start_col); \
-     if (lexer->content_end != 0) { \
-       p = PTR_TO(content_end - 1); \
-     } \
-     lexer->content_end = 0
- 
- #define STORE_ATTR(ATTR) \
-     store_attr(listener, # ATTR, \
-       PTR_TO(content_start), LEN(content_start, p), \
-       lexer->line_number)
- 
- 
- #line 254 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/de.c.rl"
- 
- 
- /** Data **/
- 
- #line 89 "ext/gherkin_lexer_de/gherkin_lexer_de.c"
- static const char _lexer_actions[] = {
- 	0, 1, 0, 1, 1, 1, 2, 1, 
- 	3, 1, 4, 1, 5, 1, 6, 1, 
- 	7, 1, 8, 1, 9, 1, 10, 1, 
- 	11, 1, 12, 1, 13, 1, 16, 1, 
- 	17, 1, 18, 1, 19, 1, 20, 1, 
- 	21, 1, 22, 1, 23, 2, 1, 18, 
- 	2, 4, 5, 2, 13, 0, 2, 14, 
- 	15, 2, 17, 0, 2, 17, 2, 2, 
- 	17, 16, 2, 17, 19, 2, 18, 6, 
- 	2, 18, 7, 2, 18, 8, 2, 18, 
- 	9, 2, 18, 10, 2, 18, 16, 2, 
- 	20, 21, 2, 22, 0, 2, 22, 2, 
- 	2, 22, 16, 2, 22, 19, 3, 3, 
- 	14, 15, 3, 5, 14, 15, 3, 11, 
- 	14, 15, 3, 12, 14, 15, 3, 13, 
- 	14, 15, 3, 14, 15, 18, 3, 17, 
- 	0, 11, 3, 17, 14, 15, 4, 1, 
- 	14, 15, 18, 4, 4, 5, 14, 15, 
- 	4, 17, 0, 14, 15, 5, 17, 0, 
- 	11, 14, 15
- };
- 
- static const short _lexer_key_offsets[] = {
- 	0, 0, 19, 20, 21, 39, 40, 41, 
- 	43, 45, 50, 55, 60, 65, 69, 73, 
- 	75, 76, 77, 78, 79, 80, 81, 82, 
- 	83, 84, 85, 86, 87, 88, 89, 90, 
- 	91, 93, 95, 100, 107, 112, 114, 115, 
- 	116, 117, 118, 119, 120, 121, 122, 123, 
- 	124, 125, 126, 127, 128, 129, 130, 131, 
- 	132, 133, 134, 135, 142, 144, 146, 148, 
- 	150, 152, 154, 156, 158, 160, 162, 164, 
- 	166, 168, 170, 172, 190, 191, 192, 193, 
- 	194, 195, 196, 197, 198, 199, 200, 201, 
- 	202, 203, 204, 205, 206, 207, 208, 209, 
- 	220, 222, 224, 226, 228, 230, 232, 234, 
- 	236, 238, 240, 242, 244, 246, 248, 250, 
- 	252, 254, 256, 258, 260, 262, 264, 266, 
- 	268, 270, 272, 274, 276, 278, 280, 282, 
- 	284, 286, 288, 290, 292, 294, 296, 298, 
- 	300, 302, 304, 306, 308, 310, 312, 314, 
- 	316, 318, 320, 322, 325, 327, 329, 331, 
- 	333, 335, 337, 339, 341, 343, 344, 345, 
- 	346, 347, 348, 349, 350, 351, 352, 353, 
- 	354, 355, 356, 357, 358, 359, 360, 361, 
- 	362, 377, 379, 381, 383, 385, 387, 389, 
- 	391, 393, 395, 397, 399, 401, 403, 405, 
- 	407, 410, 412, 414, 416, 418, 420, 422, 
- 	424, 426, 428, 430, 432, 434, 436, 438, 
- 	440, 442, 444, 446, 448, 450, 452, 454, 
- 	456, 458, 460, 462, 464, 466, 468, 470, 
- 	472, 474, 476, 478, 480, 482, 484, 486, 
- 	488, 490, 492, 494, 496, 498, 501, 503, 
- 	505, 507, 509, 511, 513, 515, 517, 519, 
- 	521, 523, 524, 525, 526, 527, 528, 529, 
- 	530, 532, 533, 534, 549, 551, 553, 555, 
- 	557, 559, 561, 563, 565, 567, 569, 571, 
- 	573, 575, 577, 579, 582, 584, 586, 588, 
- 	590, 592, 594, 596, 598, 600, 602, 604, 
- 	606, 608, 610, 612, 614, 616, 618, 620, 
- 	622, 624, 626, 628, 630, 632, 634, 636, 
- 	639, 641, 643, 645, 647, 649, 651, 653, 
- 	655, 657, 659, 661, 663, 665, 667, 669, 
- 	671, 673, 675, 677, 679, 681, 683, 685, 
- 	688, 690, 692, 694, 696, 698, 700, 702, 
- 	704, 706, 708, 710, 711, 712, 713, 714, 
- 	715, 716, 717, 718, 719, 720, 721, 736, 
- 	738, 740, 742, 744, 746, 748, 750, 752, 
- 	754, 756, 758, 760, 762, 764, 766, 769, 
- 	771, 773, 775, 777, 779, 781, 783, 785, 
- 	787, 789, 791, 793, 795, 797, 799, 801, 
- 	803, 805, 807, 809, 811, 813, 815, 817, 
- 	819, 821, 823, 825, 827, 829, 831, 833, 
- 	835, 837, 839, 841, 843, 845, 847, 849, 
- 	851, 853, 855, 857, 859, 861, 863, 864, 
- 	865, 866, 870, 876, 879, 881, 887, 905
- };
- 
- static const char _lexer_trans_keys[] = {
- 	-17, 10, 32, 34, 35, 37, 42, 64, 
- 	65, 66, 68, 70, 71, 83, 85, 87, 
- 	124, 9, 13, -69, -65, 10, 32, 34, 
- 	35, 37, 42, 64, 65, 66, 68, 70, 
- 	71, 83, 85, 87, 124, 9, 13, 34, 
- 	34, 10, 13, 10, 13, 10, 32, 34, 
- 	9, 13, 10, 32, 34, 9, 13, 10, 
- 	32, 34, 9, 13, 10, 32, 34, 9, 
- 	13, 10, 32, 9, 13, 10, 32, 9, 
- 	13, 10, 13, 10, 95, 70, 69, 65, 
- 	84, 85, 82, 69, 95, 69, 78, 68, 
- 	95, 37, 32, 10, 13, 10, 13, 13, 
- 	32, 64, 9, 10, 9, 10, 13, 32, 
- 	64, 11, 12, 10, 32, 64, 9, 13, 
- 	98, 110, 101, 114, 103, 101, 110, 111, 
- 	109, 109, 101, 110, 101, 105, 115, 112, 
- 	105, 101, 108, 101, 58, 10, 10, 10, 
- 	32, 35, 70, 124, 9, 13, 10, 117, 
- 	10, 110, 10, 107, 10, 116, 10, 105, 
- 	10, 111, 10, 110, 10, 97, 10, 108, 
- 	10, 105, 10, 116, -61, 10, -92, 10, 
- 	10, 116, 10, 58, 10, 32, 34, 35, 
- 	37, 42, 64, 65, 66, 68, 70, 71, 
- 	83, 85, 87, 124, 9, 13, 97, 110, 
- 	117, 110, 107, 116, 105, 111, 110, 97, 
- 	108, 105, 116, -61, -92, 116, 58, 10, 
- 	10, 10, 32, 35, 37, 64, 66, 70, 
- 	71, 83, 9, 13, 10, 95, 10, 70, 
- 	10, 69, 10, 65, 10, 84, 10, 85, 
- 	10, 82, 10, 69, 10, 95, 10, 69, 
- 	10, 78, 10, 68, 10, 95, 10, 37, 
- 	10, 101, 10, 105, 10, 115, 10, 112, 
- 	10, 105, 10, 101, 10, 108, 10, 101, 
- 	10, 58, 10, 117, 10, 110, 10, 107, 
- 	10, 116, 10, 105, 10, 111, 10, 110, 
- 	10, 97, 10, 108, 10, 105, 10, 116, 
- 	-61, 10, -92, 10, 10, 116, 10, 114, 
- 	10, 117, 10, 110, 10, 100, 10, 108, 
- 	10, 97, 10, 103, 10, 122, 10, 101, 
- 	10, 110, 10, 97, 10, 114, 10, 105, 
- 	10, 111, 10, 58, 103, 10, 114, 10, 
- 	117, 10, 110, 10, 100, 10, 114, 10, 
- 	105, 10, 115, 10, 115, 101, 114, 103, 
- 	101, 98, 101, 110, 32, 115, 101, 105, 
- 	117, 110, 100, 108, 97, 103, 101, 58, 
- 	10, 10, 10, 32, 35, 37, 42, 64, 
- 	65, 68, 70, 71, 83, 85, 87, 9, 
- 	13, 10, 95, 10, 70, 10, 69, 10, 
- 	65, 10, 84, 10, 85, 10, 82, 10, 
- 	69, 10, 95, 10, 69, 10, 78, 10, 
- 	68, 10, 95, 10, 37, 10, 32, 10, 
- 	98, 110, 10, 101, 10, 114, 10, 103, 
- 	10, 101, 10, 110, 10, 111, 10, 109, 
- 	10, 109, 10, 101, 10, 110, 10, 97, 
- 	10, 110, 10, 117, 10, 110, 10, 107, 
- 	10, 116, 10, 105, 10, 111, 10, 110, 
- 	10, 97, 10, 108, 10, 105, 10, 116, 
- 	-61, 10, -92, 10, 10, 116, 10, 58, 
- 	10, 101, 10, 103, 10, 101, 10, 98, 
- 	10, 101, 10, 110, 10, 32, 10, 115, 
- 	10, 101, 10, 105, 10, 122, 10, 101, 
- 	10, 110, 10, 97, 10, 114, 10, 105, 
- 	10, 111, 10, 58, 103, 10, 114, 10, 
- 	117, 10, 110, 10, 100, 10, 114, 10, 
- 	105, 10, 115, 10, 115, 10, 110, 10, 
- 	100, 10, 101, 122, 101, 110, 97, 114, 
- 	105, 111, 58, 103, 10, 10, 10, 32, 
- 	35, 37, 42, 64, 65, 68, 70, 71, 
- 	83, 85, 87, 9, 13, 10, 95, 10, 
- 	70, 10, 69, 10, 65, 10, 84, 10, 
- 	85, 10, 82, 10, 69, 10, 95, 10, 
- 	69, 10, 78, 10, 68, 10, 95, 10, 
- 	37, 10, 32, 10, 98, 110, 10, 101, 
- 	10, 114, 10, 103, 10, 101, 10, 110, 
- 	10, 111, 10, 109, 10, 109, 10, 101, 
- 	10, 110, 10, 97, 10, 110, 10, 117, 
- 	10, 110, 10, 107, 10, 116, 10, 105, 
- 	10, 111, 10, 110, 10, 97, 10, 108, 
- 	10, 105, 10, 116, -61, 10, -92, 10, 
- 	10, 116, 10, 58, 10, 101, 114, 10, 
- 	103, 10, 101, 10, 98, 10, 101, 10, 
- 	110, 10, 32, 10, 115, 10, 101, 10, 
- 	105, 10, 117, 10, 110, 10, 100, 10, 
- 	108, 10, 97, 10, 103, 10, 101, 10, 
- 	122, 10, 101, 10, 110, 10, 97, 10, 
- 	114, 10, 105, 10, 111, 10, 58, 103, 
- 	10, 114, 10, 117, 10, 110, 10, 100, 
- 	10, 114, 10, 105, 10, 115, 10, 115, 
- 	10, 110, 10, 100, 10, 101, 114, 117, 
- 	110, 100, 114, 105, 115, 115, 58, 10, 
- 	10, 10, 32, 35, 37, 42, 64, 65, 
- 	68, 70, 71, 83, 85, 87, 9, 13, 
- 	10, 95, 10, 70, 10, 69, 10, 65, 
- 	10, 84, 10, 85, 10, 82, 10, 69, 
- 	10, 95, 10, 69, 10, 78, 10, 68, 
- 	10, 95, 10, 37, 10, 32, 10, 98, 
- 	110, 10, 101, 10, 114, 10, 103, 10, 
- 	101, 10, 110, 10, 111, 10, 109, 10, 
- 	109, 10, 101, 10, 110, 10, 97, 10, 
- 	110, 10, 117, 10, 110, 10, 107, 10, 
- 	116, 10, 105, 10, 111, 10, 110, 10, 
- 	97, 10, 108, 10, 105, 10, 116, -61, 
- 	10, -92, 10, 10, 116, 10, 58, 10, 
- 	101, 10, 103, 10, 101, 10, 98, 10, 
- 	101, 10, 110, 10, 32, 10, 115, 10, 
- 	101, 10, 105, 10, 122, 10, 101, 10, 
- 	110, 10, 97, 10, 114, 10, 105, 10, 
- 	111, 10, 110, 10, 100, 10, 101, 110, 
- 	100, 101, 32, 124, 9, 13, 10, 32, 
- 	92, 124, 9, 13, 10, 92, 124, 10, 
- 	92, 10, 32, 92, 124, 9, 13, 10, 
- 	32, 34, 35, 37, 42, 64, 65, 66, 
- 	68, 70, 71, 83, 85, 87, 124, 9, 
- 	13, 0
- };
- 
- static const char _lexer_single_lengths[] = {
- 	0, 17, 1, 1, 16, 1, 1, 2, 
- 	2, 3, 3, 3, 3, 2, 2, 2, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	2, 2, 3, 5, 3, 2, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 5, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 16, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 9, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 3, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	13, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	3, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 3, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 1, 1, 1, 1, 1, 1, 1, 
- 	2, 1, 1, 13, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 3, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 3, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 3, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 13, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 3, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 1, 1, 
- 	1, 2, 4, 3, 2, 4, 16, 0
- };
- 
- static const char _lexer_range_lengths[] = {
- 	0, 1, 0, 0, 1, 0, 0, 0, 
- 	0, 1, 1, 1, 1, 1, 1, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 1, 1, 1, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 1, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 1, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 1, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	1, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 1, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 1, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 1, 1, 0, 0, 1, 1, 0
- };
- 
- static const short _lexer_index_offsets[] = {
- 	0, 0, 19, 21, 23, 41, 43, 45, 
- 	48, 51, 56, 61, 66, 71, 75, 79, 
- 	82, 84, 86, 88, 90, 92, 94, 96, 
- 	98, 100, 102, 104, 106, 108, 110, 112, 
- 	114, 117, 120, 125, 132, 137, 140, 142, 
- 	144, 146, 148, 150, 152, 154, 156, 158, 
- 	160, 162, 164, 166, 168, 170, 172, 174, 
- 	176, 178, 180, 182, 189, 192, 195, 198, 
- 	201, 204, 207, 210, 213, 216, 219, 222, 
- 	225, 228, 231, 234, 252, 254, 256, 258, 
- 	260, 262, 264, 266, 268, 270, 272, 274, 
- 	276, 278, 280, 282, 284, 286, 288, 290, 
- 	301, 304, 307, 310, 313, 316, 319, 322, 
- 	325, 328, 331, 334, 337, 340, 343, 346, 
- 	349, 352, 355, 358, 361, 364, 367, 370, 
- 	373, 376, 379, 382, 385, 388, 391, 394, 
- 	397, 400, 403, 406, 409, 412, 415, 418, 
- 	421, 424, 427, 430, 433, 436, 439, 442, 
- 	445, 448, 451, 454, 458, 461, 464, 467, 
- 	470, 473, 476, 479, 482, 485, 487, 489, 
- 	491, 493, 495, 497, 499, 501, 503, 505, 
- 	507, 509, 511, 513, 515, 517, 519, 521, 
- 	523, 538, 541, 544, 547, 550, 553, 556, 
- 	559, 562, 565, 568, 571, 574, 577, 580, 
- 	583, 587, 590, 593, 596, 599, 602, 605, 
- 	608, 611, 614, 617, 620, 623, 626, 629, 
- 	632, 635, 638, 641, 644, 647, 650, 653, 
- 	656, 659, 662, 665, 668, 671, 674, 677, 
- 	680, 683, 686, 689, 692, 695, 698, 701, 
- 	704, 707, 710, 713, 716, 719, 723, 726, 
- 	729, 732, 735, 738, 741, 744, 747, 750, 
- 	753, 756, 758, 760, 762, 764, 766, 768, 
- 	770, 773, 775, 777, 792, 795, 798, 801, 
- 	804, 807, 810, 813, 816, 819, 822, 825, 
- 	828, 831, 834, 837, 841, 844, 847, 850, 
- 	853, 856, 859, 862, 865, 868, 871, 874, 
- 	877, 880, 883, 886, 889, 892, 895, 898, 
- 	901, 904, 907, 910, 913, 916, 919, 922, 
- 	926, 929, 932, 935, 938, 941, 944, 947, 
- 	950, 953, 956, 959, 962, 965, 968, 971, 
- 	974, 977, 980, 983, 986, 989, 992, 995, 
- 	999, 1002, 1005, 1008, 1011, 1014, 1017, 1020, 
- 	1023, 1026, 1029, 1032, 1034, 1036, 1038, 1040, 
- 	1042, 1044, 1046, 1048, 1050, 1052, 1054, 1069, 
- 	1072, 1075, 1078, 1081, 1084, 1087, 1090, 1093, 
- 	1096, 1099, 1102, 1105, 1108, 1111, 1114, 1118, 
- 	1121, 1124, 1127, 1130, 1133, 1136, 1139, 1142, 
- 	1145, 1148, 1151, 1154, 1157, 1160, 1163, 1166, 
- 	1169, 1172, 1175, 1178, 1181, 1184, 1187, 1190, 
- 	1193, 1196, 1199, 1202, 1205, 1208, 1211, 1214, 
- 	1217, 1220, 1223, 1226, 1229, 1232, 1235, 1238, 
- 	1241, 1244, 1247, 1250, 1253, 1256, 1259, 1261, 
- 	1263, 1265, 1269, 1275, 1279, 1282, 1288, 1306
- };
- 
- static const short _lexer_trans_targs[] = {
- 	2, 4, 4, 5, 15, 17, 31, 34, 
- 	37, 48, 76, 78, 156, 249, 414, 416, 
- 	417, 4, 0, 3, 0, 4, 0, 4, 
- 	4, 5, 15, 17, 31, 34, 37, 48, 
- 	76, 78, 156, 249, 414, 416, 417, 4, 
- 	0, 6, 0, 7, 0, 9, 8, 8, 
- 	9, 8, 8, 10, 10, 11, 10, 10, 
- 	10, 10, 11, 10, 10, 10, 10, 12, 
- 	10, 10, 10, 10, 13, 10, 10, 4, 
- 	14, 14, 0, 4, 14, 14, 0, 4, 
- 	16, 15, 4, 0, 18, 0, 19, 0, 
- 	20, 0, 21, 0, 22, 0, 23, 0, 
- 	24, 0, 25, 0, 26, 0, 27, 0, 
- 	28, 0, 29, 0, 30, 0, 423, 0, 
- 	32, 0, 4, 16, 33, 4, 16, 33, 
- 	0, 0, 0, 0, 35, 36, 4, 36, 
- 	36, 34, 35, 35, 4, 36, 34, 36, 
- 	0, 38, 40, 0, 39, 0, 31, 0, 
- 	41, 0, 42, 0, 43, 0, 44, 0, 
- 	45, 0, 46, 0, 47, 0, 31, 0, 
- 	49, 0, 50, 0, 51, 0, 52, 0, 
- 	53, 0, 54, 0, 55, 0, 56, 0, 
- 	57, 0, 59, 58, 59, 58, 59, 59, 
- 	4, 60, 4, 59, 58, 59, 61, 58, 
- 	59, 62, 58, 59, 63, 58, 59, 64, 
- 	58, 59, 65, 58, 59, 66, 58, 59, 
- 	67, 58, 59, 68, 58, 59, 69, 58, 
- 	59, 70, 58, 59, 71, 58, 72, 59, 
- 	58, 73, 59, 58, 59, 74, 58, 59, 
- 	75, 58, 4, 4, 5, 15, 17, 31, 
- 	34, 37, 48, 76, 78, 156, 249, 414, 
- 	416, 417, 4, 0, 77, 0, 47, 0, 
- 	79, 0, 80, 0, 81, 0, 82, 0, 
- 	83, 0, 84, 0, 85, 0, 86, 0, 
- 	87, 0, 88, 0, 89, 0, 90, 0, 
- 	91, 0, 92, 0, 93, 0, 95, 94, 
- 	95, 94, 95, 95, 4, 96, 4, 110, 
- 	119, 133, 140, 95, 94, 95, 97, 94, 
- 	95, 98, 94, 95, 99, 94, 95, 100, 
- 	94, 95, 101, 94, 95, 102, 94, 95, 
- 	103, 94, 95, 104, 94, 95, 105, 94, 
- 	95, 106, 94, 95, 107, 94, 95, 108, 
- 	94, 95, 109, 94, 95, 4, 94, 95, 
- 	111, 94, 95, 112, 94, 95, 113, 94, 
- 	95, 114, 94, 95, 115, 94, 95, 116, 
- 	94, 95, 117, 94, 95, 118, 94, 95, 
- 	75, 94, 95, 120, 94, 95, 121, 94, 
- 	95, 122, 94, 95, 123, 94, 95, 124, 
- 	94, 95, 125, 94, 95, 126, 94, 95, 
- 	127, 94, 95, 128, 94, 95, 129, 94, 
- 	95, 130, 94, 131, 95, 94, 132, 95, 
- 	94, 95, 118, 94, 95, 134, 94, 95, 
- 	135, 94, 95, 136, 94, 95, 137, 94, 
- 	95, 138, 94, 95, 139, 94, 95, 117, 
- 	94, 95, 141, 94, 95, 142, 94, 95, 
- 	143, 94, 95, 144, 94, 95, 145, 94, 
- 	95, 146, 94, 95, 147, 94, 95, 75, 
- 	148, 94, 95, 149, 94, 95, 150, 94, 
- 	95, 151, 94, 95, 152, 94, 95, 153, 
- 	94, 95, 154, 94, 95, 155, 94, 95, 
- 	118, 94, 157, 166, 0, 158, 0, 159, 
- 	0, 160, 0, 161, 0, 162, 0, 163, 
- 	0, 164, 0, 165, 0, 31, 0, 167, 
- 	0, 168, 0, 169, 0, 170, 0, 171, 
- 	0, 172, 0, 173, 0, 174, 0, 176, 
- 	175, 176, 175, 176, 176, 4, 177, 191, 
- 	4, 192, 203, 205, 220, 230, 246, 248, 
- 	176, 175, 176, 178, 175, 176, 179, 175, 
- 	176, 180, 175, 176, 181, 175, 176, 182, 
- 	175, 176, 183, 175, 176, 184, 175, 176, 
- 	185, 175, 176, 186, 175, 176, 187, 175, 
- 	176, 188, 175, 176, 189, 175, 176, 190, 
- 	175, 176, 4, 175, 176, 75, 175, 176, 
- 	193, 195, 175, 176, 194, 175, 176, 191, 
- 	175, 176, 196, 175, 176, 197, 175, 176, 
- 	198, 175, 176, 199, 175, 176, 200, 175, 
- 	176, 201, 175, 176, 202, 175, 176, 191, 
- 	175, 176, 204, 175, 176, 202, 175, 176, 
- 	206, 175, 176, 207, 175, 176, 208, 175, 
- 	176, 209, 175, 176, 210, 175, 176, 211, 
- 	175, 176, 212, 175, 176, 213, 175, 176, 
- 	214, 175, 176, 215, 175, 176, 216, 175, 
- 	217, 176, 175, 218, 176, 175, 176, 219, 
- 	175, 176, 75, 175, 176, 221, 175, 176, 
- 	222, 175, 176, 223, 175, 176, 224, 175, 
- 	176, 225, 175, 176, 226, 175, 176, 227, 
- 	175, 176, 228, 175, 176, 229, 175, 176, 
- 	191, 175, 176, 231, 175, 176, 232, 175, 
- 	176, 233, 175, 176, 234, 175, 176, 235, 
- 	175, 176, 236, 175, 176, 237, 175, 176, 
- 	75, 238, 175, 176, 239, 175, 176, 240, 
- 	175, 176, 241, 175, 176, 242, 175, 176, 
- 	243, 175, 176, 244, 175, 176, 245, 175, 
- 	176, 219, 175, 176, 247, 175, 176, 191, 
- 	175, 176, 204, 175, 250, 0, 251, 0, 
- 	252, 0, 253, 0, 254, 0, 255, 0, 
- 	256, 0, 257, 339, 0, 259, 258, 259, 
- 	258, 259, 259, 4, 260, 274, 4, 275, 
- 	286, 288, 303, 320, 336, 338, 259, 258, 
- 	259, 261, 258, 259, 262, 258, 259, 263, 
- 	258, 259, 264, 258, 259, 265, 258, 259, 
- 	266, 258, 259, 267, 258, 259, 268, 258, 
- 	259, 269, 258, 259, 270, 258, 259, 271, 
- 	258, 259, 272, 258, 259, 273, 258, 259, 
- 	4, 258, 259, 75, 258, 259, 276, 278, 
- 	258, 259, 277, 258, 259, 274, 258, 259, 
- 	279, 258, 259, 280, 258, 259, 281, 258, 
- 	259, 282, 258, 259, 283, 258, 259, 284, 
- 	258, 259, 285, 258, 259, 274, 258, 259, 
- 	287, 258, 259, 285, 258, 259, 289, 258, 
- 	259, 290, 258, 259, 291, 258, 259, 292, 
- 	258, 259, 293, 258, 259, 294, 258, 259, 
- 	295, 258, 259, 296, 258, 259, 297, 258, 
- 	259, 298, 258, 259, 299, 258, 300, 259, 
- 	258, 301, 259, 258, 259, 302, 258, 259, 
- 	75, 258, 259, 304, 313, 258, 259, 305, 
- 	258, 259, 306, 258, 259, 307, 258, 259, 
- 	308, 258, 259, 309, 258, 259, 310, 258, 
- 	259, 311, 258, 259, 312, 258, 259, 274, 
- 	258, 259, 314, 258, 259, 315, 258, 259, 
- 	316, 258, 259, 317, 258, 259, 318, 258, 
- 	259, 319, 258, 259, 302, 258, 259, 321, 
- 	258, 259, 322, 258, 259, 323, 258, 259, 
- 	324, 258, 259, 325, 258, 259, 326, 258, 
- 	259, 327, 258, 259, 75, 328, 258, 259, 
- 	329, 258, 259, 330, 258, 259, 331, 258, 
- 	259, 332, 258, 259, 333, 258, 259, 334, 
- 	258, 259, 335, 258, 259, 302, 258, 259, 
- 	337, 258, 259, 274, 258, 259, 287, 258, 
- 	340, 0, 341, 0, 342, 0, 343, 0, 
- 	344, 0, 345, 0, 346, 0, 347, 0, 
- 	348, 0, 350, 349, 350, 349, 350, 350, 
- 	4, 351, 365, 4, 366, 377, 379, 394, 
- 	404, 411, 413, 350, 349, 350, 352, 349, 
- 	350, 353, 349, 350, 354, 349, 350, 355, 
- 	349, 350, 356, 349, 350, 357, 349, 350, 
- 	358, 349, 350, 359, 349, 350, 360, 349, 
- 	350, 361, 349, 350, 362, 349, 350, 363, 
- 	349, 350, 364, 349, 350, 4, 349, 350, 
- 	75, 349, 350, 367, 369, 349, 350, 368, 
- 	349, 350, 365, 349, 350, 370, 349, 350, 
- 	371, 349, 350, 372, 349, 350, 373, 349, 
- 	350, 374, 349, 350, 375, 349, 350, 376, 
- 	349, 350, 365, 349, 350, 378, 349, 350, 
- 	376, 349, 350, 380, 349, 350, 381, 349, 
- 	350, 382, 349, 350, 383, 349, 350, 384, 
- 	349, 350, 385, 349, 350, 386, 349, 350, 
- 	387, 349, 350, 388, 349, 350, 389, 349, 
- 	350, 390, 349, 391, 350, 349, 392, 350, 
- 	349, 350, 393, 349, 350, 75, 349, 350, 
- 	395, 349, 350, 396, 349, 350, 397, 349, 
- 	350, 398, 349, 350, 399, 349, 350, 400, 
- 	349, 350, 401, 349, 350, 402, 349, 350, 
- 	403, 349, 350, 365, 349, 350, 405, 349, 
- 	350, 406, 349, 350, 407, 349, 350, 408, 
- 	349, 350, 409, 349, 350, 410, 349, 350, 
- 	393, 349, 350, 412, 349, 350, 365, 349, 
- 	350, 378, 349, 415, 0, 31, 0, 77, 
- 	0, 417, 418, 417, 0, 422, 421, 420, 
- 	418, 421, 419, 0, 420, 418, 419, 0, 
- 	420, 419, 422, 421, 420, 418, 421, 419, 
- 	422, 422, 5, 15, 17, 31, 34, 37, 
- 	48, 76, 78, 156, 249, 414, 416, 417, 
- 	422, 0, 0, 0
- };
- 
- static const unsigned char _lexer_trans_actions[] = {
- 	0, 54, 0, 5, 1, 0, 29, 1, 
- 	29, 29, 29, 29, 29, 29, 29, 29, 
- 	35, 0, 43, 0, 43, 0, 43, 54, 
- 	0, 5, 1, 0, 29, 1, 29, 29, 
- 	29, 29, 29, 29, 29, 29, 35, 0, 
- 	43, 0, 43, 0, 43, 139, 48, 9, 
- 	106, 11, 0, 134, 45, 45, 45, 3, 
- 	122, 33, 33, 33, 0, 122, 33, 33, 
- 	33, 0, 122, 33, 0, 33, 0, 102, 
- 	7, 7, 43, 54, 0, 0, 43, 114, 
- 	25, 0, 54, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 149, 126, 57, 110, 23, 0, 
- 	43, 43, 43, 43, 0, 27, 118, 27, 
- 	27, 51, 27, 0, 54, 0, 1, 0, 
- 	43, 0, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 144, 57, 54, 0, 54, 0, 
- 	81, 84, 81, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 0, 54, 
- 	0, 0, 54, 0, 54, 0, 0, 54, 
- 	21, 0, 130, 31, 60, 57, 31, 63, 
- 	57, 63, 63, 63, 63, 63, 63, 63, 
- 	63, 66, 31, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 144, 57, 
- 	54, 0, 54, 0, 69, 33, 69, 84, 
- 	84, 84, 84, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 13, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	13, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 0, 54, 0, 0, 54, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 13, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 0, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 144, 
- 	57, 54, 0, 54, 0, 72, 33, 84, 
- 	72, 84, 84, 84, 84, 84, 84, 84, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 15, 0, 54, 15, 0, 54, 
- 	0, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	0, 54, 0, 0, 54, 0, 54, 0, 
- 	0, 54, 15, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	15, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 0, 43, 144, 57, 54, 
- 	0, 54, 0, 75, 33, 84, 75, 84, 
- 	84, 84, 84, 84, 84, 84, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	17, 0, 54, 17, 0, 54, 0, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 0, 54, 
- 	0, 0, 54, 0, 54, 0, 0, 54, 
- 	17, 0, 54, 0, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 17, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 144, 57, 54, 0, 54, 0, 
- 	78, 33, 84, 78, 84, 84, 84, 84, 
- 	84, 84, 84, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 19, 0, 54, 
- 	19, 0, 54, 0, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 0, 54, 0, 0, 54, 
- 	0, 54, 0, 0, 54, 19, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 0, 43, 0, 43, 0, 
- 	43, 0, 0, 0, 43, 54, 37, 37, 
- 	87, 37, 37, 43, 0, 39, 0, 43, 
- 	0, 0, 54, 0, 0, 39, 0, 0, 
- 	54, 0, 93, 90, 41, 96, 90, 96, 
- 	96, 96, 96, 96, 96, 96, 96, 99, 
- 	0, 43, 0, 0
- };
- 
- static const unsigned char _lexer_eof_actions[] = {
- 	0, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43
- };
- 
- static const int lexer_start = 1;
- static const int lexer_first_final = 423;
- static const int lexer_error = 0;
- 
- static const int lexer_en_main = 1;
- 
- 
- #line 258 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/de.c.rl"
- 
- static VALUE 
- unindent(VALUE con, int start_col)
- {
-   VALUE re;
-   // Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters
-   char pat[32]; 
-   snprintf(pat, 32, "^[\t ]{0,%d}", start_col); 
-   re = rb_reg_regcomp(rb_str_new2(pat));
-   rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2(""));
- 
-   return Qnil;
- 
- }
- 
- static void 
- store_kw_con(VALUE listener, const char * event_name, 
-              const char * keyword_at, size_t keyword_length, 
-              const char * at,         size_t length, 
-              int current_line)
- {
-   VALUE con = Qnil, kw = Qnil;
-   kw = ENCODED_STR_NEW(keyword_at, keyword_length);
-   con = ENCODED_STR_NEW(at, length);
-   rb_funcall(con, rb_intern("strip!"), 0);
-   rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); 
- }
- 
- static void
- store_multiline_kw_con(VALUE listener, const char * event_name,
-                       const char * keyword_at, size_t keyword_length,
-                       const char * at,         size_t length,
-                       int current_line, int start_col)
- {
-   VALUE split;
-   VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil;
- 
-   kw = ENCODED_STR_NEW(keyword_at, keyword_length);
-   con = ENCODED_STR_NEW(at, length);
- 
-   unindent(con, start_col);
-   
-   split = rb_str_split(con, "\n");
- 
-   name = rb_funcall(split, rb_intern("shift"), 0);
-   desc = rb_ary_join(split, rb_str_new2( "\n" ));
- 
-   if( name == Qnil ) 
-   {
-     name = rb_str_new2("");
-   }
-   if( rb_funcall(desc, rb_intern("size"), 0) == 0) 
-   {
-     desc = rb_str_new2("");
-   }
-   rb_funcall(name, rb_intern("strip!"), 0);
-   rb_funcall(desc, rb_intern("rstrip!"), 0);
-   rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); 
- }
- 
- static void 
- store_attr(VALUE listener, const char * attr_type,
-            const char * at, size_t length, 
-            int line)
- {
-   VALUE val = ENCODED_STR_NEW(at, length);
-   rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line));
- }
- static void 
- store_docstring_content(VALUE listener, 
-           int start_col, 
-           const char *type_at, size_t type_length,
-           const char *at, size_t length, 
-           int current_line)
- {
-   VALUE re2;
-   VALUE unescape_escaped_quotes;
-   VALUE con = ENCODED_STR_NEW(at, length);
-   VALUE con_type = ENCODED_STR_NEW(type_at, type_length);
- 
-   unindent(con, start_col);
- 
-   re2 = rb_reg_regcomp(rb_str_new2("\r\\Z"));
-   unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\""));
-   rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2(""));
-   rb_funcall(con_type, rb_intern("strip!"), 0);
-   rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\""));
-   rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line));
- }
- static void 
- raise_lexer_error(const char * at, int line)
- { 
-   rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at);
- }
- 
- static void lexer_init(lexer_state *lexer) {
-   lexer->content_start = 0;
-   lexer->content_end = 0;
-   lexer->content_len = 0;
-   lexer->docstring_content_type_start = 0;
-   lexer->docstring_content_type_end = 0;
-   lexer->mark = 0;
-   lexer->keyword_start = 0;
-   lexer->keyword_end = 0;
-   lexer->next_keyword_start = 0;
-   lexer->line_number = 1;
-   lexer->last_newline = 0;
-   lexer->final_newline = 0;
-   lexer->start_col = 0;
- }
- 
- static VALUE CLexer_alloc(VALUE klass)
- {
-   VALUE obj;
-   lexer_state *lxr = ALLOC(lexer_state);
-   lexer_init(lxr);
- 
-   obj = Data_Wrap_Struct(klass, NULL, -1, lxr);
- 
-   return obj;
- }
- 
- static VALUE CLexer_init(VALUE self, VALUE listener)
- {
-   lexer_state *lxr; 
-   rb_iv_set(self, "@listener", listener);
-   
-   lxr = NULL;
-   DATA_GET(self, lexer_state, lxr);
-   lexer_init(lxr);
-   
-   return self;
- }
- 
- static VALUE CLexer_scan(VALUE self, VALUE input)
- {
-   VALUE input_copy;
-   char *data;
-   size_t len;
-   VALUE listener = rb_iv_get(self, "@listener");
- 
-   lexer_state *lexer;
-   lexer = NULL;
-   DATA_GET(self, lexer_state, lexer);
- 
-   input_copy = rb_str_dup(input);
- 
-   rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%"));
-   data = RSTRING_PTR(input_copy);
-   len = RSTRING_LEN(input_copy);
-   
-   if (len == 0) { 
-     rb_raise(rb_eGherkinLexingError, "No content to lex.");
-   } else {
- 
-     const char *p, *pe, *eof;
-     int cs = 0;
-     
-     VALUE current_row = Qnil;
- 
-     p = data;
-     pe = data + len;
-     eof = pe;
-     
-     assert(*pe == '\0' && "pointer does not end on NULL");
-     
-     
- #line 1019 "ext/gherkin_lexer_de/gherkin_lexer_de.c"
- 	{
- 	cs = lexer_start;
- 	}
- 
- #line 425 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/de.c.rl"
-     
- #line 1026 "ext/gherkin_lexer_de/gherkin_lexer_de.c"
- 	{
- 	int _klen;
- 	unsigned int _trans;
- 	const char *_acts;
- 	unsigned int _nacts;
- 	const char *_keys;
- 
- 	if ( p == pe )
- 		goto _test_eof;
- 	if ( cs == 0 )
- 		goto _out;
- _resume:
- 	_keys = _lexer_trans_keys + _lexer_key_offsets[cs];
- 	_trans = _lexer_index_offsets[cs];
- 
- 	_klen = _lexer_single_lengths[cs];
- 	if ( _klen > 0 ) {
- 		const char *_lower = _keys;
- 		const char *_mid;
- 		const char *_upper = _keys + _klen - 1;
- 		while (1) {
- 			if ( _upper < _lower )
- 				break;
- 
- 			_mid = _lower + ((_upper-_lower) >> 1);
- 			if ( (*p) < *_mid )
- 				_upper = _mid - 1;
- 			else if ( (*p) > *_mid )
- 				_lower = _mid + 1;
- 			else {
- 				_trans += (_mid - _keys);
- 				goto _match;
- 			}
- 		}
- 		_keys += _klen;
- 		_trans += _klen;
- 	}
- 
- 	_klen = _lexer_range_lengths[cs];
- 	if ( _klen > 0 ) {
- 		const char *_lower = _keys;
- 		const char *_mid;
- 		const char *_upper = _keys + (_klen<<1) - 2;
- 		while (1) {
- 			if ( _upper < _lower )
- 				break;
- 
- 			_mid = _lower + (((_upper-_lower) >> 1) & ~1);
- 			if ( (*p) < _mid[0] )
- 				_upper = _mid - 2;
- 			else if ( (*p) > _mid[1] )
- 				_lower = _mid + 2;
- 			else {
- 				_trans += ((_mid - _keys)>>1);
- 				goto _match;
- 			}
- 		}
- 		_trans += _klen;
- 	}
- 
- _match:
- 	cs = _lexer_trans_targs[_trans];
- 
- 	if ( _lexer_trans_actions[_trans] == 0 )
- 		goto _again;
- 
- 	_acts = _lexer_actions + _lexer_trans_actions[_trans];
- 	_nacts = (unsigned int) *_acts++;
- 	while ( _nacts-- > 0 )
- 	{
- 		switch ( *_acts++ )
- 		{
- 	case 0:
- #line 83 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/de.c.rl"
- 	{
- 		MARK(content_start, p);
-     lexer->current_line = lexer->line_number;
-     lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2;
-   }
- 	break;
- 	case 1:
- #line 89 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/de.c.rl"
- 	{
-     MARK(content_start, p);
-   }
- 	break;
- 	case 2:
- #line 93 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/de.c.rl"
- 	{
-     lexer->current_line = lexer->line_number;
-     lexer->start_col = p - data - lexer->last_newline;
-   }
- 	break;
- 	case 3:
- #line 98 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/de.c.rl"
- 	{
-     int len = LEN(content_start, PTR_TO(final_newline));
-     int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end));
- 
-     if (len < 0) len = 0;
-     if (type_len < 0) len = 0;
- 
-     store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line);
-   }
- 	break;
- 	case 4:
- #line 108 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/de.c.rl"
- 	{ 
-     MARK(docstring_content_type_start, p);
-   }
- 	break;
- 	case 5:
- #line 112 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/de.c.rl"
- 	{ 
-     MARK(docstring_content_type_end, p);
-   }
- 	break;
- 	case 6:
- #line 116 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/de.c.rl"
- 	{
-     STORE_KW_END_CON(feature);
-   }
- 	break;
- 	case 7:
- #line 120 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/de.c.rl"
- 	{
-     STORE_KW_END_CON(background);
-   }
- 	break;
- 	case 8:
- #line 124 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/de.c.rl"
- 	{
-     STORE_KW_END_CON(scenario);
-   }
- 	break;
- 	case 9:
- #line 128 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/de.c.rl"
- 	{
-     STORE_KW_END_CON(scenario_outline);
-   }
- 	break;
- 	case 10:
- #line 132 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/de.c.rl"
- 	{
-     STORE_KW_END_CON(examples);
-   }
- 	break;
- 	case 11:
- #line 136 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/de.c.rl"
- 	{
-     store_kw_con(listener, "step",
-       PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-       PTR_TO(content_start), LEN(content_start, p), 
-       lexer->current_line);
-   }
- 	break;
- 	case 12:
- #line 143 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/de.c.rl"
- 	{
-     STORE_ATTR(comment);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 13:
- #line 148 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/de.c.rl"
- 	{
-     STORE_ATTR(tag);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 14:
- #line 153 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/de.c.rl"
- 	{
-     lexer->line_number += 1;
-     MARK(final_newline, p);
-   }
- 	break;
- 	case 15:
- #line 158 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/de.c.rl"
- 	{
-     MARK(last_newline, p + 1);
-   }
- 	break;
- 	case 16:
- #line 162 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/de.c.rl"
- 	{
-     if (lexer->mark == 0) {
-       MARK(mark, p);
-     }
-   }
- 	break;
- 	case 17:
- #line 168 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/de.c.rl"
- 	{
-     MARK(keyword_end, p);
-     MARK(keyword_start, PTR_TO(mark));
-     MARK(content_start, p + 1);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 18:
- #line 175 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/de.c.rl"
- 	{
-     MARK(content_end, p);
-   }
- 	break;
- 	case 19:
- #line 179 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/de.c.rl"
- 	{
-     p = p - 1;
-     lexer->current_line = lexer->line_number;
-     current_row = rb_ary_new();
-   }
- 	break;
- 	case 20:
- #line 185 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/de.c.rl"
- 	{
- 		MARK(content_start, p);
-   }
- 	break;
- 	case 21:
- #line 189 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/de.c.rl"
- 	{
-     VALUE re_pipe, re_newline, re_backslash;
-     VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
-     rb_funcall(con, rb_intern("strip!"), 0);
-     re_pipe      = rb_reg_regcomp(rb_str_new2("\\\\\\|"));
-     re_newline   = rb_reg_regcomp(rb_str_new2("\\\\n"));
-     re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_pipe,      rb_str_new2("|"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_newline,   rb_str_new2("\n"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\"));
- 
-     rb_ary_push(current_row, con);
-   }
- 	break;
- 	case 22:
- #line 203 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/de.c.rl"
- 	{
-     rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
-   }
- 	break;
- 	case 23:
- #line 207 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/de.c.rl"
- 	{
-     int line;
-     if (cs < lexer_first_final) {
-       size_t count = 0;
-       VALUE newstr_val;
-       char *newstr;
-       int newstr_count = 0;        
-       size_t len;
-       const char *buff;
-       if (lexer->last_newline != 0) {
-         len = LEN(last_newline, eof);
-         buff = PTR_TO(last_newline);
-       } else {
-         len = strlen(data);
-         buff = data;
-       }
- 
-       // Allocate as a ruby string so that it gets cleaned up by GC
-       newstr_val = rb_str_new(buff, len);
-       newstr = RSTRING_PTR(newstr_val);
- 
- 
-       for (count = 0; count < len; count++) {
-         if(buff[count] == 10) {
-           newstr[newstr_count] = '\0'; // terminate new string at first newline found
-           break;
-         } else {
-           if (buff[count] == '%') {
-             newstr[newstr_count++] = buff[count];
-             newstr[newstr_count] = buff[count];
-           } else {
-             newstr[newstr_count] = buff[count];
-           }
-         }
-         newstr_count++;
-       }
- 
-       line = lexer->line_number;
-       lexer_init(lexer); // Re-initialize so we can scan again with the same lexer
-       raise_lexer_error(newstr, line);
-     } else {
-       rb_funcall(listener, rb_intern("eof"), 0);
-     }
-   }
- 	break;
- #line 1316 "ext/gherkin_lexer_de/gherkin_lexer_de.c"
- 		}
- 	}
- 
- _again:
- 	if ( cs == 0 )
- 		goto _out;
- 	if ( ++p != pe )
- 		goto _resume;
- 	_test_eof: {}
- 	if ( p == eof )
- 	{
- 	const char *__acts = _lexer_actions + _lexer_eof_actions[cs];
- 	unsigned int __nacts = (unsigned int) *__acts++;
- 	while ( __nacts-- > 0 ) {
- 		switch ( *__acts++ ) {
- 	case 23:
- #line 207 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/de.c.rl"
- 	{
-     int line;
-     if (cs < lexer_first_final) {
-       size_t count = 0;
-       VALUE newstr_val;
-       char *newstr;
-       int newstr_count = 0;        
-       size_t len;
-       const char *buff;
-       if (lexer->last_newline != 0) {
-         len = LEN(last_newline, eof);
-         buff = PTR_TO(last_newline);
-       } else {
-         len = strlen(data);
-         buff = data;
-       }
- 
-       // Allocate as a ruby string so that it gets cleaned up by GC
-       newstr_val = rb_str_new(buff, len);
-       newstr = RSTRING_PTR(newstr_val);
- 
- 
-       for (count = 0; count < len; count++) {
-         if(buff[count] == 10) {
-           newstr[newstr_count] = '\0'; // terminate new string at first newline found
-           break;
-         } else {
-           if (buff[count] == '%') {
-             newstr[newstr_count++] = buff[count];
-             newstr[newstr_count] = buff[count];
-           } else {
-             newstr[newstr_count] = buff[count];
-           }
-         }
-         newstr_count++;
-       }
- 
-       line = lexer->line_number;
-       lexer_init(lexer); // Re-initialize so we can scan again with the same lexer
-       raise_lexer_error(newstr, line);
-     } else {
-       rb_funcall(listener, rb_intern("eof"), 0);
-     }
-   }
- 	break;
- #line 1379 "ext/gherkin_lexer_de/gherkin_lexer_de.c"
- 		}
- 	}
- 	}
- 
- 	_out: {}
- 	}
- 
- #line 426 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/de.c.rl"
- 
-     assert(p <= pe && "data overflow after parsing execute");
-     assert(lexer->content_start <= len && "content starts after data end");
-     assert(lexer->mark < len && "mark is after data end");
-     
-     // Reset lexer by re-initializing the whole thing
-     lexer_init(lexer);
- 
-     if (cs == lexer_error) {
-       rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails.");
-     } else {
-       return Qtrue;
-     }
-   }
- }
- 
- void Init_gherkin_lexer_de()
- {
-   mGherkin = rb_define_module("Gherkin");
-   mGherkinLexer = rb_define_module_under(mGherkin, "Lexer");
-   rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError"));
- 
-   mCLexer = rb_define_module_under(mGherkin, "CLexer");
-   cI18nLexer = rb_define_class_under(mCLexer, "De", rb_cObject);
-   rb_define_alloc_func(cI18nLexer, CLexer_alloc);
-   rb_define_method(cI18nLexer, "initialize", CLexer_init, 1);
-   rb_define_method(cI18nLexer, "scan", CLexer_scan, 1);
- }
- 
 -#line 1 "ragel/i18n/de.c.rl"
 -#include <assert.h>
 -#include <ruby.h>
 -
 -#if defined(_WIN32)
 -#include <stddef.h>
 -#endif
 -
 -#ifdef HAVE_RUBY_RE_H
 -#include <ruby/re.h>
 -#else
 -#include <re.h>
 -#endif
 -
 -#ifdef HAVE_RUBY_ENCODING_H
 -#include <ruby/encoding.h>
 -#define ENCODED_STR_NEW(ptr, len) \
 -    rb_enc_str_new(ptr, len, rb_utf8_encoding())
 -#else
 -#define ENCODED_STR_NEW(ptr, len) \
 -    rb_str_new(ptr, len)
 -#endif
 -
 -#ifndef RSTRING_PTR
 -#define RSTRING_PTR(s) (RSTRING(s)->ptr)
 -#endif
 -
 -#ifndef RSTRING_LEN
 -#define RSTRING_LEN(s) (RSTRING(s)->len)
 -#endif
 -
 -#define DATA_GET(FROM, TYPE, NAME) \
 -  Data_Get_Struct(FROM, TYPE, NAME); \
 -  if (NAME == NULL) { \
 -    rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \
 -  }
 - 
 -typedef struct lexer_state {
 -  int content_len;
 -  int line_number;
 -  int current_line;
 -  int start_col;
 -  size_t mark;
 -  size_t keyword_start;
 -  size_t keyword_end;
 -  size_t next_keyword_start;
 -  size_t content_start;
 -  size_t content_end;
 -  size_t docstring_content_type_start;
 -  size_t docstring_content_type_end;
 -  size_t query_start;
 -  size_t last_newline;
 -  size_t final_newline;
 -} lexer_state;
 -
 -static VALUE mGherkin;
 -static VALUE mGherkinLexer;
 -static VALUE mCLexer;
 -static VALUE cI18nLexer;
 -static VALUE rb_eGherkinLexingError;
 -
 -#define LEN(AT, P) (P - data - lexer->AT)
 -#define MARK(M, P) (lexer->M = (P) - data)
 -#define PTR_TO(P) (data + lexer->P)
 -
 -#define STORE_KW_END_CON(EVENT) \
 -  store_multiline_kw_con(listener, # EVENT, \
 -    PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \
 -    PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \
 -    lexer->current_line, lexer->start_col); \
 -    if (lexer->content_end != 0) { \
 -      p = PTR_TO(content_end - 1); \
 -    } \
 -    lexer->content_end = 0
 -
 -#define STORE_ATTR(ATTR) \
 -    store_attr(listener, # ATTR, \
 -      PTR_TO(content_start), LEN(content_start, p), \
 -      lexer->line_number)
 -
 -
 -#line 254 "ragel/i18n/de.c.rl"
 -
 -
 -/** Data **/
 -
 -#line 89 "ext/gherkin_lexer_de/gherkin_lexer_de.c"
 -static const char _lexer_actions[] = {
 -	0, 1, 0, 1, 1, 1, 2, 1, 
 -	3, 1, 4, 1, 5, 1, 6, 1, 
 -	7, 1, 8, 1, 9, 1, 10, 1, 
 -	11, 1, 12, 1, 13, 1, 16, 1, 
 -	17, 1, 18, 1, 19, 1, 20, 1, 
 -	21, 1, 22, 1, 23, 2, 1, 18, 
 -	2, 4, 5, 2, 13, 0, 2, 14, 
 -	15, 2, 17, 0, 2, 17, 2, 2, 
 -	17, 16, 2, 17, 19, 2, 18, 6, 
 -	2, 18, 7, 2, 18, 8, 2, 18, 
 -	9, 2, 18, 10, 2, 18, 16, 2, 
 -	20, 21, 2, 22, 0, 2, 22, 2, 
 -	2, 22, 16, 2, 22, 19, 3, 3, 
 -	14, 15, 3, 5, 14, 15, 3, 11, 
 -	14, 15, 3, 12, 14, 15, 3, 13, 
 -	14, 15, 3, 14, 15, 18, 3, 17, 
 -	0, 11, 3, 17, 14, 15, 4, 1, 
 -	14, 15, 18, 4, 4, 5, 14, 15, 
 -	4, 17, 0, 14, 15, 5, 17, 0, 
 -	11, 14, 15
 -};
 -
 -static const short _lexer_key_offsets[] = {
 -	0, 0, 19, 20, 21, 39, 40, 41, 
 -	43, 45, 50, 55, 60, 65, 69, 73, 
 -	75, 76, 77, 78, 79, 80, 81, 82, 
 -	83, 84, 85, 86, 87, 88, 89, 90, 
 -	91, 93, 95, 100, 107, 112, 114, 115, 
 -	116, 117, 118, 119, 120, 121, 122, 123, 
 -	124, 125, 126, 127, 128, 129, 130, 131, 
 -	132, 133, 134, 135, 142, 144, 146, 148, 
 -	150, 152, 154, 156, 158, 160, 162, 164, 
 -	166, 168, 170, 172, 190, 191, 192, 193, 
 -	194, 195, 196, 197, 198, 199, 200, 201, 
 -	202, 203, 204, 205, 206, 207, 208, 209, 
 -	220, 222, 224, 226, 228, 230, 232, 234, 
 -	236, 238, 240, 242, 244, 246, 248, 250, 
 -	252, 254, 256, 258, 260, 262, 264, 266, 
 -	268, 270, 272, 274, 276, 278, 280, 282, 
 -	284, 286, 288, 290, 292, 294, 296, 298, 
 -	300, 302, 304, 306, 308, 310, 312, 314, 
 -	316, 318, 320, 322, 325, 327, 329, 331, 
 -	333, 335, 337, 339, 341, 343, 344, 345, 
 -	346, 347, 348, 349, 350, 351, 352, 354, 
 -	355, 356, 357, 358, 359, 360, 361, 362, 
 -	363, 364, 379, 381, 383, 385, 387, 389, 
 -	391, 393, 395, 397, 399, 401, 403, 405, 
 -	407, 409, 412, 414, 416, 418, 420, 422, 
 -	424, 426, 428, 430, 432, 434, 436, 438, 
 -	440, 442, 444, 446, 448, 450, 452, 454, 
 -	456, 458, 460, 462, 464, 466, 468, 470, 
 -	472, 474, 476, 478, 480, 482, 484, 486, 
 -	489, 491, 493, 495, 497, 499, 501, 503, 
 -	506, 508, 510, 512, 514, 516, 518, 520, 
 -	522, 524, 526, 528, 529, 530, 531, 532, 
 -	533, 534, 535, 537, 538, 539, 554, 556, 
 -	558, 560, 562, 564, 566, 568, 570, 572, 
 -	574, 576, 578, 580, 582, 584, 587, 589, 
 -	591, 593, 595, 597, 599, 601, 603, 605, 
 -	607, 609, 611, 613, 615, 617, 619, 621, 
 -	623, 625, 627, 629, 631, 633, 635, 637, 
 -	639, 641, 644, 646, 648, 650, 652, 654, 
 -	656, 658, 660, 662, 665, 667, 669, 671, 
 -	673, 675, 677, 679, 681, 683, 685, 687, 
 -	689, 691, 693, 696, 698, 700, 702, 704, 
 -	706, 708, 710, 712, 714, 716, 718, 719, 
 -	720, 721, 722, 723, 724, 725, 726, 727, 
 -	728, 729, 744, 746, 748, 750, 752, 754, 
 -	756, 758, 760, 762, 764, 766, 768, 770, 
 -	772, 774, 777, 779, 781, 783, 785, 787, 
 -	789, 791, 793, 795, 797, 799, 801, 803, 
 -	805, 807, 809, 811, 813, 815, 817, 819, 
 -	821, 823, 825, 827, 829, 831, 833, 835, 
 -	837, 839, 841, 843, 845, 847, 849, 851, 
 -	854, 856, 858, 860, 862, 864, 866, 868, 
 -	870, 872, 874, 875, 876, 877, 881, 887, 
 -	890, 892, 898, 916
 -};
 -
 -static const char _lexer_trans_keys[] = {
 -	-17, 10, 32, 34, 35, 37, 42, 64, 
 -	65, 66, 68, 70, 71, 83, 85, 87, 
 -	124, 9, 13, -69, -65, 10, 32, 34, 
 -	35, 37, 42, 64, 65, 66, 68, 70, 
 -	71, 83, 85, 87, 124, 9, 13, 34, 
 -	34, 10, 13, 10, 13, 10, 32, 34, 
 -	9, 13, 10, 32, 34, 9, 13, 10, 
 -	32, 34, 9, 13, 10, 32, 34, 9, 
 -	13, 10, 32, 9, 13, 10, 32, 9, 
 -	13, 10, 13, 10, 95, 70, 69, 65, 
 -	84, 85, 82, 69, 95, 69, 78, 68, 
 -	95, 37, 32, 10, 13, 10, 13, 13, 
 -	32, 64, 9, 10, 9, 10, 13, 32, 
 -	64, 11, 12, 10, 32, 64, 9, 13, 
 -	98, 110, 101, 114, 103, 101, 110, 111, 
 -	109, 109, 101, 110, 101, 105, 115, 112, 
 -	105, 101, 108, 101, 58, 10, 10, 10, 
 -	32, 35, 70, 124, 9, 13, 10, 117, 
 -	10, 110, 10, 107, 10, 116, 10, 105, 
 -	10, 111, 10, 110, 10, 97, 10, 108, 
 -	10, 105, 10, 116, -61, 10, -92, 10, 
 -	10, 116, 10, 58, 10, 32, 34, 35, 
 -	37, 42, 64, 65, 66, 68, 70, 71, 
 -	83, 85, 87, 124, 9, 13, 97, 110, 
 -	117, 110, 107, 116, 105, 111, 110, 97, 
 -	108, 105, 116, -61, -92, 116, 58, 10, 
 -	10, 10, 32, 35, 37, 64, 66, 70, 
 -	71, 83, 9, 13, 10, 95, 10, 70, 
 -	10, 69, 10, 65, 10, 84, 10, 85, 
 -	10, 82, 10, 69, 10, 95, 10, 69, 
 -	10, 78, 10, 68, 10, 95, 10, 37, 
 -	10, 101, 10, 105, 10, 115, 10, 112, 
 -	10, 105, 10, 101, 10, 108, 10, 101, 
 -	10, 58, 10, 117, 10, 110, 10, 107, 
 -	10, 116, 10, 105, 10, 111, 10, 110, 
 -	10, 97, 10, 108, 10, 105, 10, 116, 
 -	-61, 10, -92, 10, 10, 116, 10, 114, 
 -	10, 117, 10, 110, 10, 100, 10, 108, 
 -	10, 97, 10, 103, 10, 122, 10, 101, 
 -	10, 110, 10, 97, 10, 114, 10, 105, 
 -	10, 111, 10, 58, 103, 10, 114, 10, 
 -	117, 10, 110, 10, 100, 10, 114, 10, 
 -	105, 10, 115, 10, 115, 101, 114, 103, 
 -	101, 98, 101, 110, 32, 115, 101, 105, 
 -	32, 101, 117, 110, 100, 108, 97, 103, 
 -	101, 58, 10, 10, 10, 32, 35, 37, 
 -	42, 64, 65, 68, 70, 71, 83, 85, 
 -	87, 9, 13, 10, 95, 10, 70, 10, 
 -	69, 10, 65, 10, 84, 10, 85, 10, 
 -	82, 10, 69, 10, 95, 10, 69, 10, 
 -	78, 10, 68, 10, 95, 10, 37, 10, 
 -	32, 10, 98, 110, 10, 101, 10, 114, 
 -	10, 103, 10, 101, 10, 110, 10, 111, 
 -	10, 109, 10, 109, 10, 101, 10, 110, 
 -	10, 97, 10, 110, 10, 117, 10, 110, 
 -	10, 107, 10, 116, 10, 105, 10, 111, 
 -	10, 110, 10, 97, 10, 108, 10, 105, 
 -	10, 116, -61, 10, -92, 10, 10, 116, 
 -	10, 58, 10, 101, 10, 103, 10, 101, 
 -	10, 98, 10, 101, 10, 110, 10, 32, 
 -	10, 115, 10, 101, 10, 105, 10, 32, 
 -	101, 10, 122, 10, 101, 10, 110, 10, 
 -	97, 10, 114, 10, 105, 10, 111, 10, 
 -	58, 103, 10, 114, 10, 117, 10, 110, 
 -	10, 100, 10, 114, 10, 105, 10, 115, 
 -	10, 115, 10, 110, 10, 100, 10, 101, 
 -	122, 101, 110, 97, 114, 105, 111, 58, 
 -	103, 10, 10, 10, 32, 35, 37, 42, 
 -	64, 65, 68, 70, 71, 83, 85, 87, 
 -	9, 13, 10, 95, 10, 70, 10, 69, 
 -	10, 65, 10, 84, 10, 85, 10, 82, 
 -	10, 69, 10, 95, 10, 69, 10, 78, 
 -	10, 68, 10, 95, 10, 37, 10, 32, 
 -	10, 98, 110, 10, 101, 10, 114, 10, 
 -	103, 10, 101, 10, 110, 10, 111, 10, 
 -	109, 10, 109, 10, 101, 10, 110, 10, 
 -	97, 10, 110, 10, 117, 10, 110, 10, 
 -	107, 10, 116, 10, 105, 10, 111, 10, 
 -	110, 10, 97, 10, 108, 10, 105, 10, 
 -	116, -61, 10, -92, 10, 10, 116, 10, 
 -	58, 10, 101, 114, 10, 103, 10, 101, 
 -	10, 98, 10, 101, 10, 110, 10, 32, 
 -	10, 115, 10, 101, 10, 105, 10, 32, 
 -	101, 10, 117, 10, 110, 10, 100, 10, 
 -	108, 10, 97, 10, 103, 10, 101, 10, 
 -	122, 10, 101, 10, 110, 10, 97, 10, 
 -	114, 10, 105, 10, 111, 10, 58, 103, 
 -	10, 114, 10, 117, 10, 110, 10, 100, 
 -	10, 114, 10, 105, 10, 115, 10, 115, 
 -	10, 110, 10, 100, 10, 101, 114, 117, 
 -	110, 100, 114, 105, 115, 115, 58, 10, 
 -	10, 10, 32, 35, 37, 42, 64, 65, 
 -	68, 70, 71, 83, 85, 87, 9, 13, 
 -	10, 95, 10, 70, 10, 69, 10, 65, 
 -	10, 84, 10, 85, 10, 82, 10, 69, 
 -	10, 95, 10, 69, 10, 78, 10, 68, 
 -	10, 95, 10, 37, 10, 32, 10, 98, 
 -	110, 10, 101, 10, 114, 10, 103, 10, 
 -	101, 10, 110, 10, 111, 10, 109, 10, 
 -	109, 10, 101, 10, 110, 10, 97, 10, 
 -	110, 10, 117, 10, 110, 10, 107, 10, 
 -	116, 10, 105, 10, 111, 10, 110, 10, 
 -	97, 10, 108, 10, 105, 10, 116, -61, 
 -	10, -92, 10, 10, 116, 10, 58, 10, 
 -	101, 10, 103, 10, 101, 10, 98, 10, 
 -	101, 10, 110, 10, 32, 10, 115, 10, 
 -	101, 10, 105, 10, 32, 101, 10, 122, 
 -	10, 101, 10, 110, 10, 97, 10, 114, 
 -	10, 105, 10, 111, 10, 110, 10, 100, 
 -	10, 101, 110, 100, 101, 32, 124, 9, 
 -	13, 10, 32, 92, 124, 9, 13, 10, 
 -	92, 124, 10, 92, 10, 32, 92, 124, 
 -	9, 13, 10, 32, 34, 35, 37, 42, 
 -	64, 65, 66, 68, 70, 71, 83, 85, 
 -	87, 124, 9, 13, 0
 -};
 -
 -static const char _lexer_single_lengths[] = {
 -	0, 17, 1, 1, 16, 1, 1, 2, 
 -	2, 3, 3, 3, 3, 2, 2, 2, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	2, 2, 3, 5, 3, 2, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 5, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 16, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 9, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 3, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 2, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 13, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 3, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 3, 
 -	2, 2, 2, 2, 2, 2, 2, 3, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 1, 1, 1, 1, 1, 
 -	1, 1, 2, 1, 1, 13, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 3, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 3, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 3, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 3, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 13, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 3, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 3, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 1, 1, 1, 2, 4, 3, 
 -	2, 4, 16, 0
 -};
 -
 -static const char _lexer_range_lengths[] = {
 -	0, 1, 0, 0, 1, 0, 0, 0, 
 -	0, 1, 1, 1, 1, 1, 1, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 1, 1, 1, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 1, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 1, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 1, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 1, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 1, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 1, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 1, 1, 0, 
 -	0, 1, 1, 0
 -};
 -
 -static const short _lexer_index_offsets[] = {
 -	0, 0, 19, 21, 23, 41, 43, 45, 
 -	48, 51, 56, 61, 66, 71, 75, 79, 
 -	82, 84, 86, 88, 90, 92, 94, 96, 
 -	98, 100, 102, 104, 106, 108, 110, 112, 
 -	114, 117, 120, 125, 132, 137, 140, 142, 
 -	144, 146, 148, 150, 152, 154, 156, 158, 
 -	160, 162, 164, 166, 168, 170, 172, 174, 
 -	176, 178, 180, 182, 189, 192, 195, 198, 
 -	201, 204, 207, 210, 213, 216, 219, 222, 
 -	225, 228, 231, 234, 252, 254, 256, 258, 
 -	260, 262, 264, 266, 268, 270, 272, 274, 
 -	276, 278, 280, 282, 284, 286, 288, 290, 
 -	301, 304, 307, 310, 313, 316, 319, 322, 
 -	325, 328, 331, 334, 337, 340, 343, 346, 
 -	349, 352, 355, 358, 361, 364, 367, 370, 
 -	373, 376, 379, 382, 385, 388, 391, 394, 
 -	397, 400, 403, 406, 409, 412, 415, 418, 
 -	421, 424, 427, 430, 433, 436, 439, 442, 
 -	445, 448, 451, 454, 458, 461, 464, 467, 
 -	470, 473, 476, 479, 482, 485, 487, 489, 
 -	491, 493, 495, 497, 499, 501, 503, 506, 
 -	508, 510, 512, 514, 516, 518, 520, 522, 
 -	524, 526, 541, 544, 547, 550, 553, 556, 
 -	559, 562, 565, 568, 571, 574, 577, 580, 
 -	583, 586, 590, 593, 596, 599, 602, 605, 
 -	608, 611, 614, 617, 620, 623, 626, 629, 
 -	632, 635, 638, 641, 644, 647, 650, 653, 
 -	656, 659, 662, 665, 668, 671, 674, 677, 
 -	680, 683, 686, 689, 692, 695, 698, 701, 
 -	705, 708, 711, 714, 717, 720, 723, 726, 
 -	730, 733, 736, 739, 742, 745, 748, 751, 
 -	754, 757, 760, 763, 765, 767, 769, 771, 
 -	773, 775, 777, 780, 782, 784, 799, 802, 
 -	805, 808, 811, 814, 817, 820, 823, 826, 
 -	829, 832, 835, 838, 841, 844, 848, 851, 
 -	854, 857, 860, 863, 866, 869, 872, 875, 
 -	878, 881, 884, 887, 890, 893, 896, 899, 
 -	902, 905, 908, 911, 914, 917, 920, 923, 
 -	926, 929, 933, 936, 939, 942, 945, 948, 
 -	951, 954, 957, 960, 964, 967, 970, 973, 
 -	976, 979, 982, 985, 988, 991, 994, 997, 
 -	1000, 1003, 1006, 1010, 1013, 1016, 1019, 1022, 
 -	1025, 1028, 1031, 1034, 1037, 1040, 1043, 1045, 
 -	1047, 1049, 1051, 1053, 1055, 1057, 1059, 1061, 
 -	1063, 1065, 1080, 1083, 1086, 1089, 1092, 1095, 
 -	1098, 1101, 1104, 1107, 1110, 1113, 1116, 1119, 
 -	1122, 1125, 1129, 1132, 1135, 1138, 1141, 1144, 
 -	1147, 1150, 1153, 1156, 1159, 1162, 1165, 1168, 
 -	1171, 1174, 1177, 1180, 1183, 1186, 1189, 1192, 
 -	1195, 1198, 1201, 1204, 1207, 1210, 1213, 1216, 
 -	1219, 1222, 1225, 1228, 1231, 1234, 1237, 1240, 
 -	1244, 1247, 1250, 1253, 1256, 1259, 1262, 1265, 
 -	1268, 1271, 1274, 1276, 1278, 1280, 1284, 1290, 
 -	1294, 1297, 1303, 1321
 -};
 -
 -static const short _lexer_trans_targs[] = {
 -	2, 4, 4, 5, 15, 17, 31, 34, 
 -	37, 48, 76, 78, 156, 251, 418, 420, 
 -	421, 4, 0, 3, 0, 4, 0, 4, 
 -	4, 5, 15, 17, 31, 34, 37, 48, 
 -	76, 78, 156, 251, 418, 420, 421, 4, 
 -	0, 6, 0, 7, 0, 9, 8, 8, 
 -	9, 8, 8, 10, 10, 11, 10, 10, 
 -	10, 10, 11, 10, 10, 10, 10, 12, 
 -	10, 10, 10, 10, 13, 10, 10, 4, 
 -	14, 14, 0, 4, 14, 14, 0, 4, 
 -	16, 15, 4, 0, 18, 0, 19, 0, 
 -	20, 0, 21, 0, 22, 0, 23, 0, 
 -	24, 0, 25, 0, 26, 0, 27, 0, 
 -	28, 0, 29, 0, 30, 0, 427, 0, 
 -	32, 0, 4, 16, 33, 4, 16, 33, 
 -	0, 0, 0, 0, 35, 36, 4, 36, 
 -	36, 34, 35, 35, 4, 36, 34, 36, 
 -	0, 38, 40, 0, 39, 0, 31, 0, 
 -	41, 0, 42, 0, 43, 0, 44, 0, 
 -	45, 0, 46, 0, 47, 0, 31, 0, 
 -	49, 0, 50, 0, 51, 0, 52, 0, 
 -	53, 0, 54, 0, 55, 0, 56, 0, 
 -	57, 0, 59, 58, 59, 58, 59, 59, 
 -	4, 60, 4, 59, 58, 59, 61, 58, 
 -	59, 62, 58, 59, 63, 58, 59, 64, 
 -	58, 59, 65, 58, 59, 66, 58, 59, 
 -	67, 58, 59, 68, 58, 59, 69, 58, 
 -	59, 70, 58, 59, 71, 58, 72, 59, 
 -	58, 73, 59, 58, 59, 74, 58, 59, 
 -	75, 58, 4, 4, 5, 15, 17, 31, 
 -	34, 37, 48, 76, 78, 156, 251, 418, 
 -	420, 421, 4, 0, 77, 0, 47, 0, 
 -	79, 0, 80, 0, 81, 0, 82, 0, 
 -	83, 0, 84, 0, 85, 0, 86, 0, 
 -	87, 0, 88, 0, 89, 0, 90, 0, 
 -	91, 0, 92, 0, 93, 0, 95, 94, 
 -	95, 94, 95, 95, 4, 96, 4, 110, 
 -	119, 133, 140, 95, 94, 95, 97, 94, 
 -	95, 98, 94, 95, 99, 94, 95, 100, 
 -	94, 95, 101, 94, 95, 102, 94, 95, 
 -	103, 94, 95, 104, 94, 95, 105, 94, 
 -	95, 106, 94, 95, 107, 94, 95, 108, 
 -	94, 95, 109, 94, 95, 4, 94, 95, 
 -	111, 94, 95, 112, 94, 95, 113, 94, 
 -	95, 114, 94, 95, 115, 94, 95, 116, 
 -	94, 95, 117, 94, 95, 118, 94, 95, 
 -	75, 94, 95, 120, 94, 95, 121, 94, 
 -	95, 122, 94, 95, 123, 94, 95, 124, 
 -	94, 95, 125, 94, 95, 126, 94, 95, 
 -	127, 94, 95, 128, 94, 95, 129, 94, 
 -	95, 130, 94, 131, 95, 94, 132, 95, 
 -	94, 95, 118, 94, 95, 134, 94, 95, 
 -	135, 94, 95, 136, 94, 95, 137, 94, 
 -	95, 138, 94, 95, 139, 94, 95, 117, 
 -	94, 95, 141, 94, 95, 142, 94, 95, 
 -	143, 94, 95, 144, 94, 95, 145, 94, 
 -	95, 146, 94, 95, 147, 94, 95, 75, 
 -	148, 94, 95, 149, 94, 95, 150, 94, 
 -	95, 151, 94, 95, 152, 94, 95, 153, 
 -	94, 95, 154, 94, 95, 155, 94, 95, 
 -	118, 94, 157, 167, 0, 158, 0, 159, 
 -	0, 160, 0, 161, 0, 162, 0, 163, 
 -	0, 164, 0, 165, 0, 166, 0, 32, 
 -	47, 0, 168, 0, 169, 0, 170, 0, 
 -	171, 0, 172, 0, 173, 0, 174, 0, 
 -	175, 0, 177, 176, 177, 176, 177, 177, 
 -	4, 178, 192, 4, 193, 204, 206, 221, 
 -	232, 248, 250, 177, 176, 177, 179, 176, 
 -	177, 180, 176, 177, 181, 176, 177, 182, 
 -	176, 177, 183, 176, 177, 184, 176, 177, 
 -	185, 176, 177, 186, 176, 177, 187, 176, 
 -	177, 188, 176, 177, 189, 176, 177, 190, 
 -	176, 177, 191, 176, 177, 4, 176, 177, 
 -	75, 176, 177, 194, 196, 176, 177, 195, 
 -	176, 177, 192, 176, 177, 197, 176, 177, 
 -	198, 176, 177, 199, 176, 177, 200, 176, 
 -	177, 201, 176, 177, 202, 176, 177, 203, 
 -	176, 177, 192, 176, 177, 205, 176, 177, 
 -	203, 176, 177, 207, 176, 177, 208, 176, 
 -	177, 209, 176, 177, 210, 176, 177, 211, 
 -	176, 177, 212, 176, 177, 213, 176, 177, 
 -	214, 176, 177, 215, 176, 177, 216, 176, 
 -	177, 217, 176, 218, 177, 176, 219, 177, 
 -	176, 177, 220, 176, 177, 75, 176, 177, 
 -	222, 176, 177, 223, 176, 177, 224, 176, 
 -	177, 225, 176, 177, 226, 176, 177, 227, 
 -	176, 177, 228, 176, 177, 229, 176, 177, 
 -	230, 176, 177, 231, 176, 177, 75, 203, 
 -	176, 177, 233, 176, 177, 234, 176, 177, 
 -	235, 176, 177, 236, 176, 177, 237, 176, 
 -	177, 238, 176, 177, 239, 176, 177, 75, 
 -	240, 176, 177, 241, 176, 177, 242, 176, 
 -	177, 243, 176, 177, 244, 176, 177, 245, 
 -	176, 177, 246, 176, 177, 247, 176, 177, 
 -	220, 176, 177, 249, 176, 177, 192, 176, 
 -	177, 205, 176, 252, 0, 253, 0, 254, 
 -	0, 255, 0, 256, 0, 257, 0, 258, 
 -	0, 259, 342, 0, 261, 260, 261, 260, 
 -	261, 261, 4, 262, 276, 4, 277, 288, 
 -	290, 305, 323, 339, 341, 261, 260, 261, 
 -	263, 260, 261, 264, 260, 261, 265, 260, 
 -	261, 266, 260, 261, 267, 260, 261, 268, 
 -	260, 261, 269, 260, 261, 270, 260, 261, 
 -	271, 260, 261, 272, 260, 261, 273, 260, 
 -	261, 274, 260, 261, 275, 260, 261, 4, 
 -	260, 261, 75, 260, 261, 278, 280, 260, 
 -	261, 279, 260, 261, 276, 260, 261, 281, 
 -	260, 261, 282, 260, 261, 283, 260, 261, 
 -	284, 260, 261, 285, 260, 261, 286, 260, 
 -	261, 287, 260, 261, 276, 260, 261, 289, 
 -	260, 261, 287, 260, 261, 291, 260, 261, 
 -	292, 260, 261, 293, 260, 261, 294, 260, 
 -	261, 295, 260, 261, 296, 260, 261, 297, 
 -	260, 261, 298, 260, 261, 299, 260, 261, 
 -	300, 260, 261, 301, 260, 302, 261, 260, 
 -	303, 261, 260, 261, 304, 260, 261, 75, 
 -	260, 261, 306, 316, 260, 261, 307, 260, 
 -	261, 308, 260, 261, 309, 260, 261, 310, 
 -	260, 261, 311, 260, 261, 312, 260, 261, 
 -	313, 260, 261, 314, 260, 261, 315, 260, 
 -	261, 75, 287, 260, 261, 317, 260, 261, 
 -	318, 260, 261, 319, 260, 261, 320, 260, 
 -	261, 321, 260, 261, 322, 260, 261, 304, 
 -	260, 261, 324, 260, 261, 325, 260, 261, 
 -	326, 260, 261, 327, 260, 261, 328, 260, 
 -	261, 329, 260, 261, 330, 260, 261, 75, 
 -	331, 260, 261, 332, 260, 261, 333, 260, 
 -	261, 334, 260, 261, 335, 260, 261, 336, 
 -	260, 261, 337, 260, 261, 338, 260, 261, 
 -	304, 260, 261, 340, 260, 261, 276, 260, 
 -	261, 289, 260, 343, 0, 344, 0, 345, 
 -	0, 346, 0, 347, 0, 348, 0, 349, 
 -	0, 350, 0, 351, 0, 353, 352, 353, 
 -	352, 353, 353, 4, 354, 368, 4, 369, 
 -	380, 382, 397, 408, 415, 417, 353, 352, 
 -	353, 355, 352, 353, 356, 352, 353, 357, 
 -	352, 353, 358, 352, 353, 359, 352, 353, 
 -	360, 352, 353, 361, 352, 353, 362, 352, 
 -	353, 363, 352, 353, 364, 352, 353, 365, 
 -	352, 353, 366, 352, 353, 367, 352, 353, 
 -	4, 352, 353, 75, 352, 353, 370, 372, 
 -	352, 353, 371, 352, 353, 368, 352, 353, 
 -	373, 352, 353, 374, 352, 353, 375, 352, 
 -	353, 376, 352, 353, 377, 352, 353, 378, 
 -	352, 353, 379, 352, 353, 368, 352, 353, 
 -	381, 352, 353, 379, 352, 353, 383, 352, 
 -	353, 384, 352, 353, 385, 352, 353, 386, 
 -	352, 353, 387, 352, 353, 388, 352, 353, 
 -	389, 352, 353, 390, 352, 353, 391, 352, 
 -	353, 392, 352, 353, 393, 352, 394, 353, 
 -	352, 395, 353, 352, 353, 396, 352, 353, 
 -	75, 352, 353, 398, 352, 353, 399, 352, 
 -	353, 400, 352, 353, 401, 352, 353, 402, 
 -	352, 353, 403, 352, 353, 404, 352, 353, 
 -	405, 352, 353, 406, 352, 353, 407, 352, 
 -	353, 75, 379, 352, 353, 409, 352, 353, 
 -	410, 352, 353, 411, 352, 353, 412, 352, 
 -	353, 413, 352, 353, 414, 352, 353, 396, 
 -	352, 353, 416, 352, 353, 368, 352, 353, 
 -	381, 352, 419, 0, 31, 0, 77, 0, 
 -	421, 422, 421, 0, 426, 425, 424, 422, 
 -	425, 423, 0, 424, 422, 423, 0, 424, 
 -	423, 426, 425, 424, 422, 425, 423, 426, 
 -	426, 5, 15, 17, 31, 34, 37, 48, 
 -	76, 78, 156, 251, 418, 420, 421, 426, 
 -	0, 0, 0
 -};
 -
 -static const unsigned char _lexer_trans_actions[] = {
 -	0, 54, 0, 5, 1, 0, 29, 1, 
 -	29, 29, 29, 29, 29, 29, 29, 29, 
 -	35, 0, 43, 0, 43, 0, 43, 54, 
 -	0, 5, 1, 0, 29, 1, 29, 29, 
 -	29, 29, 29, 29, 29, 29, 35, 0, 
 -	43, 0, 43, 0, 43, 139, 48, 9, 
 -	106, 11, 0, 134, 45, 45, 45, 3, 
 -	122, 33, 33, 33, 0, 122, 33, 33, 
 -	33, 0, 122, 33, 0, 33, 0, 102, 
 -	7, 7, 43, 54, 0, 0, 43, 114, 
 -	25, 0, 54, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 149, 126, 57, 110, 23, 0, 
 -	43, 43, 43, 43, 0, 27, 118, 27, 
 -	27, 51, 27, 0, 54, 0, 1, 0, 
 -	43, 0, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 144, 57, 54, 0, 54, 0, 
 -	81, 84, 81, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 0, 54, 
 -	0, 0, 54, 0, 54, 0, 0, 54, 
 -	21, 0, 130, 31, 60, 57, 31, 63, 
 -	57, 63, 63, 63, 63, 63, 63, 63, 
 -	63, 66, 31, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 144, 57, 
 -	54, 0, 54, 0, 69, 33, 69, 84, 
 -	84, 84, 84, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 13, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	13, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 0, 54, 0, 0, 54, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 13, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 0, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 144, 57, 54, 0, 54, 0, 
 -	72, 33, 84, 72, 84, 84, 84, 84, 
 -	84, 84, 84, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 15, 0, 54, 
 -	15, 0, 54, 0, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 0, 54, 0, 0, 54, 
 -	0, 54, 0, 0, 54, 15, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 15, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 15, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 0, 43, 144, 57, 54, 0, 
 -	54, 0, 75, 33, 84, 75, 84, 84, 
 -	84, 84, 84, 84, 84, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 17, 
 -	0, 54, 17, 0, 54, 0, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 0, 54, 0, 
 -	0, 54, 0, 54, 0, 0, 54, 17, 
 -	0, 54, 0, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 17, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 17, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 144, 57, 54, 
 -	0, 54, 0, 78, 33, 84, 78, 84, 
 -	84, 84, 84, 84, 84, 84, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	19, 0, 54, 19, 0, 54, 0, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 0, 54, 
 -	0, 0, 54, 0, 54, 0, 0, 54, 
 -	19, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 19, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 0, 43, 0, 43, 0, 43, 
 -	0, 0, 0, 43, 54, 37, 37, 87, 
 -	37, 37, 43, 0, 39, 0, 43, 0, 
 -	0, 54, 0, 0, 39, 0, 0, 54, 
 -	0, 93, 90, 41, 96, 90, 96, 96, 
 -	96, 96, 96, 96, 96, 96, 99, 0, 
 -	43, 0, 0
 -};
 -
 -static const unsigned char _lexer_eof_actions[] = {
 -	0, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43
 -};
 -
 -static const int lexer_start = 1;
 -static const int lexer_first_final = 427;
 -static const int lexer_error = 0;
 -
 -static const int lexer_en_main = 1;
 -
 -
 -#line 258 "ragel/i18n/de.c.rl"
 -
 -static VALUE 
 -unindent(VALUE con, int start_col)
 -{
 -  VALUE re;
 -  /* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */
 -  char pat[32]; 
 -  snprintf(pat, 32, "^[\t ]{0,%d}", start_col); 
 -  re = rb_reg_regcomp(rb_str_new2(pat));
 -  rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2(""));
 -
 -  return Qnil;
 -
 -}
 -
 -static void 
 -store_kw_con(VALUE listener, const char * event_name, 
 -             const char * keyword_at, size_t keyword_length, 
 -             const char * at,         size_t length, 
 -             int current_line)
 -{
 -  VALUE con = Qnil, kw = Qnil;
 -  kw = ENCODED_STR_NEW(keyword_at, keyword_length);
 -  con = ENCODED_STR_NEW(at, length);
 -  rb_funcall(con, rb_intern("strip!"), 0);
 -  rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); 
 -}
 -
 -static void
 -store_multiline_kw_con(VALUE listener, const char * event_name,
 -                      const char * keyword_at, size_t keyword_length,
 -                      const char * at,         size_t length,
 -                      int current_line, int start_col)
 -{
 -  VALUE split;
 -  VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil;
 -
 -  kw = ENCODED_STR_NEW(keyword_at, keyword_length);
 -  con = ENCODED_STR_NEW(at, length);
 -
 -  unindent(con, start_col);
 -  
 -  split = rb_str_split(con, "\n");
 -
 -  name = rb_funcall(split, rb_intern("shift"), 0);
 -  desc = rb_ary_join(split, rb_str_new2( "\n" ));
 -
 -  if( name == Qnil ) 
 -  {
 -    name = rb_str_new2("");
 -  }
 -  if( rb_funcall(desc, rb_intern("size"), 0) == 0) 
 -  {
 -    desc = rb_str_new2("");
 -  }
 -  rb_funcall(name, rb_intern("strip!"), 0);
 -  rb_funcall(desc, rb_intern("rstrip!"), 0);
 -  rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); 
 -}
 -
 -static void 
 -store_attr(VALUE listener, const char * attr_type,
 -           const char * at, size_t length, 
 -           int line)
 -{
 -  VALUE val = ENCODED_STR_NEW(at, length);
 -  rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line));
 -}
 -static void 
 -store_docstring_content(VALUE listener, 
 -          int start_col, 
 -          const char *type_at, size_t type_length,
 -          const char *at, size_t length, 
 -          int current_line)
 -{
 -  VALUE re2;
 -  VALUE unescape_escaped_quotes;
 -  VALUE con = ENCODED_STR_NEW(at, length);
 -  VALUE con_type = ENCODED_STR_NEW(type_at, type_length);
 -
 -  unindent(con, start_col);
 -
 -  re2 = rb_reg_regcomp(rb_str_new2("\r\\Z"));
 -  unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\""));
 -  rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2(""));
 -  rb_funcall(con_type, rb_intern("strip!"), 0);
 -  rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\""));
 -  rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line));
 -}
 -static void 
 -raise_lexer_error(const char * at, int line)
 -{ 
 -  rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at);
 -}
 -
 -static void lexer_init(lexer_state *lexer) {
 -  lexer->content_start = 0;
 -  lexer->content_end = 0;
 -  lexer->content_len = 0;
 -  lexer->docstring_content_type_start = 0;
 -  lexer->docstring_content_type_end = 0;
 -  lexer->mark = 0;
 -  lexer->keyword_start = 0;
 -  lexer->keyword_end = 0;
 -  lexer->next_keyword_start = 0;
 -  lexer->line_number = 1;
 -  lexer->last_newline = 0;
 -  lexer->final_newline = 0;
 -  lexer->start_col = 0;
 -}
 -
 -static VALUE CLexer_alloc(VALUE klass)
 -{
 -  VALUE obj;
 -  lexer_state *lxr = ALLOC(lexer_state);
 -  lexer_init(lxr);
 -
 -  obj = Data_Wrap_Struct(klass, NULL, -1, lxr);
 -
 -  return obj;
 -}
 -
 -static VALUE CLexer_init(VALUE self, VALUE listener)
 -{
 -  lexer_state *lxr; 
 -  rb_iv_set(self, "@listener", listener);
 -  
 -  lxr = NULL;
 -  DATA_GET(self, lexer_state, lxr);
 -  lexer_init(lxr);
 -  
 -  return self;
 -}
 -
 -static VALUE CLexer_scan(VALUE self, VALUE input)
 -{
 -  VALUE input_copy;
 -  char *data;
 -  size_t len;
 -  VALUE listener = rb_iv_get(self, "@listener");
 -
 -  lexer_state *lexer;
 -  lexer = NULL;
 -  DATA_GET(self, lexer_state, lexer);
 -
 -  input_copy = rb_str_dup(input);
 -
 -  rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%"));
 -  data = RSTRING_PTR(input_copy);
 -  len = RSTRING_LEN(input_copy);
 -  
 -  if (len == 0) { 
 -    rb_raise(rb_eGherkinLexingError, "No content to lex.");
 -  } else {
 -
 -    const char *p, *pe, *eof;
 -    int cs = 0;
 -    
 -    VALUE current_row = Qnil;
 -
 -    p = data;
 -    pe = data + len;
 -    eof = pe;
 -    
 -    assert(*pe == '\0' && "pointer does not end on NULL");
 -    
 -    
 -#line 1029 "ext/gherkin_lexer_de/gherkin_lexer_de.c"
 -	{
 -	cs = lexer_start;
 -	}
 -
 -#line 425 "ragel/i18n/de.c.rl"
 -    
 -#line 1036 "ext/gherkin_lexer_de/gherkin_lexer_de.c"
 -	{
 -	int _klen;
 -	unsigned int _trans;
 -	const char *_acts;
 -	unsigned int _nacts;
 -	const char *_keys;
 -
 -	if ( p == pe )
 -		goto _test_eof;
 -	if ( cs == 0 )
 -		goto _out;
 -_resume:
 -	_keys = _lexer_trans_keys + _lexer_key_offsets[cs];
 -	_trans = _lexer_index_offsets[cs];
 -
 -	_klen = _lexer_single_lengths[cs];
 -	if ( _klen > 0 ) {
 -		const char *_lower = _keys;
 -		const char *_mid;
 -		const char *_upper = _keys + _klen - 1;
 -		while (1) {
 -			if ( _upper < _lower )
 -				break;
 -
 -			_mid = _lower + ((_upper-_lower) >> 1);
 -			if ( (*p) < *_mid )
 -				_upper = _mid - 1;
 -			else if ( (*p) > *_mid )
 -				_lower = _mid + 1;
 -			else {
 -				_trans += (unsigned int)(_mid - _keys);
 -				goto _match;
 -			}
 -		}
 -		_keys += _klen;
 -		_trans += _klen;
 -	}
 -
 -	_klen = _lexer_range_lengths[cs];
 -	if ( _klen > 0 ) {
 -		const char *_lower = _keys;
 -		const char *_mid;
 -		const char *_upper = _keys + (_klen<<1) - 2;
 -		while (1) {
 -			if ( _upper < _lower )
 -				break;
 -
 -			_mid = _lower + (((_upper-_lower) >> 1) & ~1);
 -			if ( (*p) < _mid[0] )
 -				_upper = _mid - 2;
 -			else if ( (*p) > _mid[1] )
 -				_lower = _mid + 2;
 -			else {
 -				_trans += (unsigned int)((_mid - _keys)>>1);
 -				goto _match;
 -			}
 -		}
 -		_trans += _klen;
 -	}
 -
 -_match:
 -	cs = _lexer_trans_targs[_trans];
 -
 -	if ( _lexer_trans_actions[_trans] == 0 )
 -		goto _again;
 -
 -	_acts = _lexer_actions + _lexer_trans_actions[_trans];
 -	_nacts = (unsigned int) *_acts++;
 -	while ( _nacts-- > 0 )
 -	{
 -		switch ( *_acts++ )
 -		{
 -	case 0:
 -#line 83 "ragel/i18n/de.c.rl"
 -	{
 -		MARK(content_start, p);
 -    lexer->current_line = lexer->line_number;
 -    lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2;
 -  }
 -	break;
 -	case 1:
 -#line 89 "ragel/i18n/de.c.rl"
 -	{
 -    MARK(content_start, p);
 -  }
 -	break;
 -	case 2:
 -#line 93 "ragel/i18n/de.c.rl"
 -	{
 -    lexer->current_line = lexer->line_number;
 -    lexer->start_col = p - data - lexer->last_newline;
 -  }
 -	break;
 -	case 3:
 -#line 98 "ragel/i18n/de.c.rl"
 -	{
 -    int len = LEN(content_start, PTR_TO(final_newline));
 -    int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end));
 -
 -    if (len < 0) len = 0;
 -    if (type_len < 0) len = 0;
 -
 -    store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line);
 -  }
 -	break;
 -	case 4:
 -#line 108 "ragel/i18n/de.c.rl"
 -	{ 
 -    MARK(docstring_content_type_start, p);
 -  }
 -	break;
 -	case 5:
 -#line 112 "ragel/i18n/de.c.rl"
 -	{ 
 -    MARK(docstring_content_type_end, p);
 -  }
 -	break;
 -	case 6:
 -#line 116 "ragel/i18n/de.c.rl"
 -	{
 -    STORE_KW_END_CON(feature);
 -  }
 -	break;
 -	case 7:
 -#line 120 "ragel/i18n/de.c.rl"
 -	{
 -    STORE_KW_END_CON(background);
 -  }
 -	break;
 -	case 8:
 -#line 124 "ragel/i18n/de.c.rl"
 -	{
 -    STORE_KW_END_CON(scenario);
 -  }
 -	break;
 -	case 9:
 -#line 128 "ragel/i18n/de.c.rl"
 -	{
 -    STORE_KW_END_CON(scenario_outline);
 -  }
 -	break;
 -	case 10:
 -#line 132 "ragel/i18n/de.c.rl"
 -	{
 -    STORE_KW_END_CON(examples);
 -  }
 -	break;
 -	case 11:
 -#line 136 "ragel/i18n/de.c.rl"
 -	{
 -    store_kw_con(listener, "step",
 -      PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
 -      PTR_TO(content_start), LEN(content_start, p), 
 -      lexer->current_line);
 -  }
 -	break;
 -	case 12:
 -#line 143 "ragel/i18n/de.c.rl"
 -	{
 -    STORE_ATTR(comment);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 13:
 -#line 148 "ragel/i18n/de.c.rl"
 -	{
 -    STORE_ATTR(tag);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 14:
 -#line 153 "ragel/i18n/de.c.rl"
 -	{
 -    lexer->line_number += 1;
 -    MARK(final_newline, p);
 -  }
 -	break;
 -	case 15:
 -#line 158 "ragel/i18n/de.c.rl"
 -	{
 -    MARK(last_newline, p + 1);
 -  }
 -	break;
 -	case 16:
 -#line 162 "ragel/i18n/de.c.rl"
 -	{
 -    if (lexer->mark == 0) {
 -      MARK(mark, p);
 -    }
 -  }
 -	break;
 -	case 17:
 -#line 168 "ragel/i18n/de.c.rl"
 -	{
 -    MARK(keyword_end, p);
 -    MARK(keyword_start, PTR_TO(mark));
 -    MARK(content_start, p + 1);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 18:
 -#line 175 "ragel/i18n/de.c.rl"
 -	{
 -    MARK(content_end, p);
 -  }
 -	break;
 -	case 19:
 -#line 179 "ragel/i18n/de.c.rl"
 -	{
 -    p = p - 1;
 -    lexer->current_line = lexer->line_number;
 -    current_row = rb_ary_new();
 -  }
 -	break;
 -	case 20:
 -#line 185 "ragel/i18n/de.c.rl"
 -	{
 -		MARK(content_start, p);
 -  }
 -	break;
 -	case 21:
 -#line 189 "ragel/i18n/de.c.rl"
 -	{
 -    VALUE re_pipe, re_newline, re_backslash;
 -    VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
 -    rb_funcall(con, rb_intern("strip!"), 0);
 -    re_pipe      = rb_reg_regcomp(rb_str_new2("\\\\\\|"));
 -    re_newline   = rb_reg_regcomp(rb_str_new2("\\\\n"));
 -    re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_pipe,      rb_str_new2("|"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_newline,   rb_str_new2("\n"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\"));
 -
 -    rb_ary_push(current_row, con);
 -  }
 -	break;
 -	case 22:
 -#line 203 "ragel/i18n/de.c.rl"
 -	{
 -    rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
 -  }
 -	break;
 -	case 23:
 -#line 207 "ragel/i18n/de.c.rl"
 -	{
 -    int line;
 -    if (cs < lexer_first_final) {
 -      size_t count = 0;
 -      VALUE newstr_val;
 -      char *newstr;
 -      int newstr_count = 0;        
 -      size_t len;
 -      const char *buff;
 -      if (lexer->last_newline != 0) {
 -        len = LEN(last_newline, eof);
 -        buff = PTR_TO(last_newline);
 -      } else {
 -        len = strlen(data);
 -        buff = data;
 -      }
 -
 -      /* Allocate as a ruby string so that it gets cleaned up by GC */
 -      newstr_val = rb_str_new(buff, len);
 -      newstr = RSTRING_PTR(newstr_val);
 -
 -
 -      for (count = 0; count < len; count++) {
 -        if(buff[count] == 10) {
 -          newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
 -          break;
 -        } else {
 -          if (buff[count] == '%') {
 -            newstr[newstr_count++] = buff[count];
 -            newstr[newstr_count] = buff[count];
 -          } else {
 -            newstr[newstr_count] = buff[count];
 -          }
 -        }
 -        newstr_count++;
 -      }
 -
 -      line = lexer->line_number;
 -      lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
 -      raise_lexer_error(newstr, line);
 -    } else {
 -      rb_funcall(listener, rb_intern("eof"), 0);
 -    }
 -  }
 -	break;
 -#line 1326 "ext/gherkin_lexer_de/gherkin_lexer_de.c"
 -		}
 -	}
 -
 -_again:
 -	if ( cs == 0 )
 -		goto _out;
 -	if ( ++p != pe )
 -		goto _resume;
 -	_test_eof: {}
 -	if ( p == eof )
 -	{
 -	const char *__acts = _lexer_actions + _lexer_eof_actions[cs];
 -	unsigned int __nacts = (unsigned int) *__acts++;
 -	while ( __nacts-- > 0 ) {
 -		switch ( *__acts++ ) {
 -	case 23:
 -#line 207 "ragel/i18n/de.c.rl"
 -	{
 -    int line;
 -    if (cs < lexer_first_final) {
 -      size_t count = 0;
 -      VALUE newstr_val;
 -      char *newstr;
 -      int newstr_count = 0;        
 -      size_t len;
 -      const char *buff;
 -      if (lexer->last_newline != 0) {
 -        len = LEN(last_newline, eof);
 -        buff = PTR_TO(last_newline);
 -      } else {
 -        len = strlen(data);
 -        buff = data;
 -      }
 -
 -      /* Allocate as a ruby string so that it gets cleaned up by GC */
 -      newstr_val = rb_str_new(buff, len);
 -      newstr = RSTRING_PTR(newstr_val);
 -
 -
 -      for (count = 0; count < len; count++) {
 -        if(buff[count] == 10) {
 -          newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
 -          break;
 -        } else {
 -          if (buff[count] == '%') {
 -            newstr[newstr_count++] = buff[count];
 -            newstr[newstr_count] = buff[count];
 -          } else {
 -            newstr[newstr_count] = buff[count];
 -          }
 -        }
 -        newstr_count++;
 -      }
 -
 -      line = lexer->line_number;
 -      lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
 -      raise_lexer_error(newstr, line);
 -    } else {
 -      rb_funcall(listener, rb_intern("eof"), 0);
 -    }
 -  }
 -	break;
 -#line 1389 "ext/gherkin_lexer_de/gherkin_lexer_de.c"
 -		}
 -	}
 -	}
 -
 -	_out: {}
 -	}
 -
 -#line 426 "ragel/i18n/de.c.rl"
 -
 -    assert(p <= pe && "data overflow after parsing execute");
 -    assert(lexer->content_start <= len && "content starts after data end");
 -    assert(lexer->mark < len && "mark is after data end");
 -    
 -    /* Reset lexer by re-initializing the whole thing */
 -    lexer_init(lexer);
 -
 -    if (cs == lexer_error) {
 -      rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails.");
 -    } else {
 -      return Qtrue;
 -    }
 -  }
 -}
 -
 -void Init_gherkin_lexer_de()
 -{
 -  mGherkin = rb_define_module("Gherkin");
 -  mGherkinLexer = rb_define_module_under(mGherkin, "Lexer");
 -  rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError"));
 -
 -  mCLexer = rb_define_module_under(mGherkin, "CLexer");
 -  cI18nLexer = rb_define_class_under(mCLexer, "De", rb_cObject);
 -  rb_define_alloc_func(cI18nLexer, CLexer_alloc);
 -  rb_define_method(cI18nLexer, "initialize", CLexer_init, 1);
 -  rb_define_method(cI18nLexer, "scan", CLexer_scan, 1);
 -}
 -
diff --cc ext/gherkin_lexer_en/extconf.rb
index d6981a8,d6981a8..0000000
deleted file mode 100644,100644
--- a/ext/gherkin_lexer_en/extconf.rb
+++ /dev/null
@@@ -1,6 -1,6 +1,0 @@@
--require 'mkmf'
--CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags']
--$CFLAGS << ' -O0 -Wall' if CONFIG['CC'] =~ /gcc|clang/
--dir_config("gherkin_lexer_en")
--have_library("c", "main")
--create_makefile("gherkin_lexer_en")
diff --cc ext/gherkin_lexer_en/gherkin_lexer_en.c
index 0812514,7a2ea5c..0000000
deleted file mode 100644,100644
--- a/ext/gherkin_lexer_en/gherkin_lexer_en.c
+++ /dev/null
@@@ -1,1418 -1,1418 +1,0 @@@
--
- #line 1 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en.c.rl"
- #include <assert.h>
- #include <ruby.h>
- 
- #if defined(_WIN32)
- #include <stddef.h>
- #endif
- 
- #ifdef HAVE_RUBY_RE_H
- #include <ruby/re.h>
- #else
- #include <re.h>
- #endif
- 
- #ifdef HAVE_RUBY_ENCODING_H
- #include <ruby/encoding.h>
- #define ENCODED_STR_NEW(ptr, len) \
-     rb_enc_str_new(ptr, len, rb_utf8_encoding())
- #else
- #define ENCODED_STR_NEW(ptr, len) \
-     rb_str_new(ptr, len)
- #endif
- 
- #ifndef RSTRING_PTR
- #define RSTRING_PTR(s) (RSTRING(s)->ptr)
- #endif
- 
- #ifndef RSTRING_LEN
- #define RSTRING_LEN(s) (RSTRING(s)->len)
- #endif
- 
- #define DATA_GET(FROM, TYPE, NAME) \
-   Data_Get_Struct(FROM, TYPE, NAME); \
-   if (NAME == NULL) { \
-     rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \
-   }
-  
- typedef struct lexer_state {
-   int content_len;
-   int line_number;
-   int current_line;
-   int start_col;
-   size_t mark;
-   size_t keyword_start;
-   size_t keyword_end;
-   size_t next_keyword_start;
-   size_t content_start;
-   size_t content_end;
-   size_t docstring_content_type_start;
-   size_t docstring_content_type_end;
-   size_t query_start;
-   size_t last_newline;
-   size_t final_newline;
- } lexer_state;
- 
- static VALUE mGherkin;
- static VALUE mGherkinLexer;
- static VALUE mCLexer;
- static VALUE cI18nLexer;
- static VALUE rb_eGherkinLexingError;
- 
- #define LEN(AT, P) (P - data - lexer->AT)
- #define MARK(M, P) (lexer->M = (P) - data)
- #define PTR_TO(P) (data + lexer->P)
- 
- #define STORE_KW_END_CON(EVENT) \
-   store_multiline_kw_con(listener, # EVENT, \
-     PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \
-     PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \
-     lexer->current_line, lexer->start_col); \
-     if (lexer->content_end != 0) { \
-       p = PTR_TO(content_end - 1); \
-     } \
-     lexer->content_end = 0
- 
- #define STORE_ATTR(ATTR) \
-     store_attr(listener, # ATTR, \
-       PTR_TO(content_start), LEN(content_start, p), \
-       lexer->line_number)
- 
- 
- #line 254 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en.c.rl"
- 
- 
- /** Data **/
- 
- #line 89 "ext/gherkin_lexer_en/gherkin_lexer_en.c"
- static const char _lexer_actions[] = {
- 	0, 1, 0, 1, 1, 1, 2, 1, 
- 	3, 1, 4, 1, 5, 1, 6, 1, 
- 	7, 1, 8, 1, 9, 1, 10, 1, 
- 	11, 1, 12, 1, 13, 1, 16, 1, 
- 	17, 1, 18, 1, 19, 1, 20, 1, 
- 	21, 1, 22, 1, 23, 2, 1, 18, 
- 	2, 4, 5, 2, 13, 0, 2, 14, 
- 	15, 2, 17, 0, 2, 17, 2, 2, 
- 	17, 16, 2, 17, 19, 2, 18, 6, 
- 	2, 18, 7, 2, 18, 8, 2, 18, 
- 	9, 2, 18, 10, 2, 18, 16, 2, 
- 	20, 21, 2, 22, 0, 2, 22, 2, 
- 	2, 22, 16, 2, 22, 19, 3, 3, 
- 	14, 15, 3, 5, 14, 15, 3, 11, 
- 	14, 15, 3, 12, 14, 15, 3, 13, 
- 	14, 15, 3, 14, 15, 18, 3, 17, 
- 	0, 11, 3, 17, 14, 15, 4, 1, 
- 	14, 15, 18, 4, 4, 5, 14, 15, 
- 	4, 17, 0, 14, 15, 5, 17, 0, 
- 	11, 14, 15
- };
- 
- static const short _lexer_key_offsets[] = {
- 	0, 0, 19, 20, 21, 39, 40, 41, 
- 	43, 45, 50, 55, 60, 65, 69, 73, 
- 	75, 76, 77, 78, 79, 80, 81, 82, 
- 	83, 84, 85, 86, 87, 88, 89, 90, 
- 	91, 93, 95, 100, 107, 112, 114, 115, 
- 	116, 117, 118, 119, 120, 121, 122, 134, 
- 	136, 138, 140, 142, 144, 146, 148, 150, 
- 	152, 154, 156, 158, 160, 162, 164, 166, 
- 	168, 170, 172, 174, 176, 194, 196, 197, 
- 	198, 199, 200, 201, 202, 203, 204, 205, 
- 	206, 207, 222, 224, 226, 228, 230, 232, 
- 	234, 236, 238, 240, 242, 244, 246, 248, 
- 	250, 252, 255, 257, 259, 261, 263, 265, 
- 	267, 269, 271, 274, 276, 278, 280, 282, 
- 	284, 286, 288, 290, 292, 294, 296, 298, 
- 	300, 302, 304, 306, 308, 310, 312, 314, 
- 	316, 318, 320, 322, 324, 326, 328, 331, 
- 	334, 336, 338, 340, 342, 344, 346, 348, 
- 	350, 352, 354, 356, 358, 360, 361, 362, 
- 	363, 364, 365, 366, 367, 368, 369, 370, 
- 	371, 372, 373, 374, 375, 376, 377, 378, 
- 	379, 380, 389, 391, 393, 395, 397, 399, 
- 	401, 403, 405, 407, 409, 411, 413, 415, 
- 	417, 419, 421, 423, 425, 427, 429, 431, 
- 	433, 435, 437, 439, 440, 441, 442, 443, 
- 	444, 445, 446, 447, 448, 449, 450, 451, 
- 	452, 453, 454, 455, 456, 459, 461, 462, 
- 	463, 464, 465, 466, 467, 468, 469, 470, 
- 	485, 487, 489, 491, 493, 495, 497, 499, 
- 	501, 503, 505, 507, 509, 511, 513, 515, 
- 	518, 520, 522, 524, 526, 528, 530, 532, 
- 	534, 537, 539, 541, 543, 545, 547, 549, 
- 	551, 553, 555, 557, 559, 561, 563, 565, 
- 	567, 569, 571, 573, 575, 577, 579, 581, 
- 	583, 585, 587, 589, 591, 593, 594, 595, 
- 	596, 597, 598, 599, 600, 601, 616, 618, 
- 	620, 622, 624, 626, 628, 630, 632, 634, 
- 	636, 638, 640, 642, 644, 646, 649, 651, 
- 	653, 655, 657, 659, 661, 663, 666, 668, 
- 	670, 672, 674, 676, 678, 680, 682, 685, 
- 	687, 689, 691, 693, 695, 697, 699, 701, 
- 	703, 705, 707, 709, 711, 713, 715, 717, 
- 	719, 721, 723, 725, 727, 729, 731, 733, 
- 	735, 737, 740, 743, 745, 747, 749, 751, 
- 	753, 755, 757, 759, 761, 763, 765, 767, 
- 	768, 772, 778, 781, 783, 789, 807, 810, 
- 	812, 814, 816, 818, 820, 822, 824, 826, 
- 	828, 830, 832, 834, 836, 838, 840, 842, 
- 	844, 846, 848, 850, 852, 854, 856, 858, 
- 	860, 862, 864, 866, 868, 870, 872, 874, 
- 	876, 878, 880, 882, 884, 886, 890, 893, 
- 	895, 897, 899, 901, 903, 905, 907, 909, 
- 	911, 913, 915, 916
- };
- 
- static const char _lexer_trans_keys[] = {
- 	-17, 10, 32, 34, 35, 37, 42, 64, 
- 	65, 66, 69, 70, 71, 83, 84, 87, 
- 	124, 9, 13, -69, -65, 10, 32, 34, 
- 	35, 37, 42, 64, 65, 66, 69, 70, 
- 	71, 83, 84, 87, 124, 9, 13, 34, 
- 	34, 10, 13, 10, 13, 10, 32, 34, 
- 	9, 13, 10, 32, 34, 9, 13, 10, 
- 	32, 34, 9, 13, 10, 32, 34, 9, 
- 	13, 10, 32, 9, 13, 10, 32, 9, 
- 	13, 10, 13, 10, 95, 70, 69, 65, 
- 	84, 85, 82, 69, 95, 69, 78, 68, 
- 	95, 37, 32, 10, 13, 10, 13, 13, 
- 	32, 64, 9, 10, 9, 10, 13, 32, 
- 	64, 11, 12, 10, 32, 64, 9, 13, 
- 	98, 110, 105, 108, 105, 116, 121, 58, 
- 	10, 10, 10, 32, 35, 37, 64, 65, 
- 	66, 69, 70, 83, 9, 13, 10, 95, 
- 	10, 70, 10, 69, 10, 65, 10, 84, 
- 	10, 85, 10, 82, 10, 69, 10, 95, 
- 	10, 69, 10, 78, 10, 68, 10, 95, 
- 	10, 37, 10, 98, 10, 105, 10, 108, 
- 	10, 105, 10, 116, 10, 121, 10, 58, 
- 	10, 32, 34, 35, 37, 42, 64, 65, 
- 	66, 69, 70, 71, 83, 84, 87, 124, 
- 	9, 13, 97, 117, 99, 107, 103, 114, 
- 	111, 117, 110, 100, 58, 10, 10, 10, 
- 	32, 35, 37, 42, 64, 65, 66, 70, 
- 	71, 83, 84, 87, 9, 13, 10, 95, 
- 	10, 70, 10, 69, 10, 65, 10, 84, 
- 	10, 85, 10, 82, 10, 69, 10, 95, 
- 	10, 69, 10, 78, 10, 68, 10, 95, 
- 	10, 37, 10, 32, 10, 98, 110, 10, 
- 	105, 10, 108, 10, 105, 10, 116, 10, 
- 	121, 10, 58, 10, 100, 10, 117, 10, 
- 	115, 116, 10, 105, 10, 110, 10, 101, 
- 	10, 115, 10, 115, 10, 32, 10, 78, 
- 	10, 101, 10, 101, 10, 100, 10, 101, 
- 	10, 97, 10, 116, 10, 117, 10, 114, 
- 	10, 101, 10, 105, 10, 118, 10, 101, 
- 	10, 110, 10, 99, 10, 101, 10, 110, 
- 	10, 97, 10, 114, 10, 105, 10, 111, 
- 	10, 32, 58, 10, 79, 84, 10, 117, 
- 	10, 116, 10, 108, 10, 105, 10, 110, 
- 	10, 101, 10, 109, 10, 112, 10, 108, 
- 	10, 97, 10, 116, 10, 104, 115, 116, 
- 	105, 110, 101, 115, 115, 32, 78, 101, 
- 	101, 100, 120, 97, 109, 112, 108, 101, 
- 	115, 58, 10, 10, 10, 32, 35, 65, 
- 	66, 70, 124, 9, 13, 10, 98, 10, 
- 	105, 10, 108, 10, 105, 10, 116, 10, 
- 	121, 10, 58, 10, 117, 10, 115, 10, 
- 	105, 10, 110, 10, 101, 10, 115, 10, 
- 	115, 10, 32, 10, 78, 10, 101, 10, 
- 	101, 10, 100, 10, 101, 10, 97, 10, 
- 	116, 10, 117, 10, 114, 10, 101, 101, 
- 	97, 116, 117, 114, 101, 105, 118, 101, 
- 	110, 99, 101, 110, 97, 114, 105, 111, 
- 	32, 58, 115, 79, 84, 117, 116, 108, 
- 	105, 110, 101, 58, 10, 10, 10, 32, 
- 	35, 37, 42, 64, 65, 66, 70, 71, 
- 	83, 84, 87, 9, 13, 10, 95, 10, 
- 	70, 10, 69, 10, 65, 10, 84, 10, 
- 	85, 10, 82, 10, 69, 10, 95, 10, 
- 	69, 10, 78, 10, 68, 10, 95, 10, 
- 	37, 10, 32, 10, 98, 110, 10, 105, 
- 	10, 108, 10, 105, 10, 116, 10, 121, 
- 	10, 58, 10, 100, 10, 117, 10, 115, 
- 	116, 10, 105, 10, 110, 10, 101, 10, 
- 	115, 10, 115, 10, 32, 10, 78, 10, 
- 	101, 10, 101, 10, 100, 10, 101, 10, 
- 	97, 10, 116, 10, 117, 10, 114, 10, 
- 	101, 10, 105, 10, 118, 10, 101, 10, 
- 	110, 10, 99, 10, 101, 10, 110, 10, 
- 	97, 10, 114, 10, 105, 10, 111, 10, 
- 	104, 101, 109, 112, 108, 97, 116, 10, 
- 	10, 10, 32, 35, 37, 42, 64, 65, 
- 	66, 70, 71, 83, 84, 87, 9, 13, 
- 	10, 95, 10, 70, 10, 69, 10, 65, 
- 	10, 84, 10, 85, 10, 82, 10, 69, 
- 	10, 95, 10, 69, 10, 78, 10, 68, 
- 	10, 95, 10, 37, 10, 32, 10, 98, 
- 	110, 10, 105, 10, 108, 10, 105, 10, 
- 	116, 10, 121, 10, 58, 10, 100, 10, 
- 	97, 117, 10, 99, 10, 107, 10, 103, 
- 	10, 114, 10, 111, 10, 117, 10, 110, 
- 	10, 100, 10, 115, 116, 10, 105, 10, 
- 	110, 10, 101, 10, 115, 10, 115, 10, 
- 	32, 10, 78, 10, 101, 10, 101, 10, 
- 	101, 10, 97, 10, 116, 10, 117, 10, 
- 	114, 10, 101, 10, 105, 10, 118, 10, 
- 	101, 10, 110, 10, 99, 10, 101, 10, 
- 	110, 10, 97, 10, 114, 10, 105, 10, 
- 	111, 10, 32, 58, 10, 79, 84, 10, 
- 	117, 10, 116, 10, 108, 10, 105, 10, 
- 	110, 10, 101, 10, 109, 10, 112, 10, 
- 	108, 10, 97, 10, 116, 10, 104, 104, 
- 	32, 124, 9, 13, 10, 32, 92, 124, 
- 	9, 13, 10, 92, 124, 10, 92, 10, 
- 	32, 92, 124, 9, 13, 10, 32, 34, 
- 	35, 37, 42, 64, 65, 66, 69, 70, 
- 	71, 83, 84, 87, 124, 9, 13, 10, 
- 	97, 117, 10, 99, 10, 107, 10, 103, 
- 	10, 114, 10, 111, 10, 117, 10, 110, 
- 	10, 100, 10, 115, 10, 105, 10, 110, 
- 	10, 101, 10, 115, 10, 115, 10, 32, 
- 	10, 78, 10, 101, 10, 101, 10, 120, 
- 	10, 97, 10, 109, 10, 112, 10, 108, 
- 	10, 101, 10, 115, 10, 101, 10, 97, 
- 	10, 116, 10, 117, 10, 114, 10, 101, 
- 	10, 99, 10, 101, 10, 110, 10, 97, 
- 	10, 114, 10, 105, 10, 111, 10, 32, 
- 	58, 115, 10, 79, 84, 10, 117, 10, 
- 	116, 10, 108, 10, 105, 10, 110, 10, 
- 	101, 10, 109, 10, 112, 10, 108, 10, 
- 	97, 10, 116, 100, 0
- };
- 
- static const char _lexer_single_lengths[] = {
- 	0, 17, 1, 1, 16, 1, 1, 2, 
- 	2, 3, 3, 3, 3, 2, 2, 2, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	2, 2, 3, 5, 3, 2, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 10, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 16, 2, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 13, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 3, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 3, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 3, 3, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 7, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 3, 2, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 13, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 3, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	3, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 13, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 3, 2, 2, 
- 	2, 2, 2, 2, 2, 3, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 3, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 3, 3, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 1, 
- 	2, 4, 3, 2, 4, 16, 3, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 4, 3, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 1, 0
- };
- 
- static const char _lexer_range_lengths[] = {
- 	0, 1, 0, 0, 1, 0, 0, 0, 
- 	0, 1, 1, 1, 1, 1, 1, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 1, 1, 1, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 1, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 1, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 1, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 1, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 1, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 1, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	1, 1, 0, 0, 1, 1, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0
- };
- 
- static const short _lexer_index_offsets[] = {
- 	0, 0, 19, 21, 23, 41, 43, 45, 
- 	48, 51, 56, 61, 66, 71, 75, 79, 
- 	82, 84, 86, 88, 90, 92, 94, 96, 
- 	98, 100, 102, 104, 106, 108, 110, 112, 
- 	114, 117, 120, 125, 132, 137, 140, 142, 
- 	144, 146, 148, 150, 152, 154, 156, 168, 
- 	171, 174, 177, 180, 183, 186, 189, 192, 
- 	195, 198, 201, 204, 207, 210, 213, 216, 
- 	219, 222, 225, 228, 231, 249, 252, 254, 
- 	256, 258, 260, 262, 264, 266, 268, 270, 
- 	272, 274, 289, 292, 295, 298, 301, 304, 
- 	307, 310, 313, 316, 319, 322, 325, 328, 
- 	331, 334, 338, 341, 344, 347, 350, 353, 
- 	356, 359, 362, 366, 369, 372, 375, 378, 
- 	381, 384, 387, 390, 393, 396, 399, 402, 
- 	405, 408, 411, 414, 417, 420, 423, 426, 
- 	429, 432, 435, 438, 441, 444, 447, 451, 
- 	455, 458, 461, 464, 467, 470, 473, 476, 
- 	479, 482, 485, 488, 491, 494, 496, 498, 
- 	500, 502, 504, 506, 508, 510, 512, 514, 
- 	516, 518, 520, 522, 524, 526, 528, 530, 
- 	532, 534, 543, 546, 549, 552, 555, 558, 
- 	561, 564, 567, 570, 573, 576, 579, 582, 
- 	585, 588, 591, 594, 597, 600, 603, 606, 
- 	609, 612, 615, 618, 620, 622, 624, 626, 
- 	628, 630, 632, 634, 636, 638, 640, 642, 
- 	644, 646, 648, 650, 652, 656, 659, 661, 
- 	663, 665, 667, 669, 671, 673, 675, 677, 
- 	692, 695, 698, 701, 704, 707, 710, 713, 
- 	716, 719, 722, 725, 728, 731, 734, 737, 
- 	741, 744, 747, 750, 753, 756, 759, 762, 
- 	765, 769, 772, 775, 778, 781, 784, 787, 
- 	790, 793, 796, 799, 802, 805, 808, 811, 
- 	814, 817, 820, 823, 826, 829, 832, 835, 
- 	838, 841, 844, 847, 850, 853, 855, 857, 
- 	859, 861, 863, 865, 867, 869, 884, 887, 
- 	890, 893, 896, 899, 902, 905, 908, 911, 
- 	914, 917, 920, 923, 926, 929, 933, 936, 
- 	939, 942, 945, 948, 951, 954, 958, 961, 
- 	964, 967, 970, 973, 976, 979, 982, 986, 
- 	989, 992, 995, 998, 1001, 1004, 1007, 1010, 
- 	1013, 1016, 1019, 1022, 1025, 1028, 1031, 1034, 
- 	1037, 1040, 1043, 1046, 1049, 1052, 1055, 1058, 
- 	1061, 1064, 1068, 1072, 1075, 1078, 1081, 1084, 
- 	1087, 1090, 1093, 1096, 1099, 1102, 1105, 1108, 
- 	1110, 1114, 1120, 1124, 1127, 1133, 1151, 1155, 
- 	1158, 1161, 1164, 1167, 1170, 1173, 1176, 1179, 
- 	1182, 1185, 1188, 1191, 1194, 1197, 1200, 1203, 
- 	1206, 1209, 1212, 1215, 1218, 1221, 1224, 1227, 
- 	1230, 1233, 1236, 1239, 1242, 1245, 1248, 1251, 
- 	1254, 1257, 1260, 1263, 1266, 1269, 1274, 1278, 
- 	1281, 1284, 1287, 1290, 1293, 1296, 1299, 1302, 
- 	1305, 1308, 1311, 1313
- };
- 
- static const short _lexer_trans_targs[] = {
- 	2, 4, 4, 5, 15, 17, 31, 34, 
- 	37, 69, 159, 195, 201, 205, 359, 359, 
- 	360, 4, 0, 3, 0, 4, 0, 4, 
- 	4, 5, 15, 17, 31, 34, 37, 69, 
- 	159, 195, 201, 205, 359, 359, 360, 4, 
- 	0, 6, 0, 7, 0, 9, 8, 8, 
- 	9, 8, 8, 10, 10, 11, 10, 10, 
- 	10, 10, 11, 10, 10, 10, 10, 12, 
- 	10, 10, 10, 10, 13, 10, 10, 4, 
- 	14, 14, 0, 4, 14, 14, 0, 4, 
- 	16, 15, 4, 0, 18, 0, 19, 0, 
- 	20, 0, 21, 0, 22, 0, 23, 0, 
- 	24, 0, 25, 0, 26, 0, 27, 0, 
- 	28, 0, 29, 0, 30, 0, 419, 0, 
- 	32, 0, 4, 16, 33, 4, 16, 33, 
- 	0, 0, 0, 0, 35, 36, 4, 36, 
- 	36, 34, 35, 35, 4, 36, 34, 36, 
- 	0, 38, 418, 0, 39, 0, 40, 0, 
- 	41, 0, 42, 0, 43, 0, 44, 0, 
- 	46, 45, 46, 45, 46, 46, 4, 47, 
- 	4, 61, 366, 385, 392, 398, 46, 45, 
- 	46, 48, 45, 46, 49, 45, 46, 50, 
- 	45, 46, 51, 45, 46, 52, 45, 46, 
- 	53, 45, 46, 54, 45, 46, 55, 45, 
- 	46, 56, 45, 46, 57, 45, 46, 58, 
- 	45, 46, 59, 45, 46, 60, 45, 46, 
- 	4, 45, 46, 62, 45, 46, 63, 45, 
- 	46, 64, 45, 46, 65, 45, 46, 66, 
- 	45, 46, 67, 45, 46, 68, 45, 4, 
- 	4, 5, 15, 17, 31, 34, 37, 69, 
- 	159, 195, 201, 205, 359, 359, 360, 4, 
- 	0, 70, 148, 0, 71, 0, 72, 0, 
- 	73, 0, 74, 0, 75, 0, 76, 0, 
- 	77, 0, 78, 0, 79, 0, 81, 80, 
- 	81, 80, 81, 81, 4, 82, 96, 4, 
- 	97, 105, 117, 123, 127, 147, 147, 81, 
- 	80, 81, 83, 80, 81, 84, 80, 81, 
- 	85, 80, 81, 86, 80, 81, 87, 80, 
- 	81, 88, 80, 81, 89, 80, 81, 90, 
- 	80, 81, 91, 80, 81, 92, 80, 81, 
- 	93, 80, 81, 94, 80, 81, 95, 80, 
- 	81, 4, 80, 81, 68, 80, 81, 98, 
- 	104, 80, 81, 99, 80, 81, 100, 80, 
- 	81, 101, 80, 81, 102, 80, 81, 103, 
- 	80, 81, 68, 80, 81, 96, 80, 81, 
- 	106, 80, 81, 107, 96, 80, 81, 108, 
- 	80, 81, 109, 80, 81, 110, 80, 81, 
- 	111, 80, 81, 112, 80, 81, 113, 80, 
- 	81, 114, 80, 81, 115, 80, 81, 116, 
- 	80, 81, 103, 80, 81, 118, 80, 81, 
- 	119, 80, 81, 120, 80, 81, 121, 80, 
- 	81, 122, 80, 81, 103, 80, 81, 124, 
- 	80, 81, 125, 80, 81, 126, 80, 81, 
- 	96, 80, 81, 128, 80, 81, 129, 80, 
- 	81, 130, 80, 81, 131, 80, 81, 132, 
- 	80, 81, 133, 80, 81, 134, 80, 81, 
- 	135, 68, 80, 81, 136, 141, 80, 81, 
- 	137, 80, 81, 138, 80, 81, 139, 80, 
- 	81, 140, 80, 81, 122, 80, 81, 142, 
- 	80, 81, 143, 80, 81, 144, 80, 81, 
- 	145, 80, 81, 146, 80, 81, 122, 80, 
- 	81, 125, 80, 149, 31, 0, 150, 0, 
- 	151, 0, 152, 0, 153, 0, 154, 0, 
- 	155, 0, 156, 0, 157, 0, 158, 0, 
- 	43, 0, 160, 0, 161, 0, 162, 0, 
- 	163, 0, 164, 0, 165, 0, 166, 0, 
- 	167, 0, 169, 168, 169, 168, 169, 169, 
- 	4, 170, 177, 189, 4, 169, 168, 169, 
- 	171, 168, 169, 172, 168, 169, 173, 168, 
- 	169, 174, 168, 169, 175, 168, 169, 176, 
- 	168, 169, 68, 168, 169, 178, 168, 169, 
- 	179, 168, 169, 180, 168, 169, 181, 168, 
- 	169, 182, 168, 169, 183, 168, 169, 184, 
- 	168, 169, 185, 168, 169, 186, 168, 169, 
- 	187, 168, 169, 188, 168, 169, 176, 168, 
- 	169, 190, 168, 169, 191, 168, 169, 192, 
- 	168, 169, 193, 168, 169, 194, 168, 169, 
- 	176, 168, 196, 0, 197, 0, 198, 0, 
- 	199, 0, 200, 0, 43, 0, 202, 0, 
- 	203, 0, 204, 0, 31, 0, 206, 0, 
- 	207, 0, 208, 0, 209, 0, 210, 0, 
- 	211, 0, 212, 0, 213, 283, 166, 0, 
- 	214, 277, 0, 215, 0, 216, 0, 217, 
- 	0, 218, 0, 219, 0, 220, 0, 221, 
- 	0, 223, 222, 223, 222, 223, 223, 4, 
- 	224, 238, 4, 239, 247, 259, 265, 269, 
- 	276, 276, 223, 222, 223, 225, 222, 223, 
- 	226, 222, 223, 227, 222, 223, 228, 222, 
- 	223, 229, 222, 223, 230, 222, 223, 231, 
- 	222, 223, 232, 222, 223, 233, 222, 223, 
- 	234, 222, 223, 235, 222, 223, 236, 222, 
- 	223, 237, 222, 223, 4, 222, 223, 68, 
- 	222, 223, 240, 246, 222, 223, 241, 222, 
- 	223, 242, 222, 223, 243, 222, 223, 244, 
- 	222, 223, 245, 222, 223, 68, 222, 223, 
- 	238, 222, 223, 248, 222, 223, 249, 238, 
- 	222, 223, 250, 222, 223, 251, 222, 223, 
- 	252, 222, 223, 253, 222, 223, 254, 222, 
- 	223, 255, 222, 223, 256, 222, 223, 257, 
- 	222, 223, 258, 222, 223, 245, 222, 223, 
- 	260, 222, 223, 261, 222, 223, 262, 222, 
- 	223, 263, 222, 223, 264, 222, 223, 245, 
- 	222, 223, 266, 222, 223, 267, 222, 223, 
- 	268, 222, 223, 238, 222, 223, 270, 222, 
- 	223, 271, 222, 223, 272, 222, 223, 273, 
- 	222, 223, 274, 222, 223, 275, 222, 223, 
- 	245, 222, 223, 267, 222, 278, 0, 279, 
- 	0, 280, 0, 281, 0, 282, 0, 219, 
- 	0, 285, 284, 285, 284, 285, 285, 4, 
- 	286, 300, 4, 301, 309, 328, 334, 338, 
- 	358, 358, 285, 284, 285, 287, 284, 285, 
- 	288, 284, 285, 289, 284, 285, 290, 284, 
- 	285, 291, 284, 285, 292, 284, 285, 293, 
- 	284, 285, 294, 284, 285, 295, 284, 285, 
- 	296, 284, 285, 297, 284, 285, 298, 284, 
- 	285, 299, 284, 285, 4, 284, 285, 68, 
- 	284, 285, 302, 308, 284, 285, 303, 284, 
- 	285, 304, 284, 285, 305, 284, 285, 306, 
- 	284, 285, 307, 284, 285, 68, 284, 285, 
- 	300, 284, 285, 310, 318, 284, 285, 311, 
- 	284, 285, 312, 284, 285, 313, 284, 285, 
- 	314, 284, 285, 315, 284, 285, 316, 284, 
- 	285, 317, 284, 285, 307, 284, 285, 319, 
- 	300, 284, 285, 320, 284, 285, 321, 284, 
- 	285, 322, 284, 285, 323, 284, 285, 324, 
- 	284, 285, 325, 284, 285, 326, 284, 285, 
- 	327, 284, 285, 317, 284, 285, 329, 284, 
- 	285, 330, 284, 285, 331, 284, 285, 332, 
- 	284, 285, 333, 284, 285, 307, 284, 285, 
- 	335, 284, 285, 336, 284, 285, 337, 284, 
- 	285, 300, 284, 285, 339, 284, 285, 340, 
- 	284, 285, 341, 284, 285, 342, 284, 285, 
- 	343, 284, 285, 344, 284, 285, 345, 284, 
- 	285, 346, 68, 284, 285, 347, 352, 284, 
- 	285, 348, 284, 285, 349, 284, 285, 350, 
- 	284, 285, 351, 284, 285, 333, 284, 285, 
- 	353, 284, 285, 354, 284, 285, 355, 284, 
- 	285, 356, 284, 285, 357, 284, 285, 333, 
- 	284, 285, 336, 284, 203, 0, 360, 361, 
- 	360, 0, 365, 364, 363, 361, 364, 362, 
- 	0, 363, 361, 362, 0, 363, 362, 365, 
- 	364, 363, 361, 364, 362, 365, 365, 5, 
- 	15, 17, 31, 34, 37, 69, 159, 195, 
- 	201, 205, 359, 359, 360, 365, 0, 46, 
- 	367, 375, 45, 46, 368, 45, 46, 369, 
- 	45, 46, 370, 45, 46, 371, 45, 46, 
- 	372, 45, 46, 373, 45, 46, 374, 45, 
- 	46, 67, 45, 46, 376, 45, 46, 377, 
- 	45, 46, 378, 45, 46, 379, 45, 46, 
- 	380, 45, 46, 381, 45, 46, 382, 45, 
- 	46, 383, 45, 46, 384, 45, 46, 374, 
- 	45, 46, 386, 45, 46, 387, 45, 46, 
- 	388, 45, 46, 389, 45, 46, 390, 45, 
- 	46, 391, 45, 46, 67, 45, 46, 393, 
- 	45, 46, 394, 45, 46, 395, 45, 46, 
- 	396, 45, 46, 397, 45, 46, 67, 45, 
- 	46, 399, 45, 46, 400, 45, 46, 401, 
- 	45, 46, 402, 45, 46, 403, 45, 46, 
- 	404, 45, 46, 405, 45, 46, 406, 68, 
- 	67, 45, 46, 407, 412, 45, 46, 408, 
- 	45, 46, 409, 45, 46, 410, 45, 46, 
- 	411, 45, 46, 397, 45, 46, 413, 45, 
- 	46, 414, 45, 46, 415, 45, 46, 416, 
- 	45, 46, 417, 45, 46, 397, 45, 31, 
- 	0, 0, 0
- };
- 
- static const unsigned char _lexer_trans_actions[] = {
- 	0, 54, 0, 5, 1, 0, 29, 1, 
- 	29, 29, 29, 29, 29, 29, 29, 29, 
- 	35, 0, 43, 0, 43, 0, 43, 54, 
- 	0, 5, 1, 0, 29, 1, 29, 29, 
- 	29, 29, 29, 29, 29, 29, 35, 0, 
- 	43, 0, 43, 0, 43, 139, 48, 9, 
- 	106, 11, 0, 134, 45, 45, 45, 3, 
- 	122, 33, 33, 33, 0, 122, 33, 33, 
- 	33, 0, 122, 33, 0, 33, 0, 102, 
- 	7, 7, 43, 54, 0, 0, 43, 114, 
- 	25, 0, 54, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 149, 126, 57, 110, 23, 0, 
- 	43, 43, 43, 43, 0, 27, 118, 27, 
- 	27, 51, 27, 0, 54, 0, 1, 0, 
- 	43, 0, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	144, 57, 54, 0, 54, 0, 69, 33, 
- 	69, 84, 84, 84, 84, 84, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	13, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 13, 0, 130, 
- 	31, 60, 57, 31, 63, 57, 63, 63, 
- 	63, 63, 63, 63, 63, 63, 66, 31, 
- 	43, 0, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 144, 57, 
- 	54, 0, 54, 0, 72, 33, 84, 72, 
- 	84, 84, 84, 84, 84, 84, 84, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 15, 0, 54, 15, 0, 54, 0, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 15, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 15, 0, 54, 0, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 0, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 144, 57, 54, 0, 54, 0, 
- 	81, 84, 84, 84, 81, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 21, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 0, 0, 43, 
- 	0, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 144, 57, 54, 0, 54, 0, 78, 
- 	33, 84, 78, 84, 84, 84, 84, 84, 
- 	84, 84, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 19, 0, 54, 19, 
- 	0, 54, 0, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 19, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 144, 57, 54, 0, 54, 0, 75, 
- 	33, 84, 75, 84, 84, 84, 84, 84, 
- 	84, 84, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 17, 0, 54, 17, 
- 	0, 54, 0, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 17, 0, 54, 
- 	0, 0, 54, 0, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 17, 0, 54, 0, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 0, 43, 0, 0, 
- 	0, 43, 54, 37, 37, 87, 37, 37, 
- 	43, 0, 39, 0, 43, 0, 0, 54, 
- 	0, 0, 39, 0, 0, 54, 0, 93, 
- 	90, 41, 96, 90, 96, 96, 96, 96, 
- 	96, 96, 96, 96, 99, 0, 43, 54, 
- 	0, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 13, 
- 	0, 0, 54, 0, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 0, 
- 	43, 0, 0
- };
- 
- static const unsigned char _lexer_eof_actions[] = {
- 	0, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43
- };
- 
- static const int lexer_start = 1;
- static const int lexer_first_final = 419;
- static const int lexer_error = 0;
- 
- static const int lexer_en_main = 1;
- 
- 
- #line 258 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en.c.rl"
- 
- static VALUE 
- unindent(VALUE con, int start_col)
- {
-   VALUE re;
-   // Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters
-   char pat[32]; 
-   snprintf(pat, 32, "^[\t ]{0,%d}", start_col); 
-   re = rb_reg_regcomp(rb_str_new2(pat));
-   rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2(""));
- 
-   return Qnil;
- 
- }
- 
- static void 
- store_kw_con(VALUE listener, const char * event_name, 
-              const char * keyword_at, size_t keyword_length, 
-              const char * at,         size_t length, 
-              int current_line)
- {
-   VALUE con = Qnil, kw = Qnil;
-   kw = ENCODED_STR_NEW(keyword_at, keyword_length);
-   con = ENCODED_STR_NEW(at, length);
-   rb_funcall(con, rb_intern("strip!"), 0);
-   rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); 
- }
- 
- static void
- store_multiline_kw_con(VALUE listener, const char * event_name,
-                       const char * keyword_at, size_t keyword_length,
-                       const char * at,         size_t length,
-                       int current_line, int start_col)
- {
-   VALUE split;
-   VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil;
- 
-   kw = ENCODED_STR_NEW(keyword_at, keyword_length);
-   con = ENCODED_STR_NEW(at, length);
- 
-   unindent(con, start_col);
-   
-   split = rb_str_split(con, "\n");
- 
-   name = rb_funcall(split, rb_intern("shift"), 0);
-   desc = rb_ary_join(split, rb_str_new2( "\n" ));
- 
-   if( name == Qnil ) 
-   {
-     name = rb_str_new2("");
-   }
-   if( rb_funcall(desc, rb_intern("size"), 0) == 0) 
-   {
-     desc = rb_str_new2("");
-   }
-   rb_funcall(name, rb_intern("strip!"), 0);
-   rb_funcall(desc, rb_intern("rstrip!"), 0);
-   rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); 
- }
- 
- static void 
- store_attr(VALUE listener, const char * attr_type,
-            const char * at, size_t length, 
-            int line)
- {
-   VALUE val = ENCODED_STR_NEW(at, length);
-   rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line));
- }
- static void 
- store_docstring_content(VALUE listener, 
-           int start_col, 
-           const char *type_at, size_t type_length,
-           const char *at, size_t length, 
-           int current_line)
- {
-   VALUE re2;
-   VALUE unescape_escaped_quotes;
-   VALUE con = ENCODED_STR_NEW(at, length);
-   VALUE con_type = ENCODED_STR_NEW(type_at, type_length);
- 
-   unindent(con, start_col);
- 
-   re2 = rb_reg_regcomp(rb_str_new2("\r\\Z"));
-   unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\""));
-   rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2(""));
-   rb_funcall(con_type, rb_intern("strip!"), 0);
-   rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\""));
-   rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line));
- }
- static void 
- raise_lexer_error(const char * at, int line)
- { 
-   rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at);
- }
- 
- static void lexer_init(lexer_state *lexer) {
-   lexer->content_start = 0;
-   lexer->content_end = 0;
-   lexer->content_len = 0;
-   lexer->docstring_content_type_start = 0;
-   lexer->docstring_content_type_end = 0;
-   lexer->mark = 0;
-   lexer->keyword_start = 0;
-   lexer->keyword_end = 0;
-   lexer->next_keyword_start = 0;
-   lexer->line_number = 1;
-   lexer->last_newline = 0;
-   lexer->final_newline = 0;
-   lexer->start_col = 0;
- }
- 
- static VALUE CLexer_alloc(VALUE klass)
- {
-   VALUE obj;
-   lexer_state *lxr = ALLOC(lexer_state);
-   lexer_init(lxr);
- 
-   obj = Data_Wrap_Struct(klass, NULL, -1, lxr);
- 
-   return obj;
- }
- 
- static VALUE CLexer_init(VALUE self, VALUE listener)
- {
-   lexer_state *lxr; 
-   rb_iv_set(self, "@listener", listener);
-   
-   lxr = NULL;
-   DATA_GET(self, lexer_state, lxr);
-   lexer_init(lxr);
-   
-   return self;
- }
- 
- static VALUE CLexer_scan(VALUE self, VALUE input)
- {
-   VALUE input_copy;
-   char *data;
-   size_t len;
-   VALUE listener = rb_iv_get(self, "@listener");
- 
-   lexer_state *lexer;
-   lexer = NULL;
-   DATA_GET(self, lexer_state, lexer);
- 
-   input_copy = rb_str_dup(input);
- 
-   rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%"));
-   data = RSTRING_PTR(input_copy);
-   len = RSTRING_LEN(input_copy);
-   
-   if (len == 0) { 
-     rb_raise(rb_eGherkinLexingError, "No content to lex.");
-   } else {
- 
-     const char *p, *pe, *eof;
-     int cs = 0;
-     
-     VALUE current_row = Qnil;
- 
-     p = data;
-     pe = data + len;
-     eof = pe;
-     
-     assert(*pe == '\0' && "pointer does not end on NULL");
-     
-     
- #line 1022 "ext/gherkin_lexer_en/gherkin_lexer_en.c"
- 	{
- 	cs = lexer_start;
- 	}
- 
- #line 425 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en.c.rl"
-     
- #line 1029 "ext/gherkin_lexer_en/gherkin_lexer_en.c"
- 	{
- 	int _klen;
- 	unsigned int _trans;
- 	const char *_acts;
- 	unsigned int _nacts;
- 	const char *_keys;
- 
- 	if ( p == pe )
- 		goto _test_eof;
- 	if ( cs == 0 )
- 		goto _out;
- _resume:
- 	_keys = _lexer_trans_keys + _lexer_key_offsets[cs];
- 	_trans = _lexer_index_offsets[cs];
- 
- 	_klen = _lexer_single_lengths[cs];
- 	if ( _klen > 0 ) {
- 		const char *_lower = _keys;
- 		const char *_mid;
- 		const char *_upper = _keys + _klen - 1;
- 		while (1) {
- 			if ( _upper < _lower )
- 				break;
- 
- 			_mid = _lower + ((_upper-_lower) >> 1);
- 			if ( (*p) < *_mid )
- 				_upper = _mid - 1;
- 			else if ( (*p) > *_mid )
- 				_lower = _mid + 1;
- 			else {
- 				_trans += (_mid - _keys);
- 				goto _match;
- 			}
- 		}
- 		_keys += _klen;
- 		_trans += _klen;
- 	}
- 
- 	_klen = _lexer_range_lengths[cs];
- 	if ( _klen > 0 ) {
- 		const char *_lower = _keys;
- 		const char *_mid;
- 		const char *_upper = _keys + (_klen<<1) - 2;
- 		while (1) {
- 			if ( _upper < _lower )
- 				break;
- 
- 			_mid = _lower + (((_upper-_lower) >> 1) & ~1);
- 			if ( (*p) < _mid[0] )
- 				_upper = _mid - 2;
- 			else if ( (*p) > _mid[1] )
- 				_lower = _mid + 2;
- 			else {
- 				_trans += ((_mid - _keys)>>1);
- 				goto _match;
- 			}
- 		}
- 		_trans += _klen;
- 	}
- 
- _match:
- 	cs = _lexer_trans_targs[_trans];
- 
- 	if ( _lexer_trans_actions[_trans] == 0 )
- 		goto _again;
- 
- 	_acts = _lexer_actions + _lexer_trans_actions[_trans];
- 	_nacts = (unsigned int) *_acts++;
- 	while ( _nacts-- > 0 )
- 	{
- 		switch ( *_acts++ )
- 		{
- 	case 0:
- #line 83 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en.c.rl"
- 	{
- 		MARK(content_start, p);
-     lexer->current_line = lexer->line_number;
-     lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2;
-   }
- 	break;
- 	case 1:
- #line 89 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en.c.rl"
- 	{
-     MARK(content_start, p);
-   }
- 	break;
- 	case 2:
- #line 93 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en.c.rl"
- 	{
-     lexer->current_line = lexer->line_number;
-     lexer->start_col = p - data - lexer->last_newline;
-   }
- 	break;
- 	case 3:
- #line 98 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en.c.rl"
- 	{
-     int len = LEN(content_start, PTR_TO(final_newline));
-     int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end));
- 
-     if (len < 0) len = 0;
-     if (type_len < 0) len = 0;
- 
-     store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line);
-   }
- 	break;
- 	case 4:
- #line 108 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en.c.rl"
- 	{ 
-     MARK(docstring_content_type_start, p);
-   }
- 	break;
- 	case 5:
- #line 112 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en.c.rl"
- 	{ 
-     MARK(docstring_content_type_end, p);
-   }
- 	break;
- 	case 6:
- #line 116 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en.c.rl"
- 	{
-     STORE_KW_END_CON(feature);
-   }
- 	break;
- 	case 7:
- #line 120 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en.c.rl"
- 	{
-     STORE_KW_END_CON(background);
-   }
- 	break;
- 	case 8:
- #line 124 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en.c.rl"
- 	{
-     STORE_KW_END_CON(scenario);
-   }
- 	break;
- 	case 9:
- #line 128 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en.c.rl"
- 	{
-     STORE_KW_END_CON(scenario_outline);
-   }
- 	break;
- 	case 10:
- #line 132 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en.c.rl"
- 	{
-     STORE_KW_END_CON(examples);
-   }
- 	break;
- 	case 11:
- #line 136 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en.c.rl"
- 	{
-     store_kw_con(listener, "step",
-       PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-       PTR_TO(content_start), LEN(content_start, p), 
-       lexer->current_line);
-   }
- 	break;
- 	case 12:
- #line 143 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en.c.rl"
- 	{
-     STORE_ATTR(comment);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 13:
- #line 148 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en.c.rl"
- 	{
-     STORE_ATTR(tag);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 14:
- #line 153 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en.c.rl"
- 	{
-     lexer->line_number += 1;
-     MARK(final_newline, p);
-   }
- 	break;
- 	case 15:
- #line 158 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en.c.rl"
- 	{
-     MARK(last_newline, p + 1);
-   }
- 	break;
- 	case 16:
- #line 162 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en.c.rl"
- 	{
-     if (lexer->mark == 0) {
-       MARK(mark, p);
-     }
-   }
- 	break;
- 	case 17:
- #line 168 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en.c.rl"
- 	{
-     MARK(keyword_end, p);
-     MARK(keyword_start, PTR_TO(mark));
-     MARK(content_start, p + 1);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 18:
- #line 175 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en.c.rl"
- 	{
-     MARK(content_end, p);
-   }
- 	break;
- 	case 19:
- #line 179 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en.c.rl"
- 	{
-     p = p - 1;
-     lexer->current_line = lexer->line_number;
-     current_row = rb_ary_new();
-   }
- 	break;
- 	case 20:
- #line 185 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en.c.rl"
- 	{
- 		MARK(content_start, p);
-   }
- 	break;
- 	case 21:
- #line 189 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en.c.rl"
- 	{
-     VALUE re_pipe, re_newline, re_backslash;
-     VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
-     rb_funcall(con, rb_intern("strip!"), 0);
-     re_pipe      = rb_reg_regcomp(rb_str_new2("\\\\\\|"));
-     re_newline   = rb_reg_regcomp(rb_str_new2("\\\\n"));
-     re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_pipe,      rb_str_new2("|"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_newline,   rb_str_new2("\n"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\"));
- 
-     rb_ary_push(current_row, con);
-   }
- 	break;
- 	case 22:
- #line 203 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en.c.rl"
- 	{
-     rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
-   }
- 	break;
- 	case 23:
- #line 207 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en.c.rl"
- 	{
-     int line;
-     if (cs < lexer_first_final) {
-       size_t count = 0;
-       VALUE newstr_val;
-       char *newstr;
-       int newstr_count = 0;        
-       size_t len;
-       const char *buff;
-       if (lexer->last_newline != 0) {
-         len = LEN(last_newline, eof);
-         buff = PTR_TO(last_newline);
-       } else {
-         len = strlen(data);
-         buff = data;
-       }
- 
-       // Allocate as a ruby string so that it gets cleaned up by GC
-       newstr_val = rb_str_new(buff, len);
-       newstr = RSTRING_PTR(newstr_val);
- 
- 
-       for (count = 0; count < len; count++) {
-         if(buff[count] == 10) {
-           newstr[newstr_count] = '\0'; // terminate new string at first newline found
-           break;
-         } else {
-           if (buff[count] == '%') {
-             newstr[newstr_count++] = buff[count];
-             newstr[newstr_count] = buff[count];
-           } else {
-             newstr[newstr_count] = buff[count];
-           }
-         }
-         newstr_count++;
-       }
- 
-       line = lexer->line_number;
-       lexer_init(lexer); // Re-initialize so we can scan again with the same lexer
-       raise_lexer_error(newstr, line);
-     } else {
-       rb_funcall(listener, rb_intern("eof"), 0);
-     }
-   }
- 	break;
- #line 1319 "ext/gherkin_lexer_en/gherkin_lexer_en.c"
- 		}
- 	}
- 
- _again:
- 	if ( cs == 0 )
- 		goto _out;
- 	if ( ++p != pe )
- 		goto _resume;
- 	_test_eof: {}
- 	if ( p == eof )
- 	{
- 	const char *__acts = _lexer_actions + _lexer_eof_actions[cs];
- 	unsigned int __nacts = (unsigned int) *__acts++;
- 	while ( __nacts-- > 0 ) {
- 		switch ( *__acts++ ) {
- 	case 23:
- #line 207 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en.c.rl"
- 	{
-     int line;
-     if (cs < lexer_first_final) {
-       size_t count = 0;
-       VALUE newstr_val;
-       char *newstr;
-       int newstr_count = 0;        
-       size_t len;
-       const char *buff;
-       if (lexer->last_newline != 0) {
-         len = LEN(last_newline, eof);
-         buff = PTR_TO(last_newline);
-       } else {
-         len = strlen(data);
-         buff = data;
-       }
- 
-       // Allocate as a ruby string so that it gets cleaned up by GC
-       newstr_val = rb_str_new(buff, len);
-       newstr = RSTRING_PTR(newstr_val);
- 
- 
-       for (count = 0; count < len; count++) {
-         if(buff[count] == 10) {
-           newstr[newstr_count] = '\0'; // terminate new string at first newline found
-           break;
-         } else {
-           if (buff[count] == '%') {
-             newstr[newstr_count++] = buff[count];
-             newstr[newstr_count] = buff[count];
-           } else {
-             newstr[newstr_count] = buff[count];
-           }
-         }
-         newstr_count++;
-       }
- 
-       line = lexer->line_number;
-       lexer_init(lexer); // Re-initialize so we can scan again with the same lexer
-       raise_lexer_error(newstr, line);
-     } else {
-       rb_funcall(listener, rb_intern("eof"), 0);
-     }
-   }
- 	break;
- #line 1382 "ext/gherkin_lexer_en/gherkin_lexer_en.c"
- 		}
- 	}
- 	}
- 
- 	_out: {}
- 	}
- 
- #line 426 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en.c.rl"
- 
-     assert(p <= pe && "data overflow after parsing execute");
-     assert(lexer->content_start <= len && "content starts after data end");
-     assert(lexer->mark < len && "mark is after data end");
-     
-     // Reset lexer by re-initializing the whole thing
-     lexer_init(lexer);
- 
-     if (cs == lexer_error) {
-       rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails.");
-     } else {
-       return Qtrue;
-     }
-   }
- }
- 
- void Init_gherkin_lexer_en()
- {
-   mGherkin = rb_define_module("Gherkin");
-   mGherkinLexer = rb_define_module_under(mGherkin, "Lexer");
-   rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError"));
- 
-   mCLexer = rb_define_module_under(mGherkin, "CLexer");
-   cI18nLexer = rb_define_class_under(mCLexer, "En", rb_cObject);
-   rb_define_alloc_func(cI18nLexer, CLexer_alloc);
-   rb_define_method(cI18nLexer, "initialize", CLexer_init, 1);
-   rb_define_method(cI18nLexer, "scan", CLexer_scan, 1);
- }
- 
 -#line 1 "ragel/i18n/en.c.rl"
 -#include <assert.h>
 -#include <ruby.h>
 -
 -#if defined(_WIN32)
 -#include <stddef.h>
 -#endif
 -
 -#ifdef HAVE_RUBY_RE_H
 -#include <ruby/re.h>
 -#else
 -#include <re.h>
 -#endif
 -
 -#ifdef HAVE_RUBY_ENCODING_H
 -#include <ruby/encoding.h>
 -#define ENCODED_STR_NEW(ptr, len) \
 -    rb_enc_str_new(ptr, len, rb_utf8_encoding())
 -#else
 -#define ENCODED_STR_NEW(ptr, len) \
 -    rb_str_new(ptr, len)
 -#endif
 -
 -#ifndef RSTRING_PTR
 -#define RSTRING_PTR(s) (RSTRING(s)->ptr)
 -#endif
 -
 -#ifndef RSTRING_LEN
 -#define RSTRING_LEN(s) (RSTRING(s)->len)
 -#endif
 -
 -#define DATA_GET(FROM, TYPE, NAME) \
 -  Data_Get_Struct(FROM, TYPE, NAME); \
 -  if (NAME == NULL) { \
 -    rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \
 -  }
 - 
 -typedef struct lexer_state {
 -  int content_len;
 -  int line_number;
 -  int current_line;
 -  int start_col;
 -  size_t mark;
 -  size_t keyword_start;
 -  size_t keyword_end;
 -  size_t next_keyword_start;
 -  size_t content_start;
 -  size_t content_end;
 -  size_t docstring_content_type_start;
 -  size_t docstring_content_type_end;
 -  size_t query_start;
 -  size_t last_newline;
 -  size_t final_newline;
 -} lexer_state;
 -
 -static VALUE mGherkin;
 -static VALUE mGherkinLexer;
 -static VALUE mCLexer;
 -static VALUE cI18nLexer;
 -static VALUE rb_eGherkinLexingError;
 -
 -#define LEN(AT, P) (P - data - lexer->AT)
 -#define MARK(M, P) (lexer->M = (P) - data)
 -#define PTR_TO(P) (data + lexer->P)
 -
 -#define STORE_KW_END_CON(EVENT) \
 -  store_multiline_kw_con(listener, # EVENT, \
 -    PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \
 -    PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \
 -    lexer->current_line, lexer->start_col); \
 -    if (lexer->content_end != 0) { \
 -      p = PTR_TO(content_end - 1); \
 -    } \
 -    lexer->content_end = 0
 -
 -#define STORE_ATTR(ATTR) \
 -    store_attr(listener, # ATTR, \
 -      PTR_TO(content_start), LEN(content_start, p), \
 -      lexer->line_number)
 -
 -
 -#line 254 "ragel/i18n/en.c.rl"
 -
 -
 -/** Data **/
 -
 -#line 89 "ext/gherkin_lexer_en/gherkin_lexer_en.c"
 -static const char _lexer_actions[] = {
 -	0, 1, 0, 1, 1, 1, 2, 1, 
 -	3, 1, 4, 1, 5, 1, 6, 1, 
 -	7, 1, 8, 1, 9, 1, 10, 1, 
 -	11, 1, 12, 1, 13, 1, 16, 1, 
 -	17, 1, 18, 1, 19, 1, 20, 1, 
 -	21, 1, 22, 1, 23, 2, 1, 18, 
 -	2, 4, 5, 2, 13, 0, 2, 14, 
 -	15, 2, 17, 0, 2, 17, 2, 2, 
 -	17, 16, 2, 17, 19, 2, 18, 6, 
 -	2, 18, 7, 2, 18, 8, 2, 18, 
 -	9, 2, 18, 10, 2, 18, 16, 2, 
 -	20, 21, 2, 22, 0, 2, 22, 2, 
 -	2, 22, 16, 2, 22, 19, 3, 3, 
 -	14, 15, 3, 5, 14, 15, 3, 11, 
 -	14, 15, 3, 12, 14, 15, 3, 13, 
 -	14, 15, 3, 14, 15, 18, 3, 17, 
 -	0, 11, 3, 17, 14, 15, 4, 1, 
 -	14, 15, 18, 4, 4, 5, 14, 15, 
 -	4, 17, 0, 14, 15, 5, 17, 0, 
 -	11, 14, 15
 -};
 -
 -static const short _lexer_key_offsets[] = {
 -	0, 0, 19, 20, 21, 39, 40, 41, 
 -	43, 45, 50, 55, 60, 65, 69, 73, 
 -	75, 76, 77, 78, 79, 80, 81, 82, 
 -	83, 84, 85, 86, 87, 88, 89, 90, 
 -	91, 93, 95, 100, 107, 112, 114, 115, 
 -	116, 117, 118, 119, 120, 121, 122, 134, 
 -	136, 138, 140, 142, 144, 146, 148, 150, 
 -	152, 154, 156, 158, 160, 162, 164, 166, 
 -	168, 170, 172, 174, 176, 194, 196, 197, 
 -	198, 199, 200, 201, 202, 203, 204, 205, 
 -	206, 207, 222, 224, 226, 228, 230, 232, 
 -	234, 236, 238, 240, 242, 244, 246, 248, 
 -	250, 252, 255, 257, 259, 261, 263, 265, 
 -	267, 269, 271, 274, 276, 278, 280, 282, 
 -	284, 286, 288, 290, 292, 294, 296, 298, 
 -	300, 302, 304, 306, 308, 310, 312, 314, 
 -	316, 318, 320, 322, 324, 326, 328, 331, 
 -	334, 336, 338, 340, 342, 344, 346, 348, 
 -	350, 352, 354, 356, 358, 360, 361, 362, 
 -	363, 364, 365, 366, 367, 368, 369, 370, 
 -	371, 372, 373, 374, 375, 376, 377, 378, 
 -	379, 380, 389, 391, 393, 395, 397, 399, 
 -	401, 403, 405, 407, 409, 411, 413, 415, 
 -	417, 419, 421, 423, 425, 427, 429, 431, 
 -	433, 435, 437, 439, 440, 441, 442, 443, 
 -	444, 445, 446, 447, 448, 449, 450, 451, 
 -	452, 453, 454, 455, 456, 459, 461, 462, 
 -	463, 464, 465, 466, 467, 468, 469, 470, 
 -	485, 487, 489, 491, 493, 495, 497, 499, 
 -	501, 503, 505, 507, 509, 511, 513, 515, 
 -	518, 520, 522, 524, 526, 528, 530, 532, 
 -	534, 537, 539, 541, 543, 545, 547, 549, 
 -	551, 553, 555, 557, 559, 561, 563, 565, 
 -	567, 569, 571, 573, 575, 577, 579, 581, 
 -	583, 585, 587, 589, 591, 593, 594, 595, 
 -	596, 597, 598, 599, 600, 601, 616, 618, 
 -	620, 622, 624, 626, 628, 630, 632, 634, 
 -	636, 638, 640, 642, 644, 646, 649, 651, 
 -	653, 655, 657, 659, 661, 663, 666, 668, 
 -	670, 672, 674, 676, 678, 680, 682, 685, 
 -	687, 689, 691, 693, 695, 697, 699, 701, 
 -	703, 705, 707, 709, 711, 713, 715, 717, 
 -	719, 721, 723, 725, 727, 729, 731, 733, 
 -	735, 737, 740, 743, 745, 747, 749, 751, 
 -	753, 755, 757, 759, 761, 763, 765, 767, 
 -	768, 772, 778, 781, 783, 789, 807, 810, 
 -	812, 814, 816, 818, 820, 822, 824, 826, 
 -	828, 830, 832, 834, 836, 838, 840, 842, 
 -	844, 846, 848, 850, 852, 854, 856, 858, 
 -	860, 862, 864, 866, 868, 870, 872, 874, 
 -	876, 878, 880, 882, 884, 886, 890, 893, 
 -	895, 897, 899, 901, 903, 905, 907, 909, 
 -	911, 913, 915, 916
 -};
 -
 -static const char _lexer_trans_keys[] = {
 -	-17, 10, 32, 34, 35, 37, 42, 64, 
 -	65, 66, 69, 70, 71, 83, 84, 87, 
 -	124, 9, 13, -69, -65, 10, 32, 34, 
 -	35, 37, 42, 64, 65, 66, 69, 70, 
 -	71, 83, 84, 87, 124, 9, 13, 34, 
 -	34, 10, 13, 10, 13, 10, 32, 34, 
 -	9, 13, 10, 32, 34, 9, 13, 10, 
 -	32, 34, 9, 13, 10, 32, 34, 9, 
 -	13, 10, 32, 9, 13, 10, 32, 9, 
 -	13, 10, 13, 10, 95, 70, 69, 65, 
 -	84, 85, 82, 69, 95, 69, 78, 68, 
 -	95, 37, 32, 10, 13, 10, 13, 13, 
 -	32, 64, 9, 10, 9, 10, 13, 32, 
 -	64, 11, 12, 10, 32, 64, 9, 13, 
 -	98, 110, 105, 108, 105, 116, 121, 58, 
 -	10, 10, 10, 32, 35, 37, 64, 65, 
 -	66, 69, 70, 83, 9, 13, 10, 95, 
 -	10, 70, 10, 69, 10, 65, 10, 84, 
 -	10, 85, 10, 82, 10, 69, 10, 95, 
 -	10, 69, 10, 78, 10, 68, 10, 95, 
 -	10, 37, 10, 98, 10, 105, 10, 108, 
 -	10, 105, 10, 116, 10, 121, 10, 58, 
 -	10, 32, 34, 35, 37, 42, 64, 65, 
 -	66, 69, 70, 71, 83, 84, 87, 124, 
 -	9, 13, 97, 117, 99, 107, 103, 114, 
 -	111, 117, 110, 100, 58, 10, 10, 10, 
 -	32, 35, 37, 42, 64, 65, 66, 70, 
 -	71, 83, 84, 87, 9, 13, 10, 95, 
 -	10, 70, 10, 69, 10, 65, 10, 84, 
 -	10, 85, 10, 82, 10, 69, 10, 95, 
 -	10, 69, 10, 78, 10, 68, 10, 95, 
 -	10, 37, 10, 32, 10, 98, 110, 10, 
 -	105, 10, 108, 10, 105, 10, 116, 10, 
 -	121, 10, 58, 10, 100, 10, 117, 10, 
 -	115, 116, 10, 105, 10, 110, 10, 101, 
 -	10, 115, 10, 115, 10, 32, 10, 78, 
 -	10, 101, 10, 101, 10, 100, 10, 101, 
 -	10, 97, 10, 116, 10, 117, 10, 114, 
 -	10, 101, 10, 105, 10, 118, 10, 101, 
 -	10, 110, 10, 99, 10, 101, 10, 110, 
 -	10, 97, 10, 114, 10, 105, 10, 111, 
 -	10, 32, 58, 10, 79, 84, 10, 117, 
 -	10, 116, 10, 108, 10, 105, 10, 110, 
 -	10, 101, 10, 109, 10, 112, 10, 108, 
 -	10, 97, 10, 116, 10, 104, 115, 116, 
 -	105, 110, 101, 115, 115, 32, 78, 101, 
 -	101, 100, 120, 97, 109, 112, 108, 101, 
 -	115, 58, 10, 10, 10, 32, 35, 65, 
 -	66, 70, 124, 9, 13, 10, 98, 10, 
 -	105, 10, 108, 10, 105, 10, 116, 10, 
 -	121, 10, 58, 10, 117, 10, 115, 10, 
 -	105, 10, 110, 10, 101, 10, 115, 10, 
 -	115, 10, 32, 10, 78, 10, 101, 10, 
 -	101, 10, 100, 10, 101, 10, 97, 10, 
 -	116, 10, 117, 10, 114, 10, 101, 101, 
 -	97, 116, 117, 114, 101, 105, 118, 101, 
 -	110, 99, 101, 110, 97, 114, 105, 111, 
 -	32, 58, 115, 79, 84, 117, 116, 108, 
 -	105, 110, 101, 58, 10, 10, 10, 32, 
 -	35, 37, 42, 64, 65, 66, 70, 71, 
 -	83, 84, 87, 9, 13, 10, 95, 10, 
 -	70, 10, 69, 10, 65, 10, 84, 10, 
 -	85, 10, 82, 10, 69, 10, 95, 10, 
 -	69, 10, 78, 10, 68, 10, 95, 10, 
 -	37, 10, 32, 10, 98, 110, 10, 105, 
 -	10, 108, 10, 105, 10, 116, 10, 121, 
 -	10, 58, 10, 100, 10, 117, 10, 115, 
 -	116, 10, 105, 10, 110, 10, 101, 10, 
 -	115, 10, 115, 10, 32, 10, 78, 10, 
 -	101, 10, 101, 10, 100, 10, 101, 10, 
 -	97, 10, 116, 10, 117, 10, 114, 10, 
 -	101, 10, 105, 10, 118, 10, 101, 10, 
 -	110, 10, 99, 10, 101, 10, 110, 10, 
 -	97, 10, 114, 10, 105, 10, 111, 10, 
 -	104, 101, 109, 112, 108, 97, 116, 10, 
 -	10, 10, 32, 35, 37, 42, 64, 65, 
 -	66, 70, 71, 83, 84, 87, 9, 13, 
 -	10, 95, 10, 70, 10, 69, 10, 65, 
 -	10, 84, 10, 85, 10, 82, 10, 69, 
 -	10, 95, 10, 69, 10, 78, 10, 68, 
 -	10, 95, 10, 37, 10, 32, 10, 98, 
 -	110, 10, 105, 10, 108, 10, 105, 10, 
 -	116, 10, 121, 10, 58, 10, 100, 10, 
 -	97, 117, 10, 99, 10, 107, 10, 103, 
 -	10, 114, 10, 111, 10, 117, 10, 110, 
 -	10, 100, 10, 115, 116, 10, 105, 10, 
 -	110, 10, 101, 10, 115, 10, 115, 10, 
 -	32, 10, 78, 10, 101, 10, 101, 10, 
 -	101, 10, 97, 10, 116, 10, 117, 10, 
 -	114, 10, 101, 10, 105, 10, 118, 10, 
 -	101, 10, 110, 10, 99, 10, 101, 10, 
 -	110, 10, 97, 10, 114, 10, 105, 10, 
 -	111, 10, 32, 58, 10, 79, 84, 10, 
 -	117, 10, 116, 10, 108, 10, 105, 10, 
 -	110, 10, 101, 10, 109, 10, 112, 10, 
 -	108, 10, 97, 10, 116, 10, 104, 104, 
 -	32, 124, 9, 13, 10, 32, 92, 124, 
 -	9, 13, 10, 92, 124, 10, 92, 10, 
 -	32, 92, 124, 9, 13, 10, 32, 34, 
 -	35, 37, 42, 64, 65, 66, 69, 70, 
 -	71, 83, 84, 87, 124, 9, 13, 10, 
 -	97, 117, 10, 99, 10, 107, 10, 103, 
 -	10, 114, 10, 111, 10, 117, 10, 110, 
 -	10, 100, 10, 115, 10, 105, 10, 110, 
 -	10, 101, 10, 115, 10, 115, 10, 32, 
 -	10, 78, 10, 101, 10, 101, 10, 120, 
 -	10, 97, 10, 109, 10, 112, 10, 108, 
 -	10, 101, 10, 115, 10, 101, 10, 97, 
 -	10, 116, 10, 117, 10, 114, 10, 101, 
 -	10, 99, 10, 101, 10, 110, 10, 97, 
 -	10, 114, 10, 105, 10, 111, 10, 32, 
 -	58, 115, 10, 79, 84, 10, 117, 10, 
 -	116, 10, 108, 10, 105, 10, 110, 10, 
 -	101, 10, 109, 10, 112, 10, 108, 10, 
 -	97, 10, 116, 100, 0
 -};
 -
 -static const char _lexer_single_lengths[] = {
 -	0, 17, 1, 1, 16, 1, 1, 2, 
 -	2, 3, 3, 3, 3, 2, 2, 2, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	2, 2, 3, 5, 3, 2, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 10, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 16, 2, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 13, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 3, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 3, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 3, 3, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 7, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 3, 2, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 13, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 3, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	3, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 13, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 3, 2, 2, 
 -	2, 2, 2, 2, 2, 3, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 3, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 3, 3, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 1, 
 -	2, 4, 3, 2, 4, 16, 3, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 4, 3, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 1, 0
 -};
 -
 -static const char _lexer_range_lengths[] = {
 -	0, 1, 0, 0, 1, 0, 0, 0, 
 -	0, 1, 1, 1, 1, 1, 1, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 1, 1, 1, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 1, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 1, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 1, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 1, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 1, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 1, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	1, 1, 0, 0, 1, 1, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0
 -};
 -
 -static const short _lexer_index_offsets[] = {
 -	0, 0, 19, 21, 23, 41, 43, 45, 
 -	48, 51, 56, 61, 66, 71, 75, 79, 
 -	82, 84, 86, 88, 90, 92, 94, 96, 
 -	98, 100, 102, 104, 106, 108, 110, 112, 
 -	114, 117, 120, 125, 132, 137, 140, 142, 
 -	144, 146, 148, 150, 152, 154, 156, 168, 
 -	171, 174, 177, 180, 183, 186, 189, 192, 
 -	195, 198, 201, 204, 207, 210, 213, 216, 
 -	219, 222, 225, 228, 231, 249, 252, 254, 
 -	256, 258, 260, 262, 264, 266, 268, 270, 
 -	272, 274, 289, 292, 295, 298, 301, 304, 
 -	307, 310, 313, 316, 319, 322, 325, 328, 
 -	331, 334, 338, 341, 344, 347, 350, 353, 
 -	356, 359, 362, 366, 369, 372, 375, 378, 
 -	381, 384, 387, 390, 393, 396, 399, 402, 
 -	405, 408, 411, 414, 417, 420, 423, 426, 
 -	429, 432, 435, 438, 441, 444, 447, 451, 
 -	455, 458, 461, 464, 467, 470, 473, 476, 
 -	479, 482, 485, 488, 491, 494, 496, 498, 
 -	500, 502, 504, 506, 508, 510, 512, 514, 
 -	516, 518, 520, 522, 524, 526, 528, 530, 
 -	532, 534, 543, 546, 549, 552, 555, 558, 
 -	561, 564, 567, 570, 573, 576, 579, 582, 
 -	585, 588, 591, 594, 597, 600, 603, 606, 
 -	609, 612, 615, 618, 620, 622, 624, 626, 
 -	628, 630, 632, 634, 636, 638, 640, 642, 
 -	644, 646, 648, 650, 652, 656, 659, 661, 
 -	663, 665, 667, 669, 671, 673, 675, 677, 
 -	692, 695, 698, 701, 704, 707, 710, 713, 
 -	716, 719, 722, 725, 728, 731, 734, 737, 
 -	741, 744, 747, 750, 753, 756, 759, 762, 
 -	765, 769, 772, 775, 778, 781, 784, 787, 
 -	790, 793, 796, 799, 802, 805, 808, 811, 
 -	814, 817, 820, 823, 826, 829, 832, 835, 
 -	838, 841, 844, 847, 850, 853, 855, 857, 
 -	859, 861, 863, 865, 867, 869, 884, 887, 
 -	890, 893, 896, 899, 902, 905, 908, 911, 
 -	914, 917, 920, 923, 926, 929, 933, 936, 
 -	939, 942, 945, 948, 951, 954, 958, 961, 
 -	964, 967, 970, 973, 976, 979, 982, 986, 
 -	989, 992, 995, 998, 1001, 1004, 1007, 1010, 
 -	1013, 1016, 1019, 1022, 1025, 1028, 1031, 1034, 
 -	1037, 1040, 1043, 1046, 1049, 1052, 1055, 1058, 
 -	1061, 1064, 1068, 1072, 1075, 1078, 1081, 1084, 
 -	1087, 1090, 1093, 1096, 1099, 1102, 1105, 1108, 
 -	1110, 1114, 1120, 1124, 1127, 1133, 1151, 1155, 
 -	1158, 1161, 1164, 1167, 1170, 1173, 1176, 1179, 
 -	1182, 1185, 1188, 1191, 1194, 1197, 1200, 1203, 
 -	1206, 1209, 1212, 1215, 1218, 1221, 1224, 1227, 
 -	1230, 1233, 1236, 1239, 1242, 1245, 1248, 1251, 
 -	1254, 1257, 1260, 1263, 1266, 1269, 1274, 1278, 
 -	1281, 1284, 1287, 1290, 1293, 1296, 1299, 1302, 
 -	1305, 1308, 1311, 1313
 -};
 -
 -static const short _lexer_trans_targs[] = {
 -	2, 4, 4, 5, 15, 17, 31, 34, 
 -	37, 69, 159, 195, 201, 205, 359, 359, 
 -	360, 4, 0, 3, 0, 4, 0, 4, 
 -	4, 5, 15, 17, 31, 34, 37, 69, 
 -	159, 195, 201, 205, 359, 359, 360, 4, 
 -	0, 6, 0, 7, 0, 9, 8, 8, 
 -	9, 8, 8, 10, 10, 11, 10, 10, 
 -	10, 10, 11, 10, 10, 10, 10, 12, 
 -	10, 10, 10, 10, 13, 10, 10, 4, 
 -	14, 14, 0, 4, 14, 14, 0, 4, 
 -	16, 15, 4, 0, 18, 0, 19, 0, 
 -	20, 0, 21, 0, 22, 0, 23, 0, 
 -	24, 0, 25, 0, 26, 0, 27, 0, 
 -	28, 0, 29, 0, 30, 0, 419, 0, 
 -	32, 0, 4, 16, 33, 4, 16, 33, 
 -	0, 0, 0, 0, 35, 36, 4, 36, 
 -	36, 34, 35, 35, 4, 36, 34, 36, 
 -	0, 38, 418, 0, 39, 0, 40, 0, 
 -	41, 0, 42, 0, 43, 0, 44, 0, 
 -	46, 45, 46, 45, 46, 46, 4, 47, 
 -	4, 61, 366, 385, 392, 398, 46, 45, 
 -	46, 48, 45, 46, 49, 45, 46, 50, 
 -	45, 46, 51, 45, 46, 52, 45, 46, 
 -	53, 45, 46, 54, 45, 46, 55, 45, 
 -	46, 56, 45, 46, 57, 45, 46, 58, 
 -	45, 46, 59, 45, 46, 60, 45, 46, 
 -	4, 45, 46, 62, 45, 46, 63, 45, 
 -	46, 64, 45, 46, 65, 45, 46, 66, 
 -	45, 46, 67, 45, 46, 68, 45, 4, 
 -	4, 5, 15, 17, 31, 34, 37, 69, 
 -	159, 195, 201, 205, 359, 359, 360, 4, 
 -	0, 70, 148, 0, 71, 0, 72, 0, 
 -	73, 0, 74, 0, 75, 0, 76, 0, 
 -	77, 0, 78, 0, 79, 0, 81, 80, 
 -	81, 80, 81, 81, 4, 82, 96, 4, 
 -	97, 105, 117, 123, 127, 147, 147, 81, 
 -	80, 81, 83, 80, 81, 84, 80, 81, 
 -	85, 80, 81, 86, 80, 81, 87, 80, 
 -	81, 88, 80, 81, 89, 80, 81, 90, 
 -	80, 81, 91, 80, 81, 92, 80, 81, 
 -	93, 80, 81, 94, 80, 81, 95, 80, 
 -	81, 4, 80, 81, 68, 80, 81, 98, 
 -	104, 80, 81, 99, 80, 81, 100, 80, 
 -	81, 101, 80, 81, 102, 80, 81, 103, 
 -	80, 81, 68, 80, 81, 96, 80, 81, 
 -	106, 80, 81, 107, 96, 80, 81, 108, 
 -	80, 81, 109, 80, 81, 110, 80, 81, 
 -	111, 80, 81, 112, 80, 81, 113, 80, 
 -	81, 114, 80, 81, 115, 80, 81, 116, 
 -	80, 81, 103, 80, 81, 118, 80, 81, 
 -	119, 80, 81, 120, 80, 81, 121, 80, 
 -	81, 122, 80, 81, 103, 80, 81, 124, 
 -	80, 81, 125, 80, 81, 126, 80, 81, 
 -	96, 80, 81, 128, 80, 81, 129, 80, 
 -	81, 130, 80, 81, 131, 80, 81, 132, 
 -	80, 81, 133, 80, 81, 134, 80, 81, 
 -	135, 68, 80, 81, 136, 141, 80, 81, 
 -	137, 80, 81, 138, 80, 81, 139, 80, 
 -	81, 140, 80, 81, 122, 80, 81, 142, 
 -	80, 81, 143, 80, 81, 144, 80, 81, 
 -	145, 80, 81, 146, 80, 81, 122, 80, 
 -	81, 125, 80, 149, 31, 0, 150, 0, 
 -	151, 0, 152, 0, 153, 0, 154, 0, 
 -	155, 0, 156, 0, 157, 0, 158, 0, 
 -	43, 0, 160, 0, 161, 0, 162, 0, 
 -	163, 0, 164, 0, 165, 0, 166, 0, 
 -	167, 0, 169, 168, 169, 168, 169, 169, 
 -	4, 170, 177, 189, 4, 169, 168, 169, 
 -	171, 168, 169, 172, 168, 169, 173, 168, 
 -	169, 174, 168, 169, 175, 168, 169, 176, 
 -	168, 169, 68, 168, 169, 178, 168, 169, 
 -	179, 168, 169, 180, 168, 169, 181, 168, 
 -	169, 182, 168, 169, 183, 168, 169, 184, 
 -	168, 169, 185, 168, 169, 186, 168, 169, 
 -	187, 168, 169, 188, 168, 169, 176, 168, 
 -	169, 190, 168, 169, 191, 168, 169, 192, 
 -	168, 169, 193, 168, 169, 194, 168, 169, 
 -	176, 168, 196, 0, 197, 0, 198, 0, 
 -	199, 0, 200, 0, 43, 0, 202, 0, 
 -	203, 0, 204, 0, 31, 0, 206, 0, 
 -	207, 0, 208, 0, 209, 0, 210, 0, 
 -	211, 0, 212, 0, 213, 283, 166, 0, 
 -	214, 277, 0, 215, 0, 216, 0, 217, 
 -	0, 218, 0, 219, 0, 220, 0, 221, 
 -	0, 223, 222, 223, 222, 223, 223, 4, 
 -	224, 238, 4, 239, 247, 259, 265, 269, 
 -	276, 276, 223, 222, 223, 225, 222, 223, 
 -	226, 222, 223, 227, 222, 223, 228, 222, 
 -	223, 229, 222, 223, 230, 222, 223, 231, 
 -	222, 223, 232, 222, 223, 233, 222, 223, 
 -	234, 222, 223, 235, 222, 223, 236, 222, 
 -	223, 237, 222, 223, 4, 222, 223, 68, 
 -	222, 223, 240, 246, 222, 223, 241, 222, 
 -	223, 242, 222, 223, 243, 222, 223, 244, 
 -	222, 223, 245, 222, 223, 68, 222, 223, 
 -	238, 222, 223, 248, 222, 223, 249, 238, 
 -	222, 223, 250, 222, 223, 251, 222, 223, 
 -	252, 222, 223, 253, 222, 223, 254, 222, 
 -	223, 255, 222, 223, 256, 222, 223, 257, 
 -	222, 223, 258, 222, 223, 245, 222, 223, 
 -	260, 222, 223, 261, 222, 223, 262, 222, 
 -	223, 263, 222, 223, 264, 222, 223, 245, 
 -	222, 223, 266, 222, 223, 267, 222, 223, 
 -	268, 222, 223, 238, 222, 223, 270, 222, 
 -	223, 271, 222, 223, 272, 222, 223, 273, 
 -	222, 223, 274, 222, 223, 275, 222, 223, 
 -	245, 222, 223, 267, 222, 278, 0, 279, 
 -	0, 280, 0, 281, 0, 282, 0, 219, 
 -	0, 285, 284, 285, 284, 285, 285, 4, 
 -	286, 300, 4, 301, 309, 328, 334, 338, 
 -	358, 358, 285, 284, 285, 287, 284, 285, 
 -	288, 284, 285, 289, 284, 285, 290, 284, 
 -	285, 291, 284, 285, 292, 284, 285, 293, 
 -	284, 285, 294, 284, 285, 295, 284, 285, 
 -	296, 284, 285, 297, 284, 285, 298, 284, 
 -	285, 299, 284, 285, 4, 284, 285, 68, 
 -	284, 285, 302, 308, 284, 285, 303, 284, 
 -	285, 304, 284, 285, 305, 284, 285, 306, 
 -	284, 285, 307, 284, 285, 68, 284, 285, 
 -	300, 284, 285, 310, 318, 284, 285, 311, 
 -	284, 285, 312, 284, 285, 313, 284, 285, 
 -	314, 284, 285, 315, 284, 285, 316, 284, 
 -	285, 317, 284, 285, 307, 284, 285, 319, 
 -	300, 284, 285, 320, 284, 285, 321, 284, 
 -	285, 322, 284, 285, 323, 284, 285, 324, 
 -	284, 285, 325, 284, 285, 326, 284, 285, 
 -	327, 284, 285, 317, 284, 285, 329, 284, 
 -	285, 330, 284, 285, 331, 284, 285, 332, 
 -	284, 285, 333, 284, 285, 307, 284, 285, 
 -	335, 284, 285, 336, 284, 285, 337, 284, 
 -	285, 300, 284, 285, 339, 284, 285, 340, 
 -	284, 285, 341, 284, 285, 342, 284, 285, 
 -	343, 284, 285, 344, 284, 285, 345, 284, 
 -	285, 346, 68, 284, 285, 347, 352, 284, 
 -	285, 348, 284, 285, 349, 284, 285, 350, 
 -	284, 285, 351, 284, 285, 333, 284, 285, 
 -	353, 284, 285, 354, 284, 285, 355, 284, 
 -	285, 356, 284, 285, 357, 284, 285, 333, 
 -	284, 285, 336, 284, 203, 0, 360, 361, 
 -	360, 0, 365, 364, 363, 361, 364, 362, 
 -	0, 363, 361, 362, 0, 363, 362, 365, 
 -	364, 363, 361, 364, 362, 365, 365, 5, 
 -	15, 17, 31, 34, 37, 69, 159, 195, 
 -	201, 205, 359, 359, 360, 365, 0, 46, 
 -	367, 375, 45, 46, 368, 45, 46, 369, 
 -	45, 46, 370, 45, 46, 371, 45, 46, 
 -	372, 45, 46, 373, 45, 46, 374, 45, 
 -	46, 67, 45, 46, 376, 45, 46, 377, 
 -	45, 46, 378, 45, 46, 379, 45, 46, 
 -	380, 45, 46, 381, 45, 46, 382, 45, 
 -	46, 383, 45, 46, 384, 45, 46, 374, 
 -	45, 46, 386, 45, 46, 387, 45, 46, 
 -	388, 45, 46, 389, 45, 46, 390, 45, 
 -	46, 391, 45, 46, 67, 45, 46, 393, 
 -	45, 46, 394, 45, 46, 395, 45, 46, 
 -	396, 45, 46, 397, 45, 46, 67, 45, 
 -	46, 399, 45, 46, 400, 45, 46, 401, 
 -	45, 46, 402, 45, 46, 403, 45, 46, 
 -	404, 45, 46, 405, 45, 46, 406, 68, 
 -	67, 45, 46, 407, 412, 45, 46, 408, 
 -	45, 46, 409, 45, 46, 410, 45, 46, 
 -	411, 45, 46, 397, 45, 46, 413, 45, 
 -	46, 414, 45, 46, 415, 45, 46, 416, 
 -	45, 46, 417, 45, 46, 397, 45, 31, 
 -	0, 0, 0
 -};
 -
 -static const unsigned char _lexer_trans_actions[] = {
 -	0, 54, 0, 5, 1, 0, 29, 1, 
 -	29, 29, 29, 29, 29, 29, 29, 29, 
 -	35, 0, 43, 0, 43, 0, 43, 54, 
 -	0, 5, 1, 0, 29, 1, 29, 29, 
 -	29, 29, 29, 29, 29, 29, 35, 0, 
 -	43, 0, 43, 0, 43, 139, 48, 9, 
 -	106, 11, 0, 134, 45, 45, 45, 3, 
 -	122, 33, 33, 33, 0, 122, 33, 33, 
 -	33, 0, 122, 33, 0, 33, 0, 102, 
 -	7, 7, 43, 54, 0, 0, 43, 114, 
 -	25, 0, 54, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 149, 126, 57, 110, 23, 0, 
 -	43, 43, 43, 43, 0, 27, 118, 27, 
 -	27, 51, 27, 0, 54, 0, 1, 0, 
 -	43, 0, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	144, 57, 54, 0, 54, 0, 69, 33, 
 -	69, 84, 84, 84, 84, 84, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	13, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 13, 0, 130, 
 -	31, 60, 57, 31, 63, 57, 63, 63, 
 -	63, 63, 63, 63, 63, 63, 66, 31, 
 -	43, 0, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 144, 57, 
 -	54, 0, 54, 0, 72, 33, 84, 72, 
 -	84, 84, 84, 84, 84, 84, 84, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 15, 0, 54, 15, 0, 54, 0, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 15, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 15, 0, 54, 0, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 0, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 144, 57, 54, 0, 54, 0, 
 -	81, 84, 84, 84, 81, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 21, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 0, 0, 43, 
 -	0, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 144, 57, 54, 0, 54, 0, 78, 
 -	33, 84, 78, 84, 84, 84, 84, 84, 
 -	84, 84, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 19, 0, 54, 19, 
 -	0, 54, 0, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 19, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 144, 57, 54, 0, 54, 0, 75, 
 -	33, 84, 75, 84, 84, 84, 84, 84, 
 -	84, 84, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 17, 0, 54, 17, 
 -	0, 54, 0, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 17, 0, 54, 
 -	0, 0, 54, 0, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 17, 0, 54, 0, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 0, 43, 0, 0, 
 -	0, 43, 54, 37, 37, 87, 37, 37, 
 -	43, 0, 39, 0, 43, 0, 0, 54, 
 -	0, 0, 39, 0, 0, 54, 0, 93, 
 -	90, 41, 96, 90, 96, 96, 96, 96, 
 -	96, 96, 96, 96, 99, 0, 43, 54, 
 -	0, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 13, 
 -	0, 0, 54, 0, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 0, 
 -	43, 0, 0
 -};
 -
 -static const unsigned char _lexer_eof_actions[] = {
 -	0, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43
 -};
 -
 -static const int lexer_start = 1;
 -static const int lexer_first_final = 419;
 -static const int lexer_error = 0;
 -
 -static const int lexer_en_main = 1;
 -
 -
 -#line 258 "ragel/i18n/en.c.rl"
 -
 -static VALUE 
 -unindent(VALUE con, int start_col)
 -{
 -  VALUE re;
 -  /* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */
 -  char pat[32]; 
 -  snprintf(pat, 32, "^[\t ]{0,%d}", start_col); 
 -  re = rb_reg_regcomp(rb_str_new2(pat));
 -  rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2(""));
 -
 -  return Qnil;
 -
 -}
 -
 -static void 
 -store_kw_con(VALUE listener, const char * event_name, 
 -             const char * keyword_at, size_t keyword_length, 
 -             const char * at,         size_t length, 
 -             int current_line)
 -{
 -  VALUE con = Qnil, kw = Qnil;
 -  kw = ENCODED_STR_NEW(keyword_at, keyword_length);
 -  con = ENCODED_STR_NEW(at, length);
 -  rb_funcall(con, rb_intern("strip!"), 0);
 -  rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); 
 -}
 -
 -static void
 -store_multiline_kw_con(VALUE listener, const char * event_name,
 -                      const char * keyword_at, size_t keyword_length,
 -                      const char * at,         size_t length,
 -                      int current_line, int start_col)
 -{
 -  VALUE split;
 -  VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil;
 -
 -  kw = ENCODED_STR_NEW(keyword_at, keyword_length);
 -  con = ENCODED_STR_NEW(at, length);
 -
 -  unindent(con, start_col);
 -  
 -  split = rb_str_split(con, "\n");
 -
 -  name = rb_funcall(split, rb_intern("shift"), 0);
 -  desc = rb_ary_join(split, rb_str_new2( "\n" ));
 -
 -  if( name == Qnil ) 
 -  {
 -    name = rb_str_new2("");
 -  }
 -  if( rb_funcall(desc, rb_intern("size"), 0) == 0) 
 -  {
 -    desc = rb_str_new2("");
 -  }
 -  rb_funcall(name, rb_intern("strip!"), 0);
 -  rb_funcall(desc, rb_intern("rstrip!"), 0);
 -  rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); 
 -}
 -
 -static void 
 -store_attr(VALUE listener, const char * attr_type,
 -           const char * at, size_t length, 
 -           int line)
 -{
 -  VALUE val = ENCODED_STR_NEW(at, length);
 -  rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line));
 -}
 -static void 
 -store_docstring_content(VALUE listener, 
 -          int start_col, 
 -          const char *type_at, size_t type_length,
 -          const char *at, size_t length, 
 -          int current_line)
 -{
 -  VALUE re2;
 -  VALUE unescape_escaped_quotes;
 -  VALUE con = ENCODED_STR_NEW(at, length);
 -  VALUE con_type = ENCODED_STR_NEW(type_at, type_length);
 -
 -  unindent(con, start_col);
 -
 -  re2 = rb_reg_regcomp(rb_str_new2("\r\\Z"));
 -  unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\""));
 -  rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2(""));
 -  rb_funcall(con_type, rb_intern("strip!"), 0);
 -  rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\""));
 -  rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line));
 -}
 -static void 
 -raise_lexer_error(const char * at, int line)
 -{ 
 -  rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at);
 -}
 -
 -static void lexer_init(lexer_state *lexer) {
 -  lexer->content_start = 0;
 -  lexer->content_end = 0;
 -  lexer->content_len = 0;
 -  lexer->docstring_content_type_start = 0;
 -  lexer->docstring_content_type_end = 0;
 -  lexer->mark = 0;
 -  lexer->keyword_start = 0;
 -  lexer->keyword_end = 0;
 -  lexer->next_keyword_start = 0;
 -  lexer->line_number = 1;
 -  lexer->last_newline = 0;
 -  lexer->final_newline = 0;
 -  lexer->start_col = 0;
 -}
 -
 -static VALUE CLexer_alloc(VALUE klass)
 -{
 -  VALUE obj;
 -  lexer_state *lxr = ALLOC(lexer_state);
 -  lexer_init(lxr);
 -
 -  obj = Data_Wrap_Struct(klass, NULL, -1, lxr);
 -
 -  return obj;
 -}
 -
 -static VALUE CLexer_init(VALUE self, VALUE listener)
 -{
 -  lexer_state *lxr; 
 -  rb_iv_set(self, "@listener", listener);
 -  
 -  lxr = NULL;
 -  DATA_GET(self, lexer_state, lxr);
 -  lexer_init(lxr);
 -  
 -  return self;
 -}
 -
 -static VALUE CLexer_scan(VALUE self, VALUE input)
 -{
 -  VALUE input_copy;
 -  char *data;
 -  size_t len;
 -  VALUE listener = rb_iv_get(self, "@listener");
 -
 -  lexer_state *lexer;
 -  lexer = NULL;
 -  DATA_GET(self, lexer_state, lexer);
 -
 -  input_copy = rb_str_dup(input);
 -
 -  rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%"));
 -  data = RSTRING_PTR(input_copy);
 -  len = RSTRING_LEN(input_copy);
 -  
 -  if (len == 0) { 
 -    rb_raise(rb_eGherkinLexingError, "No content to lex.");
 -  } else {
 -
 -    const char *p, *pe, *eof;
 -    int cs = 0;
 -    
 -    VALUE current_row = Qnil;
 -
 -    p = data;
 -    pe = data + len;
 -    eof = pe;
 -    
 -    assert(*pe == '\0' && "pointer does not end on NULL");
 -    
 -    
 -#line 1022 "ext/gherkin_lexer_en/gherkin_lexer_en.c"
 -	{
 -	cs = lexer_start;
 -	}
 -
 -#line 425 "ragel/i18n/en.c.rl"
 -    
 -#line 1029 "ext/gherkin_lexer_en/gherkin_lexer_en.c"
 -	{
 -	int _klen;
 -	unsigned int _trans;
 -	const char *_acts;
 -	unsigned int _nacts;
 -	const char *_keys;
 -
 -	if ( p == pe )
 -		goto _test_eof;
 -	if ( cs == 0 )
 -		goto _out;
 -_resume:
 -	_keys = _lexer_trans_keys + _lexer_key_offsets[cs];
 -	_trans = _lexer_index_offsets[cs];
 -
 -	_klen = _lexer_single_lengths[cs];
 -	if ( _klen > 0 ) {
 -		const char *_lower = _keys;
 -		const char *_mid;
 -		const char *_upper = _keys + _klen - 1;
 -		while (1) {
 -			if ( _upper < _lower )
 -				break;
 -
 -			_mid = _lower + ((_upper-_lower) >> 1);
 -			if ( (*p) < *_mid )
 -				_upper = _mid - 1;
 -			else if ( (*p) > *_mid )
 -				_lower = _mid + 1;
 -			else {
 -				_trans += (unsigned int)(_mid - _keys);
 -				goto _match;
 -			}
 -		}
 -		_keys += _klen;
 -		_trans += _klen;
 -	}
 -
 -	_klen = _lexer_range_lengths[cs];
 -	if ( _klen > 0 ) {
 -		const char *_lower = _keys;
 -		const char *_mid;
 -		const char *_upper = _keys + (_klen<<1) - 2;
 -		while (1) {
 -			if ( _upper < _lower )
 -				break;
 -
 -			_mid = _lower + (((_upper-_lower) >> 1) & ~1);
 -			if ( (*p) < _mid[0] )
 -				_upper = _mid - 2;
 -			else if ( (*p) > _mid[1] )
 -				_lower = _mid + 2;
 -			else {
 -				_trans += (unsigned int)((_mid - _keys)>>1);
 -				goto _match;
 -			}
 -		}
 -		_trans += _klen;
 -	}
 -
 -_match:
 -	cs = _lexer_trans_targs[_trans];
 -
 -	if ( _lexer_trans_actions[_trans] == 0 )
 -		goto _again;
 -
 -	_acts = _lexer_actions + _lexer_trans_actions[_trans];
 -	_nacts = (unsigned int) *_acts++;
 -	while ( _nacts-- > 0 )
 -	{
 -		switch ( *_acts++ )
 -		{
 -	case 0:
 -#line 83 "ragel/i18n/en.c.rl"
 -	{
 -		MARK(content_start, p);
 -    lexer->current_line = lexer->line_number;
 -    lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2;
 -  }
 -	break;
 -	case 1:
 -#line 89 "ragel/i18n/en.c.rl"
 -	{
 -    MARK(content_start, p);
 -  }
 -	break;
 -	case 2:
 -#line 93 "ragel/i18n/en.c.rl"
 -	{
 -    lexer->current_line = lexer->line_number;
 -    lexer->start_col = p - data - lexer->last_newline;
 -  }
 -	break;
 -	case 3:
 -#line 98 "ragel/i18n/en.c.rl"
 -	{
 -    int len = LEN(content_start, PTR_TO(final_newline));
 -    int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end));
 -
 -    if (len < 0) len = 0;
 -    if (type_len < 0) len = 0;
 -
 -    store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line);
 -  }
 -	break;
 -	case 4:
 -#line 108 "ragel/i18n/en.c.rl"
 -	{ 
 -    MARK(docstring_content_type_start, p);
 -  }
 -	break;
 -	case 5:
 -#line 112 "ragel/i18n/en.c.rl"
 -	{ 
 -    MARK(docstring_content_type_end, p);
 -  }
 -	break;
 -	case 6:
 -#line 116 "ragel/i18n/en.c.rl"
 -	{
 -    STORE_KW_END_CON(feature);
 -  }
 -	break;
 -	case 7:
 -#line 120 "ragel/i18n/en.c.rl"
 -	{
 -    STORE_KW_END_CON(background);
 -  }
 -	break;
 -	case 8:
 -#line 124 "ragel/i18n/en.c.rl"
 -	{
 -    STORE_KW_END_CON(scenario);
 -  }
 -	break;
 -	case 9:
 -#line 128 "ragel/i18n/en.c.rl"
 -	{
 -    STORE_KW_END_CON(scenario_outline);
 -  }
 -	break;
 -	case 10:
 -#line 132 "ragel/i18n/en.c.rl"
 -	{
 -    STORE_KW_END_CON(examples);
 -  }
 -	break;
 -	case 11:
 -#line 136 "ragel/i18n/en.c.rl"
 -	{
 -    store_kw_con(listener, "step",
 -      PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
 -      PTR_TO(content_start), LEN(content_start, p), 
 -      lexer->current_line);
 -  }
 -	break;
 -	case 12:
 -#line 143 "ragel/i18n/en.c.rl"
 -	{
 -    STORE_ATTR(comment);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 13:
 -#line 148 "ragel/i18n/en.c.rl"
 -	{
 -    STORE_ATTR(tag);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 14:
 -#line 153 "ragel/i18n/en.c.rl"
 -	{
 -    lexer->line_number += 1;
 -    MARK(final_newline, p);
 -  }
 -	break;
 -	case 15:
 -#line 158 "ragel/i18n/en.c.rl"
 -	{
 -    MARK(last_newline, p + 1);
 -  }
 -	break;
 -	case 16:
 -#line 162 "ragel/i18n/en.c.rl"
 -	{
 -    if (lexer->mark == 0) {
 -      MARK(mark, p);
 -    }
 -  }
 -	break;
 -	case 17:
 -#line 168 "ragel/i18n/en.c.rl"
 -	{
 -    MARK(keyword_end, p);
 -    MARK(keyword_start, PTR_TO(mark));
 -    MARK(content_start, p + 1);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 18:
 -#line 175 "ragel/i18n/en.c.rl"
 -	{
 -    MARK(content_end, p);
 -  }
 -	break;
 -	case 19:
 -#line 179 "ragel/i18n/en.c.rl"
 -	{
 -    p = p - 1;
 -    lexer->current_line = lexer->line_number;
 -    current_row = rb_ary_new();
 -  }
 -	break;
 -	case 20:
 -#line 185 "ragel/i18n/en.c.rl"
 -	{
 -		MARK(content_start, p);
 -  }
 -	break;
 -	case 21:
 -#line 189 "ragel/i18n/en.c.rl"
 -	{
 -    VALUE re_pipe, re_newline, re_backslash;
 -    VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
 -    rb_funcall(con, rb_intern("strip!"), 0);
 -    re_pipe      = rb_reg_regcomp(rb_str_new2("\\\\\\|"));
 -    re_newline   = rb_reg_regcomp(rb_str_new2("\\\\n"));
 -    re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_pipe,      rb_str_new2("|"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_newline,   rb_str_new2("\n"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\"));
 -
 -    rb_ary_push(current_row, con);
 -  }
 -	break;
 -	case 22:
 -#line 203 "ragel/i18n/en.c.rl"
 -	{
 -    rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
 -  }
 -	break;
 -	case 23:
 -#line 207 "ragel/i18n/en.c.rl"
 -	{
 -    int line;
 -    if (cs < lexer_first_final) {
 -      size_t count = 0;
 -      VALUE newstr_val;
 -      char *newstr;
 -      int newstr_count = 0;        
 -      size_t len;
 -      const char *buff;
 -      if (lexer->last_newline != 0) {
 -        len = LEN(last_newline, eof);
 -        buff = PTR_TO(last_newline);
 -      } else {
 -        len = strlen(data);
 -        buff = data;
 -      }
 -
 -      /* Allocate as a ruby string so that it gets cleaned up by GC */
 -      newstr_val = rb_str_new(buff, len);
 -      newstr = RSTRING_PTR(newstr_val);
 -
 -
 -      for (count = 0; count < len; count++) {
 -        if(buff[count] == 10) {
 -          newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
 -          break;
 -        } else {
 -          if (buff[count] == '%') {
 -            newstr[newstr_count++] = buff[count];
 -            newstr[newstr_count] = buff[count];
 -          } else {
 -            newstr[newstr_count] = buff[count];
 -          }
 -        }
 -        newstr_count++;
 -      }
 -
 -      line = lexer->line_number;
 -      lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
 -      raise_lexer_error(newstr, line);
 -    } else {
 -      rb_funcall(listener, rb_intern("eof"), 0);
 -    }
 -  }
 -	break;
 -#line 1319 "ext/gherkin_lexer_en/gherkin_lexer_en.c"
 -		}
 -	}
 -
 -_again:
 -	if ( cs == 0 )
 -		goto _out;
 -	if ( ++p != pe )
 -		goto _resume;
 -	_test_eof: {}
 -	if ( p == eof )
 -	{
 -	const char *__acts = _lexer_actions + _lexer_eof_actions[cs];
 -	unsigned int __nacts = (unsigned int) *__acts++;
 -	while ( __nacts-- > 0 ) {
 -		switch ( *__acts++ ) {
 -	case 23:
 -#line 207 "ragel/i18n/en.c.rl"
 -	{
 -    int line;
 -    if (cs < lexer_first_final) {
 -      size_t count = 0;
 -      VALUE newstr_val;
 -      char *newstr;
 -      int newstr_count = 0;        
 -      size_t len;
 -      const char *buff;
 -      if (lexer->last_newline != 0) {
 -        len = LEN(last_newline, eof);
 -        buff = PTR_TO(last_newline);
 -      } else {
 -        len = strlen(data);
 -        buff = data;
 -      }
 -
 -      /* Allocate as a ruby string so that it gets cleaned up by GC */
 -      newstr_val = rb_str_new(buff, len);
 -      newstr = RSTRING_PTR(newstr_val);
 -
 -
 -      for (count = 0; count < len; count++) {
 -        if(buff[count] == 10) {
 -          newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
 -          break;
 -        } else {
 -          if (buff[count] == '%') {
 -            newstr[newstr_count++] = buff[count];
 -            newstr[newstr_count] = buff[count];
 -          } else {
 -            newstr[newstr_count] = buff[count];
 -          }
 -        }
 -        newstr_count++;
 -      }
 -
 -      line = lexer->line_number;
 -      lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
 -      raise_lexer_error(newstr, line);
 -    } else {
 -      rb_funcall(listener, rb_intern("eof"), 0);
 -    }
 -  }
 -	break;
 -#line 1382 "ext/gherkin_lexer_en/gherkin_lexer_en.c"
 -		}
 -	}
 -	}
 -
 -	_out: {}
 -	}
 -
 -#line 426 "ragel/i18n/en.c.rl"
 -
 -    assert(p <= pe && "data overflow after parsing execute");
 -    assert(lexer->content_start <= len && "content starts after data end");
 -    assert(lexer->mark < len && "mark is after data end");
 -    
 -    /* Reset lexer by re-initializing the whole thing */
 -    lexer_init(lexer);
 -
 -    if (cs == lexer_error) {
 -      rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails.");
 -    } else {
 -      return Qtrue;
 -    }
 -  }
 -}
 -
 -void Init_gherkin_lexer_en()
 -{
 -  mGherkin = rb_define_module("Gherkin");
 -  mGherkinLexer = rb_define_module_under(mGherkin, "Lexer");
 -  rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError"));
 -
 -  mCLexer = rb_define_module_under(mGherkin, "CLexer");
 -  cI18nLexer = rb_define_class_under(mCLexer, "En", rb_cObject);
 -  rb_define_alloc_func(cI18nLexer, CLexer_alloc);
 -  rb_define_method(cI18nLexer, "initialize", CLexer_init, 1);
 -  rb_define_method(cI18nLexer, "scan", CLexer_scan, 1);
 -}
 -
diff --cc ext/gherkin_lexer_en_au/extconf.rb
index ee6eaf9,ee6eaf9..0000000
deleted file mode 100644,100644
--- a/ext/gherkin_lexer_en_au/extconf.rb
+++ /dev/null
@@@ -1,6 -1,6 +1,0 @@@
--require 'mkmf'
--CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags']
--$CFLAGS << ' -O0 -Wall' if CONFIG['CC'] =~ /gcc|clang/
--dir_config("gherkin_lexer_en_au")
--have_library("c", "main")
--create_makefile("gherkin_lexer_en_au")
diff --cc ext/gherkin_lexer_en_au/gherkin_lexer_en_au.c
index f8ca3c4,87b7bb7..0000000
deleted file mode 100644,100644
--- a/ext/gherkin_lexer_en_au/gherkin_lexer_en_au.c
+++ /dev/null
@@@ -1,1223 -1,1765 +1,0 @@@
--
- #line 1 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_au.c.rl"
- #include <assert.h>
- #include <ruby.h>
- 
- #if defined(_WIN32)
- #include <stddef.h>
- #endif
- 
- #ifdef HAVE_RUBY_RE_H
- #include <ruby/re.h>
- #else
- #include <re.h>
- #endif
- 
- #ifdef HAVE_RUBY_ENCODING_H
- #include <ruby/encoding.h>
- #define ENCODED_STR_NEW(ptr, len) \
-     rb_enc_str_new(ptr, len, rb_utf8_encoding())
- #else
- #define ENCODED_STR_NEW(ptr, len) \
-     rb_str_new(ptr, len)
- #endif
- 
- #ifndef RSTRING_PTR
- #define RSTRING_PTR(s) (RSTRING(s)->ptr)
- #endif
- 
- #ifndef RSTRING_LEN
- #define RSTRING_LEN(s) (RSTRING(s)->len)
- #endif
- 
- #define DATA_GET(FROM, TYPE, NAME) \
-   Data_Get_Struct(FROM, TYPE, NAME); \
-   if (NAME == NULL) { \
-     rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \
-   }
-  
- typedef struct lexer_state {
-   int content_len;
-   int line_number;
-   int current_line;
-   int start_col;
-   size_t mark;
-   size_t keyword_start;
-   size_t keyword_end;
-   size_t next_keyword_start;
-   size_t content_start;
-   size_t content_end;
-   size_t docstring_content_type_start;
-   size_t docstring_content_type_end;
-   size_t query_start;
-   size_t last_newline;
-   size_t final_newline;
- } lexer_state;
- 
- static VALUE mGherkin;
- static VALUE mGherkinLexer;
- static VALUE mCLexer;
- static VALUE cI18nLexer;
- static VALUE rb_eGherkinLexingError;
- 
- #define LEN(AT, P) (P - data - lexer->AT)
- #define MARK(M, P) (lexer->M = (P) - data)
- #define PTR_TO(P) (data + lexer->P)
- 
- #define STORE_KW_END_CON(EVENT) \
-   store_multiline_kw_con(listener, # EVENT, \
-     PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \
-     PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \
-     lexer->current_line, lexer->start_col); \
-     if (lexer->content_end != 0) { \
-       p = PTR_TO(content_end - 1); \
-     } \
-     lexer->content_end = 0
- 
- #define STORE_ATTR(ATTR) \
-     store_attr(listener, # ATTR, \
-       PTR_TO(content_start), LEN(content_start, p), \
-       lexer->line_number)
- 
- 
- #line 254 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_au.c.rl"
- 
- 
- /** Data **/
- 
- #line 89 "ext/gherkin_lexer_en_au/gherkin_lexer_en_au.c"
- static const char _lexer_actions[] = {
- 	0, 1, 0, 1, 1, 1, 2, 1, 
- 	3, 1, 4, 1, 5, 1, 6, 1, 
- 	7, 1, 8, 1, 9, 1, 10, 1, 
- 	11, 1, 12, 1, 13, 1, 16, 1, 
- 	17, 1, 18, 1, 19, 1, 20, 1, 
- 	21, 1, 22, 1, 23, 2, 1, 18, 
- 	2, 4, 5, 2, 13, 0, 2, 14, 
- 	15, 2, 17, 0, 2, 17, 2, 2, 
- 	17, 16, 2, 17, 19, 2, 18, 6, 
- 	2, 18, 7, 2, 18, 8, 2, 18, 
- 	9, 2, 18, 10, 2, 18, 16, 2, 
- 	20, 21, 2, 22, 0, 2, 22, 2, 
- 	2, 22, 16, 2, 22, 19, 3, 3, 
- 	14, 15, 3, 5, 14, 15, 3, 11, 
- 	14, 15, 3, 12, 14, 15, 3, 13, 
- 	14, 15, 3, 14, 15, 18, 3, 17, 
- 	0, 11, 3, 17, 14, 15, 4, 1, 
- 	14, 15, 18, 4, 4, 5, 14, 15, 
- 	4, 17, 0, 14, 15, 5, 17, 0, 
- 	11, 14, 15
- };
- 
- static const short _lexer_key_offsets[] = {
- 	0, 0, 17, 18, 19, 35, 36, 37, 
- 	39, 41, 46, 51, 56, 61, 65, 69, 
- 	71, 72, 73, 74, 75, 76, 77, 78, 
- 	79, 80, 81, 82, 83, 84, 85, 86, 
- 	87, 89, 91, 96, 103, 108, 110, 111, 
- 	112, 113, 114, 115, 116, 117, 118, 119, 
- 	120, 121, 135, 137, 139, 141, 143, 145, 
- 	147, 149, 151, 153, 155, 157, 159, 161, 
- 	163, 165, 181, 184, 185, 186, 187, 188, 
- 	189, 190, 191, 192, 193, 200, 202, 204, 
- 	206, 208, 210, 212, 213, 214, 215, 216, 
- 	217, 218, 219, 229, 231, 233, 235, 237, 
- 	239, 241, 243, 245, 247, 249, 251, 253, 
- 	255, 257, 260, 262, 264, 266, 268, 270, 
- 	272, 274, 276, 278, 280, 282, 284, 286, 
- 	289, 291, 293, 295, 297, 299, 301, 303, 
- 	305, 307, 309, 311, 312, 313, 314, 315, 
- 	316, 317, 331, 333, 335, 337, 339, 341, 
- 	343, 345, 347, 349, 351, 353, 355, 357, 
- 	359, 361, 364, 366, 368, 370, 372, 374, 
- 	376, 378, 380, 382, 384, 386, 388, 390, 
- 	393, 395, 397, 399, 401, 403, 405, 407, 
- 	409, 411, 413, 415, 417, 419, 421, 424, 
- 	426, 428, 430, 432, 434, 436, 438, 440, 
- 	442, 444, 446, 447, 448, 449, 450, 451, 
- 	453, 454, 455, 456, 457, 458, 459, 460, 
- 	461, 462, 463, 464, 468, 474, 477, 479, 
- 	485, 501, 503, 505, 507, 509, 511, 513, 
- 	516, 518, 520, 522, 524, 526, 528, 530, 
- 	532, 534, 536, 538, 540, 542, 544, 547, 
- 	549, 551, 553, 555, 557, 559, 561, 563, 
- 	565, 567, 569, 570, 571, 572, 573, 574, 
- 	575, 576, 589, 591, 593, 595, 597, 599, 
- 	601, 603, 605, 607, 609, 611, 613, 615, 
- 	617, 619, 622, 624, 626, 628, 630, 632, 
- 	634, 636, 638, 640, 642, 644, 646, 648, 
- 	650, 652, 655, 657, 659, 661, 663, 665, 
- 	667, 669, 671, 673, 675, 677
- };
- 
- static const char _lexer_trans_keys[] = {
- 	-17, 10, 32, 34, 35, 37, 42, 64, 
- 	66, 67, 77, 78, 87, 89, 124, 9, 
- 	13, -69, -65, 10, 32, 34, 35, 37, 
- 	42, 64, 66, 67, 77, 78, 87, 89, 
- 	124, 9, 13, 34, 34, 10, 13, 10, 
- 	13, 10, 32, 34, 9, 13, 10, 32, 
- 	34, 9, 13, 10, 32, 34, 9, 13, 
- 	10, 32, 34, 9, 13, 10, 32, 9, 
- 	13, 10, 32, 9, 13, 10, 13, 10, 
- 	95, 70, 69, 65, 84, 85, 82, 69, 
- 	95, 69, 78, 68, 95, 37, 32, 10, 
- 	13, 10, 13, 13, 32, 64, 9, 10, 
- 	9, 10, 13, 32, 64, 11, 12, 10, 
- 	32, 64, 9, 13, 97, 108, 99, 107, 
- 	103, 114, 111, 117, 110, 100, 58, 10, 
- 	10, 10, 32, 35, 37, 42, 64, 66, 
- 	67, 77, 78, 87, 89, 9, 13, 10, 
- 	95, 10, 70, 10, 69, 10, 65, 10, 
- 	84, 10, 85, 10, 82, 10, 69, 10, 
- 	95, 10, 69, 10, 78, 10, 68, 10, 
- 	95, 10, 37, 10, 32, 10, 32, 34, 
- 	35, 37, 42, 64, 66, 67, 77, 78, 
- 	87, 89, 124, 9, 13, 101, 111, 114, 
- 	112, 116, 98, 98, 101, 114, 58, 10, 
- 	10, 10, 32, 35, 67, 124, 9, 13, 
- 	10, 114, 10, 105, 10, 107, 10, 101, 
- 	10, 121, 10, 58, 105, 107, 101, 121, 
- 	58, 10, 10, 10, 32, 35, 37, 64, 
- 	66, 67, 77, 9, 13, 10, 95, 10, 
- 	70, 10, 69, 10, 65, 10, 84, 10, 
- 	85, 10, 82, 10, 69, 10, 95, 10, 
- 	69, 10, 78, 10, 68, 10, 95, 10, 
- 	37, 10, 97, 108, 10, 99, 10, 107, 
- 	10, 103, 10, 114, 10, 111, 10, 117, 
- 	10, 110, 10, 100, 10, 58, 10, 111, 
- 	10, 107, 10, 101, 10, 115, 10, 111, 
- 	114, 10, 98, 10, 98, 10, 101, 10, 
- 	114, 10, 105, 10, 107, 10, 101, 10, 
- 	121, 10, 97, 10, 116, 10, 101, 97, 
- 	116, 101, 58, 10, 10, 10, 32, 35, 
- 	37, 42, 64, 66, 67, 77, 78, 87, 
- 	89, 9, 13, 10, 95, 10, 70, 10, 
- 	69, 10, 65, 10, 84, 10, 85, 10, 
- 	82, 10, 69, 10, 95, 10, 69, 10, 
- 	78, 10, 68, 10, 95, 10, 37, 10, 
- 	32, 10, 97, 108, 10, 99, 10, 107, 
- 	10, 103, 10, 114, 10, 111, 10, 117, 
- 	10, 110, 10, 100, 10, 58, 10, 111, 
- 	10, 107, 10, 101, 10, 115, 10, 101, 
- 	114, 10, 112, 10, 116, 10, 105, 10, 
- 	107, 10, 101, 10, 121, 10, 97, 10, 
- 	116, 10, 101, 10, 104, 10, 101, 10, 
- 	110, 10, 97, 10, 32, 10, 103, 107, 
- 	10, 111, 10, 116, 10, 116, 10, 97, 
- 	10, 110, 10, 111, 10, 119, 10, 32, 
- 	10, 104, 10, 111, 10, 119, 104, 101, 
- 	110, 97, 32, 103, 107, 111, 116, 116, 
- 	97, 110, 111, 119, 32, 104, 111, 119, 
- 	32, 124, 9, 13, 10, 32, 92, 124, 
- 	9, 13, 10, 92, 124, 10, 92, 10, 
- 	32, 92, 124, 9, 13, 10, 32, 34, 
- 	35, 37, 42, 64, 66, 67, 77, 78, 
- 	87, 89, 124, 9, 13, 10, 108, 10, 
- 	111, 10, 107, 10, 101, 10, 115, 10, 
- 	58, 10, 101, 114, 10, 112, 10, 116, 
- 	10, 105, 10, 107, 10, 101, 10, 121, 
- 	10, 97, 10, 116, 10, 101, 10, 104, 
- 	10, 101, 10, 110, 10, 97, 10, 32, 
- 	10, 103, 107, 10, 111, 10, 116, 10, 
- 	116, 10, 97, 10, 110, 10, 111, 10, 
- 	119, 10, 32, 10, 104, 10, 111, 10, 
- 	119, 111, 107, 101, 115, 58, 10, 10, 
- 	10, 32, 35, 37, 42, 64, 67, 77, 
- 	78, 87, 89, 9, 13, 10, 95, 10, 
- 	70, 10, 69, 10, 65, 10, 84, 10, 
- 	85, 10, 82, 10, 69, 10, 95, 10, 
- 	69, 10, 78, 10, 68, 10, 95, 10, 
- 	37, 10, 32, 10, 101, 114, 10, 112, 
- 	10, 116, 10, 105, 10, 107, 10, 101, 
- 	10, 121, 10, 58, 10, 97, 10, 116, 
- 	10, 101, 10, 104, 10, 101, 10, 110, 
- 	10, 97, 10, 32, 10, 103, 107, 10, 
- 	111, 10, 116, 10, 116, 10, 97, 10, 
- 	110, 10, 111, 10, 119, 10, 32, 10, 
- 	104, 10, 111, 10, 119, 0
- };
- 
- static const char _lexer_single_lengths[] = {
- 	0, 15, 1, 1, 14, 1, 1, 2, 
- 	2, 3, 3, 3, 3, 2, 2, 2, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	2, 2, 3, 5, 3, 2, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 12, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 14, 3, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 5, 2, 2, 2, 
- 	2, 2, 2, 1, 1, 1, 1, 1, 
- 	1, 1, 8, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 3, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 3, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 1, 1, 1, 1, 1, 
- 	1, 12, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 3, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 3, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 3, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 1, 1, 1, 1, 1, 2, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 2, 4, 3, 2, 4, 
- 	14, 2, 2, 2, 2, 2, 2, 3, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 3, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 1, 1, 1, 1, 1, 1, 
- 	1, 11, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 3, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 3, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 0
- };
- 
- static const char _lexer_range_lengths[] = {
- 	0, 1, 0, 0, 1, 0, 0, 0, 
- 	0, 1, 1, 1, 1, 1, 1, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 1, 1, 1, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 1, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 1, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 1, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 1, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 1, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 1, 1, 0, 0, 1, 
- 	1, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 1, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0
- };
- 
- static const short _lexer_index_offsets[] = {
- 	0, 0, 17, 19, 21, 37, 39, 41, 
- 	44, 47, 52, 57, 62, 67, 71, 75, 
- 	78, 80, 82, 84, 86, 88, 90, 92, 
- 	94, 96, 98, 100, 102, 104, 106, 108, 
- 	110, 113, 116, 121, 128, 133, 136, 138, 
- 	140, 142, 144, 146, 148, 150, 152, 154, 
- 	156, 158, 172, 175, 178, 181, 184, 187, 
- 	190, 193, 196, 199, 202, 205, 208, 211, 
- 	214, 217, 233, 237, 239, 241, 243, 245, 
- 	247, 249, 251, 253, 255, 262, 265, 268, 
- 	271, 274, 277, 280, 282, 284, 286, 288, 
- 	290, 292, 294, 304, 307, 310, 313, 316, 
- 	319, 322, 325, 328, 331, 334, 337, 340, 
- 	343, 346, 350, 353, 356, 359, 362, 365, 
- 	368, 371, 374, 377, 380, 383, 386, 389, 
- 	393, 396, 399, 402, 405, 408, 411, 414, 
- 	417, 420, 423, 426, 428, 430, 432, 434, 
- 	436, 438, 452, 455, 458, 461, 464, 467, 
- 	470, 473, 476, 479, 482, 485, 488, 491, 
- 	494, 497, 501, 504, 507, 510, 513, 516, 
- 	519, 522, 525, 528, 531, 534, 537, 540, 
- 	544, 547, 550, 553, 556, 559, 562, 565, 
- 	568, 571, 574, 577, 580, 583, 586, 590, 
- 	593, 596, 599, 602, 605, 608, 611, 614, 
- 	617, 620, 623, 625, 627, 629, 631, 633, 
- 	636, 638, 640, 642, 644, 646, 648, 650, 
- 	652, 654, 656, 658, 662, 668, 672, 675, 
- 	681, 697, 700, 703, 706, 709, 712, 715, 
- 	719, 722, 725, 728, 731, 734, 737, 740, 
- 	743, 746, 749, 752, 755, 758, 761, 765, 
- 	768, 771, 774, 777, 780, 783, 786, 789, 
- 	792, 795, 798, 800, 802, 804, 806, 808, 
- 	810, 812, 825, 828, 831, 834, 837, 840, 
- 	843, 846, 849, 852, 855, 858, 861, 864, 
- 	867, 870, 874, 877, 880, 883, 886, 889, 
- 	892, 895, 898, 901, 904, 907, 910, 913, 
- 	916, 919, 923, 926, 929, 932, 935, 938, 
- 	941, 944, 947, 950, 953, 956
- };
- 
- static const short _lexer_trans_targs[] = {
- 	2, 4, 4, 5, 15, 17, 31, 34, 
- 	37, 66, 131, 31, 194, 197, 211, 4, 
- 	0, 3, 0, 4, 0, 4, 4, 5, 
- 	15, 17, 31, 34, 37, 66, 131, 31, 
- 	194, 197, 211, 4, 0, 6, 0, 7, 
- 	0, 9, 8, 8, 9, 8, 8, 10, 
- 	10, 11, 10, 10, 10, 10, 11, 10, 
- 	10, 10, 10, 12, 10, 10, 10, 10, 
- 	13, 10, 10, 4, 14, 14, 0, 4, 
- 	14, 14, 0, 4, 16, 15, 4, 0, 
- 	18, 0, 19, 0, 20, 0, 21, 0, 
- 	22, 0, 23, 0, 24, 0, 25, 0, 
- 	26, 0, 27, 0, 28, 0, 29, 0, 
- 	30, 0, 301, 0, 32, 0, 4, 16, 
- 	33, 4, 16, 33, 0, 0, 0, 0, 
- 	35, 36, 4, 36, 36, 34, 35, 35, 
- 	4, 36, 34, 36, 0, 38, 250, 0, 
- 	39, 0, 40, 0, 41, 0, 42, 0, 
- 	43, 0, 44, 0, 45, 0, 46, 0, 
- 	47, 0, 49, 48, 49, 48, 49, 49, 
- 	4, 50, 64, 4, 217, 223, 230, 64, 
- 	233, 236, 49, 48, 49, 51, 48, 49, 
- 	52, 48, 49, 53, 48, 49, 54, 48, 
- 	49, 55, 48, 49, 56, 48, 49, 57, 
- 	48, 49, 58, 48, 49, 59, 48, 49, 
- 	60, 48, 49, 61, 48, 49, 62, 48, 
- 	49, 63, 48, 49, 4, 48, 49, 65, 
- 	48, 4, 4, 5, 15, 17, 31, 34, 
- 	37, 66, 131, 31, 194, 197, 211, 4, 
- 	0, 67, 69, 83, 0, 68, 0, 31, 
- 	0, 70, 0, 71, 0, 72, 0, 73, 
- 	0, 74, 0, 76, 75, 76, 75, 76, 
- 	76, 4, 77, 4, 76, 75, 76, 78, 
- 	75, 76, 79, 75, 76, 80, 75, 76, 
- 	81, 75, 76, 82, 75, 76, 65, 75, 
- 	84, 0, 85, 0, 86, 0, 87, 0, 
- 	88, 0, 90, 89, 90, 89, 90, 90, 
- 	4, 91, 4, 105, 119, 128, 90, 89, 
- 	90, 92, 89, 90, 93, 89, 90, 94, 
- 	89, 90, 95, 89, 90, 96, 89, 90, 
- 	97, 89, 90, 98, 89, 90, 99, 89, 
- 	90, 100, 89, 90, 101, 89, 90, 102, 
- 	89, 90, 103, 89, 90, 104, 89, 90, 
- 	4, 89, 90, 106, 115, 89, 90, 107, 
- 	89, 90, 108, 89, 90, 109, 89, 90, 
- 	110, 89, 90, 111, 89, 90, 112, 89, 
- 	90, 113, 89, 90, 114, 89, 90, 65, 
- 	89, 90, 116, 89, 90, 117, 89, 90, 
- 	118, 89, 90, 114, 89, 90, 120, 124, 
- 	89, 90, 121, 89, 90, 122, 89, 90, 
- 	123, 89, 90, 114, 89, 90, 125, 89, 
- 	90, 126, 89, 90, 127, 89, 90, 114, 
- 	89, 90, 129, 89, 90, 130, 89, 90, 
- 	114, 89, 132, 0, 133, 0, 134, 0, 
- 	135, 0, 137, 136, 137, 136, 137, 137, 
- 	4, 138, 152, 4, 153, 167, 174, 152, 
- 	177, 180, 137, 136, 137, 139, 136, 137, 
- 	140, 136, 137, 141, 136, 137, 142, 136, 
- 	137, 143, 136, 137, 144, 136, 137, 145, 
- 	136, 137, 146, 136, 137, 147, 136, 137, 
- 	148, 136, 137, 149, 136, 137, 150, 136, 
- 	137, 151, 136, 137, 4, 136, 137, 65, 
- 	136, 137, 154, 163, 136, 137, 155, 136, 
- 	137, 156, 136, 137, 157, 136, 137, 158, 
- 	136, 137, 159, 136, 137, 160, 136, 137, 
- 	161, 136, 137, 162, 136, 137, 65, 136, 
- 	137, 164, 136, 137, 165, 136, 137, 166, 
- 	136, 137, 162, 136, 137, 168, 170, 136, 
- 	137, 169, 136, 137, 152, 136, 137, 171, 
- 	136, 137, 172, 136, 137, 173, 136, 137, 
- 	162, 136, 137, 175, 136, 137, 176, 136, 
- 	137, 162, 136, 137, 178, 136, 137, 179, 
- 	136, 137, 152, 136, 137, 181, 136, 137, 
- 	182, 136, 137, 183, 187, 136, 137, 184, 
- 	136, 137, 185, 136, 137, 186, 136, 137, 
- 	152, 136, 137, 188, 136, 137, 189, 136, 
- 	137, 190, 136, 137, 191, 136, 137, 192, 
- 	136, 137, 193, 136, 137, 152, 136, 195, 
- 	0, 196, 0, 31, 0, 198, 0, 199, 
- 	0, 200, 204, 0, 201, 0, 202, 0, 
- 	203, 0, 31, 0, 205, 0, 206, 0, 
- 	207, 0, 208, 0, 209, 0, 210, 0, 
- 	31, 0, 211, 212, 211, 0, 216, 215, 
- 	214, 212, 215, 213, 0, 214, 212, 213, 
- 	0, 214, 213, 216, 215, 214, 212, 215, 
- 	213, 216, 216, 5, 15, 17, 31, 34, 
- 	37, 66, 131, 31, 194, 197, 211, 216, 
- 	0, 49, 218, 48, 49, 219, 48, 49, 
- 	220, 48, 49, 221, 48, 49, 222, 48, 
- 	49, 65, 48, 49, 224, 226, 48, 49, 
- 	225, 48, 49, 64, 48, 49, 227, 48, 
- 	49, 228, 48, 49, 229, 48, 49, 222, 
- 	48, 49, 231, 48, 49, 232, 48, 49, 
- 	222, 48, 49, 234, 48, 49, 235, 48, 
- 	49, 64, 48, 49, 237, 48, 49, 238, 
- 	48, 49, 239, 243, 48, 49, 240, 48, 
- 	49, 241, 48, 49, 242, 48, 49, 64, 
- 	48, 49, 244, 48, 49, 245, 48, 49, 
- 	246, 48, 49, 247, 48, 49, 248, 48, 
- 	49, 249, 48, 49, 64, 48, 251, 0, 
- 	252, 0, 253, 0, 254, 0, 255, 0, 
- 	257, 256, 257, 256, 257, 257, 4, 258, 
- 	272, 4, 273, 281, 272, 284, 287, 257, 
- 	256, 257, 259, 256, 257, 260, 256, 257, 
- 	261, 256, 257, 262, 256, 257, 263, 256, 
- 	257, 264, 256, 257, 265, 256, 257, 266, 
- 	256, 257, 267, 256, 257, 268, 256, 257, 
- 	269, 256, 257, 270, 256, 257, 271, 256, 
- 	257, 4, 256, 257, 65, 256, 257, 274, 
- 	276, 256, 257, 275, 256, 257, 272, 256, 
- 	257, 277, 256, 257, 278, 256, 257, 279, 
- 	256, 257, 280, 256, 257, 65, 256, 257, 
- 	282, 256, 257, 283, 256, 257, 280, 256, 
- 	257, 285, 256, 257, 286, 256, 257, 272, 
- 	256, 257, 288, 256, 257, 289, 256, 257, 
- 	290, 294, 256, 257, 291, 256, 257, 292, 
- 	256, 257, 293, 256, 257, 272, 256, 257, 
- 	295, 256, 257, 296, 256, 257, 297, 256, 
- 	257, 298, 256, 257, 299, 256, 257, 300, 
- 	256, 257, 272, 256, 0, 0
- };
- 
- static const unsigned char _lexer_trans_actions[] = {
- 	0, 54, 0, 5, 1, 0, 29, 1, 
- 	29, 29, 29, 29, 29, 29, 35, 0, 
- 	43, 0, 43, 0, 43, 54, 0, 5, 
- 	1, 0, 29, 1, 29, 29, 29, 29, 
- 	29, 29, 35, 0, 43, 0, 43, 0, 
- 	43, 139, 48, 9, 106, 11, 0, 134, 
- 	45, 45, 45, 3, 122, 33, 33, 33, 
- 	0, 122, 33, 33, 33, 0, 122, 33, 
- 	0, 33, 0, 102, 7, 7, 43, 54, 
- 	0, 0, 43, 114, 25, 0, 54, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 149, 126, 
- 	57, 110, 23, 0, 43, 43, 43, 43, 
- 	0, 27, 118, 27, 27, 51, 27, 0, 
- 	54, 0, 1, 0, 43, 0, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 144, 57, 54, 0, 54, 0, 
- 	72, 33, 84, 72, 84, 84, 84, 84, 
- 	84, 84, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 15, 0, 54, 15, 
- 	0, 130, 31, 60, 57, 31, 63, 57, 
- 	63, 63, 63, 63, 63, 63, 66, 31, 
- 	43, 0, 0, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 144, 57, 54, 0, 54, 
- 	0, 81, 84, 81, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 21, 0, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 144, 57, 54, 0, 54, 0, 
- 	69, 33, 69, 84, 84, 84, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	13, 0, 54, 0, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 13, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 144, 57, 54, 0, 54, 0, 
- 	75, 33, 84, 75, 84, 84, 84, 84, 
- 	84, 84, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 17, 0, 54, 17, 
- 	0, 54, 0, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 17, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 0, 0, 43, 54, 37, 
- 	37, 87, 37, 37, 43, 0, 39, 0, 
- 	43, 0, 0, 54, 0, 0, 39, 0, 
- 	0, 54, 0, 93, 90, 41, 96, 90, 
- 	96, 96, 96, 96, 96, 96, 99, 0, 
- 	43, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 15, 0, 54, 0, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	144, 57, 54, 0, 54, 0, 78, 33, 
- 	84, 78, 84, 84, 84, 84, 84, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 19, 0, 54, 19, 0, 54, 0, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 19, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 0, 0
- };
- 
- static const unsigned char _lexer_eof_actions[] = {
- 	0, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43
- };
- 
- static const int lexer_start = 1;
- static const int lexer_first_final = 301;
- static const int lexer_error = 0;
- 
- static const int lexer_en_main = 1;
- 
- 
- #line 258 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_au.c.rl"
- 
- static VALUE 
- unindent(VALUE con, int start_col)
- {
-   VALUE re;
-   // Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters
-   char pat[32]; 
-   snprintf(pat, 32, "^[\t ]{0,%d}", start_col); 
-   re = rb_reg_regcomp(rb_str_new2(pat));
-   rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2(""));
- 
-   return Qnil;
- 
- }
- 
- static void 
- store_kw_con(VALUE listener, const char * event_name, 
-              const char * keyword_at, size_t keyword_length, 
-              const char * at,         size_t length, 
-              int current_line)
- {
-   VALUE con = Qnil, kw = Qnil;
-   kw = ENCODED_STR_NEW(keyword_at, keyword_length);
-   con = ENCODED_STR_NEW(at, length);
-   rb_funcall(con, rb_intern("strip!"), 0);
-   rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); 
- }
- 
- static void
- store_multiline_kw_con(VALUE listener, const char * event_name,
-                       const char * keyword_at, size_t keyword_length,
-                       const char * at,         size_t length,
-                       int current_line, int start_col)
- {
-   VALUE split;
-   VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil;
- 
-   kw = ENCODED_STR_NEW(keyword_at, keyword_length);
-   con = ENCODED_STR_NEW(at, length);
- 
-   unindent(con, start_col);
-   
-   split = rb_str_split(con, "\n");
- 
-   name = rb_funcall(split, rb_intern("shift"), 0);
-   desc = rb_ary_join(split, rb_str_new2( "\n" ));
- 
-   if( name == Qnil ) 
-   {
-     name = rb_str_new2("");
-   }
-   if( rb_funcall(desc, rb_intern("size"), 0) == 0) 
-   {
-     desc = rb_str_new2("");
-   }
-   rb_funcall(name, rb_intern("strip!"), 0);
-   rb_funcall(desc, rb_intern("rstrip!"), 0);
-   rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); 
- }
- 
- static void 
- store_attr(VALUE listener, const char * attr_type,
-            const char * at, size_t length, 
-            int line)
- {
-   VALUE val = ENCODED_STR_NEW(at, length);
-   rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line));
- }
- static void 
- store_docstring_content(VALUE listener, 
-           int start_col, 
-           const char *type_at, size_t type_length,
-           const char *at, size_t length, 
-           int current_line)
- {
-   VALUE re2;
-   VALUE unescape_escaped_quotes;
-   VALUE con = ENCODED_STR_NEW(at, length);
-   VALUE con_type = ENCODED_STR_NEW(type_at, type_length);
- 
-   unindent(con, start_col);
- 
-   re2 = rb_reg_regcomp(rb_str_new2("\r\\Z"));
-   unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\""));
-   rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2(""));
-   rb_funcall(con_type, rb_intern("strip!"), 0);
-   rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\""));
-   rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line));
- }
- static void 
- raise_lexer_error(const char * at, int line)
- { 
-   rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at);
- }
- 
- static void lexer_init(lexer_state *lexer) {
-   lexer->content_start = 0;
-   lexer->content_end = 0;
-   lexer->content_len = 0;
-   lexer->docstring_content_type_start = 0;
-   lexer->docstring_content_type_end = 0;
-   lexer->mark = 0;
-   lexer->keyword_start = 0;
-   lexer->keyword_end = 0;
-   lexer->next_keyword_start = 0;
-   lexer->line_number = 1;
-   lexer->last_newline = 0;
-   lexer->final_newline = 0;
-   lexer->start_col = 0;
- }
- 
- static VALUE CLexer_alloc(VALUE klass)
- {
-   VALUE obj;
-   lexer_state *lxr = ALLOC(lexer_state);
-   lexer_init(lxr);
- 
-   obj = Data_Wrap_Struct(klass, NULL, -1, lxr);
- 
-   return obj;
- }
- 
- static VALUE CLexer_init(VALUE self, VALUE listener)
- {
-   lexer_state *lxr; 
-   rb_iv_set(self, "@listener", listener);
-   
-   lxr = NULL;
-   DATA_GET(self, lexer_state, lxr);
-   lexer_init(lxr);
-   
-   return self;
- }
- 
- static VALUE CLexer_scan(VALUE self, VALUE input)
- {
-   VALUE input_copy;
-   char *data;
-   size_t len;
-   VALUE listener = rb_iv_get(self, "@listener");
- 
-   lexer_state *lexer;
-   lexer = NULL;
-   DATA_GET(self, lexer_state, lexer);
- 
-   input_copy = rb_str_dup(input);
- 
-   rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%"));
-   data = RSTRING_PTR(input_copy);
-   len = RSTRING_LEN(input_copy);
-   
-   if (len == 0) { 
-     rb_raise(rb_eGherkinLexingError, "No content to lex.");
-   } else {
- 
-     const char *p, *pe, *eof;
-     int cs = 0;
-     
-     VALUE current_row = Qnil;
- 
-     p = data;
-     pe = data + len;
-     eof = pe;
-     
-     assert(*pe == '\0' && "pointer does not end on NULL");
-     
-     
- #line 827 "ext/gherkin_lexer_en_au/gherkin_lexer_en_au.c"
- 	{
- 	cs = lexer_start;
- 	}
- 
- #line 425 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_au.c.rl"
-     
- #line 834 "ext/gherkin_lexer_en_au/gherkin_lexer_en_au.c"
- 	{
- 	int _klen;
- 	unsigned int _trans;
- 	const char *_acts;
- 	unsigned int _nacts;
- 	const char *_keys;
- 
- 	if ( p == pe )
- 		goto _test_eof;
- 	if ( cs == 0 )
- 		goto _out;
- _resume:
- 	_keys = _lexer_trans_keys + _lexer_key_offsets[cs];
- 	_trans = _lexer_index_offsets[cs];
- 
- 	_klen = _lexer_single_lengths[cs];
- 	if ( _klen > 0 ) {
- 		const char *_lower = _keys;
- 		const char *_mid;
- 		const char *_upper = _keys + _klen - 1;
- 		while (1) {
- 			if ( _upper < _lower )
- 				break;
- 
- 			_mid = _lower + ((_upper-_lower) >> 1);
- 			if ( (*p) < *_mid )
- 				_upper = _mid - 1;
- 			else if ( (*p) > *_mid )
- 				_lower = _mid + 1;
- 			else {
- 				_trans += (_mid - _keys);
- 				goto _match;
- 			}
- 		}
- 		_keys += _klen;
- 		_trans += _klen;
- 	}
- 
- 	_klen = _lexer_range_lengths[cs];
- 	if ( _klen > 0 ) {
- 		const char *_lower = _keys;
- 		const char *_mid;
- 		const char *_upper = _keys + (_klen<<1) - 2;
- 		while (1) {
- 			if ( _upper < _lower )
- 				break;
- 
- 			_mid = _lower + (((_upper-_lower) >> 1) & ~1);
- 			if ( (*p) < _mid[0] )
- 				_upper = _mid - 2;
- 			else if ( (*p) > _mid[1] )
- 				_lower = _mid + 2;
- 			else {
- 				_trans += ((_mid - _keys)>>1);
- 				goto _match;
- 			}
- 		}
- 		_trans += _klen;
- 	}
- 
- _match:
- 	cs = _lexer_trans_targs[_trans];
- 
- 	if ( _lexer_trans_actions[_trans] == 0 )
- 		goto _again;
- 
- 	_acts = _lexer_actions + _lexer_trans_actions[_trans];
- 	_nacts = (unsigned int) *_acts++;
- 	while ( _nacts-- > 0 )
- 	{
- 		switch ( *_acts++ )
- 		{
- 	case 0:
- #line 83 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_au.c.rl"
- 	{
- 		MARK(content_start, p);
-     lexer->current_line = lexer->line_number;
-     lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2;
-   }
- 	break;
- 	case 1:
- #line 89 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_au.c.rl"
- 	{
-     MARK(content_start, p);
-   }
- 	break;
- 	case 2:
- #line 93 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_au.c.rl"
- 	{
-     lexer->current_line = lexer->line_number;
-     lexer->start_col = p - data - lexer->last_newline;
-   }
- 	break;
- 	case 3:
- #line 98 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_au.c.rl"
- 	{
-     int len = LEN(content_start, PTR_TO(final_newline));
-     int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end));
- 
-     if (len < 0) len = 0;
-     if (type_len < 0) len = 0;
- 
-     store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line);
-   }
- 	break;
- 	case 4:
- #line 108 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_au.c.rl"
- 	{ 
-     MARK(docstring_content_type_start, p);
-   }
- 	break;
- 	case 5:
- #line 112 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_au.c.rl"
- 	{ 
-     MARK(docstring_content_type_end, p);
-   }
- 	break;
- 	case 6:
- #line 116 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_au.c.rl"
- 	{
-     STORE_KW_END_CON(feature);
-   }
- 	break;
- 	case 7:
- #line 120 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_au.c.rl"
- 	{
-     STORE_KW_END_CON(background);
-   }
- 	break;
- 	case 8:
- #line 124 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_au.c.rl"
- 	{
-     STORE_KW_END_CON(scenario);
-   }
- 	break;
- 	case 9:
- #line 128 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_au.c.rl"
- 	{
-     STORE_KW_END_CON(scenario_outline);
-   }
- 	break;
- 	case 10:
- #line 132 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_au.c.rl"
- 	{
-     STORE_KW_END_CON(examples);
-   }
- 	break;
- 	case 11:
- #line 136 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_au.c.rl"
- 	{
-     store_kw_con(listener, "step",
-       PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-       PTR_TO(content_start), LEN(content_start, p), 
-       lexer->current_line);
-   }
- 	break;
- 	case 12:
- #line 143 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_au.c.rl"
- 	{
-     STORE_ATTR(comment);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 13:
- #line 148 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_au.c.rl"
- 	{
-     STORE_ATTR(tag);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 14:
- #line 153 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_au.c.rl"
- 	{
-     lexer->line_number += 1;
-     MARK(final_newline, p);
-   }
- 	break;
- 	case 15:
- #line 158 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_au.c.rl"
- 	{
-     MARK(last_newline, p + 1);
-   }
- 	break;
- 	case 16:
- #line 162 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_au.c.rl"
- 	{
-     if (lexer->mark == 0) {
-       MARK(mark, p);
-     }
-   }
- 	break;
- 	case 17:
- #line 168 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_au.c.rl"
- 	{
-     MARK(keyword_end, p);
-     MARK(keyword_start, PTR_TO(mark));
-     MARK(content_start, p + 1);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 18:
- #line 175 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_au.c.rl"
- 	{
-     MARK(content_end, p);
-   }
- 	break;
- 	case 19:
- #line 179 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_au.c.rl"
- 	{
-     p = p - 1;
-     lexer->current_line = lexer->line_number;
-     current_row = rb_ary_new();
-   }
- 	break;
- 	case 20:
- #line 185 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_au.c.rl"
- 	{
- 		MARK(content_start, p);
-   }
- 	break;
- 	case 21:
- #line 189 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_au.c.rl"
- 	{
-     VALUE re_pipe, re_newline, re_backslash;
-     VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
-     rb_funcall(con, rb_intern("strip!"), 0);
-     re_pipe      = rb_reg_regcomp(rb_str_new2("\\\\\\|"));
-     re_newline   = rb_reg_regcomp(rb_str_new2("\\\\n"));
-     re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_pipe,      rb_str_new2("|"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_newline,   rb_str_new2("\n"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\"));
- 
-     rb_ary_push(current_row, con);
-   }
- 	break;
- 	case 22:
- #line 203 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_au.c.rl"
- 	{
-     rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
-   }
- 	break;
- 	case 23:
- #line 207 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_au.c.rl"
- 	{
-     int line;
-     if (cs < lexer_first_final) {
-       size_t count = 0;
-       VALUE newstr_val;
-       char *newstr;
-       int newstr_count = 0;        
-       size_t len;
-       const char *buff;
-       if (lexer->last_newline != 0) {
-         len = LEN(last_newline, eof);
-         buff = PTR_TO(last_newline);
-       } else {
-         len = strlen(data);
-         buff = data;
-       }
- 
-       // Allocate as a ruby string so that it gets cleaned up by GC
-       newstr_val = rb_str_new(buff, len);
-       newstr = RSTRING_PTR(newstr_val);
- 
- 
-       for (count = 0; count < len; count++) {
-         if(buff[count] == 10) {
-           newstr[newstr_count] = '\0'; // terminate new string at first newline found
-           break;
-         } else {
-           if (buff[count] == '%') {
-             newstr[newstr_count++] = buff[count];
-             newstr[newstr_count] = buff[count];
-           } else {
-             newstr[newstr_count] = buff[count];
-           }
-         }
-         newstr_count++;
-       }
- 
-       line = lexer->line_number;
-       lexer_init(lexer); // Re-initialize so we can scan again with the same lexer
-       raise_lexer_error(newstr, line);
-     } else {
-       rb_funcall(listener, rb_intern("eof"), 0);
-     }
-   }
- 	break;
- #line 1124 "ext/gherkin_lexer_en_au/gherkin_lexer_en_au.c"
- 		}
- 	}
- 
- _again:
- 	if ( cs == 0 )
- 		goto _out;
- 	if ( ++p != pe )
- 		goto _resume;
- 	_test_eof: {}
- 	if ( p == eof )
- 	{
- 	const char *__acts = _lexer_actions + _lexer_eof_actions[cs];
- 	unsigned int __nacts = (unsigned int) *__acts++;
- 	while ( __nacts-- > 0 ) {
- 		switch ( *__acts++ ) {
- 	case 23:
- #line 207 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_au.c.rl"
- 	{
-     int line;
-     if (cs < lexer_first_final) {
-       size_t count = 0;
-       VALUE newstr_val;
-       char *newstr;
-       int newstr_count = 0;        
-       size_t len;
-       const char *buff;
-       if (lexer->last_newline != 0) {
-         len = LEN(last_newline, eof);
-         buff = PTR_TO(last_newline);
-       } else {
-         len = strlen(data);
-         buff = data;
-       }
- 
-       // Allocate as a ruby string so that it gets cleaned up by GC
-       newstr_val = rb_str_new(buff, len);
-       newstr = RSTRING_PTR(newstr_val);
- 
- 
-       for (count = 0; count < len; count++) {
-         if(buff[count] == 10) {
-           newstr[newstr_count] = '\0'; // terminate new string at first newline found
-           break;
-         } else {
-           if (buff[count] == '%') {
-             newstr[newstr_count++] = buff[count];
-             newstr[newstr_count] = buff[count];
-           } else {
-             newstr[newstr_count] = buff[count];
-           }
-         }
-         newstr_count++;
-       }
- 
-       line = lexer->line_number;
-       lexer_init(lexer); // Re-initialize so we can scan again with the same lexer
-       raise_lexer_error(newstr, line);
-     } else {
-       rb_funcall(listener, rb_intern("eof"), 0);
-     }
-   }
- 	break;
- #line 1187 "ext/gherkin_lexer_en_au/gherkin_lexer_en_au.c"
- 		}
- 	}
- 	}
- 
- 	_out: {}
- 	}
- 
- #line 426 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_au.c.rl"
- 
-     assert(p <= pe && "data overflow after parsing execute");
-     assert(lexer->content_start <= len && "content starts after data end");
-     assert(lexer->mark < len && "mark is after data end");
-     
-     // Reset lexer by re-initializing the whole thing
-     lexer_init(lexer);
- 
-     if (cs == lexer_error) {
-       rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails.");
-     } else {
-       return Qtrue;
-     }
-   }
- }
- 
- void Init_gherkin_lexer_en_au()
- {
-   mGherkin = rb_define_module("Gherkin");
-   mGherkinLexer = rb_define_module_under(mGherkin, "Lexer");
-   rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError"));
- 
-   mCLexer = rb_define_module_under(mGherkin, "CLexer");
-   cI18nLexer = rb_define_class_under(mCLexer, "En_au", rb_cObject);
-   rb_define_alloc_func(cI18nLexer, CLexer_alloc);
-   rb_define_method(cI18nLexer, "initialize", CLexer_init, 1);
-   rb_define_method(cI18nLexer, "scan", CLexer_scan, 1);
- }
- 
 -#line 1 "ragel/i18n/en_au.c.rl"
 -#include <assert.h>
 -#include <ruby.h>
 -
 -#if defined(_WIN32)
 -#include <stddef.h>
 -#endif
 -
 -#ifdef HAVE_RUBY_RE_H
 -#include <ruby/re.h>
 -#else
 -#include <re.h>
 -#endif
 -
 -#ifdef HAVE_RUBY_ENCODING_H
 -#include <ruby/encoding.h>
 -#define ENCODED_STR_NEW(ptr, len) \
 -    rb_enc_str_new(ptr, len, rb_utf8_encoding())
 -#else
 -#define ENCODED_STR_NEW(ptr, len) \
 -    rb_str_new(ptr, len)
 -#endif
 -
 -#ifndef RSTRING_PTR
 -#define RSTRING_PTR(s) (RSTRING(s)->ptr)
 -#endif
 -
 -#ifndef RSTRING_LEN
 -#define RSTRING_LEN(s) (RSTRING(s)->len)
 -#endif
 -
 -#define DATA_GET(FROM, TYPE, NAME) \
 -  Data_Get_Struct(FROM, TYPE, NAME); \
 -  if (NAME == NULL) { \
 -    rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \
 -  }
 - 
 -typedef struct lexer_state {
 -  int content_len;
 -  int line_number;
 -  int current_line;
 -  int start_col;
 -  size_t mark;
 -  size_t keyword_start;
 -  size_t keyword_end;
 -  size_t next_keyword_start;
 -  size_t content_start;
 -  size_t content_end;
 -  size_t docstring_content_type_start;
 -  size_t docstring_content_type_end;
 -  size_t query_start;
 -  size_t last_newline;
 -  size_t final_newline;
 -} lexer_state;
 -
 -static VALUE mGherkin;
 -static VALUE mGherkinLexer;
 -static VALUE mCLexer;
 -static VALUE cI18nLexer;
 -static VALUE rb_eGherkinLexingError;
 -
 -#define LEN(AT, P) (P - data - lexer->AT)
 -#define MARK(M, P) (lexer->M = (P) - data)
 -#define PTR_TO(P) (data + lexer->P)
 -
 -#define STORE_KW_END_CON(EVENT) \
 -  store_multiline_kw_con(listener, # EVENT, \
 -    PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \
 -    PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \
 -    lexer->current_line, lexer->start_col); \
 -    if (lexer->content_end != 0) { \
 -      p = PTR_TO(content_end - 1); \
 -    } \
 -    lexer->content_end = 0
 -
 -#define STORE_ATTR(ATTR) \
 -    store_attr(listener, # ATTR, \
 -      PTR_TO(content_start), LEN(content_start, p), \
 -      lexer->line_number)
 -
 -
 -#line 254 "ragel/i18n/en_au.c.rl"
 -
 -
 -/** Data **/
 -
 -#line 89 "ext/gherkin_lexer_en_au/gherkin_lexer_en_au.c"
 -static const char _lexer_actions[] = {
 -	0, 1, 0, 1, 1, 1, 2, 1, 
 -	3, 1, 4, 1, 5, 1, 6, 1, 
 -	7, 1, 8, 1, 9, 1, 10, 1, 
 -	11, 1, 12, 1, 13, 1, 16, 1, 
 -	17, 1, 18, 1, 19, 1, 20, 1, 
 -	21, 1, 22, 1, 23, 2, 1, 18, 
 -	2, 4, 5, 2, 13, 0, 2, 14, 
 -	15, 2, 17, 0, 2, 17, 2, 2, 
 -	17, 16, 2, 17, 19, 2, 18, 6, 
 -	2, 18, 7, 2, 18, 8, 2, 18, 
 -	9, 2, 18, 10, 2, 18, 16, 2, 
 -	20, 21, 2, 22, 0, 2, 22, 2, 
 -	2, 22, 16, 2, 22, 19, 3, 3, 
 -	14, 15, 3, 5, 14, 15, 3, 11, 
 -	14, 15, 3, 12, 14, 15, 3, 13, 
 -	14, 15, 3, 14, 15, 18, 3, 17, 
 -	0, 11, 3, 17, 14, 15, 4, 1, 
 -	14, 15, 18, 4, 4, 5, 14, 15, 
 -	4, 17, 0, 14, 15, 5, 17, 0, 
 -	11, 14, 15
 -};
 -
 -static const short _lexer_key_offsets[] = {
 -	0, 0, 19, 20, 21, 39, 40, 41, 
 -	43, 45, 50, 55, 60, 65, 69, 73, 
 -	75, 76, 77, 78, 79, 80, 81, 82, 
 -	83, 84, 85, 86, 87, 88, 89, 90, 
 -	91, 93, 95, 100, 107, 112, 113, 114, 
 -	115, 116, 117, 118, 119, 120, 121, 122, 
 -	123, 124, 125, 126, 127, 128, 129, 145, 
 -	147, 149, 151, 153, 155, 157, 159, 161, 
 -	163, 165, 167, 169, 171, 173, 175, 193, 
 -	194, 195, 196, 197, 198, 199, 200, 201, 
 -	202, 203, 204, 205, 206, 207, 208, 209, 
 -	210, 211, 212, 213, 214, 215, 216, 217, 
 -	218, 219, 220, 221, 222, 223, 224, 225, 
 -	226, 227, 228, 229, 230, 231, 232, 233, 
 -	234, 235, 236, 237, 252, 254, 256, 258, 
 -	260, 262, 264, 266, 268, 270, 272, 274, 
 -	276, 278, 280, 282, 284, 286, 288, 290, 
 -	292, 294, 296, 298, 300, 302, 304, 306, 
 -	308, 310, 312, 314, 316, 318, 320, 322, 
 -	324, 326, 328, 330, 332, 334, 336, 338, 
 -	340, 342, 344, 346, 348, 350, 352, 354, 
 -	356, 358, 360, 362, 364, 366, 368, 370, 
 -	372, 374, 376, 378, 380, 382, 384, 386, 
 -	388, 390, 392, 394, 396, 398, 400, 402, 
 -	404, 406, 408, 410, 412, 414, 416, 418, 
 -	420, 422, 424, 426, 428, 430, 432, 434, 
 -	436, 438, 440, 442, 444, 446, 448, 450, 
 -	452, 454, 456, 458, 460, 462, 464, 466, 
 -	468, 470, 472, 474, 476, 478, 480, 482, 
 -	484, 487, 489, 491, 493, 495, 497, 499, 
 -	501, 503, 505, 507, 508, 509, 510, 511, 
 -	512, 513, 514, 515, 516, 517, 518, 519, 
 -	520, 521, 522, 523, 524, 525, 526, 527, 
 -	528, 529, 530, 531, 532, 533, 534, 535, 
 -	536, 537, 538, 539, 540, 541, 553, 555, 
 -	557, 559, 561, 563, 565, 567, 569, 571, 
 -	573, 575, 577, 579, 581, 583, 585, 587, 
 -	589, 591, 593, 595, 597, 599, 601, 603, 
 -	605, 607, 609, 611, 613, 615, 617, 619, 
 -	621, 623, 625, 627, 629, 631, 633, 635, 
 -	637, 639, 641, 643, 645, 647, 649, 651, 
 -	653, 655, 657, 659, 661, 663, 665, 667, 
 -	669, 671, 673, 675, 677, 679, 681, 683, 
 -	685, 687, 689, 691, 693, 695, 697, 698, 
 -	699, 700, 701, 702, 703, 704, 705, 706, 
 -	707, 708, 709, 710, 711, 712, 713, 714, 
 -	715, 729, 731, 733, 735, 737, 739, 741, 
 -	743, 745, 747, 749, 751, 753, 755, 757, 
 -	759, 761, 763, 765, 767, 769, 771, 773, 
 -	775, 777, 779, 781, 783, 785, 787, 789, 
 -	791, 793, 795, 797, 799, 801, 803, 805, 
 -	807, 809, 811, 813, 815, 817, 819, 821, 
 -	823, 825, 827, 829, 831, 833, 835, 837, 
 -	839, 841, 843, 845, 847, 849, 851, 853, 
 -	855, 857, 859, 861, 863, 865, 867, 869, 
 -	871, 873, 875, 877, 879, 881, 883, 885, 
 -	887, 889, 891, 893, 895, 897, 899, 901, 
 -	903, 905, 907, 909, 911, 913, 915, 917, 
 -	919, 921, 923, 925, 927, 929, 931, 933, 
 -	936, 938, 940, 942, 944, 946, 948, 950, 
 -	952, 954, 956, 957, 958, 959, 960, 961, 
 -	962, 963, 964, 967, 968, 969, 970, 971, 
 -	972, 973, 974, 975, 976, 977, 978, 979, 
 -	980, 981, 982, 983, 984, 985, 986, 987, 
 -	988, 989, 990, 997, 999, 1001, 1003, 1005, 
 -	1007, 1009, 1011, 1013, 1015, 1017, 1019, 1023, 
 -	1029, 1032, 1034, 1040, 1058, 1060, 1062, 1064, 
 -	1066, 1068, 1070, 1072, 1074, 1076, 1078, 1080, 
 -	1082, 1084, 1086, 1088, 1090, 1092, 1094, 1096, 
 -	1098, 1100, 1102, 1104, 1106, 1108, 1110, 1112, 
 -	1114, 1116, 1118, 1120, 1122, 1124, 1126, 1128, 
 -	1130, 1132, 1134, 1136, 1138, 1140, 1142, 1144, 
 -	1146, 1148, 1150, 1152, 1154, 1156, 1158, 1160, 
 -	1162, 1164, 1166, 1168, 1170, 1172, 1174, 1176, 
 -	1178, 1180, 1182, 1184, 1186, 1188, 1190, 1192, 
 -	1194, 1196, 1198, 1200, 1202, 1204, 1206, 1208, 
 -	1210, 1212, 1214, 1216, 1218, 1220, 1222, 1224, 
 -	1226, 1228, 1230, 1232, 1234, 1236, 1238, 1240, 
 -	1242, 1244, 1246, 1248, 1250, 1252, 1254, 1256, 
 -	1258, 1260, 1262, 1264, 1266, 1268, 1270, 1272, 
 -	1274, 1276, 1279, 1281, 1283, 1285, 1287, 1289, 
 -	1291, 1293, 1295, 1297, 1299
 -};
 -
 -static const char _lexer_trans_keys[] = {
 -	-17, 10, 32, 34, 35, 37, 42, 64, 
 -	65, 66, 70, 73, 80, 82, 84, 89, 
 -	124, 9, 13, -69, -65, 10, 32, 34, 
 -	35, 37, 42, 64, 65, 66, 70, 73, 
 -	80, 82, 84, 89, 124, 9, 13, 34, 
 -	34, 10, 13, 10, 13, 10, 32, 34, 
 -	9, 13, 10, 32, 34, 9, 13, 10, 
 -	32, 34, 9, 13, 10, 32, 34, 9, 
 -	13, 10, 32, 9, 13, 10, 32, 9, 
 -	13, 10, 13, 10, 95, 70, 69, 65, 
 -	84, 85, 82, 69, 95, 69, 78, 68, 
 -	95, 37, 32, 10, 13, 10, 13, 13, 
 -	32, 64, 9, 10, 9, 10, 13, 32, 
 -	64, 11, 12, 10, 32, 64, 9, 13, 
 -	119, 119, 119, 44, 32, 108, 111, 111, 
 -	107, 32, 109, 97, 116, 101, 58, 10, 
 -	10, 10, 32, 35, 37, 42, 64, 65, 
 -	66, 70, 73, 80, 82, 84, 89, 9, 
 -	13, 10, 95, 10, 70, 10, 69, 10, 
 -	65, 10, 84, 10, 85, 10, 82, 10, 
 -	69, 10, 95, 10, 69, 10, 78, 10, 
 -	68, 10, 95, 10, 37, 10, 32, 10, 
 -	32, 34, 35, 37, 42, 64, 65, 66, 
 -	70, 73, 80, 82, 84, 89, 124, 9, 
 -	13, 117, 116, 32, 97, 116, 32, 116, 
 -	104, 101, 32, 101, 110, 100, 32, 111, 
 -	102, 32, 116, 104, 101, 32, 100, 97, 
 -	121, 32, 73, 32, 114, 101, 99, 107, 
 -	111, 110, 105, 114, 115, 116, 32, 111, 
 -	102, 102, 58, 10, 10, 10, 32, 35, 
 -	37, 42, 64, 65, 66, 73, 80, 82, 
 -	84, 89, 9, 13, 10, 95, 10, 70, 
 -	10, 69, 10, 65, 10, 84, 10, 85, 
 -	10, 82, 10, 69, 10, 95, 10, 69, 
 -	10, 78, 10, 68, 10, 95, 10, 37, 
 -	10, 32, 10, 119, 10, 119, 10, 119, 
 -	10, 44, 10, 32, 10, 108, 10, 111, 
 -	10, 111, 10, 107, 10, 32, 10, 109, 
 -	10, 97, 10, 116, 10, 101, 10, 58, 
 -	10, 117, 10, 116, 10, 32, 10, 97, 
 -	10, 116, 10, 32, 10, 116, 10, 104, 
 -	10, 101, 10, 32, 10, 101, 10, 110, 
 -	10, 100, 10, 32, 10, 111, 10, 102, 
 -	10, 32, 10, 116, 10, 104, 10, 101, 
 -	10, 32, 10, 100, 10, 97, 10, 121, 
 -	10, 32, 10, 73, 10, 32, 10, 114, 
 -	10, 101, 10, 99, 10, 107, 10, 111, 
 -	10, 110, 10, 116, 10, 39, 10, 115, 
 -	10, 32, 10, 106, 10, 117, 10, 115, 
 -	10, 116, 10, 32, 10, 117, 10, 110, 
 -	10, 98, 10, 101, 10, 108, 10, 105, 
 -	10, 101, 10, 118, 10, 97, 10, 98, 
 -	10, 108, 10, 101, 10, 114, 10, 101, 
 -	10, 116, 10, 116, 10, 121, 10, 32, 
 -	10, 109, 10, 117, 10, 99, 10, 104, 
 -	10, 101, 10, 99, 10, 107, 10, 111, 
 -	10, 110, 10, 32, 10, 105, 10, 116, 
 -	10, 39, 10, 115, 10, 32, 10, 108, 
 -	10, 105, 10, 107, 10, 111, 10, 111, 
 -	10, 32, 10, 114, 10, 105, 10, 103, 
 -	10, 104, 10, 116, 10, 39, 101, 10, 
 -	107, 10, 110, 10, 111, 10, 119, 10, 
 -	97, 10, 104, 10, 32, 10, 110, 10, 
 -	97, 10, 104, 116, 39, 115, 32, 106, 
 -	117, 115, 116, 32, 117, 110, 98, 101, 
 -	108, 105, 101, 118, 97, 98, 108, 101, 
 -	114, 101, 116, 116, 121, 32, 109, 117, 
 -	99, 104, 58, 10, 10, 10, 32, 35, 
 -	37, 64, 65, 70, 80, 82, 89, 9, 
 -	13, 10, 95, 10, 70, 10, 69, 10, 
 -	65, 10, 84, 10, 85, 10, 82, 10, 
 -	69, 10, 95, 10, 69, 10, 78, 10, 
 -	68, 10, 95, 10, 37, 10, 119, 10, 
 -	119, 10, 119, 10, 44, 10, 32, 10, 
 -	108, 10, 111, 10, 111, 10, 107, 10, 
 -	32, 10, 109, 10, 97, 10, 116, 10, 
 -	101, 10, 58, 10, 105, 10, 114, 10, 
 -	115, 10, 116, 10, 32, 10, 111, 10, 
 -	102, 10, 102, 10, 114, 10, 101, 10, 
 -	116, 10, 116, 10, 121, 10, 32, 10, 
 -	109, 10, 117, 10, 99, 10, 104, 10, 
 -	101, 10, 99, 10, 107, 10, 111, 10, 
 -	110, 10, 32, 10, 105, 10, 116, 10, 
 -	39, 10, 115, 10, 32, 10, 108, 10, 
 -	105, 10, 107, 10, 111, 10, 117, 10, 
 -	39, 10, 108, 10, 108, 10, 32, 10, 
 -	119, 10, 97, 10, 110, 10, 110, 10, 
 -	97, 101, 99, 107, 111, 110, 32, 105, 
 -	116, 39, 115, 32, 108, 105, 107, 101, 
 -	58, 10, 10, 10, 32, 35, 37, 42, 
 -	64, 65, 66, 73, 80, 84, 89, 9, 
 -	13, 10, 95, 10, 70, 10, 69, 10, 
 -	65, 10, 84, 10, 85, 10, 82, 10, 
 -	69, 10, 95, 10, 69, 10, 78, 10, 
 -	68, 10, 95, 10, 37, 10, 32, 10, 
 -	119, 10, 119, 10, 119, 10, 44, 10, 
 -	32, 10, 108, 10, 111, 10, 111, 10, 
 -	107, 10, 32, 10, 109, 10, 97, 10, 
 -	116, 10, 101, 10, 58, 10, 117, 10, 
 -	116, 10, 32, 10, 97, 10, 116, 10, 
 -	32, 10, 116, 10, 104, 10, 101, 10, 
 -	32, 10, 101, 10, 110, 10, 100, 10, 
 -	32, 10, 111, 10, 102, 10, 32, 10, 
 -	116, 10, 104, 10, 101, 10, 32, 10, 
 -	100, 10, 97, 10, 121, 10, 32, 10, 
 -	73, 10, 32, 10, 114, 10, 101, 10, 
 -	99, 10, 107, 10, 111, 10, 110, 10, 
 -	116, 10, 39, 10, 115, 10, 32, 10, 
 -	106, 10, 117, 10, 115, 10, 116, 10, 
 -	32, 10, 117, 10, 110, 10, 98, 10, 
 -	101, 10, 108, 10, 105, 10, 101, 10, 
 -	118, 10, 97, 10, 98, 10, 108, 10, 
 -	101, 10, 114, 10, 101, 10, 116, 10, 
 -	116, 10, 121, 10, 32, 10, 109, 10, 
 -	117, 10, 99, 10, 104, 10, 111, 10, 
 -	111, 10, 32, 10, 114, 10, 105, 10, 
 -	103, 10, 104, 10, 116, 10, 39, 101, 
 -	10, 107, 10, 110, 10, 111, 10, 119, 
 -	10, 97, 10, 104, 10, 32, 10, 110, 
 -	10, 97, 10, 104, 111, 111, 32, 114, 
 -	105, 103, 104, 116, 39, 101, 111, 107, 
 -	110, 111, 119, 97, 104, 32, 110, 97, 
 -	104, 117, 39, 108, 108, 32, 119, 97, 
 -	110, 110, 97, 58, 10, 10, 10, 32, 
 -	35, 80, 124, 9, 13, 10, 114, 10, 
 -	101, 10, 116, 10, 116, 10, 121, 10, 
 -	32, 10, 109, 10, 117, 10, 99, 10, 
 -	104, 10, 58, 32, 124, 9, 13, 10, 
 -	32, 92, 124, 9, 13, 10, 92, 124, 
 -	10, 92, 10, 32, 92, 124, 9, 13, 
 -	10, 32, 34, 35, 37, 42, 64, 65, 
 -	66, 70, 73, 80, 82, 84, 89, 124, 
 -	9, 13, 10, 119, 10, 119, 10, 119, 
 -	10, 44, 10, 32, 10, 108, 10, 111, 
 -	10, 111, 10, 107, 10, 32, 10, 109, 
 -	10, 97, 10, 116, 10, 101, 10, 58, 
 -	10, 117, 10, 116, 10, 32, 10, 97, 
 -	10, 116, 10, 32, 10, 116, 10, 104, 
 -	10, 101, 10, 32, 10, 101, 10, 110, 
 -	10, 100, 10, 32, 10, 111, 10, 102, 
 -	10, 32, 10, 116, 10, 104, 10, 101, 
 -	10, 32, 10, 100, 10, 97, 10, 121, 
 -	10, 32, 10, 73, 10, 32, 10, 114, 
 -	10, 101, 10, 99, 10, 107, 10, 111, 
 -	10, 110, 10, 105, 10, 114, 10, 115, 
 -	10, 116, 10, 32, 10, 111, 10, 102, 
 -	10, 102, 10, 116, 10, 39, 10, 115, 
 -	10, 32, 10, 106, 10, 117, 10, 115, 
 -	10, 116, 10, 32, 10, 117, 10, 110, 
 -	10, 98, 10, 101, 10, 108, 10, 105, 
 -	10, 101, 10, 118, 10, 97, 10, 98, 
 -	10, 108, 10, 101, 10, 114, 10, 101, 
 -	10, 116, 10, 116, 10, 121, 10, 32, 
 -	10, 109, 10, 117, 10, 99, 10, 104, 
 -	10, 101, 10, 99, 10, 107, 10, 111, 
 -	10, 110, 10, 32, 10, 105, 10, 116, 
 -	10, 39, 10, 115, 10, 32, 10, 108, 
 -	10, 105, 10, 107, 10, 111, 10, 111, 
 -	10, 32, 10, 114, 10, 105, 10, 103, 
 -	10, 104, 10, 116, 10, 39, 101, 10, 
 -	107, 10, 110, 10, 111, 10, 119, 10, 
 -	97, 10, 104, 10, 32, 10, 110, 10, 
 -	97, 10, 104, 0
 -};
 -
 -static const char _lexer_single_lengths[] = {
 -	0, 17, 1, 1, 16, 1, 1, 2, 
 -	2, 3, 3, 3, 3, 2, 2, 2, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	2, 2, 3, 5, 3, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 14, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 16, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 13, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	3, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 10, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	12, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 3, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 3, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 5, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 4, 
 -	3, 2, 4, 16, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 3, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 0
 -};
 -
 -static const char _lexer_range_lengths[] = {
 -	0, 1, 0, 0, 1, 0, 0, 0, 
 -	0, 1, 1, 1, 1, 1, 1, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 1, 1, 1, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 1, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 1, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 1, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 1, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	1, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 1, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 1, 1, 
 -	0, 0, 1, 1, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0
 -};
 -
 -static const short _lexer_index_offsets[] = {
 -	0, 0, 19, 21, 23, 41, 43, 45, 
 -	48, 51, 56, 61, 66, 71, 75, 79, 
 -	82, 84, 86, 88, 90, 92, 94, 96, 
 -	98, 100, 102, 104, 106, 108, 110, 112, 
 -	114, 117, 120, 125, 132, 137, 139, 141, 
 -	143, 145, 147, 149, 151, 153, 155, 157, 
 -	159, 161, 163, 165, 167, 169, 171, 187, 
 -	190, 193, 196, 199, 202, 205, 208, 211, 
 -	214, 217, 220, 223, 226, 229, 232, 250, 
 -	252, 254, 256, 258, 260, 262, 264, 266, 
 -	268, 270, 272, 274, 276, 278, 280, 282, 
 -	284, 286, 288, 290, 292, 294, 296, 298, 
 -	300, 302, 304, 306, 308, 310, 312, 314, 
 -	316, 318, 320, 322, 324, 326, 328, 330, 
 -	332, 334, 336, 338, 353, 356, 359, 362, 
 -	365, 368, 371, 374, 377, 380, 383, 386, 
 -	389, 392, 395, 398, 401, 404, 407, 410, 
 -	413, 416, 419, 422, 425, 428, 431, 434, 
 -	437, 440, 443, 446, 449, 452, 455, 458, 
 -	461, 464, 467, 470, 473, 476, 479, 482, 
 -	485, 488, 491, 494, 497, 500, 503, 506, 
 -	509, 512, 515, 518, 521, 524, 527, 530, 
 -	533, 536, 539, 542, 545, 548, 551, 554, 
 -	557, 560, 563, 566, 569, 572, 575, 578, 
 -	581, 584, 587, 590, 593, 596, 599, 602, 
 -	605, 608, 611, 614, 617, 620, 623, 626, 
 -	629, 632, 635, 638, 641, 644, 647, 650, 
 -	653, 656, 659, 662, 665, 668, 671, 674, 
 -	677, 680, 683, 686, 689, 692, 695, 698, 
 -	701, 705, 708, 711, 714, 717, 720, 723, 
 -	726, 729, 732, 735, 737, 739, 741, 743, 
 -	745, 747, 749, 751, 753, 755, 757, 759, 
 -	761, 763, 765, 767, 769, 771, 773, 775, 
 -	777, 779, 781, 783, 785, 787, 789, 791, 
 -	793, 795, 797, 799, 801, 803, 815, 818, 
 -	821, 824, 827, 830, 833, 836, 839, 842, 
 -	845, 848, 851, 854, 857, 860, 863, 866, 
 -	869, 872, 875, 878, 881, 884, 887, 890, 
 -	893, 896, 899, 902, 905, 908, 911, 914, 
 -	917, 920, 923, 926, 929, 932, 935, 938, 
 -	941, 944, 947, 950, 953, 956, 959, 962, 
 -	965, 968, 971, 974, 977, 980, 983, 986, 
 -	989, 992, 995, 998, 1001, 1004, 1007, 1010, 
 -	1013, 1016, 1019, 1022, 1025, 1028, 1031, 1033, 
 -	1035, 1037, 1039, 1041, 1043, 1045, 1047, 1049, 
 -	1051, 1053, 1055, 1057, 1059, 1061, 1063, 1065, 
 -	1067, 1081, 1084, 1087, 1090, 1093, 1096, 1099, 
 -	1102, 1105, 1108, 1111, 1114, 1117, 1120, 1123, 
 -	1126, 1129, 1132, 1135, 1138, 1141, 1144, 1147, 
 -	1150, 1153, 1156, 1159, 1162, 1165, 1168, 1171, 
 -	1174, 1177, 1180, 1183, 1186, 1189, 1192, 1195, 
 -	1198, 1201, 1204, 1207, 1210, 1213, 1216, 1219, 
 -	1222, 1225, 1228, 1231, 1234, 1237, 1240, 1243, 
 -	1246, 1249, 1252, 1255, 1258, 1261, 1264, 1267, 
 -	1270, 1273, 1276, 1279, 1282, 1285, 1288, 1291, 
 -	1294, 1297, 1300, 1303, 1306, 1309, 1312, 1315, 
 -	1318, 1321, 1324, 1327, 1330, 1333, 1336, 1339, 
 -	1342, 1345, 1348, 1351, 1354, 1357, 1360, 1363, 
 -	1366, 1369, 1372, 1375, 1378, 1381, 1384, 1387, 
 -	1391, 1394, 1397, 1400, 1403, 1406, 1409, 1412, 
 -	1415, 1418, 1421, 1423, 1425, 1427, 1429, 1431, 
 -	1433, 1435, 1437, 1441, 1443, 1445, 1447, 1449, 
 -	1451, 1453, 1455, 1457, 1459, 1461, 1463, 1465, 
 -	1467, 1469, 1471, 1473, 1475, 1477, 1479, 1481, 
 -	1483, 1485, 1487, 1494, 1497, 1500, 1503, 1506, 
 -	1509, 1512, 1515, 1518, 1521, 1524, 1527, 1531, 
 -	1537, 1541, 1544, 1550, 1568, 1571, 1574, 1577, 
 -	1580, 1583, 1586, 1589, 1592, 1595, 1598, 1601, 
 -	1604, 1607, 1610, 1613, 1616, 1619, 1622, 1625, 
 -	1628, 1631, 1634, 1637, 1640, 1643, 1646, 1649, 
 -	1652, 1655, 1658, 1661, 1664, 1667, 1670, 1673, 
 -	1676, 1679, 1682, 1685, 1688, 1691, 1694, 1697, 
 -	1700, 1703, 1706, 1709, 1712, 1715, 1718, 1721, 
 -	1724, 1727, 1730, 1733, 1736, 1739, 1742, 1745, 
 -	1748, 1751, 1754, 1757, 1760, 1763, 1766, 1769, 
 -	1772, 1775, 1778, 1781, 1784, 1787, 1790, 1793, 
 -	1796, 1799, 1802, 1805, 1808, 1811, 1814, 1817, 
 -	1820, 1823, 1826, 1829, 1832, 1835, 1838, 1841, 
 -	1844, 1847, 1850, 1853, 1856, 1859, 1862, 1865, 
 -	1868, 1871, 1874, 1877, 1880, 1883, 1886, 1889, 
 -	1892, 1895, 1899, 1902, 1905, 1908, 1911, 1914, 
 -	1917, 1920, 1923, 1926, 1929
 -};
 -
 -static const short _lexer_trans_targs[] = {
 -	2, 4, 4, 5, 15, 17, 31, 34, 
 -	37, 71, 104, 243, 264, 350, 482, 490, 
 -	526, 4, 0, 3, 0, 4, 0, 4, 
 -	4, 5, 15, 17, 31, 34, 37, 71, 
 -	104, 243, 264, 350, 482, 490, 526, 4, 
 -	0, 6, 0, 7, 0, 9, 8, 8, 
 -	9, 8, 8, 10, 10, 11, 10, 10, 
 -	10, 10, 11, 10, 10, 10, 10, 12, 
 -	10, 10, 10, 10, 13, 10, 10, 4, 
 -	14, 14, 0, 4, 14, 14, 0, 4, 
 -	16, 15, 4, 0, 18, 0, 19, 0, 
 -	20, 0, 21, 0, 22, 0, 23, 0, 
 -	24, 0, 25, 0, 26, 0, 27, 0, 
 -	28, 0, 29, 0, 30, 0, 652, 0, 
 -	32, 0, 4, 16, 33, 4, 16, 33, 
 -	0, 0, 0, 0, 35, 36, 4, 36, 
 -	36, 34, 35, 35, 4, 36, 34, 36, 
 -	0, 38, 0, 39, 0, 40, 0, 41, 
 -	0, 42, 0, 43, 0, 44, 0, 45, 
 -	0, 46, 0, 47, 0, 48, 0, 49, 
 -	0, 50, 0, 51, 0, 52, 0, 54, 
 -	53, 54, 53, 54, 54, 4, 55, 69, 
 -	4, 532, 547, 580, 588, 609, 619, 633, 
 -	641, 54, 53, 54, 56, 53, 54, 57, 
 -	53, 54, 58, 53, 54, 59, 53, 54, 
 -	60, 53, 54, 61, 53, 54, 62, 53, 
 -	54, 63, 53, 54, 64, 53, 54, 65, 
 -	53, 54, 66, 53, 54, 67, 53, 54, 
 -	68, 53, 54, 4, 53, 54, 70, 53, 
 -	4, 4, 5, 15, 17, 31, 34, 37, 
 -	71, 104, 243, 264, 350, 482, 490, 526, 
 -	4, 0, 72, 0, 73, 0, 74, 0, 
 -	75, 0, 76, 0, 77, 0, 78, 0, 
 -	79, 0, 80, 0, 81, 0, 82, 0, 
 -	83, 0, 84, 0, 85, 0, 86, 0, 
 -	87, 0, 88, 0, 89, 0, 90, 0, 
 -	91, 0, 92, 0, 93, 0, 94, 0, 
 -	95, 0, 96, 0, 97, 0, 98, 0, 
 -	99, 0, 100, 0, 101, 0, 102, 0, 
 -	103, 0, 31, 0, 105, 0, 106, 0, 
 -	107, 0, 108, 0, 109, 0, 110, 0, 
 -	111, 0, 112, 0, 113, 0, 115, 114, 
 -	115, 114, 115, 115, 4, 116, 130, 4, 
 -	131, 146, 179, 200, 210, 224, 232, 115, 
 -	114, 115, 117, 114, 115, 118, 114, 115, 
 -	119, 114, 115, 120, 114, 115, 121, 114, 
 -	115, 122, 114, 115, 123, 114, 115, 124, 
 -	114, 115, 125, 114, 115, 126, 114, 115, 
 -	127, 114, 115, 128, 114, 115, 129, 114, 
 -	115, 4, 114, 115, 70, 114, 115, 132, 
 -	114, 115, 133, 114, 115, 134, 114, 115, 
 -	135, 114, 115, 136, 114, 115, 137, 114, 
 -	115, 138, 114, 115, 139, 114, 115, 140, 
 -	114, 115, 141, 114, 115, 142, 114, 115, 
 -	143, 114, 115, 144, 114, 115, 145, 114, 
 -	115, 70, 114, 115, 147, 114, 115, 148, 
 -	114, 115, 149, 114, 115, 150, 114, 115, 
 -	151, 114, 115, 152, 114, 115, 153, 114, 
 -	115, 154, 114, 115, 155, 114, 115, 156, 
 -	114, 115, 157, 114, 115, 158, 114, 115, 
 -	159, 114, 115, 160, 114, 115, 161, 114, 
 -	115, 162, 114, 115, 163, 114, 115, 164, 
 -	114, 115, 165, 114, 115, 166, 114, 115, 
 -	167, 114, 115, 168, 114, 115, 169, 114, 
 -	115, 170, 114, 115, 171, 114, 115, 172, 
 -	114, 115, 173, 114, 115, 174, 114, 115, 
 -	175, 114, 115, 176, 114, 115, 177, 114, 
 -	115, 178, 114, 115, 130, 114, 115, 180, 
 -	114, 115, 181, 114, 115, 182, 114, 115, 
 -	183, 114, 115, 184, 114, 115, 185, 114, 
 -	115, 186, 114, 115, 187, 114, 115, 188, 
 -	114, 115, 189, 114, 115, 190, 114, 115, 
 -	191, 114, 115, 192, 114, 115, 193, 114, 
 -	115, 194, 114, 115, 195, 114, 115, 196, 
 -	114, 115, 197, 114, 115, 198, 114, 115, 
 -	199, 114, 115, 130, 114, 115, 201, 114, 
 -	115, 202, 114, 115, 203, 114, 115, 204, 
 -	114, 115, 205, 114, 115, 206, 114, 115, 
 -	207, 114, 115, 208, 114, 115, 209, 114, 
 -	115, 145, 114, 115, 211, 114, 115, 212, 
 -	114, 115, 213, 114, 115, 214, 114, 115, 
 -	215, 114, 115, 216, 114, 115, 217, 114, 
 -	115, 218, 114, 115, 219, 114, 115, 220, 
 -	114, 115, 221, 114, 115, 222, 114, 115, 
 -	223, 114, 115, 144, 114, 115, 225, 114, 
 -	115, 226, 114, 115, 227, 114, 115, 228, 
 -	114, 115, 229, 114, 115, 230, 114, 115, 
 -	231, 114, 115, 130, 114, 115, 233, 237, 
 -	114, 115, 234, 114, 115, 235, 114, 115, 
 -	236, 114, 115, 130, 114, 115, 238, 114, 
 -	115, 239, 114, 115, 240, 114, 115, 241, 
 -	114, 115, 242, 114, 115, 130, 114, 244, 
 -	0, 245, 0, 246, 0, 247, 0, 248, 
 -	0, 249, 0, 250, 0, 251, 0, 252, 
 -	0, 253, 0, 254, 0, 255, 0, 256, 
 -	0, 257, 0, 258, 0, 259, 0, 260, 
 -	0, 261, 0, 262, 0, 263, 0, 31, 
 -	0, 265, 0, 266, 0, 267, 0, 268, 
 -	0, 269, 0, 270, 0, 271, 0, 272, 
 -	0, 273, 0, 274, 0, 275, 0, 277, 
 -	276, 277, 276, 277, 277, 4, 278, 4, 
 -	292, 307, 315, 325, 339, 277, 276, 277, 
 -	279, 276, 277, 280, 276, 277, 281, 276, 
 -	277, 282, 276, 277, 283, 276, 277, 284, 
 -	276, 277, 285, 276, 277, 286, 276, 277, 
 -	287, 276, 277, 288, 276, 277, 289, 276, 
 -	277, 290, 276, 277, 291, 276, 277, 4, 
 -	276, 277, 293, 276, 277, 294, 276, 277, 
 -	295, 276, 277, 296, 276, 277, 297, 276, 
 -	277, 298, 276, 277, 299, 276, 277, 300, 
 -	276, 277, 301, 276, 277, 302, 276, 277, 
 -	303, 276, 277, 304, 276, 277, 305, 276, 
 -	277, 306, 276, 277, 70, 276, 277, 308, 
 -	276, 277, 309, 276, 277, 310, 276, 277, 
 -	311, 276, 277, 312, 276, 277, 313, 276, 
 -	277, 314, 276, 277, 306, 276, 277, 316, 
 -	276, 277, 317, 276, 277, 318, 276, 277, 
 -	319, 276, 277, 320, 276, 277, 321, 276, 
 -	277, 322, 276, 277, 323, 276, 277, 324, 
 -	276, 277, 306, 276, 277, 326, 276, 277, 
 -	327, 276, 277, 328, 276, 277, 329, 276, 
 -	277, 330, 276, 277, 331, 276, 277, 332, 
 -	276, 277, 333, 276, 277, 334, 276, 277, 
 -	335, 276, 277, 336, 276, 277, 337, 276, 
 -	277, 338, 276, 277, 305, 276, 277, 340, 
 -	276, 277, 341, 276, 277, 342, 276, 277, 
 -	343, 276, 277, 344, 276, 277, 345, 276, 
 -	277, 346, 276, 277, 347, 276, 277, 348, 
 -	276, 277, 349, 276, 277, 306, 276, 351, 
 -	0, 352, 0, 353, 0, 354, 0, 355, 
 -	0, 356, 0, 357, 0, 358, 0, 359, 
 -	0, 360, 0, 361, 0, 362, 0, 363, 
 -	0, 364, 0, 365, 0, 366, 0, 368, 
 -	367, 368, 367, 368, 368, 4, 369, 383, 
 -	4, 384, 399, 432, 453, 463, 471, 368, 
 -	367, 368, 370, 367, 368, 371, 367, 368, 
 -	372, 367, 368, 373, 367, 368, 374, 367, 
 -	368, 375, 367, 368, 376, 367, 368, 377, 
 -	367, 368, 378, 367, 368, 379, 367, 368, 
 -	380, 367, 368, 381, 367, 368, 382, 367, 
 -	368, 4, 367, 368, 70, 367, 368, 385, 
 -	367, 368, 386, 367, 368, 387, 367, 368, 
 -	388, 367, 368, 389, 367, 368, 390, 367, 
 -	368, 391, 367, 368, 392, 367, 368, 393, 
 -	367, 368, 394, 367, 368, 395, 367, 368, 
 -	396, 367, 368, 397, 367, 368, 398, 367, 
 -	368, 70, 367, 368, 400, 367, 368, 401, 
 -	367, 368, 402, 367, 368, 403, 367, 368, 
 -	404, 367, 368, 405, 367, 368, 406, 367, 
 -	368, 407, 367, 368, 408, 367, 368, 409, 
 -	367, 368, 410, 367, 368, 411, 367, 368, 
 -	412, 367, 368, 413, 367, 368, 414, 367, 
 -	368, 415, 367, 368, 416, 367, 368, 417, 
 -	367, 368, 418, 367, 368, 419, 367, 368, 
 -	420, 367, 368, 421, 367, 368, 422, 367, 
 -	368, 423, 367, 368, 424, 367, 368, 425, 
 -	367, 368, 426, 367, 368, 427, 367, 368, 
 -	428, 367, 368, 429, 367, 368, 430, 367, 
 -	368, 431, 367, 368, 383, 367, 368, 433, 
 -	367, 368, 434, 367, 368, 435, 367, 368, 
 -	436, 367, 368, 437, 367, 368, 438, 367, 
 -	368, 439, 367, 368, 440, 367, 368, 441, 
 -	367, 368, 442, 367, 368, 443, 367, 368, 
 -	444, 367, 368, 445, 367, 368, 446, 367, 
 -	368, 447, 367, 368, 448, 367, 368, 449, 
 -	367, 368, 450, 367, 368, 451, 367, 368, 
 -	452, 367, 368, 383, 367, 368, 454, 367, 
 -	368, 455, 367, 368, 456, 367, 368, 457, 
 -	367, 368, 458, 367, 368, 459, 367, 368, 
 -	460, 367, 368, 461, 367, 368, 462, 367, 
 -	368, 398, 367, 368, 464, 367, 368, 465, 
 -	367, 368, 466, 367, 368, 467, 367, 368, 
 -	468, 367, 368, 469, 367, 368, 470, 367, 
 -	368, 383, 367, 368, 472, 476, 367, 368, 
 -	473, 367, 368, 474, 367, 368, 475, 367, 
 -	368, 383, 367, 368, 477, 367, 368, 478, 
 -	367, 368, 479, 367, 368, 480, 367, 368, 
 -	481, 367, 368, 383, 367, 483, 0, 484, 
 -	0, 485, 0, 486, 0, 487, 0, 488, 
 -	0, 489, 0, 31, 0, 491, 495, 501, 
 -	0, 492, 0, 493, 0, 494, 0, 31, 
 -	0, 496, 0, 497, 0, 498, 0, 499, 
 -	0, 500, 0, 31, 0, 502, 0, 503, 
 -	0, 504, 0, 505, 0, 506, 0, 507, 
 -	0, 508, 0, 509, 0, 510, 0, 511, 
 -	0, 512, 0, 514, 513, 514, 513, 514, 
 -	514, 4, 515, 4, 514, 513, 514, 516, 
 -	513, 514, 517, 513, 514, 518, 513, 514, 
 -	519, 513, 514, 520, 513, 514, 521, 513, 
 -	514, 522, 513, 514, 523, 513, 514, 524, 
 -	513, 514, 525, 513, 514, 70, 513, 526, 
 -	527, 526, 0, 531, 530, 529, 527, 530, 
 -	528, 0, 529, 527, 528, 0, 529, 528, 
 -	531, 530, 529, 527, 530, 528, 531, 531, 
 -	5, 15, 17, 31, 34, 37, 71, 104, 
 -	243, 264, 350, 482, 490, 526, 531, 0, 
 -	54, 533, 53, 54, 534, 53, 54, 535, 
 -	53, 54, 536, 53, 54, 537, 53, 54, 
 -	538, 53, 54, 539, 53, 54, 540, 53, 
 -	54, 541, 53, 54, 542, 53, 54, 543, 
 -	53, 54, 544, 53, 54, 545, 53, 54, 
 -	546, 53, 54, 70, 53, 54, 548, 53, 
 -	54, 549, 53, 54, 550, 53, 54, 551, 
 -	53, 54, 552, 53, 54, 553, 53, 54, 
 -	554, 53, 54, 555, 53, 54, 556, 53, 
 -	54, 557, 53, 54, 558, 53, 54, 559, 
 -	53, 54, 560, 53, 54, 561, 53, 54, 
 -	562, 53, 54, 563, 53, 54, 564, 53, 
 -	54, 565, 53, 54, 566, 53, 54, 567, 
 -	53, 54, 568, 53, 54, 569, 53, 54, 
 -	570, 53, 54, 571, 53, 54, 572, 53, 
 -	54, 573, 53, 54, 574, 53, 54, 575, 
 -	53, 54, 576, 53, 54, 577, 53, 54, 
 -	578, 53, 54, 579, 53, 54, 69, 53, 
 -	54, 581, 53, 54, 582, 53, 54, 583, 
 -	53, 54, 584, 53, 54, 585, 53, 54, 
 -	586, 53, 54, 587, 53, 54, 546, 53, 
 -	54, 589, 53, 54, 590, 53, 54, 591, 
 -	53, 54, 592, 53, 54, 593, 53, 54, 
 -	594, 53, 54, 595, 53, 54, 596, 53, 
 -	54, 597, 53, 54, 598, 53, 54, 599, 
 -	53, 54, 600, 53, 54, 601, 53, 54, 
 -	602, 53, 54, 603, 53, 54, 604, 53, 
 -	54, 605, 53, 54, 606, 53, 54, 607, 
 -	53, 54, 608, 53, 54, 69, 53, 54, 
 -	610, 53, 54, 611, 53, 54, 612, 53, 
 -	54, 613, 53, 54, 614, 53, 54, 615, 
 -	53, 54, 616, 53, 54, 617, 53, 54, 
 -	618, 53, 54, 546, 53, 54, 620, 53, 
 -	54, 621, 53, 54, 622, 53, 54, 623, 
 -	53, 54, 624, 53, 54, 625, 53, 54, 
 -	626, 53, 54, 627, 53, 54, 628, 53, 
 -	54, 629, 53, 54, 630, 53, 54, 631, 
 -	53, 54, 632, 53, 54, 545, 53, 54, 
 -	634, 53, 54, 635, 53, 54, 636, 53, 
 -	54, 637, 53, 54, 638, 53, 54, 639, 
 -	53, 54, 640, 53, 54, 69, 53, 54, 
 -	642, 646, 53, 54, 643, 53, 54, 644, 
 -	53, 54, 645, 53, 54, 69, 53, 54, 
 -	647, 53, 54, 648, 53, 54, 649, 53, 
 -	54, 650, 53, 54, 651, 53, 54, 69, 
 -	53, 0, 0
 -};
 -
 -static const unsigned char _lexer_trans_actions[] = {
 -	0, 54, 0, 5, 1, 0, 29, 1, 
 -	29, 29, 29, 29, 29, 29, 29, 29, 
 -	35, 0, 43, 0, 43, 0, 43, 54, 
 -	0, 5, 1, 0, 29, 1, 29, 29, 
 -	29, 29, 29, 29, 29, 29, 35, 0, 
 -	43, 0, 43, 0, 43, 139, 48, 9, 
 -	106, 11, 0, 134, 45, 45, 45, 3, 
 -	122, 33, 33, 33, 0, 122, 33, 33, 
 -	33, 0, 122, 33, 0, 33, 0, 102, 
 -	7, 7, 43, 54, 0, 0, 43, 114, 
 -	25, 0, 54, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 149, 126, 57, 110, 23, 0, 
 -	43, 43, 43, 43, 0, 27, 118, 27, 
 -	27, 51, 27, 0, 54, 0, 1, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 144, 
 -	57, 54, 0, 54, 0, 75, 33, 84, 
 -	75, 84, 84, 84, 84, 84, 84, 84, 
 -	84, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 17, 0, 54, 17, 0, 
 -	130, 31, 60, 57, 31, 63, 57, 63, 
 -	63, 63, 63, 63, 63, 63, 63, 66, 
 -	31, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 144, 57, 
 -	54, 0, 54, 0, 72, 33, 84, 72, 
 -	84, 84, 84, 84, 84, 84, 84, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 15, 0, 54, 15, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 15, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 144, 
 -	57, 54, 0, 54, 0, 69, 33, 69, 
 -	84, 84, 84, 84, 84, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 13, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 13, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 144, 
 -	57, 54, 0, 54, 0, 78, 33, 84, 
 -	78, 84, 84, 84, 84, 84, 84, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 19, 0, 54, 19, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 19, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 0, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 144, 57, 54, 0, 54, 
 -	0, 81, 84, 81, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 21, 0, 0, 
 -	0, 0, 43, 54, 37, 37, 87, 37, 
 -	37, 43, 0, 39, 0, 43, 0, 0, 
 -	54, 0, 0, 39, 0, 0, 54, 0, 
 -	93, 90, 41, 96, 90, 96, 96, 96, 
 -	96, 96, 96, 96, 96, 99, 0, 43, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 17, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 0, 0
 -};
 -
 -static const unsigned char _lexer_eof_actions[] = {
 -	0, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43
 -};
 -
 -static const int lexer_start = 1;
 -static const int lexer_first_final = 652;
 -static const int lexer_error = 0;
 -
 -static const int lexer_en_main = 1;
 -
 -
 -#line 258 "ragel/i18n/en_au.c.rl"
 -
 -static VALUE 
 -unindent(VALUE con, int start_col)
 -{
 -  VALUE re;
 -  /* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */
 -  char pat[32]; 
 -  snprintf(pat, 32, "^[\t ]{0,%d}", start_col); 
 -  re = rb_reg_regcomp(rb_str_new2(pat));
 -  rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2(""));
 -
 -  return Qnil;
 -
 -}
 -
 -static void 
 -store_kw_con(VALUE listener, const char * event_name, 
 -             const char * keyword_at, size_t keyword_length, 
 -             const char * at,         size_t length, 
 -             int current_line)
 -{
 -  VALUE con = Qnil, kw = Qnil;
 -  kw = ENCODED_STR_NEW(keyword_at, keyword_length);
 -  con = ENCODED_STR_NEW(at, length);
 -  rb_funcall(con, rb_intern("strip!"), 0);
 -  rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); 
 -}
 -
 -static void
 -store_multiline_kw_con(VALUE listener, const char * event_name,
 -                      const char * keyword_at, size_t keyword_length,
 -                      const char * at,         size_t length,
 -                      int current_line, int start_col)
 -{
 -  VALUE split;
 -  VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil;
 -
 -  kw = ENCODED_STR_NEW(keyword_at, keyword_length);
 -  con = ENCODED_STR_NEW(at, length);
 -
 -  unindent(con, start_col);
 -  
 -  split = rb_str_split(con, "\n");
 -
 -  name = rb_funcall(split, rb_intern("shift"), 0);
 -  desc = rb_ary_join(split, rb_str_new2( "\n" ));
 -
 -  if( name == Qnil ) 
 -  {
 -    name = rb_str_new2("");
 -  }
 -  if( rb_funcall(desc, rb_intern("size"), 0) == 0) 
 -  {
 -    desc = rb_str_new2("");
 -  }
 -  rb_funcall(name, rb_intern("strip!"), 0);
 -  rb_funcall(desc, rb_intern("rstrip!"), 0);
 -  rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); 
 -}
 -
 -static void 
 -store_attr(VALUE listener, const char * attr_type,
 -           const char * at, size_t length, 
 -           int line)
 -{
 -  VALUE val = ENCODED_STR_NEW(at, length);
 -  rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line));
 -}
 -static void 
 -store_docstring_content(VALUE listener, 
 -          int start_col, 
 -          const char *type_at, size_t type_length,
 -          const char *at, size_t length, 
 -          int current_line)
 -{
 -  VALUE re2;
 -  VALUE unescape_escaped_quotes;
 -  VALUE con = ENCODED_STR_NEW(at, length);
 -  VALUE con_type = ENCODED_STR_NEW(type_at, type_length);
 -
 -  unindent(con, start_col);
 -
 -  re2 = rb_reg_regcomp(rb_str_new2("\r\\Z"));
 -  unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\""));
 -  rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2(""));
 -  rb_funcall(con_type, rb_intern("strip!"), 0);
 -  rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\""));
 -  rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line));
 -}
 -static void 
 -raise_lexer_error(const char * at, int line)
 -{ 
 -  rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at);
 -}
 -
 -static void lexer_init(lexer_state *lexer) {
 -  lexer->content_start = 0;
 -  lexer->content_end = 0;
 -  lexer->content_len = 0;
 -  lexer->docstring_content_type_start = 0;
 -  lexer->docstring_content_type_end = 0;
 -  lexer->mark = 0;
 -  lexer->keyword_start = 0;
 -  lexer->keyword_end = 0;
 -  lexer->next_keyword_start = 0;
 -  lexer->line_number = 1;
 -  lexer->last_newline = 0;
 -  lexer->final_newline = 0;
 -  lexer->start_col = 0;
 -}
 -
 -static VALUE CLexer_alloc(VALUE klass)
 -{
 -  VALUE obj;
 -  lexer_state *lxr = ALLOC(lexer_state);
 -  lexer_init(lxr);
 -
 -  obj = Data_Wrap_Struct(klass, NULL, -1, lxr);
 -
 -  return obj;
 -}
 -
 -static VALUE CLexer_init(VALUE self, VALUE listener)
 -{
 -  lexer_state *lxr; 
 -  rb_iv_set(self, "@listener", listener);
 -  
 -  lxr = NULL;
 -  DATA_GET(self, lexer_state, lxr);
 -  lexer_init(lxr);
 -  
 -  return self;
 -}
 -
 -static VALUE CLexer_scan(VALUE self, VALUE input)
 -{
 -  VALUE input_copy;
 -  char *data;
 -  size_t len;
 -  VALUE listener = rb_iv_get(self, "@listener");
 -
 -  lexer_state *lexer;
 -  lexer = NULL;
 -  DATA_GET(self, lexer_state, lexer);
 -
 -  input_copy = rb_str_dup(input);
 -
 -  rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%"));
 -  data = RSTRING_PTR(input_copy);
 -  len = RSTRING_LEN(input_copy);
 -  
 -  if (len == 0) { 
 -    rb_raise(rb_eGherkinLexingError, "No content to lex.");
 -  } else {
 -
 -    const char *p, *pe, *eof;
 -    int cs = 0;
 -    
 -    VALUE current_row = Qnil;
 -
 -    p = data;
 -    pe = data + len;
 -    eof = pe;
 -    
 -    assert(*pe == '\0' && "pointer does not end on NULL");
 -    
 -    
 -#line 1369 "ext/gherkin_lexer_en_au/gherkin_lexer_en_au.c"
 -	{
 -	cs = lexer_start;
 -	}
 -
 -#line 425 "ragel/i18n/en_au.c.rl"
 -    
 -#line 1376 "ext/gherkin_lexer_en_au/gherkin_lexer_en_au.c"
 -	{
 -	int _klen;
 -	unsigned int _trans;
 -	const char *_acts;
 -	unsigned int _nacts;
 -	const char *_keys;
 -
 -	if ( p == pe )
 -		goto _test_eof;
 -	if ( cs == 0 )
 -		goto _out;
 -_resume:
 -	_keys = _lexer_trans_keys + _lexer_key_offsets[cs];
 -	_trans = _lexer_index_offsets[cs];
 -
 -	_klen = _lexer_single_lengths[cs];
 -	if ( _klen > 0 ) {
 -		const char *_lower = _keys;
 -		const char *_mid;
 -		const char *_upper = _keys + _klen - 1;
 -		while (1) {
 -			if ( _upper < _lower )
 -				break;
 -
 -			_mid = _lower + ((_upper-_lower) >> 1);
 -			if ( (*p) < *_mid )
 -				_upper = _mid - 1;
 -			else if ( (*p) > *_mid )
 -				_lower = _mid + 1;
 -			else {
 -				_trans += (unsigned int)(_mid - _keys);
 -				goto _match;
 -			}
 -		}
 -		_keys += _klen;
 -		_trans += _klen;
 -	}
 -
 -	_klen = _lexer_range_lengths[cs];
 -	if ( _klen > 0 ) {
 -		const char *_lower = _keys;
 -		const char *_mid;
 -		const char *_upper = _keys + (_klen<<1) - 2;
 -		while (1) {
 -			if ( _upper < _lower )
 -				break;
 -
 -			_mid = _lower + (((_upper-_lower) >> 1) & ~1);
 -			if ( (*p) < _mid[0] )
 -				_upper = _mid - 2;
 -			else if ( (*p) > _mid[1] )
 -				_lower = _mid + 2;
 -			else {
 -				_trans += (unsigned int)((_mid - _keys)>>1);
 -				goto _match;
 -			}
 -		}
 -		_trans += _klen;
 -	}
 -
 -_match:
 -	cs = _lexer_trans_targs[_trans];
 -
 -	if ( _lexer_trans_actions[_trans] == 0 )
 -		goto _again;
 -
 -	_acts = _lexer_actions + _lexer_trans_actions[_trans];
 -	_nacts = (unsigned int) *_acts++;
 -	while ( _nacts-- > 0 )
 -	{
 -		switch ( *_acts++ )
 -		{
 -	case 0:
 -#line 83 "ragel/i18n/en_au.c.rl"
 -	{
 -		MARK(content_start, p);
 -    lexer->current_line = lexer->line_number;
 -    lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2;
 -  }
 -	break;
 -	case 1:
 -#line 89 "ragel/i18n/en_au.c.rl"
 -	{
 -    MARK(content_start, p);
 -  }
 -	break;
 -	case 2:
 -#line 93 "ragel/i18n/en_au.c.rl"
 -	{
 -    lexer->current_line = lexer->line_number;
 -    lexer->start_col = p - data - lexer->last_newline;
 -  }
 -	break;
 -	case 3:
 -#line 98 "ragel/i18n/en_au.c.rl"
 -	{
 -    int len = LEN(content_start, PTR_TO(final_newline));
 -    int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end));
 -
 -    if (len < 0) len = 0;
 -    if (type_len < 0) len = 0;
 -
 -    store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line);
 -  }
 -	break;
 -	case 4:
 -#line 108 "ragel/i18n/en_au.c.rl"
 -	{ 
 -    MARK(docstring_content_type_start, p);
 -  }
 -	break;
 -	case 5:
 -#line 112 "ragel/i18n/en_au.c.rl"
 -	{ 
 -    MARK(docstring_content_type_end, p);
 -  }
 -	break;
 -	case 6:
 -#line 116 "ragel/i18n/en_au.c.rl"
 -	{
 -    STORE_KW_END_CON(feature);
 -  }
 -	break;
 -	case 7:
 -#line 120 "ragel/i18n/en_au.c.rl"
 -	{
 -    STORE_KW_END_CON(background);
 -  }
 -	break;
 -	case 8:
 -#line 124 "ragel/i18n/en_au.c.rl"
 -	{
 -    STORE_KW_END_CON(scenario);
 -  }
 -	break;
 -	case 9:
 -#line 128 "ragel/i18n/en_au.c.rl"
 -	{
 -    STORE_KW_END_CON(scenario_outline);
 -  }
 -	break;
 -	case 10:
 -#line 132 "ragel/i18n/en_au.c.rl"
 -	{
 -    STORE_KW_END_CON(examples);
 -  }
 -	break;
 -	case 11:
 -#line 136 "ragel/i18n/en_au.c.rl"
 -	{
 -    store_kw_con(listener, "step",
 -      PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
 -      PTR_TO(content_start), LEN(content_start, p), 
 -      lexer->current_line);
 -  }
 -	break;
 -	case 12:
 -#line 143 "ragel/i18n/en_au.c.rl"
 -	{
 -    STORE_ATTR(comment);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 13:
 -#line 148 "ragel/i18n/en_au.c.rl"
 -	{
 -    STORE_ATTR(tag);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 14:
 -#line 153 "ragel/i18n/en_au.c.rl"
 -	{
 -    lexer->line_number += 1;
 -    MARK(final_newline, p);
 -  }
 -	break;
 -	case 15:
 -#line 158 "ragel/i18n/en_au.c.rl"
 -	{
 -    MARK(last_newline, p + 1);
 -  }
 -	break;
 -	case 16:
 -#line 162 "ragel/i18n/en_au.c.rl"
 -	{
 -    if (lexer->mark == 0) {
 -      MARK(mark, p);
 -    }
 -  }
 -	break;
 -	case 17:
 -#line 168 "ragel/i18n/en_au.c.rl"
 -	{
 -    MARK(keyword_end, p);
 -    MARK(keyword_start, PTR_TO(mark));
 -    MARK(content_start, p + 1);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 18:
 -#line 175 "ragel/i18n/en_au.c.rl"
 -	{
 -    MARK(content_end, p);
 -  }
 -	break;
 -	case 19:
 -#line 179 "ragel/i18n/en_au.c.rl"
 -	{
 -    p = p - 1;
 -    lexer->current_line = lexer->line_number;
 -    current_row = rb_ary_new();
 -  }
 -	break;
 -	case 20:
 -#line 185 "ragel/i18n/en_au.c.rl"
 -	{
 -		MARK(content_start, p);
 -  }
 -	break;
 -	case 21:
 -#line 189 "ragel/i18n/en_au.c.rl"
 -	{
 -    VALUE re_pipe, re_newline, re_backslash;
 -    VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
 -    rb_funcall(con, rb_intern("strip!"), 0);
 -    re_pipe      = rb_reg_regcomp(rb_str_new2("\\\\\\|"));
 -    re_newline   = rb_reg_regcomp(rb_str_new2("\\\\n"));
 -    re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_pipe,      rb_str_new2("|"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_newline,   rb_str_new2("\n"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\"));
 -
 -    rb_ary_push(current_row, con);
 -  }
 -	break;
 -	case 22:
 -#line 203 "ragel/i18n/en_au.c.rl"
 -	{
 -    rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
 -  }
 -	break;
 -	case 23:
 -#line 207 "ragel/i18n/en_au.c.rl"
 -	{
 -    int line;
 -    if (cs < lexer_first_final) {
 -      size_t count = 0;
 -      VALUE newstr_val;
 -      char *newstr;
 -      int newstr_count = 0;        
 -      size_t len;
 -      const char *buff;
 -      if (lexer->last_newline != 0) {
 -        len = LEN(last_newline, eof);
 -        buff = PTR_TO(last_newline);
 -      } else {
 -        len = strlen(data);
 -        buff = data;
 -      }
 -
 -      /* Allocate as a ruby string so that it gets cleaned up by GC */
 -      newstr_val = rb_str_new(buff, len);
 -      newstr = RSTRING_PTR(newstr_val);
 -
 -
 -      for (count = 0; count < len; count++) {
 -        if(buff[count] == 10) {
 -          newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
 -          break;
 -        } else {
 -          if (buff[count] == '%') {
 -            newstr[newstr_count++] = buff[count];
 -            newstr[newstr_count] = buff[count];
 -          } else {
 -            newstr[newstr_count] = buff[count];
 -          }
 -        }
 -        newstr_count++;
 -      }
 -
 -      line = lexer->line_number;
 -      lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
 -      raise_lexer_error(newstr, line);
 -    } else {
 -      rb_funcall(listener, rb_intern("eof"), 0);
 -    }
 -  }
 -	break;
 -#line 1666 "ext/gherkin_lexer_en_au/gherkin_lexer_en_au.c"
 -		}
 -	}
 -
 -_again:
 -	if ( cs == 0 )
 -		goto _out;
 -	if ( ++p != pe )
 -		goto _resume;
 -	_test_eof: {}
 -	if ( p == eof )
 -	{
 -	const char *__acts = _lexer_actions + _lexer_eof_actions[cs];
 -	unsigned int __nacts = (unsigned int) *__acts++;
 -	while ( __nacts-- > 0 ) {
 -		switch ( *__acts++ ) {
 -	case 23:
 -#line 207 "ragel/i18n/en_au.c.rl"
 -	{
 -    int line;
 -    if (cs < lexer_first_final) {
 -      size_t count = 0;
 -      VALUE newstr_val;
 -      char *newstr;
 -      int newstr_count = 0;        
 -      size_t len;
 -      const char *buff;
 -      if (lexer->last_newline != 0) {
 -        len = LEN(last_newline, eof);
 -        buff = PTR_TO(last_newline);
 -      } else {
 -        len = strlen(data);
 -        buff = data;
 -      }
 -
 -      /* Allocate as a ruby string so that it gets cleaned up by GC */
 -      newstr_val = rb_str_new(buff, len);
 -      newstr = RSTRING_PTR(newstr_val);
 -
 -
 -      for (count = 0; count < len; count++) {
 -        if(buff[count] == 10) {
 -          newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
 -          break;
 -        } else {
 -          if (buff[count] == '%') {
 -            newstr[newstr_count++] = buff[count];
 -            newstr[newstr_count] = buff[count];
 -          } else {
 -            newstr[newstr_count] = buff[count];
 -          }
 -        }
 -        newstr_count++;
 -      }
 -
 -      line = lexer->line_number;
 -      lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
 -      raise_lexer_error(newstr, line);
 -    } else {
 -      rb_funcall(listener, rb_intern("eof"), 0);
 -    }
 -  }
 -	break;
 -#line 1729 "ext/gherkin_lexer_en_au/gherkin_lexer_en_au.c"
 -		}
 -	}
 -	}
 -
 -	_out: {}
 -	}
 -
 -#line 426 "ragel/i18n/en_au.c.rl"
 -
 -    assert(p <= pe && "data overflow after parsing execute");
 -    assert(lexer->content_start <= len && "content starts after data end");
 -    assert(lexer->mark < len && "mark is after data end");
 -    
 -    /* Reset lexer by re-initializing the whole thing */
 -    lexer_init(lexer);
 -
 -    if (cs == lexer_error) {
 -      rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails.");
 -    } else {
 -      return Qtrue;
 -    }
 -  }
 -}
 -
 -void Init_gherkin_lexer_en_au()
 -{
 -  mGherkin = rb_define_module("Gherkin");
 -  mGherkinLexer = rb_define_module_under(mGherkin, "Lexer");
 -  rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError"));
 -
 -  mCLexer = rb_define_module_under(mGherkin, "CLexer");
 -  cI18nLexer = rb_define_class_under(mCLexer, "En_au", rb_cObject);
 -  rb_define_alloc_func(cI18nLexer, CLexer_alloc);
 -  rb_define_method(cI18nLexer, "initialize", CLexer_init, 1);
 -  rb_define_method(cI18nLexer, "scan", CLexer_scan, 1);
 -}
 -
diff --cc ext/gherkin_lexer_en_lol/extconf.rb
index b123660,b123660..0000000
deleted file mode 100644,100644
--- a/ext/gherkin_lexer_en_lol/extconf.rb
+++ /dev/null
@@@ -1,6 -1,6 +1,0 @@@
--require 'mkmf'
--CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags']
--$CFLAGS << ' -O0 -Wall' if CONFIG['CC'] =~ /gcc|clang/
--dir_config("gherkin_lexer_en_lol")
--have_library("c", "main")
--create_makefile("gherkin_lexer_en_lol")
diff --cc ext/gherkin_lexer_en_lol/gherkin_lexer_en_lol.c
index 9ec980d,4c74595..0000000
deleted file mode 100644,100644
--- a/ext/gherkin_lexer_en_lol/gherkin_lexer_en_lol.c
+++ /dev/null
@@@ -1,1177 -1,1177 +1,0 @@@
--
- #line 1 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
- #include <assert.h>
- #include <ruby.h>
- 
- #if defined(_WIN32)
- #include <stddef.h>
- #endif
- 
- #ifdef HAVE_RUBY_RE_H
- #include <ruby/re.h>
- #else
- #include <re.h>
- #endif
- 
- #ifdef HAVE_RUBY_ENCODING_H
- #include <ruby/encoding.h>
- #define ENCODED_STR_NEW(ptr, len) \
-     rb_enc_str_new(ptr, len, rb_utf8_encoding())
- #else
- #define ENCODED_STR_NEW(ptr, len) \
-     rb_str_new(ptr, len)
- #endif
- 
- #ifndef RSTRING_PTR
- #define RSTRING_PTR(s) (RSTRING(s)->ptr)
- #endif
- 
- #ifndef RSTRING_LEN
- #define RSTRING_LEN(s) (RSTRING(s)->len)
- #endif
- 
- #define DATA_GET(FROM, TYPE, NAME) \
-   Data_Get_Struct(FROM, TYPE, NAME); \
-   if (NAME == NULL) { \
-     rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \
-   }
-  
- typedef struct lexer_state {
-   int content_len;
-   int line_number;
-   int current_line;
-   int start_col;
-   size_t mark;
-   size_t keyword_start;
-   size_t keyword_end;
-   size_t next_keyword_start;
-   size_t content_start;
-   size_t content_end;
-   size_t docstring_content_type_start;
-   size_t docstring_content_type_end;
-   size_t query_start;
-   size_t last_newline;
-   size_t final_newline;
- } lexer_state;
- 
- static VALUE mGherkin;
- static VALUE mGherkinLexer;
- static VALUE mCLexer;
- static VALUE cI18nLexer;
- static VALUE rb_eGherkinLexingError;
- 
- #define LEN(AT, P) (P - data - lexer->AT)
- #define MARK(M, P) (lexer->M = (P) - data)
- #define PTR_TO(P) (data + lexer->P)
- 
- #define STORE_KW_END_CON(EVENT) \
-   store_multiline_kw_con(listener, # EVENT, \
-     PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \
-     PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \
-     lexer->current_line, lexer->start_col); \
-     if (lexer->content_end != 0) { \
-       p = PTR_TO(content_end - 1); \
-     } \
-     lexer->content_end = 0
- 
- #define STORE_ATTR(ATTR) \
-     store_attr(listener, # ATTR, \
-       PTR_TO(content_start), LEN(content_start, p), \
-       lexer->line_number)
- 
- 
- #line 254 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
- 
- 
- /** Data **/
- 
- #line 89 "ext/gherkin_lexer_en_lol/gherkin_lexer_en_lol.c"
- static const char _lexer_actions[] = {
- 	0, 1, 0, 1, 1, 1, 2, 1, 
- 	3, 1, 4, 1, 5, 1, 6, 1, 
- 	7, 1, 8, 1, 9, 1, 10, 1, 
- 	11, 1, 12, 1, 13, 1, 16, 1, 
- 	17, 1, 18, 1, 19, 1, 20, 1, 
- 	21, 1, 22, 1, 23, 2, 1, 18, 
- 	2, 4, 5, 2, 13, 0, 2, 14, 
- 	15, 2, 17, 0, 2, 17, 2, 2, 
- 	17, 16, 2, 17, 19, 2, 18, 6, 
- 	2, 18, 7, 2, 18, 8, 2, 18, 
- 	9, 2, 18, 10, 2, 18, 16, 2, 
- 	20, 21, 2, 22, 0, 2, 22, 2, 
- 	2, 22, 16, 2, 22, 19, 3, 3, 
- 	14, 15, 3, 5, 14, 15, 3, 11, 
- 	14, 15, 3, 12, 14, 15, 3, 13, 
- 	14, 15, 3, 14, 15, 18, 3, 17, 
- 	0, 11, 3, 17, 14, 15, 4, 1, 
- 	14, 15, 18, 4, 4, 5, 14, 15, 
- 	4, 17, 0, 14, 15, 5, 17, 0, 
- 	11, 14, 15
- };
- 
- static const short _lexer_key_offsets[] = {
- 	0, 0, 19, 20, 21, 39, 40, 41, 
- 	43, 45, 50, 55, 60, 65, 69, 73, 
- 	75, 76, 77, 78, 79, 80, 81, 82, 
- 	83, 84, 85, 86, 87, 88, 89, 90, 
- 	91, 93, 95, 100, 107, 112, 113, 115, 
- 	116, 117, 118, 133, 135, 137, 139, 141, 
- 	143, 145, 147, 149, 151, 153, 155, 157, 
- 	159, 161, 163, 181, 182, 183, 184, 185, 
- 	186, 187, 188, 189, 190, 191, 198, 200, 
- 	202, 204, 206, 208, 210, 211, 212, 213, 
- 	214, 215, 216, 217, 218, 219, 220, 221, 
- 	222, 223, 225, 226, 227, 228, 229, 230, 
- 	231, 232, 233, 248, 250, 252, 254, 256, 
- 	258, 260, 262, 264, 266, 268, 270, 272, 
- 	274, 276, 278, 280, 282, 284, 286, 288, 
- 	290, 292, 294, 296, 298, 300, 302, 304, 
- 	306, 308, 310, 312, 314, 316, 318, 320, 
- 	322, 324, 325, 326, 341, 343, 345, 347, 
- 	349, 351, 353, 355, 357, 359, 361, 363, 
- 	365, 367, 369, 371, 373, 376, 378, 380, 
- 	382, 384, 386, 388, 390, 392, 394, 396, 
- 	398, 400, 402, 404, 406, 408, 411, 413, 
- 	415, 417, 419, 421, 423, 425, 427, 429, 
- 	431, 432, 433, 434, 435, 436, 437, 438, 
- 	439, 450, 452, 454, 456, 458, 460, 462, 
- 	464, 466, 468, 470, 472, 474, 476, 478, 
- 	480, 482, 484, 486, 488, 490, 492, 494, 
- 	496, 498, 500, 502, 504, 507, 509, 511, 
- 	513, 515, 517, 519, 521, 523, 525, 527, 
- 	531, 537, 540, 542, 548, 566, 568, 570, 
- 	572, 574, 576, 578, 580, 582, 584, 586, 
- 	588, 590, 592, 594, 596, 598, 600, 603, 
- 	605, 607, 609, 611, 613, 615, 617, 619, 
- 	621, 623, 625, 626
- };
- 
- static const char _lexer_trans_keys[] = {
- 	-17, 10, 32, 34, 35, 37, 42, 64, 
- 	65, 66, 68, 69, 73, 77, 79, 87, 
- 	124, 9, 13, -69, -65, 10, 32, 34, 
- 	35, 37, 42, 64, 65, 66, 68, 69, 
- 	73, 77, 79, 87, 124, 9, 13, 34, 
- 	34, 10, 13, 10, 13, 10, 32, 34, 
- 	9, 13, 10, 32, 34, 9, 13, 10, 
- 	32, 34, 9, 13, 10, 32, 34, 9, 
- 	13, 10, 32, 9, 13, 10, 32, 9, 
- 	13, 10, 13, 10, 95, 70, 69, 65, 
- 	84, 85, 82, 69, 95, 69, 78, 68, 
- 	95, 37, 32, 10, 13, 10, 13, 13, 
- 	32, 64, 9, 10, 9, 10, 13, 32, 
- 	64, 11, 12, 10, 32, 64, 9, 13, 
- 	78, 52, 85, 58, 10, 10, 10, 32, 
- 	35, 37, 42, 64, 65, 66, 68, 73, 
- 	77, 79, 87, 9, 13, 10, 95, 10, 
- 	70, 10, 69, 10, 65, 10, 84, 10, 
- 	85, 10, 82, 10, 69, 10, 95, 10, 
- 	69, 10, 78, 10, 68, 10, 95, 10, 
- 	37, 10, 32, 10, 32, 34, 35, 37, 
- 	42, 64, 65, 66, 68, 69, 73, 77, 
- 	79, 87, 124, 9, 13, 69, 88, 65, 
- 	77, 80, 76, 90, 58, 10, 10, 10, 
- 	32, 35, 79, 124, 9, 13, 10, 72, 
- 	10, 32, 10, 72, 10, 65, 10, 73, 
- 	10, 58, 32, 67, 65, 78, 32, 72, 
- 	65, 90, 73, 83, 72, 85, 78, 32, 
- 	58, 83, 82, 83, 76, 89, 58, 10, 
- 	10, 10, 32, 35, 37, 42, 64, 65, 
- 	66, 68, 73, 77, 79, 87, 9, 13, 
- 	10, 95, 10, 70, 10, 69, 10, 65, 
- 	10, 84, 10, 85, 10, 82, 10, 69, 
- 	10, 95, 10, 69, 10, 78, 10, 68, 
- 	10, 95, 10, 37, 10, 32, 10, 78, 
- 	10, 85, 10, 84, 10, 69, 10, 32, 
- 	10, 67, 10, 65, 10, 78, 10, 32, 
- 	10, 72, 10, 65, 10, 90, 10, 73, 
- 	10, 83, 10, 72, 10, 85, 10, 78, 
- 	10, 58, 10, 72, 10, 32, 10, 72, 
- 	10, 65, 10, 73, 10, 10, 10, 32, 
- 	35, 37, 42, 64, 65, 66, 68, 73, 
- 	77, 79, 87, 9, 13, 10, 95, 10, 
- 	70, 10, 69, 10, 65, 10, 84, 10, 
- 	85, 10, 82, 10, 69, 10, 95, 10, 
- 	69, 10, 78, 10, 68, 10, 95, 10, 
- 	37, 10, 32, 10, 78, 10, 52, 85, 
- 	10, 58, 10, 84, 10, 69, 10, 32, 
- 	10, 67, 10, 65, 10, 78, 10, 32, 
- 	10, 72, 10, 65, 10, 90, 10, 73, 
- 	10, 83, 10, 72, 10, 85, 10, 78, 
- 	10, 32, 58, 10, 83, 10, 82, 10, 
- 	83, 10, 76, 10, 89, 10, 72, 10, 
- 	32, 10, 72, 10, 65, 10, 73, 72, 
- 	32, 72, 65, 73, 58, 10, 10, 10, 
- 	32, 35, 37, 64, 66, 69, 77, 79, 
- 	9, 13, 10, 95, 10, 70, 10, 69, 
- 	10, 65, 10, 84, 10, 85, 10, 82, 
- 	10, 69, 10, 95, 10, 69, 10, 78, 
- 	10, 68, 10, 95, 10, 37, 10, 52, 
- 	10, 58, 10, 88, 10, 65, 10, 77, 
- 	10, 80, 10, 76, 10, 90, 10, 73, 
- 	10, 83, 10, 72, 10, 85, 10, 78, 
- 	10, 32, 58, 10, 83, 10, 82, 10, 
- 	83, 10, 76, 10, 89, 10, 72, 10, 
- 	32, 10, 72, 10, 65, 10, 73, 32, 
- 	124, 9, 13, 10, 32, 92, 124, 9, 
- 	13, 10, 92, 124, 10, 92, 10, 32, 
- 	92, 124, 9, 13, 10, 32, 34, 35, 
- 	37, 42, 64, 65, 66, 68, 69, 73, 
- 	77, 79, 87, 124, 9, 13, 10, 78, 
- 	10, 85, 10, 84, 10, 69, 10, 32, 
- 	10, 67, 10, 65, 10, 78, 10, 32, 
- 	10, 72, 10, 65, 10, 90, 10, 73, 
- 	10, 83, 10, 72, 10, 85, 10, 78, 
- 	10, 32, 58, 10, 83, 10, 82, 10, 
- 	83, 10, 76, 10, 89, 10, 58, 10, 
- 	72, 10, 32, 10, 72, 10, 65, 10, 
- 	73, 84, 0
- };
- 
- static const char _lexer_single_lengths[] = {
- 	0, 17, 1, 1, 16, 1, 1, 2, 
- 	2, 3, 3, 3, 3, 2, 2, 2, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	2, 2, 3, 5, 3, 1, 2, 1, 
- 	1, 1, 13, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 16, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 5, 2, 2, 
- 	2, 2, 2, 2, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 2, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 13, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 1, 1, 13, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 3, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 3, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	9, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 3, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	4, 3, 2, 4, 16, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 3, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 1, 0
- };
- 
- static const char _lexer_range_lengths[] = {
- 	0, 1, 0, 0, 1, 0, 0, 0, 
- 	0, 1, 1, 1, 1, 1, 1, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 1, 1, 1, 0, 0, 0, 
- 	0, 0, 1, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 1, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 1, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 1, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 1, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	1, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 1, 
- 	1, 0, 0, 1, 1, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0
- };
- 
- static const short _lexer_index_offsets[] = {
- 	0, 0, 19, 21, 23, 41, 43, 45, 
- 	48, 51, 56, 61, 66, 71, 75, 79, 
- 	82, 84, 86, 88, 90, 92, 94, 96, 
- 	98, 100, 102, 104, 106, 108, 110, 112, 
- 	114, 117, 120, 125, 132, 137, 139, 142, 
- 	144, 146, 148, 163, 166, 169, 172, 175, 
- 	178, 181, 184, 187, 190, 193, 196, 199, 
- 	202, 205, 208, 226, 228, 230, 232, 234, 
- 	236, 238, 240, 242, 244, 246, 253, 256, 
- 	259, 262, 265, 268, 271, 273, 275, 277, 
- 	279, 281, 283, 285, 287, 289, 291, 293, 
- 	295, 297, 300, 302, 304, 306, 308, 310, 
- 	312, 314, 316, 331, 334, 337, 340, 343, 
- 	346, 349, 352, 355, 358, 361, 364, 367, 
- 	370, 373, 376, 379, 382, 385, 388, 391, 
- 	394, 397, 400, 403, 406, 409, 412, 415, 
- 	418, 421, 424, 427, 430, 433, 436, 439, 
- 	442, 445, 447, 449, 464, 467, 470, 473, 
- 	476, 479, 482, 485, 488, 491, 494, 497, 
- 	500, 503, 506, 509, 512, 516, 519, 522, 
- 	525, 528, 531, 534, 537, 540, 543, 546, 
- 	549, 552, 555, 558, 561, 564, 568, 571, 
- 	574, 577, 580, 583, 586, 589, 592, 595, 
- 	598, 600, 602, 604, 606, 608, 610, 612, 
- 	614, 625, 628, 631, 634, 637, 640, 643, 
- 	646, 649, 652, 655, 658, 661, 664, 667, 
- 	670, 673, 676, 679, 682, 685, 688, 691, 
- 	694, 697, 700, 703, 706, 710, 713, 716, 
- 	719, 722, 725, 728, 731, 734, 737, 740, 
- 	744, 750, 754, 757, 763, 781, 784, 787, 
- 	790, 793, 796, 799, 802, 805, 808, 811, 
- 	814, 817, 820, 823, 826, 829, 832, 836, 
- 	839, 842, 845, 848, 851, 854, 857, 860, 
- 	863, 866, 869, 871
- };
- 
- static const short _lexer_trans_targs[] = {
- 	2, 4, 4, 5, 15, 17, 31, 34, 
- 	37, 38, 59, 60, 76, 84, 184, 59, 
- 	231, 4, 0, 3, 0, 4, 0, 4, 
- 	4, 5, 15, 17, 31, 34, 37, 38, 
- 	59, 60, 76, 84, 184, 59, 231, 4, 
- 	0, 6, 0, 7, 0, 9, 8, 8, 
- 	9, 8, 8, 10, 10, 11, 10, 10, 
- 	10, 10, 11, 10, 10, 10, 10, 12, 
- 	10, 10, 10, 10, 13, 10, 10, 4, 
- 	14, 14, 0, 4, 14, 14, 0, 4, 
- 	16, 15, 4, 0, 18, 0, 19, 0, 
- 	20, 0, 21, 0, 22, 0, 23, 0, 
- 	24, 0, 25, 0, 26, 0, 27, 0, 
- 	28, 0, 29, 0, 30, 0, 267, 0, 
- 	32, 0, 4, 16, 33, 4, 16, 33, 
- 	0, 0, 0, 0, 35, 36, 4, 36, 
- 	36, 34, 35, 35, 4, 36, 34, 36, 
- 	0, 31, 0, 39, 266, 0, 40, 0, 
- 	42, 41, 42, 41, 42, 42, 4, 43, 
- 	57, 4, 237, 238, 240, 241, 249, 261, 
- 	240, 42, 41, 42, 44, 41, 42, 45, 
- 	41, 42, 46, 41, 42, 47, 41, 42, 
- 	48, 41, 42, 49, 41, 42, 50, 41, 
- 	42, 51, 41, 42, 52, 41, 42, 53, 
- 	41, 42, 54, 41, 42, 55, 41, 42, 
- 	56, 41, 42, 4, 41, 42, 58, 41, 
- 	4, 4, 5, 15, 17, 31, 34, 37, 
- 	38, 59, 60, 76, 84, 184, 59, 231, 
- 	4, 0, 37, 0, 61, 0, 62, 0, 
- 	63, 0, 64, 0, 65, 0, 66, 0, 
- 	67, 0, 69, 68, 69, 68, 69, 69, 
- 	4, 70, 4, 69, 68, 69, 71, 68, 
- 	69, 72, 68, 69, 73, 68, 69, 74, 
- 	68, 69, 75, 68, 69, 58, 68, 77, 
- 	0, 78, 0, 79, 0, 80, 0, 81, 
- 	0, 82, 0, 83, 0, 31, 0, 85, 
- 	0, 86, 0, 87, 0, 88, 0, 89, 
- 	0, 90, 137, 0, 91, 0, 92, 0, 
- 	93, 0, 94, 0, 95, 0, 96, 0, 
- 	98, 97, 98, 97, 98, 98, 4, 99, 
- 	113, 4, 114, 115, 117, 118, 126, 132, 
- 	117, 98, 97, 98, 100, 97, 98, 101, 
- 	97, 98, 102, 97, 98, 103, 97, 98, 
- 	104, 97, 98, 105, 97, 98, 106, 97, 
- 	98, 107, 97, 98, 108, 97, 98, 109, 
- 	97, 98, 110, 97, 98, 111, 97, 98, 
- 	112, 97, 98, 4, 97, 98, 58, 97, 
- 	98, 113, 97, 98, 116, 97, 98, 113, 
- 	97, 98, 114, 97, 98, 119, 97, 98, 
- 	120, 97, 98, 121, 97, 98, 122, 97, 
- 	98, 123, 97, 98, 124, 97, 98, 125, 
- 	97, 98, 113, 97, 98, 127, 97, 98, 
- 	128, 97, 98, 129, 97, 98, 130, 97, 
- 	98, 131, 97, 98, 58, 97, 98, 133, 
- 	97, 98, 134, 97, 98, 135, 97, 98, 
- 	136, 97, 98, 131, 97, 139, 138, 139, 
- 	138, 139, 139, 4, 140, 154, 4, 155, 
- 	156, 159, 160, 168, 179, 159, 139, 138, 
- 	139, 141, 138, 139, 142, 138, 139, 143, 
- 	138, 139, 144, 138, 139, 145, 138, 139, 
- 	146, 138, 139, 147, 138, 139, 148, 138, 
- 	139, 149, 138, 139, 150, 138, 139, 151, 
- 	138, 139, 152, 138, 139, 153, 138, 139, 
- 	4, 138, 139, 58, 138, 139, 154, 138, 
- 	139, 157, 158, 138, 139, 58, 138, 139, 
- 	154, 138, 139, 155, 138, 139, 161, 138, 
- 	139, 162, 138, 139, 163, 138, 139, 164, 
- 	138, 139, 165, 138, 139, 166, 138, 139, 
- 	167, 138, 139, 154, 138, 139, 169, 138, 
- 	139, 170, 138, 139, 171, 138, 139, 172, 
- 	138, 139, 173, 138, 139, 174, 58, 138, 
- 	139, 175, 138, 139, 176, 138, 139, 177, 
- 	138, 139, 178, 138, 139, 157, 138, 139, 
- 	180, 138, 139, 181, 138, 139, 182, 138, 
- 	139, 183, 138, 139, 157, 138, 185, 0, 
- 	186, 0, 187, 0, 188, 0, 189, 0, 
- 	190, 0, 192, 191, 192, 191, 192, 192, 
- 	4, 193, 4, 207, 209, 215, 226, 192, 
- 	191, 192, 194, 191, 192, 195, 191, 192, 
- 	196, 191, 192, 197, 191, 192, 198, 191, 
- 	192, 199, 191, 192, 200, 191, 192, 201, 
- 	191, 192, 202, 191, 192, 203, 191, 192, 
- 	204, 191, 192, 205, 191, 192, 206, 191, 
- 	192, 4, 191, 192, 208, 191, 192, 58, 
- 	191, 192, 210, 191, 192, 211, 191, 192, 
- 	212, 191, 192, 213, 191, 192, 214, 191, 
- 	192, 208, 191, 192, 216, 191, 192, 217, 
- 	191, 192, 218, 191, 192, 219, 191, 192, 
- 	220, 191, 192, 221, 58, 191, 192, 222, 
- 	191, 192, 223, 191, 192, 224, 191, 192, 
- 	225, 191, 192, 208, 191, 192, 227, 191, 
- 	192, 228, 191, 192, 229, 191, 192, 230, 
- 	191, 192, 208, 191, 231, 232, 231, 0, 
- 	236, 235, 234, 232, 235, 233, 0, 234, 
- 	232, 233, 0, 234, 233, 236, 235, 234, 
- 	232, 235, 233, 236, 236, 5, 15, 17, 
- 	31, 34, 37, 38, 59, 60, 76, 84, 
- 	184, 59, 231, 236, 0, 42, 57, 41, 
- 	42, 239, 41, 42, 57, 41, 42, 237, 
- 	41, 42, 242, 41, 42, 243, 41, 42, 
- 	244, 41, 42, 245, 41, 42, 246, 41, 
- 	42, 247, 41, 42, 248, 41, 42, 57, 
- 	41, 42, 250, 41, 42, 251, 41, 42, 
- 	252, 41, 42, 253, 41, 42, 254, 41, 
- 	42, 255, 58, 41, 42, 256, 41, 42, 
- 	257, 41, 42, 258, 41, 42, 259, 41, 
- 	42, 260, 41, 42, 58, 41, 42, 262, 
- 	41, 42, 263, 41, 42, 264, 41, 42, 
- 	265, 41, 42, 260, 41, 31, 0, 0, 
- 	0
- };
- 
- static const unsigned char _lexer_trans_actions[] = {
- 	0, 54, 0, 5, 1, 0, 29, 1, 
- 	29, 29, 29, 29, 29, 29, 29, 29, 
- 	35, 0, 43, 0, 43, 0, 43, 54, 
- 	0, 5, 1, 0, 29, 1, 29, 29, 
- 	29, 29, 29, 29, 29, 29, 35, 0, 
- 	43, 0, 43, 0, 43, 139, 48, 9, 
- 	106, 11, 0, 134, 45, 45, 45, 3, 
- 	122, 33, 33, 33, 0, 122, 33, 33, 
- 	33, 0, 122, 33, 0, 33, 0, 102, 
- 	7, 7, 43, 54, 0, 0, 43, 114, 
- 	25, 0, 54, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 149, 126, 57, 110, 23, 0, 
- 	43, 43, 43, 43, 0, 27, 118, 27, 
- 	27, 51, 27, 0, 54, 0, 1, 0, 
- 	43, 0, 43, 0, 0, 43, 0, 43, 
- 	144, 57, 54, 0, 54, 0, 72, 33, 
- 	84, 72, 84, 84, 84, 84, 84, 84, 
- 	84, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 15, 0, 54, 15, 0, 
- 	130, 31, 60, 57, 31, 63, 57, 63, 
- 	63, 63, 63, 63, 63, 63, 63, 66, 
- 	31, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 144, 57, 54, 0, 54, 0, 
- 	81, 84, 81, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 21, 0, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	144, 57, 54, 0, 54, 0, 78, 33, 
- 	84, 78, 84, 84, 84, 84, 84, 84, 
- 	84, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 19, 0, 54, 19, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 19, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 144, 57, 54, 
- 	0, 54, 0, 75, 33, 84, 75, 84, 
- 	84, 84, 84, 84, 84, 84, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	17, 0, 54, 17, 0, 54, 0, 0, 
- 	54, 0, 0, 0, 54, 17, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 17, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 144, 57, 54, 0, 54, 0, 
- 	69, 33, 69, 84, 84, 84, 84, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 13, 0, 54, 0, 0, 54, 13, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 13, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 0, 0, 0, 43, 
- 	54, 37, 37, 87, 37, 37, 43, 0, 
- 	39, 0, 43, 0, 0, 54, 0, 0, 
- 	39, 0, 0, 54, 0, 93, 90, 41, 
- 	96, 90, 96, 96, 96, 96, 96, 96, 
- 	96, 96, 99, 0, 43, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 15, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 15, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 0, 43, 0, 
- 	0
- };
- 
- static const unsigned char _lexer_eof_actions[] = {
- 	0, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43
- };
- 
- static const int lexer_start = 1;
- static const int lexer_first_final = 267;
- static const int lexer_error = 0;
- 
- static const int lexer_en_main = 1;
- 
- 
- #line 258 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
- 
- static VALUE 
- unindent(VALUE con, int start_col)
- {
-   VALUE re;
-   // Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters
-   char pat[32]; 
-   snprintf(pat, 32, "^[\t ]{0,%d}", start_col); 
-   re = rb_reg_regcomp(rb_str_new2(pat));
-   rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2(""));
- 
-   return Qnil;
- 
- }
- 
- static void 
- store_kw_con(VALUE listener, const char * event_name, 
-              const char * keyword_at, size_t keyword_length, 
-              const char * at,         size_t length, 
-              int current_line)
- {
-   VALUE con = Qnil, kw = Qnil;
-   kw = ENCODED_STR_NEW(keyword_at, keyword_length);
-   con = ENCODED_STR_NEW(at, length);
-   rb_funcall(con, rb_intern("strip!"), 0);
-   rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); 
- }
- 
- static void
- store_multiline_kw_con(VALUE listener, const char * event_name,
-                       const char * keyword_at, size_t keyword_length,
-                       const char * at,         size_t length,
-                       int current_line, int start_col)
- {
-   VALUE split;
-   VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil;
- 
-   kw = ENCODED_STR_NEW(keyword_at, keyword_length);
-   con = ENCODED_STR_NEW(at, length);
- 
-   unindent(con, start_col);
-   
-   split = rb_str_split(con, "\n");
- 
-   name = rb_funcall(split, rb_intern("shift"), 0);
-   desc = rb_ary_join(split, rb_str_new2( "\n" ));
- 
-   if( name == Qnil ) 
-   {
-     name = rb_str_new2("");
-   }
-   if( rb_funcall(desc, rb_intern("size"), 0) == 0) 
-   {
-     desc = rb_str_new2("");
-   }
-   rb_funcall(name, rb_intern("strip!"), 0);
-   rb_funcall(desc, rb_intern("rstrip!"), 0);
-   rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); 
- }
- 
- static void 
- store_attr(VALUE listener, const char * attr_type,
-            const char * at, size_t length, 
-            int line)
- {
-   VALUE val = ENCODED_STR_NEW(at, length);
-   rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line));
- }
- static void 
- store_docstring_content(VALUE listener, 
-           int start_col, 
-           const char *type_at, size_t type_length,
-           const char *at, size_t length, 
-           int current_line)
- {
-   VALUE re2;
-   VALUE unescape_escaped_quotes;
-   VALUE con = ENCODED_STR_NEW(at, length);
-   VALUE con_type = ENCODED_STR_NEW(type_at, type_length);
- 
-   unindent(con, start_col);
- 
-   re2 = rb_reg_regcomp(rb_str_new2("\r\\Z"));
-   unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\""));
-   rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2(""));
-   rb_funcall(con_type, rb_intern("strip!"), 0);
-   rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\""));
-   rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line));
- }
- static void 
- raise_lexer_error(const char * at, int line)
- { 
-   rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at);
- }
- 
- static void lexer_init(lexer_state *lexer) {
-   lexer->content_start = 0;
-   lexer->content_end = 0;
-   lexer->content_len = 0;
-   lexer->docstring_content_type_start = 0;
-   lexer->docstring_content_type_end = 0;
-   lexer->mark = 0;
-   lexer->keyword_start = 0;
-   lexer->keyword_end = 0;
-   lexer->next_keyword_start = 0;
-   lexer->line_number = 1;
-   lexer->last_newline = 0;
-   lexer->final_newline = 0;
-   lexer->start_col = 0;
- }
- 
- static VALUE CLexer_alloc(VALUE klass)
- {
-   VALUE obj;
-   lexer_state *lxr = ALLOC(lexer_state);
-   lexer_init(lxr);
- 
-   obj = Data_Wrap_Struct(klass, NULL, -1, lxr);
- 
-   return obj;
- }
- 
- static VALUE CLexer_init(VALUE self, VALUE listener)
- {
-   lexer_state *lxr; 
-   rb_iv_set(self, "@listener", listener);
-   
-   lxr = NULL;
-   DATA_GET(self, lexer_state, lxr);
-   lexer_init(lxr);
-   
-   return self;
- }
- 
- static VALUE CLexer_scan(VALUE self, VALUE input)
- {
-   VALUE input_copy;
-   char *data;
-   size_t len;
-   VALUE listener = rb_iv_get(self, "@listener");
- 
-   lexer_state *lexer;
-   lexer = NULL;
-   DATA_GET(self, lexer_state, lexer);
- 
-   input_copy = rb_str_dup(input);
- 
-   rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%"));
-   data = RSTRING_PTR(input_copy);
-   len = RSTRING_LEN(input_copy);
-   
-   if (len == 0) { 
-     rb_raise(rb_eGherkinLexingError, "No content to lex.");
-   } else {
- 
-     const char *p, *pe, *eof;
-     int cs = 0;
-     
-     VALUE current_row = Qnil;
- 
-     p = data;
-     pe = data + len;
-     eof = pe;
-     
-     assert(*pe == '\0' && "pointer does not end on NULL");
-     
-     
- #line 781 "ext/gherkin_lexer_en_lol/gherkin_lexer_en_lol.c"
- 	{
- 	cs = lexer_start;
- 	}
- 
- #line 425 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
-     
- #line 788 "ext/gherkin_lexer_en_lol/gherkin_lexer_en_lol.c"
- 	{
- 	int _klen;
- 	unsigned int _trans;
- 	const char *_acts;
- 	unsigned int _nacts;
- 	const char *_keys;
- 
- 	if ( p == pe )
- 		goto _test_eof;
- 	if ( cs == 0 )
- 		goto _out;
- _resume:
- 	_keys = _lexer_trans_keys + _lexer_key_offsets[cs];
- 	_trans = _lexer_index_offsets[cs];
- 
- 	_klen = _lexer_single_lengths[cs];
- 	if ( _klen > 0 ) {
- 		const char *_lower = _keys;
- 		const char *_mid;
- 		const char *_upper = _keys + _klen - 1;
- 		while (1) {
- 			if ( _upper < _lower )
- 				break;
- 
- 			_mid = _lower + ((_upper-_lower) >> 1);
- 			if ( (*p) < *_mid )
- 				_upper = _mid - 1;
- 			else if ( (*p) > *_mid )
- 				_lower = _mid + 1;
- 			else {
- 				_trans += (_mid - _keys);
- 				goto _match;
- 			}
- 		}
- 		_keys += _klen;
- 		_trans += _klen;
- 	}
- 
- 	_klen = _lexer_range_lengths[cs];
- 	if ( _klen > 0 ) {
- 		const char *_lower = _keys;
- 		const char *_mid;
- 		const char *_upper = _keys + (_klen<<1) - 2;
- 		while (1) {
- 			if ( _upper < _lower )
- 				break;
- 
- 			_mid = _lower + (((_upper-_lower) >> 1) & ~1);
- 			if ( (*p) < _mid[0] )
- 				_upper = _mid - 2;
- 			else if ( (*p) > _mid[1] )
- 				_lower = _mid + 2;
- 			else {
- 				_trans += ((_mid - _keys)>>1);
- 				goto _match;
- 			}
- 		}
- 		_trans += _klen;
- 	}
- 
- _match:
- 	cs = _lexer_trans_targs[_trans];
- 
- 	if ( _lexer_trans_actions[_trans] == 0 )
- 		goto _again;
- 
- 	_acts = _lexer_actions + _lexer_trans_actions[_trans];
- 	_nacts = (unsigned int) *_acts++;
- 	while ( _nacts-- > 0 )
- 	{
- 		switch ( *_acts++ )
- 		{
- 	case 0:
- #line 83 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
- 	{
- 		MARK(content_start, p);
-     lexer->current_line = lexer->line_number;
-     lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2;
-   }
- 	break;
- 	case 1:
- #line 89 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
- 	{
-     MARK(content_start, p);
-   }
- 	break;
- 	case 2:
- #line 93 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
- 	{
-     lexer->current_line = lexer->line_number;
-     lexer->start_col = p - data - lexer->last_newline;
-   }
- 	break;
- 	case 3:
- #line 98 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
- 	{
-     int len = LEN(content_start, PTR_TO(final_newline));
-     int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end));
- 
-     if (len < 0) len = 0;
-     if (type_len < 0) len = 0;
- 
-     store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line);
-   }
- 	break;
- 	case 4:
- #line 108 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
- 	{ 
-     MARK(docstring_content_type_start, p);
-   }
- 	break;
- 	case 5:
- #line 112 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
- 	{ 
-     MARK(docstring_content_type_end, p);
-   }
- 	break;
- 	case 6:
- #line 116 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
- 	{
-     STORE_KW_END_CON(feature);
-   }
- 	break;
- 	case 7:
- #line 120 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
- 	{
-     STORE_KW_END_CON(background);
-   }
- 	break;
- 	case 8:
- #line 124 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
- 	{
-     STORE_KW_END_CON(scenario);
-   }
- 	break;
- 	case 9:
- #line 128 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
- 	{
-     STORE_KW_END_CON(scenario_outline);
-   }
- 	break;
- 	case 10:
- #line 132 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
- 	{
-     STORE_KW_END_CON(examples);
-   }
- 	break;
- 	case 11:
- #line 136 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
- 	{
-     store_kw_con(listener, "step",
-       PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-       PTR_TO(content_start), LEN(content_start, p), 
-       lexer->current_line);
-   }
- 	break;
- 	case 12:
- #line 143 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
- 	{
-     STORE_ATTR(comment);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 13:
- #line 148 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
- 	{
-     STORE_ATTR(tag);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 14:
- #line 153 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
- 	{
-     lexer->line_number += 1;
-     MARK(final_newline, p);
-   }
- 	break;
- 	case 15:
- #line 158 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
- 	{
-     MARK(last_newline, p + 1);
-   }
- 	break;
- 	case 16:
- #line 162 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
- 	{
-     if (lexer->mark == 0) {
-       MARK(mark, p);
-     }
-   }
- 	break;
- 	case 17:
- #line 168 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
- 	{
-     MARK(keyword_end, p);
-     MARK(keyword_start, PTR_TO(mark));
-     MARK(content_start, p + 1);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 18:
- #line 175 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
- 	{
-     MARK(content_end, p);
-   }
- 	break;
- 	case 19:
- #line 179 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
- 	{
-     p = p - 1;
-     lexer->current_line = lexer->line_number;
-     current_row = rb_ary_new();
-   }
- 	break;
- 	case 20:
- #line 185 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
- 	{
- 		MARK(content_start, p);
-   }
- 	break;
- 	case 21:
- #line 189 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
- 	{
-     VALUE re_pipe, re_newline, re_backslash;
-     VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
-     rb_funcall(con, rb_intern("strip!"), 0);
-     re_pipe      = rb_reg_regcomp(rb_str_new2("\\\\\\|"));
-     re_newline   = rb_reg_regcomp(rb_str_new2("\\\\n"));
-     re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_pipe,      rb_str_new2("|"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_newline,   rb_str_new2("\n"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\"));
- 
-     rb_ary_push(current_row, con);
-   }
- 	break;
- 	case 22:
- #line 203 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
- 	{
-     rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
-   }
- 	break;
- 	case 23:
- #line 207 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
- 	{
-     int line;
-     if (cs < lexer_first_final) {
-       size_t count = 0;
-       VALUE newstr_val;
-       char *newstr;
-       int newstr_count = 0;        
-       size_t len;
-       const char *buff;
-       if (lexer->last_newline != 0) {
-         len = LEN(last_newline, eof);
-         buff = PTR_TO(last_newline);
-       } else {
-         len = strlen(data);
-         buff = data;
-       }
- 
-       // Allocate as a ruby string so that it gets cleaned up by GC
-       newstr_val = rb_str_new(buff, len);
-       newstr = RSTRING_PTR(newstr_val);
- 
- 
-       for (count = 0; count < len; count++) {
-         if(buff[count] == 10) {
-           newstr[newstr_count] = '\0'; // terminate new string at first newline found
-           break;
-         } else {
-           if (buff[count] == '%') {
-             newstr[newstr_count++] = buff[count];
-             newstr[newstr_count] = buff[count];
-           } else {
-             newstr[newstr_count] = buff[count];
-           }
-         }
-         newstr_count++;
-       }
- 
-       line = lexer->line_number;
-       lexer_init(lexer); // Re-initialize so we can scan again with the same lexer
-       raise_lexer_error(newstr, line);
-     } else {
-       rb_funcall(listener, rb_intern("eof"), 0);
-     }
-   }
- 	break;
- #line 1078 "ext/gherkin_lexer_en_lol/gherkin_lexer_en_lol.c"
- 		}
- 	}
- 
- _again:
- 	if ( cs == 0 )
- 		goto _out;
- 	if ( ++p != pe )
- 		goto _resume;
- 	_test_eof: {}
- 	if ( p == eof )
- 	{
- 	const char *__acts = _lexer_actions + _lexer_eof_actions[cs];
- 	unsigned int __nacts = (unsigned int) *__acts++;
- 	while ( __nacts-- > 0 ) {
- 		switch ( *__acts++ ) {
- 	case 23:
- #line 207 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
- 	{
-     int line;
-     if (cs < lexer_first_final) {
-       size_t count = 0;
-       VALUE newstr_val;
-       char *newstr;
-       int newstr_count = 0;        
-       size_t len;
-       const char *buff;
-       if (lexer->last_newline != 0) {
-         len = LEN(last_newline, eof);
-         buff = PTR_TO(last_newline);
-       } else {
-         len = strlen(data);
-         buff = data;
-       }
- 
-       // Allocate as a ruby string so that it gets cleaned up by GC
-       newstr_val = rb_str_new(buff, len);
-       newstr = RSTRING_PTR(newstr_val);
- 
- 
-       for (count = 0; count < len; count++) {
-         if(buff[count] == 10) {
-           newstr[newstr_count] = '\0'; // terminate new string at first newline found
-           break;
-         } else {
-           if (buff[count] == '%') {
-             newstr[newstr_count++] = buff[count];
-             newstr[newstr_count] = buff[count];
-           } else {
-             newstr[newstr_count] = buff[count];
-           }
-         }
-         newstr_count++;
-       }
- 
-       line = lexer->line_number;
-       lexer_init(lexer); // Re-initialize so we can scan again with the same lexer
-       raise_lexer_error(newstr, line);
-     } else {
-       rb_funcall(listener, rb_intern("eof"), 0);
-     }
-   }
- 	break;
- #line 1141 "ext/gherkin_lexer_en_lol/gherkin_lexer_en_lol.c"
- 		}
- 	}
- 	}
- 
- 	_out: {}
- 	}
- 
- #line 426 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_lol.c.rl"
- 
-     assert(p <= pe && "data overflow after parsing execute");
-     assert(lexer->content_start <= len && "content starts after data end");
-     assert(lexer->mark < len && "mark is after data end");
-     
-     // Reset lexer by re-initializing the whole thing
-     lexer_init(lexer);
- 
-     if (cs == lexer_error) {
-       rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails.");
-     } else {
-       return Qtrue;
-     }
-   }
- }
- 
- void Init_gherkin_lexer_en_lol()
- {
-   mGherkin = rb_define_module("Gherkin");
-   mGherkinLexer = rb_define_module_under(mGherkin, "Lexer");
-   rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError"));
- 
-   mCLexer = rb_define_module_under(mGherkin, "CLexer");
-   cI18nLexer = rb_define_class_under(mCLexer, "En_lol", rb_cObject);
-   rb_define_alloc_func(cI18nLexer, CLexer_alloc);
-   rb_define_method(cI18nLexer, "initialize", CLexer_init, 1);
-   rb_define_method(cI18nLexer, "scan", CLexer_scan, 1);
- }
- 
 -#line 1 "ragel/i18n/en_lol.c.rl"
 -#include <assert.h>
 -#include <ruby.h>
 -
 -#if defined(_WIN32)
 -#include <stddef.h>
 -#endif
 -
 -#ifdef HAVE_RUBY_RE_H
 -#include <ruby/re.h>
 -#else
 -#include <re.h>
 -#endif
 -
 -#ifdef HAVE_RUBY_ENCODING_H
 -#include <ruby/encoding.h>
 -#define ENCODED_STR_NEW(ptr, len) \
 -    rb_enc_str_new(ptr, len, rb_utf8_encoding())
 -#else
 -#define ENCODED_STR_NEW(ptr, len) \
 -    rb_str_new(ptr, len)
 -#endif
 -
 -#ifndef RSTRING_PTR
 -#define RSTRING_PTR(s) (RSTRING(s)->ptr)
 -#endif
 -
 -#ifndef RSTRING_LEN
 -#define RSTRING_LEN(s) (RSTRING(s)->len)
 -#endif
 -
 -#define DATA_GET(FROM, TYPE, NAME) \
 -  Data_Get_Struct(FROM, TYPE, NAME); \
 -  if (NAME == NULL) { \
 -    rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \
 -  }
 - 
 -typedef struct lexer_state {
 -  int content_len;
 -  int line_number;
 -  int current_line;
 -  int start_col;
 -  size_t mark;
 -  size_t keyword_start;
 -  size_t keyword_end;
 -  size_t next_keyword_start;
 -  size_t content_start;
 -  size_t content_end;
 -  size_t docstring_content_type_start;
 -  size_t docstring_content_type_end;
 -  size_t query_start;
 -  size_t last_newline;
 -  size_t final_newline;
 -} lexer_state;
 -
 -static VALUE mGherkin;
 -static VALUE mGherkinLexer;
 -static VALUE mCLexer;
 -static VALUE cI18nLexer;
 -static VALUE rb_eGherkinLexingError;
 -
 -#define LEN(AT, P) (P - data - lexer->AT)
 -#define MARK(M, P) (lexer->M = (P) - data)
 -#define PTR_TO(P) (data + lexer->P)
 -
 -#define STORE_KW_END_CON(EVENT) \
 -  store_multiline_kw_con(listener, # EVENT, \
 -    PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \
 -    PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \
 -    lexer->current_line, lexer->start_col); \
 -    if (lexer->content_end != 0) { \
 -      p = PTR_TO(content_end - 1); \
 -    } \
 -    lexer->content_end = 0
 -
 -#define STORE_ATTR(ATTR) \
 -    store_attr(listener, # ATTR, \
 -      PTR_TO(content_start), LEN(content_start, p), \
 -      lexer->line_number)
 -
 -
 -#line 254 "ragel/i18n/en_lol.c.rl"
 -
 -
 -/** Data **/
 -
 -#line 89 "ext/gherkin_lexer_en_lol/gherkin_lexer_en_lol.c"
 -static const char _lexer_actions[] = {
 -	0, 1, 0, 1, 1, 1, 2, 1, 
 -	3, 1, 4, 1, 5, 1, 6, 1, 
 -	7, 1, 8, 1, 9, 1, 10, 1, 
 -	11, 1, 12, 1, 13, 1, 16, 1, 
 -	17, 1, 18, 1, 19, 1, 20, 1, 
 -	21, 1, 22, 1, 23, 2, 1, 18, 
 -	2, 4, 5, 2, 13, 0, 2, 14, 
 -	15, 2, 17, 0, 2, 17, 2, 2, 
 -	17, 16, 2, 17, 19, 2, 18, 6, 
 -	2, 18, 7, 2, 18, 8, 2, 18, 
 -	9, 2, 18, 10, 2, 18, 16, 2, 
 -	20, 21, 2, 22, 0, 2, 22, 2, 
 -	2, 22, 16, 2, 22, 19, 3, 3, 
 -	14, 15, 3, 5, 14, 15, 3, 11, 
 -	14, 15, 3, 12, 14, 15, 3, 13, 
 -	14, 15, 3, 14, 15, 18, 3, 17, 
 -	0, 11, 3, 17, 14, 15, 4, 1, 
 -	14, 15, 18, 4, 4, 5, 14, 15, 
 -	4, 17, 0, 14, 15, 5, 17, 0, 
 -	11, 14, 15
 -};
 -
 -static const short _lexer_key_offsets[] = {
 -	0, 0, 19, 20, 21, 39, 40, 41, 
 -	43, 45, 50, 55, 60, 65, 69, 73, 
 -	75, 76, 77, 78, 79, 80, 81, 82, 
 -	83, 84, 85, 86, 87, 88, 89, 90, 
 -	91, 93, 95, 100, 107, 112, 113, 115, 
 -	116, 117, 118, 133, 135, 137, 139, 141, 
 -	143, 145, 147, 149, 151, 153, 155, 157, 
 -	159, 161, 163, 181, 182, 183, 184, 185, 
 -	186, 187, 188, 189, 190, 191, 198, 200, 
 -	202, 204, 206, 208, 210, 211, 212, 213, 
 -	214, 215, 216, 217, 218, 219, 220, 221, 
 -	222, 223, 225, 226, 227, 228, 229, 230, 
 -	231, 232, 233, 248, 250, 252, 254, 256, 
 -	258, 260, 262, 264, 266, 268, 270, 272, 
 -	274, 276, 278, 280, 282, 284, 286, 288, 
 -	290, 292, 294, 296, 298, 300, 302, 304, 
 -	306, 308, 310, 312, 314, 316, 318, 320, 
 -	322, 324, 325, 326, 341, 343, 345, 347, 
 -	349, 351, 353, 355, 357, 359, 361, 363, 
 -	365, 367, 369, 371, 373, 376, 378, 380, 
 -	382, 384, 386, 388, 390, 392, 394, 396, 
 -	398, 400, 402, 404, 406, 408, 411, 413, 
 -	415, 417, 419, 421, 423, 425, 427, 429, 
 -	431, 432, 433, 434, 435, 436, 437, 438, 
 -	439, 450, 452, 454, 456, 458, 460, 462, 
 -	464, 466, 468, 470, 472, 474, 476, 478, 
 -	480, 482, 484, 486, 488, 490, 492, 494, 
 -	496, 498, 500, 502, 504, 507, 509, 511, 
 -	513, 515, 517, 519, 521, 523, 525, 527, 
 -	531, 537, 540, 542, 548, 566, 568, 570, 
 -	572, 574, 576, 578, 580, 582, 584, 586, 
 -	588, 590, 592, 594, 596, 598, 600, 603, 
 -	605, 607, 609, 611, 613, 615, 617, 619, 
 -	621, 623, 625, 626
 -};
 -
 -static const char _lexer_trans_keys[] = {
 -	-17, 10, 32, 34, 35, 37, 42, 64, 
 -	65, 66, 68, 69, 73, 77, 79, 87, 
 -	124, 9, 13, -69, -65, 10, 32, 34, 
 -	35, 37, 42, 64, 65, 66, 68, 69, 
 -	73, 77, 79, 87, 124, 9, 13, 34, 
 -	34, 10, 13, 10, 13, 10, 32, 34, 
 -	9, 13, 10, 32, 34, 9, 13, 10, 
 -	32, 34, 9, 13, 10, 32, 34, 9, 
 -	13, 10, 32, 9, 13, 10, 32, 9, 
 -	13, 10, 13, 10, 95, 70, 69, 65, 
 -	84, 85, 82, 69, 95, 69, 78, 68, 
 -	95, 37, 32, 10, 13, 10, 13, 13, 
 -	32, 64, 9, 10, 9, 10, 13, 32, 
 -	64, 11, 12, 10, 32, 64, 9, 13, 
 -	78, 52, 85, 58, 10, 10, 10, 32, 
 -	35, 37, 42, 64, 65, 66, 68, 73, 
 -	77, 79, 87, 9, 13, 10, 95, 10, 
 -	70, 10, 69, 10, 65, 10, 84, 10, 
 -	85, 10, 82, 10, 69, 10, 95, 10, 
 -	69, 10, 78, 10, 68, 10, 95, 10, 
 -	37, 10, 32, 10, 32, 34, 35, 37, 
 -	42, 64, 65, 66, 68, 69, 73, 77, 
 -	79, 87, 124, 9, 13, 69, 88, 65, 
 -	77, 80, 76, 90, 58, 10, 10, 10, 
 -	32, 35, 79, 124, 9, 13, 10, 72, 
 -	10, 32, 10, 72, 10, 65, 10, 73, 
 -	10, 58, 32, 67, 65, 78, 32, 72, 
 -	65, 90, 73, 83, 72, 85, 78, 32, 
 -	58, 83, 82, 83, 76, 89, 58, 10, 
 -	10, 10, 32, 35, 37, 42, 64, 65, 
 -	66, 68, 73, 77, 79, 87, 9, 13, 
 -	10, 95, 10, 70, 10, 69, 10, 65, 
 -	10, 84, 10, 85, 10, 82, 10, 69, 
 -	10, 95, 10, 69, 10, 78, 10, 68, 
 -	10, 95, 10, 37, 10, 32, 10, 78, 
 -	10, 85, 10, 84, 10, 69, 10, 32, 
 -	10, 67, 10, 65, 10, 78, 10, 32, 
 -	10, 72, 10, 65, 10, 90, 10, 73, 
 -	10, 83, 10, 72, 10, 85, 10, 78, 
 -	10, 58, 10, 72, 10, 32, 10, 72, 
 -	10, 65, 10, 73, 10, 10, 10, 32, 
 -	35, 37, 42, 64, 65, 66, 68, 73, 
 -	77, 79, 87, 9, 13, 10, 95, 10, 
 -	70, 10, 69, 10, 65, 10, 84, 10, 
 -	85, 10, 82, 10, 69, 10, 95, 10, 
 -	69, 10, 78, 10, 68, 10, 95, 10, 
 -	37, 10, 32, 10, 78, 10, 52, 85, 
 -	10, 58, 10, 84, 10, 69, 10, 32, 
 -	10, 67, 10, 65, 10, 78, 10, 32, 
 -	10, 72, 10, 65, 10, 90, 10, 73, 
 -	10, 83, 10, 72, 10, 85, 10, 78, 
 -	10, 32, 58, 10, 83, 10, 82, 10, 
 -	83, 10, 76, 10, 89, 10, 72, 10, 
 -	32, 10, 72, 10, 65, 10, 73, 72, 
 -	32, 72, 65, 73, 58, 10, 10, 10, 
 -	32, 35, 37, 64, 66, 69, 77, 79, 
 -	9, 13, 10, 95, 10, 70, 10, 69, 
 -	10, 65, 10, 84, 10, 85, 10, 82, 
 -	10, 69, 10, 95, 10, 69, 10, 78, 
 -	10, 68, 10, 95, 10, 37, 10, 52, 
 -	10, 58, 10, 88, 10, 65, 10, 77, 
 -	10, 80, 10, 76, 10, 90, 10, 73, 
 -	10, 83, 10, 72, 10, 85, 10, 78, 
 -	10, 32, 58, 10, 83, 10, 82, 10, 
 -	83, 10, 76, 10, 89, 10, 72, 10, 
 -	32, 10, 72, 10, 65, 10, 73, 32, 
 -	124, 9, 13, 10, 32, 92, 124, 9, 
 -	13, 10, 92, 124, 10, 92, 10, 32, 
 -	92, 124, 9, 13, 10, 32, 34, 35, 
 -	37, 42, 64, 65, 66, 68, 69, 73, 
 -	77, 79, 87, 124, 9, 13, 10, 78, 
 -	10, 85, 10, 84, 10, 69, 10, 32, 
 -	10, 67, 10, 65, 10, 78, 10, 32, 
 -	10, 72, 10, 65, 10, 90, 10, 73, 
 -	10, 83, 10, 72, 10, 85, 10, 78, 
 -	10, 32, 58, 10, 83, 10, 82, 10, 
 -	83, 10, 76, 10, 89, 10, 58, 10, 
 -	72, 10, 32, 10, 72, 10, 65, 10, 
 -	73, 84, 0
 -};
 -
 -static const char _lexer_single_lengths[] = {
 -	0, 17, 1, 1, 16, 1, 1, 2, 
 -	2, 3, 3, 3, 3, 2, 2, 2, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	2, 2, 3, 5, 3, 1, 2, 1, 
 -	1, 1, 13, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 16, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 5, 2, 2, 
 -	2, 2, 2, 2, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 2, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 13, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 1, 1, 13, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 3, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 3, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	9, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 3, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	4, 3, 2, 4, 16, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 3, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 1, 0
 -};
 -
 -static const char _lexer_range_lengths[] = {
 -	0, 1, 0, 0, 1, 0, 0, 0, 
 -	0, 1, 1, 1, 1, 1, 1, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 1, 1, 1, 0, 0, 0, 
 -	0, 0, 1, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 1, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 1, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 1, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 1, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	1, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 1, 
 -	1, 0, 0, 1, 1, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0
 -};
 -
 -static const short _lexer_index_offsets[] = {
 -	0, 0, 19, 21, 23, 41, 43, 45, 
 -	48, 51, 56, 61, 66, 71, 75, 79, 
 -	82, 84, 86, 88, 90, 92, 94, 96, 
 -	98, 100, 102, 104, 106, 108, 110, 112, 
 -	114, 117, 120, 125, 132, 137, 139, 142, 
 -	144, 146, 148, 163, 166, 169, 172, 175, 
 -	178, 181, 184, 187, 190, 193, 196, 199, 
 -	202, 205, 208, 226, 228, 230, 232, 234, 
 -	236, 238, 240, 242, 244, 246, 253, 256, 
 -	259, 262, 265, 268, 271, 273, 275, 277, 
 -	279, 281, 283, 285, 287, 289, 291, 293, 
 -	295, 297, 300, 302, 304, 306, 308, 310, 
 -	312, 314, 316, 331, 334, 337, 340, 343, 
 -	346, 349, 352, 355, 358, 361, 364, 367, 
 -	370, 373, 376, 379, 382, 385, 388, 391, 
 -	394, 397, 400, 403, 406, 409, 412, 415, 
 -	418, 421, 424, 427, 430, 433, 436, 439, 
 -	442, 445, 447, 449, 464, 467, 470, 473, 
 -	476, 479, 482, 485, 488, 491, 494, 497, 
 -	500, 503, 506, 509, 512, 516, 519, 522, 
 -	525, 528, 531, 534, 537, 540, 543, 546, 
 -	549, 552, 555, 558, 561, 564, 568, 571, 
 -	574, 577, 580, 583, 586, 589, 592, 595, 
 -	598, 600, 602, 604, 606, 608, 610, 612, 
 -	614, 625, 628, 631, 634, 637, 640, 643, 
 -	646, 649, 652, 655, 658, 661, 664, 667, 
 -	670, 673, 676, 679, 682, 685, 688, 691, 
 -	694, 697, 700, 703, 706, 710, 713, 716, 
 -	719, 722, 725, 728, 731, 734, 737, 740, 
 -	744, 750, 754, 757, 763, 781, 784, 787, 
 -	790, 793, 796, 799, 802, 805, 808, 811, 
 -	814, 817, 820, 823, 826, 829, 832, 836, 
 -	839, 842, 845, 848, 851, 854, 857, 860, 
 -	863, 866, 869, 871
 -};
 -
 -static const short _lexer_trans_targs[] = {
 -	2, 4, 4, 5, 15, 17, 31, 34, 
 -	37, 38, 59, 60, 76, 84, 184, 59, 
 -	231, 4, 0, 3, 0, 4, 0, 4, 
 -	4, 5, 15, 17, 31, 34, 37, 38, 
 -	59, 60, 76, 84, 184, 59, 231, 4, 
 -	0, 6, 0, 7, 0, 9, 8, 8, 
 -	9, 8, 8, 10, 10, 11, 10, 10, 
 -	10, 10, 11, 10, 10, 10, 10, 12, 
 -	10, 10, 10, 10, 13, 10, 10, 4, 
 -	14, 14, 0, 4, 14, 14, 0, 4, 
 -	16, 15, 4, 0, 18, 0, 19, 0, 
 -	20, 0, 21, 0, 22, 0, 23, 0, 
 -	24, 0, 25, 0, 26, 0, 27, 0, 
 -	28, 0, 29, 0, 30, 0, 267, 0, 
 -	32, 0, 4, 16, 33, 4, 16, 33, 
 -	0, 0, 0, 0, 35, 36, 4, 36, 
 -	36, 34, 35, 35, 4, 36, 34, 36, 
 -	0, 31, 0, 39, 266, 0, 40, 0, 
 -	42, 41, 42, 41, 42, 42, 4, 43, 
 -	57, 4, 237, 238, 240, 241, 249, 261, 
 -	240, 42, 41, 42, 44, 41, 42, 45, 
 -	41, 42, 46, 41, 42, 47, 41, 42, 
 -	48, 41, 42, 49, 41, 42, 50, 41, 
 -	42, 51, 41, 42, 52, 41, 42, 53, 
 -	41, 42, 54, 41, 42, 55, 41, 42, 
 -	56, 41, 42, 4, 41, 42, 58, 41, 
 -	4, 4, 5, 15, 17, 31, 34, 37, 
 -	38, 59, 60, 76, 84, 184, 59, 231, 
 -	4, 0, 37, 0, 61, 0, 62, 0, 
 -	63, 0, 64, 0, 65, 0, 66, 0, 
 -	67, 0, 69, 68, 69, 68, 69, 69, 
 -	4, 70, 4, 69, 68, 69, 71, 68, 
 -	69, 72, 68, 69, 73, 68, 69, 74, 
 -	68, 69, 75, 68, 69, 58, 68, 77, 
 -	0, 78, 0, 79, 0, 80, 0, 81, 
 -	0, 82, 0, 83, 0, 31, 0, 85, 
 -	0, 86, 0, 87, 0, 88, 0, 89, 
 -	0, 90, 137, 0, 91, 0, 92, 0, 
 -	93, 0, 94, 0, 95, 0, 96, 0, 
 -	98, 97, 98, 97, 98, 98, 4, 99, 
 -	113, 4, 114, 115, 117, 118, 126, 132, 
 -	117, 98, 97, 98, 100, 97, 98, 101, 
 -	97, 98, 102, 97, 98, 103, 97, 98, 
 -	104, 97, 98, 105, 97, 98, 106, 97, 
 -	98, 107, 97, 98, 108, 97, 98, 109, 
 -	97, 98, 110, 97, 98, 111, 97, 98, 
 -	112, 97, 98, 4, 97, 98, 58, 97, 
 -	98, 113, 97, 98, 116, 97, 98, 113, 
 -	97, 98, 114, 97, 98, 119, 97, 98, 
 -	120, 97, 98, 121, 97, 98, 122, 97, 
 -	98, 123, 97, 98, 124, 97, 98, 125, 
 -	97, 98, 113, 97, 98, 127, 97, 98, 
 -	128, 97, 98, 129, 97, 98, 130, 97, 
 -	98, 131, 97, 98, 58, 97, 98, 133, 
 -	97, 98, 134, 97, 98, 135, 97, 98, 
 -	136, 97, 98, 131, 97, 139, 138, 139, 
 -	138, 139, 139, 4, 140, 154, 4, 155, 
 -	156, 159, 160, 168, 179, 159, 139, 138, 
 -	139, 141, 138, 139, 142, 138, 139, 143, 
 -	138, 139, 144, 138, 139, 145, 138, 139, 
 -	146, 138, 139, 147, 138, 139, 148, 138, 
 -	139, 149, 138, 139, 150, 138, 139, 151, 
 -	138, 139, 152, 138, 139, 153, 138, 139, 
 -	4, 138, 139, 58, 138, 139, 154, 138, 
 -	139, 157, 158, 138, 139, 58, 138, 139, 
 -	154, 138, 139, 155, 138, 139, 161, 138, 
 -	139, 162, 138, 139, 163, 138, 139, 164, 
 -	138, 139, 165, 138, 139, 166, 138, 139, 
 -	167, 138, 139, 154, 138, 139, 169, 138, 
 -	139, 170, 138, 139, 171, 138, 139, 172, 
 -	138, 139, 173, 138, 139, 174, 58, 138, 
 -	139, 175, 138, 139, 176, 138, 139, 177, 
 -	138, 139, 178, 138, 139, 157, 138, 139, 
 -	180, 138, 139, 181, 138, 139, 182, 138, 
 -	139, 183, 138, 139, 157, 138, 185, 0, 
 -	186, 0, 187, 0, 188, 0, 189, 0, 
 -	190, 0, 192, 191, 192, 191, 192, 192, 
 -	4, 193, 4, 207, 209, 215, 226, 192, 
 -	191, 192, 194, 191, 192, 195, 191, 192, 
 -	196, 191, 192, 197, 191, 192, 198, 191, 
 -	192, 199, 191, 192, 200, 191, 192, 201, 
 -	191, 192, 202, 191, 192, 203, 191, 192, 
 -	204, 191, 192, 205, 191, 192, 206, 191, 
 -	192, 4, 191, 192, 208, 191, 192, 58, 
 -	191, 192, 210, 191, 192, 211, 191, 192, 
 -	212, 191, 192, 213, 191, 192, 214, 191, 
 -	192, 208, 191, 192, 216, 191, 192, 217, 
 -	191, 192, 218, 191, 192, 219, 191, 192, 
 -	220, 191, 192, 221, 58, 191, 192, 222, 
 -	191, 192, 223, 191, 192, 224, 191, 192, 
 -	225, 191, 192, 208, 191, 192, 227, 191, 
 -	192, 228, 191, 192, 229, 191, 192, 230, 
 -	191, 192, 208, 191, 231, 232, 231, 0, 
 -	236, 235, 234, 232, 235, 233, 0, 234, 
 -	232, 233, 0, 234, 233, 236, 235, 234, 
 -	232, 235, 233, 236, 236, 5, 15, 17, 
 -	31, 34, 37, 38, 59, 60, 76, 84, 
 -	184, 59, 231, 236, 0, 42, 57, 41, 
 -	42, 239, 41, 42, 57, 41, 42, 237, 
 -	41, 42, 242, 41, 42, 243, 41, 42, 
 -	244, 41, 42, 245, 41, 42, 246, 41, 
 -	42, 247, 41, 42, 248, 41, 42, 57, 
 -	41, 42, 250, 41, 42, 251, 41, 42, 
 -	252, 41, 42, 253, 41, 42, 254, 41, 
 -	42, 255, 58, 41, 42, 256, 41, 42, 
 -	257, 41, 42, 258, 41, 42, 259, 41, 
 -	42, 260, 41, 42, 58, 41, 42, 262, 
 -	41, 42, 263, 41, 42, 264, 41, 42, 
 -	265, 41, 42, 260, 41, 31, 0, 0, 
 -	0
 -};
 -
 -static const unsigned char _lexer_trans_actions[] = {
 -	0, 54, 0, 5, 1, 0, 29, 1, 
 -	29, 29, 29, 29, 29, 29, 29, 29, 
 -	35, 0, 43, 0, 43, 0, 43, 54, 
 -	0, 5, 1, 0, 29, 1, 29, 29, 
 -	29, 29, 29, 29, 29, 29, 35, 0, 
 -	43, 0, 43, 0, 43, 139, 48, 9, 
 -	106, 11, 0, 134, 45, 45, 45, 3, 
 -	122, 33, 33, 33, 0, 122, 33, 33, 
 -	33, 0, 122, 33, 0, 33, 0, 102, 
 -	7, 7, 43, 54, 0, 0, 43, 114, 
 -	25, 0, 54, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 149, 126, 57, 110, 23, 0, 
 -	43, 43, 43, 43, 0, 27, 118, 27, 
 -	27, 51, 27, 0, 54, 0, 1, 0, 
 -	43, 0, 43, 0, 0, 43, 0, 43, 
 -	144, 57, 54, 0, 54, 0, 72, 33, 
 -	84, 72, 84, 84, 84, 84, 84, 84, 
 -	84, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 15, 0, 54, 15, 0, 
 -	130, 31, 60, 57, 31, 63, 57, 63, 
 -	63, 63, 63, 63, 63, 63, 63, 66, 
 -	31, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 144, 57, 54, 0, 54, 0, 
 -	81, 84, 81, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 21, 0, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	144, 57, 54, 0, 54, 0, 78, 33, 
 -	84, 78, 84, 84, 84, 84, 84, 84, 
 -	84, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 19, 0, 54, 19, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 19, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 144, 57, 54, 
 -	0, 54, 0, 75, 33, 84, 75, 84, 
 -	84, 84, 84, 84, 84, 84, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	17, 0, 54, 17, 0, 54, 0, 0, 
 -	54, 0, 0, 0, 54, 17, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 17, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 144, 57, 54, 0, 54, 0, 
 -	69, 33, 69, 84, 84, 84, 84, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 13, 0, 54, 0, 0, 54, 13, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 13, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 0, 0, 0, 43, 
 -	54, 37, 37, 87, 37, 37, 43, 0, 
 -	39, 0, 43, 0, 0, 54, 0, 0, 
 -	39, 0, 0, 54, 0, 93, 90, 41, 
 -	96, 90, 96, 96, 96, 96, 96, 96, 
 -	96, 96, 99, 0, 43, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 15, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 15, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 0, 43, 0, 
 -	0
 -};
 -
 -static const unsigned char _lexer_eof_actions[] = {
 -	0, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43
 -};
 -
 -static const int lexer_start = 1;
 -static const int lexer_first_final = 267;
 -static const int lexer_error = 0;
 -
 -static const int lexer_en_main = 1;
 -
 -
 -#line 258 "ragel/i18n/en_lol.c.rl"
 -
 -static VALUE 
 -unindent(VALUE con, int start_col)
 -{
 -  VALUE re;
 -  /* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */
 -  char pat[32]; 
 -  snprintf(pat, 32, "^[\t ]{0,%d}", start_col); 
 -  re = rb_reg_regcomp(rb_str_new2(pat));
 -  rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2(""));
 -
 -  return Qnil;
 -
 -}
 -
 -static void 
 -store_kw_con(VALUE listener, const char * event_name, 
 -             const char * keyword_at, size_t keyword_length, 
 -             const char * at,         size_t length, 
 -             int current_line)
 -{
 -  VALUE con = Qnil, kw = Qnil;
 -  kw = ENCODED_STR_NEW(keyword_at, keyword_length);
 -  con = ENCODED_STR_NEW(at, length);
 -  rb_funcall(con, rb_intern("strip!"), 0);
 -  rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); 
 -}
 -
 -static void
 -store_multiline_kw_con(VALUE listener, const char * event_name,
 -                      const char * keyword_at, size_t keyword_length,
 -                      const char * at,         size_t length,
 -                      int current_line, int start_col)
 -{
 -  VALUE split;
 -  VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil;
 -
 -  kw = ENCODED_STR_NEW(keyword_at, keyword_length);
 -  con = ENCODED_STR_NEW(at, length);
 -
 -  unindent(con, start_col);
 -  
 -  split = rb_str_split(con, "\n");
 -
 -  name = rb_funcall(split, rb_intern("shift"), 0);
 -  desc = rb_ary_join(split, rb_str_new2( "\n" ));
 -
 -  if( name == Qnil ) 
 -  {
 -    name = rb_str_new2("");
 -  }
 -  if( rb_funcall(desc, rb_intern("size"), 0) == 0) 
 -  {
 -    desc = rb_str_new2("");
 -  }
 -  rb_funcall(name, rb_intern("strip!"), 0);
 -  rb_funcall(desc, rb_intern("rstrip!"), 0);
 -  rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); 
 -}
 -
 -static void 
 -store_attr(VALUE listener, const char * attr_type,
 -           const char * at, size_t length, 
 -           int line)
 -{
 -  VALUE val = ENCODED_STR_NEW(at, length);
 -  rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line));
 -}
 -static void 
 -store_docstring_content(VALUE listener, 
 -          int start_col, 
 -          const char *type_at, size_t type_length,
 -          const char *at, size_t length, 
 -          int current_line)
 -{
 -  VALUE re2;
 -  VALUE unescape_escaped_quotes;
 -  VALUE con = ENCODED_STR_NEW(at, length);
 -  VALUE con_type = ENCODED_STR_NEW(type_at, type_length);
 -
 -  unindent(con, start_col);
 -
 -  re2 = rb_reg_regcomp(rb_str_new2("\r\\Z"));
 -  unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\""));
 -  rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2(""));
 -  rb_funcall(con_type, rb_intern("strip!"), 0);
 -  rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\""));
 -  rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line));
 -}
 -static void 
 -raise_lexer_error(const char * at, int line)
 -{ 
 -  rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at);
 -}
 -
 -static void lexer_init(lexer_state *lexer) {
 -  lexer->content_start = 0;
 -  lexer->content_end = 0;
 -  lexer->content_len = 0;
 -  lexer->docstring_content_type_start = 0;
 -  lexer->docstring_content_type_end = 0;
 -  lexer->mark = 0;
 -  lexer->keyword_start = 0;
 -  lexer->keyword_end = 0;
 -  lexer->next_keyword_start = 0;
 -  lexer->line_number = 1;
 -  lexer->last_newline = 0;
 -  lexer->final_newline = 0;
 -  lexer->start_col = 0;
 -}
 -
 -static VALUE CLexer_alloc(VALUE klass)
 -{
 -  VALUE obj;
 -  lexer_state *lxr = ALLOC(lexer_state);
 -  lexer_init(lxr);
 -
 -  obj = Data_Wrap_Struct(klass, NULL, -1, lxr);
 -
 -  return obj;
 -}
 -
 -static VALUE CLexer_init(VALUE self, VALUE listener)
 -{
 -  lexer_state *lxr; 
 -  rb_iv_set(self, "@listener", listener);
 -  
 -  lxr = NULL;
 -  DATA_GET(self, lexer_state, lxr);
 -  lexer_init(lxr);
 -  
 -  return self;
 -}
 -
 -static VALUE CLexer_scan(VALUE self, VALUE input)
 -{
 -  VALUE input_copy;
 -  char *data;
 -  size_t len;
 -  VALUE listener = rb_iv_get(self, "@listener");
 -
 -  lexer_state *lexer;
 -  lexer = NULL;
 -  DATA_GET(self, lexer_state, lexer);
 -
 -  input_copy = rb_str_dup(input);
 -
 -  rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%"));
 -  data = RSTRING_PTR(input_copy);
 -  len = RSTRING_LEN(input_copy);
 -  
 -  if (len == 0) { 
 -    rb_raise(rb_eGherkinLexingError, "No content to lex.");
 -  } else {
 -
 -    const char *p, *pe, *eof;
 -    int cs = 0;
 -    
 -    VALUE current_row = Qnil;
 -
 -    p = data;
 -    pe = data + len;
 -    eof = pe;
 -    
 -    assert(*pe == '\0' && "pointer does not end on NULL");
 -    
 -    
 -#line 781 "ext/gherkin_lexer_en_lol/gherkin_lexer_en_lol.c"
 -	{
 -	cs = lexer_start;
 -	}
 -
 -#line 425 "ragel/i18n/en_lol.c.rl"
 -    
 -#line 788 "ext/gherkin_lexer_en_lol/gherkin_lexer_en_lol.c"
 -	{
 -	int _klen;
 -	unsigned int _trans;
 -	const char *_acts;
 -	unsigned int _nacts;
 -	const char *_keys;
 -
 -	if ( p == pe )
 -		goto _test_eof;
 -	if ( cs == 0 )
 -		goto _out;
 -_resume:
 -	_keys = _lexer_trans_keys + _lexer_key_offsets[cs];
 -	_trans = _lexer_index_offsets[cs];
 -
 -	_klen = _lexer_single_lengths[cs];
 -	if ( _klen > 0 ) {
 -		const char *_lower = _keys;
 -		const char *_mid;
 -		const char *_upper = _keys + _klen - 1;
 -		while (1) {
 -			if ( _upper < _lower )
 -				break;
 -
 -			_mid = _lower + ((_upper-_lower) >> 1);
 -			if ( (*p) < *_mid )
 -				_upper = _mid - 1;
 -			else if ( (*p) > *_mid )
 -				_lower = _mid + 1;
 -			else {
 -				_trans += (unsigned int)(_mid - _keys);
 -				goto _match;
 -			}
 -		}
 -		_keys += _klen;
 -		_trans += _klen;
 -	}
 -
 -	_klen = _lexer_range_lengths[cs];
 -	if ( _klen > 0 ) {
 -		const char *_lower = _keys;
 -		const char *_mid;
 -		const char *_upper = _keys + (_klen<<1) - 2;
 -		while (1) {
 -			if ( _upper < _lower )
 -				break;
 -
 -			_mid = _lower + (((_upper-_lower) >> 1) & ~1);
 -			if ( (*p) < _mid[0] )
 -				_upper = _mid - 2;
 -			else if ( (*p) > _mid[1] )
 -				_lower = _mid + 2;
 -			else {
 -				_trans += (unsigned int)((_mid - _keys)>>1);
 -				goto _match;
 -			}
 -		}
 -		_trans += _klen;
 -	}
 -
 -_match:
 -	cs = _lexer_trans_targs[_trans];
 -
 -	if ( _lexer_trans_actions[_trans] == 0 )
 -		goto _again;
 -
 -	_acts = _lexer_actions + _lexer_trans_actions[_trans];
 -	_nacts = (unsigned int) *_acts++;
 -	while ( _nacts-- > 0 )
 -	{
 -		switch ( *_acts++ )
 -		{
 -	case 0:
 -#line 83 "ragel/i18n/en_lol.c.rl"
 -	{
 -		MARK(content_start, p);
 -    lexer->current_line = lexer->line_number;
 -    lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2;
 -  }
 -	break;
 -	case 1:
 -#line 89 "ragel/i18n/en_lol.c.rl"
 -	{
 -    MARK(content_start, p);
 -  }
 -	break;
 -	case 2:
 -#line 93 "ragel/i18n/en_lol.c.rl"
 -	{
 -    lexer->current_line = lexer->line_number;
 -    lexer->start_col = p - data - lexer->last_newline;
 -  }
 -	break;
 -	case 3:
 -#line 98 "ragel/i18n/en_lol.c.rl"
 -	{
 -    int len = LEN(content_start, PTR_TO(final_newline));
 -    int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end));
 -
 -    if (len < 0) len = 0;
 -    if (type_len < 0) len = 0;
 -
 -    store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line);
 -  }
 -	break;
 -	case 4:
 -#line 108 "ragel/i18n/en_lol.c.rl"
 -	{ 
 -    MARK(docstring_content_type_start, p);
 -  }
 -	break;
 -	case 5:
 -#line 112 "ragel/i18n/en_lol.c.rl"
 -	{ 
 -    MARK(docstring_content_type_end, p);
 -  }
 -	break;
 -	case 6:
 -#line 116 "ragel/i18n/en_lol.c.rl"
 -	{
 -    STORE_KW_END_CON(feature);
 -  }
 -	break;
 -	case 7:
 -#line 120 "ragel/i18n/en_lol.c.rl"
 -	{
 -    STORE_KW_END_CON(background);
 -  }
 -	break;
 -	case 8:
 -#line 124 "ragel/i18n/en_lol.c.rl"
 -	{
 -    STORE_KW_END_CON(scenario);
 -  }
 -	break;
 -	case 9:
 -#line 128 "ragel/i18n/en_lol.c.rl"
 -	{
 -    STORE_KW_END_CON(scenario_outline);
 -  }
 -	break;
 -	case 10:
 -#line 132 "ragel/i18n/en_lol.c.rl"
 -	{
 -    STORE_KW_END_CON(examples);
 -  }
 -	break;
 -	case 11:
 -#line 136 "ragel/i18n/en_lol.c.rl"
 -	{
 -    store_kw_con(listener, "step",
 -      PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
 -      PTR_TO(content_start), LEN(content_start, p), 
 -      lexer->current_line);
 -  }
 -	break;
 -	case 12:
 -#line 143 "ragel/i18n/en_lol.c.rl"
 -	{
 -    STORE_ATTR(comment);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 13:
 -#line 148 "ragel/i18n/en_lol.c.rl"
 -	{
 -    STORE_ATTR(tag);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 14:
 -#line 153 "ragel/i18n/en_lol.c.rl"
 -	{
 -    lexer->line_number += 1;
 -    MARK(final_newline, p);
 -  }
 -	break;
 -	case 15:
 -#line 158 "ragel/i18n/en_lol.c.rl"
 -	{
 -    MARK(last_newline, p + 1);
 -  }
 -	break;
 -	case 16:
 -#line 162 "ragel/i18n/en_lol.c.rl"
 -	{
 -    if (lexer->mark == 0) {
 -      MARK(mark, p);
 -    }
 -  }
 -	break;
 -	case 17:
 -#line 168 "ragel/i18n/en_lol.c.rl"
 -	{
 -    MARK(keyword_end, p);
 -    MARK(keyword_start, PTR_TO(mark));
 -    MARK(content_start, p + 1);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 18:
 -#line 175 "ragel/i18n/en_lol.c.rl"
 -	{
 -    MARK(content_end, p);
 -  }
 -	break;
 -	case 19:
 -#line 179 "ragel/i18n/en_lol.c.rl"
 -	{
 -    p = p - 1;
 -    lexer->current_line = lexer->line_number;
 -    current_row = rb_ary_new();
 -  }
 -	break;
 -	case 20:
 -#line 185 "ragel/i18n/en_lol.c.rl"
 -	{
 -		MARK(content_start, p);
 -  }
 -	break;
 -	case 21:
 -#line 189 "ragel/i18n/en_lol.c.rl"
 -	{
 -    VALUE re_pipe, re_newline, re_backslash;
 -    VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
 -    rb_funcall(con, rb_intern("strip!"), 0);
 -    re_pipe      = rb_reg_regcomp(rb_str_new2("\\\\\\|"));
 -    re_newline   = rb_reg_regcomp(rb_str_new2("\\\\n"));
 -    re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_pipe,      rb_str_new2("|"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_newline,   rb_str_new2("\n"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\"));
 -
 -    rb_ary_push(current_row, con);
 -  }
 -	break;
 -	case 22:
 -#line 203 "ragel/i18n/en_lol.c.rl"
 -	{
 -    rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
 -  }
 -	break;
 -	case 23:
 -#line 207 "ragel/i18n/en_lol.c.rl"
 -	{
 -    int line;
 -    if (cs < lexer_first_final) {
 -      size_t count = 0;
 -      VALUE newstr_val;
 -      char *newstr;
 -      int newstr_count = 0;        
 -      size_t len;
 -      const char *buff;
 -      if (lexer->last_newline != 0) {
 -        len = LEN(last_newline, eof);
 -        buff = PTR_TO(last_newline);
 -      } else {
 -        len = strlen(data);
 -        buff = data;
 -      }
 -
 -      /* Allocate as a ruby string so that it gets cleaned up by GC */
 -      newstr_val = rb_str_new(buff, len);
 -      newstr = RSTRING_PTR(newstr_val);
 -
 -
 -      for (count = 0; count < len; count++) {
 -        if(buff[count] == 10) {
 -          newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
 -          break;
 -        } else {
 -          if (buff[count] == '%') {
 -            newstr[newstr_count++] = buff[count];
 -            newstr[newstr_count] = buff[count];
 -          } else {
 -            newstr[newstr_count] = buff[count];
 -          }
 -        }
 -        newstr_count++;
 -      }
 -
 -      line = lexer->line_number;
 -      lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
 -      raise_lexer_error(newstr, line);
 -    } else {
 -      rb_funcall(listener, rb_intern("eof"), 0);
 -    }
 -  }
 -	break;
 -#line 1078 "ext/gherkin_lexer_en_lol/gherkin_lexer_en_lol.c"
 -		}
 -	}
 -
 -_again:
 -	if ( cs == 0 )
 -		goto _out;
 -	if ( ++p != pe )
 -		goto _resume;
 -	_test_eof: {}
 -	if ( p == eof )
 -	{
 -	const char *__acts = _lexer_actions + _lexer_eof_actions[cs];
 -	unsigned int __nacts = (unsigned int) *__acts++;
 -	while ( __nacts-- > 0 ) {
 -		switch ( *__acts++ ) {
 -	case 23:
 -#line 207 "ragel/i18n/en_lol.c.rl"
 -	{
 -    int line;
 -    if (cs < lexer_first_final) {
 -      size_t count = 0;
 -      VALUE newstr_val;
 -      char *newstr;
 -      int newstr_count = 0;        
 -      size_t len;
 -      const char *buff;
 -      if (lexer->last_newline != 0) {
 -        len = LEN(last_newline, eof);
 -        buff = PTR_TO(last_newline);
 -      } else {
 -        len = strlen(data);
 -        buff = data;
 -      }
 -
 -      /* Allocate as a ruby string so that it gets cleaned up by GC */
 -      newstr_val = rb_str_new(buff, len);
 -      newstr = RSTRING_PTR(newstr_val);
 -
 -
 -      for (count = 0; count < len; count++) {
 -        if(buff[count] == 10) {
 -          newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
 -          break;
 -        } else {
 -          if (buff[count] == '%') {
 -            newstr[newstr_count++] = buff[count];
 -            newstr[newstr_count] = buff[count];
 -          } else {
 -            newstr[newstr_count] = buff[count];
 -          }
 -        }
 -        newstr_count++;
 -      }
 -
 -      line = lexer->line_number;
 -      lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
 -      raise_lexer_error(newstr, line);
 -    } else {
 -      rb_funcall(listener, rb_intern("eof"), 0);
 -    }
 -  }
 -	break;
 -#line 1141 "ext/gherkin_lexer_en_lol/gherkin_lexer_en_lol.c"
 -		}
 -	}
 -	}
 -
 -	_out: {}
 -	}
 -
 -#line 426 "ragel/i18n/en_lol.c.rl"
 -
 -    assert(p <= pe && "data overflow after parsing execute");
 -    assert(lexer->content_start <= len && "content starts after data end");
 -    assert(lexer->mark < len && "mark is after data end");
 -    
 -    /* Reset lexer by re-initializing the whole thing */
 -    lexer_init(lexer);
 -
 -    if (cs == lexer_error) {
 -      rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails.");
 -    } else {
 -      return Qtrue;
 -    }
 -  }
 -}
 -
 -void Init_gherkin_lexer_en_lol()
 -{
 -  mGherkin = rb_define_module("Gherkin");
 -  mGherkinLexer = rb_define_module_under(mGherkin, "Lexer");
 -  rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError"));
 -
 -  mCLexer = rb_define_module_under(mGherkin, "CLexer");
 -  cI18nLexer = rb_define_class_under(mCLexer, "En_lol", rb_cObject);
 -  rb_define_alloc_func(cI18nLexer, CLexer_alloc);
 -  rb_define_method(cI18nLexer, "initialize", CLexer_init, 1);
 -  rb_define_method(cI18nLexer, "scan", CLexer_scan, 1);
 -}
 -
diff --cc ext/gherkin_lexer_en_pirate/extconf.rb
index 768c72e,768c72e..0000000
deleted file mode 100644,100644
--- a/ext/gherkin_lexer_en_pirate/extconf.rb
+++ /dev/null
@@@ -1,6 -1,6 +1,0 @@@
--require 'mkmf'
--CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags']
--$CFLAGS << ' -O0 -Wall' if CONFIG['CC'] =~ /gcc|clang/
--dir_config("gherkin_lexer_en_pirate")
--have_library("c", "main")
--create_makefile("gherkin_lexer_en_pirate")
diff --cc ext/gherkin_lexer_en_pirate/gherkin_lexer_en_pirate.c
index 2526a25,49bc1fa..0000000
deleted file mode 100644,100644
--- a/ext/gherkin_lexer_en_pirate/gherkin_lexer_en_pirate.c
+++ /dev/null
@@@ -1,1471 -1,1471 +1,0 @@@
--
- #line 1 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
- #include <assert.h>
- #include <ruby.h>
- 
- #if defined(_WIN32)
- #include <stddef.h>
- #endif
- 
- #ifdef HAVE_RUBY_RE_H
- #include <ruby/re.h>
- #else
- #include <re.h>
- #endif
- 
- #ifdef HAVE_RUBY_ENCODING_H
- #include <ruby/encoding.h>
- #define ENCODED_STR_NEW(ptr, len) \
-     rb_enc_str_new(ptr, len, rb_utf8_encoding())
- #else
- #define ENCODED_STR_NEW(ptr, len) \
-     rb_str_new(ptr, len)
- #endif
- 
- #ifndef RSTRING_PTR
- #define RSTRING_PTR(s) (RSTRING(s)->ptr)
- #endif
- 
- #ifndef RSTRING_LEN
- #define RSTRING_LEN(s) (RSTRING(s)->len)
- #endif
- 
- #define DATA_GET(FROM, TYPE, NAME) \
-   Data_Get_Struct(FROM, TYPE, NAME); \
-   if (NAME == NULL) { \
-     rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \
-   }
-  
- typedef struct lexer_state {
-   int content_len;
-   int line_number;
-   int current_line;
-   int start_col;
-   size_t mark;
-   size_t keyword_start;
-   size_t keyword_end;
-   size_t next_keyword_start;
-   size_t content_start;
-   size_t content_end;
-   size_t docstring_content_type_start;
-   size_t docstring_content_type_end;
-   size_t query_start;
-   size_t last_newline;
-   size_t final_newline;
- } lexer_state;
- 
- static VALUE mGherkin;
- static VALUE mGherkinLexer;
- static VALUE mCLexer;
- static VALUE cI18nLexer;
- static VALUE rb_eGherkinLexingError;
- 
- #define LEN(AT, P) (P - data - lexer->AT)
- #define MARK(M, P) (lexer->M = (P) - data)
- #define PTR_TO(P) (data + lexer->P)
- 
- #define STORE_KW_END_CON(EVENT) \
-   store_multiline_kw_con(listener, # EVENT, \
-     PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \
-     PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \
-     lexer->current_line, lexer->start_col); \
-     if (lexer->content_end != 0) { \
-       p = PTR_TO(content_end - 1); \
-     } \
-     lexer->content_end = 0
- 
- #define STORE_ATTR(ATTR) \
-     store_attr(listener, # ATTR, \
-       PTR_TO(content_start), LEN(content_start, p), \
-       lexer->line_number)
- 
- 
- #line 254 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
- 
- 
- /** Data **/
- 
- #line 89 "ext/gherkin_lexer_en_pirate/gherkin_lexer_en_pirate.c"
- static const char _lexer_actions[] = {
- 	0, 1, 0, 1, 1, 1, 2, 1, 
- 	3, 1, 4, 1, 5, 1, 6, 1, 
- 	7, 1, 8, 1, 9, 1, 10, 1, 
- 	11, 1, 12, 1, 13, 1, 16, 1, 
- 	17, 1, 18, 1, 19, 1, 20, 1, 
- 	21, 1, 22, 1, 23, 2, 1, 18, 
- 	2, 4, 5, 2, 13, 0, 2, 14, 
- 	15, 2, 17, 0, 2, 17, 2, 2, 
- 	17, 16, 2, 17, 19, 2, 18, 6, 
- 	2, 18, 7, 2, 18, 8, 2, 18, 
- 	9, 2, 18, 10, 2, 18, 16, 2, 
- 	20, 21, 2, 22, 0, 2, 22, 2, 
- 	2, 22, 16, 2, 22, 19, 3, 3, 
- 	14, 15, 3, 5, 14, 15, 3, 11, 
- 	14, 15, 3, 12, 14, 15, 3, 13, 
- 	14, 15, 3, 14, 15, 18, 3, 17, 
- 	0, 11, 3, 17, 14, 15, 4, 1, 
- 	14, 15, 18, 4, 4, 5, 14, 15, 
- 	4, 17, 0, 14, 15, 5, 17, 0, 
- 	11, 14, 15
- };
- 
- static const short _lexer_key_offsets[] = {
- 	0, 0, 19, 20, 21, 39, 40, 41, 
- 	43, 45, 50, 55, 60, 65, 69, 73, 
- 	75, 76, 77, 78, 79, 80, 81, 82, 
- 	83, 84, 85, 86, 87, 88, 89, 90, 
- 	91, 93, 95, 100, 107, 112, 115, 116, 
- 	117, 118, 119, 120, 121, 122, 123, 124, 
- 	125, 126, 127, 139, 141, 143, 145, 147, 
- 	149, 151, 153, 155, 157, 159, 161, 163, 
- 	165, 167, 169, 171, 173, 175, 177, 179, 
- 	181, 183, 185, 187, 189, 207, 208, 209, 
- 	210, 211, 212, 213, 214, 215, 216, 217, 
- 	218, 219, 220, 221, 222, 223, 224, 225, 
- 	226, 227, 228, 229, 230, 231, 232, 233, 
- 	234, 235, 236, 237, 244, 246, 248, 250, 
- 	252, 254, 256, 258, 260, 262, 264, 266, 
- 	267, 268, 269, 270, 271, 272, 273, 274, 
- 	275, 276, 277, 278, 279, 280, 281, 296, 
- 	298, 300, 302, 304, 306, 308, 310, 312, 
- 	314, 316, 318, 320, 322, 324, 326, 330, 
- 	332, 334, 336, 338, 340, 342, 344, 346, 
- 	348, 350, 352, 354, 356, 358, 360, 362, 
- 	364, 366, 368, 370, 372, 374, 376, 378, 
- 	380, 382, 384, 386, 388, 390, 392, 394, 
- 	396, 398, 400, 402, 404, 406, 408, 410, 
- 	412, 414, 416, 418, 420, 422, 424, 426, 
- 	428, 430, 432, 434, 436, 438, 440, 442, 
- 	444, 446, 448, 450, 452, 454, 456, 458, 
- 	460, 462, 464, 466, 467, 468, 469, 470, 
- 	471, 472, 473, 474, 475, 476, 477, 478, 
- 	479, 480, 481, 482, 483, 484, 485, 486, 
- 	487, 488, 489, 490, 491, 492, 493, 494, 
- 	495, 496, 497, 498, 499, 512, 514, 516, 
- 	518, 520, 522, 524, 526, 528, 530, 532, 
- 	534, 536, 538, 540, 542, 546, 548, 550, 
- 	552, 554, 556, 558, 560, 562, 564, 566, 
- 	568, 570, 572, 574, 576, 578, 580, 582, 
- 	584, 586, 588, 590, 592, 594, 596, 598, 
- 	600, 602, 604, 606, 608, 610, 612, 614, 
- 	616, 618, 620, 622, 624, 626, 628, 630, 
- 	632, 634, 636, 638, 639, 640, 641, 642, 
- 	643, 644, 645, 646, 647, 648, 662, 664, 
- 	666, 668, 670, 672, 674, 676, 678, 680, 
- 	682, 684, 686, 688, 690, 692, 696, 698, 
- 	700, 702, 704, 706, 708, 710, 712, 714, 
- 	716, 718, 720, 722, 724, 726, 728, 730, 
- 	732, 734, 736, 738, 740, 742, 744, 746, 
- 	748, 750, 752, 754, 756, 758, 760, 762, 
- 	764, 766, 768, 770, 772, 774, 776, 778, 
- 	780, 782, 784, 786, 788, 790, 792, 794, 
- 	796, 798, 800, 802, 804, 806, 808, 810, 
- 	812, 814, 816, 818, 820, 824, 830, 833, 
- 	835, 841, 859, 861, 863, 865, 867, 869, 
- 	871, 873, 875, 877, 879, 881, 883, 885, 
- 	887, 889, 891, 893, 895, 897, 899, 901, 
- 	903, 905, 907, 909, 911, 913, 915, 917, 
- 	919, 921, 923, 925, 927, 929, 931, 933, 
- 	935, 937, 939, 941, 943, 945, 947, 949, 
- 	951, 953, 955, 957, 958, 959, 960, 961
- };
- 
- static const char _lexer_trans_keys[] = {
- 	-17, 10, 32, 34, 35, 37, 42, 64, 
- 	65, 66, 68, 71, 72, 76, 83, 89, 
- 	124, 9, 13, -69, -65, 10, 32, 34, 
- 	35, 37, 42, 64, 65, 66, 68, 71, 
- 	72, 76, 83, 89, 124, 9, 13, 34, 
- 	34, 10, 13, 10, 13, 10, 32, 34, 
- 	9, 13, 10, 32, 34, 9, 13, 10, 
- 	32, 34, 9, 13, 10, 32, 34, 9, 
- 	13, 10, 32, 9, 13, 10, 32, 9, 
- 	13, 10, 13, 10, 95, 70, 69, 65, 
- 	84, 85, 82, 69, 95, 69, 78, 68, 
- 	95, 37, 32, 10, 13, 10, 13, 13, 
- 	32, 64, 9, 10, 9, 10, 13, 32, 
- 	64, 11, 12, 10, 32, 64, 9, 13, 
- 	104, 118, 121, 111, 121, 32, 109, 97, 
- 	116, 101, 121, 33, 58, 10, 10, 10, 
- 	32, 35, 37, 64, 65, 68, 72, 83, 
- 	89, 9, 13, 10, 95, 10, 70, 10, 
- 	69, 10, 65, 10, 84, 10, 85, 10, 
- 	82, 10, 69, 10, 95, 10, 69, 10, 
- 	78, 10, 68, 10, 95, 10, 37, 10, 
- 	104, 10, 111, 10, 121, 10, 32, 10, 
- 	109, 10, 97, 10, 116, 10, 101, 10, 
- 	121, 10, 33, 10, 58, 10, 32, 34, 
- 	35, 37, 42, 64, 65, 66, 68, 71, 
- 	72, 76, 83, 89, 124, 9, 13, 108, 
- 	105, 109, 101, 121, 33, 101, 97, 100, 
- 	32, 109, 101, 110, 32, 116, 101, 108, 
- 	108, 32, 110, 111, 32, 116, 97, 108, 
- 	101, 115, 58, 10, 10, 10, 32, 35, 
- 	65, 124, 9, 13, 10, 104, 10, 111, 
- 	10, 121, 10, 32, 10, 109, 10, 97, 
- 	10, 116, 10, 101, 10, 121, 10, 33, 
- 	10, 58, 97, 110, 103, 119, 97, 101, 
- 	97, 118, 101, 32, 116, 111, 58, 10, 
- 	10, 10, 32, 35, 37, 42, 64, 65, 
- 	66, 71, 72, 76, 83, 89, 9, 13, 
- 	10, 95, 10, 70, 10, 69, 10, 65, 
- 	10, 84, 10, 85, 10, 82, 10, 69, 
- 	10, 95, 10, 69, 10, 78, 10, 68, 
- 	10, 95, 10, 37, 10, 32, 10, 104, 
- 	118, 121, 10, 111, 10, 121, 10, 32, 
- 	10, 109, 10, 97, 10, 116, 10, 101, 
- 	10, 121, 10, 33, 10, 58, 10, 97, 
- 	10, 115, 10, 116, 10, 33, 10, 101, 
- 	10, 108, 10, 105, 10, 109, 10, 101, 
- 	10, 121, 10, 97, 10, 110, 10, 103, 
- 	10, 119, 10, 97, 10, 101, 10, 97, 
- 	10, 118, 10, 101, 10, 32, 10, 116, 
- 	10, 111, 10, 101, 10, 116, 10, 32, 
- 	10, 103, 10, 111, 10, 32, 10, 97, 
- 	10, 110, 10, 100, 10, 32, 10, 104, 
- 	10, 97, 10, 117, 10, 108, 10, 104, 
- 	10, 105, 10, 118, 10, 101, 10, 114, 
- 	10, 32, 10, 109, 10, 101, 10, 32, 
- 	10, 116, 10, 105, 10, 109, 10, 98, 
- 	10, 101, 10, 114, 10, 115, 10, 111, 
- 	10, 45, 10, 104, 10, 111, 10, 45, 
- 	10, 104, 101, 116, 32, 103, 111, 32, 
- 	97, 110, 100, 32, 104, 97, 117, 108, 
- 	104, 105, 118, 101, 114, 32, 109, 101, 
- 	32, 116, 105, 109, 98, 101, 114, 115, 
- 	58, 10, 10, 10, 32, 35, 37, 42, 
- 	64, 65, 66, 71, 72, 76, 9, 13, 
- 	10, 95, 10, 70, 10, 69, 10, 65, 
- 	10, 84, 10, 85, 10, 82, 10, 69, 
- 	10, 95, 10, 69, 10, 78, 10, 68, 
- 	10, 95, 10, 37, 10, 32, 10, 104, 
- 	118, 121, 10, 111, 10, 121, 10, 32, 
- 	10, 109, 10, 97, 10, 116, 10, 101, 
- 	10, 121, 10, 33, 10, 58, 10, 97, 
- 	10, 115, 10, 116, 10, 33, 10, 101, 
- 	10, 108, 10, 105, 10, 109, 10, 101, 
- 	10, 121, 10, 97, 10, 110, 10, 103, 
- 	10, 119, 10, 97, 10, 101, 10, 97, 
- 	10, 118, 10, 101, 10, 32, 10, 116, 
- 	10, 111, 10, 101, 10, 116, 10, 32, 
- 	10, 103, 10, 111, 10, 32, 10, 97, 
- 	10, 110, 10, 100, 10, 32, 10, 104, 
- 	10, 97, 10, 117, 10, 108, 111, 45, 
- 	104, 111, 45, 104, 111, 58, 10, 10, 
- 	10, 32, 35, 37, 42, 64, 65, 66, 
- 	71, 72, 76, 83, 9, 13, 10, 95, 
- 	10, 70, 10, 69, 10, 65, 10, 84, 
- 	10, 85, 10, 82, 10, 69, 10, 95, 
- 	10, 69, 10, 78, 10, 68, 10, 95, 
- 	10, 37, 10, 32, 10, 104, 118, 121, 
- 	10, 111, 10, 121, 10, 32, 10, 109, 
- 	10, 97, 10, 116, 10, 101, 10, 121, 
- 	10, 33, 10, 58, 10, 97, 10, 115, 
- 	10, 116, 10, 33, 10, 101, 10, 108, 
- 	10, 105, 10, 109, 10, 101, 10, 121, 
- 	10, 97, 10, 110, 10, 103, 10, 119, 
- 	10, 97, 10, 101, 10, 97, 10, 118, 
- 	10, 101, 10, 32, 10, 116, 10, 111, 
- 	10, 101, 10, 116, 10, 32, 10, 103, 
- 	10, 111, 10, 32, 10, 97, 10, 110, 
- 	10, 100, 10, 32, 10, 104, 10, 97, 
- 	10, 117, 10, 108, 10, 104, 10, 105, 
- 	10, 118, 10, 101, 10, 114, 10, 32, 
- 	10, 109, 10, 101, 10, 32, 10, 116, 
- 	10, 105, 10, 109, 10, 98, 10, 101, 
- 	10, 114, 10, 115, 32, 124, 9, 13, 
- 	10, 32, 92, 124, 9, 13, 10, 92, 
- 	124, 10, 92, 10, 32, 92, 124, 9, 
- 	13, 10, 32, 34, 35, 37, 42, 64, 
- 	65, 66, 68, 71, 72, 76, 83, 89, 
- 	124, 9, 13, 10, 101, 10, 97, 10, 
- 	100, 10, 32, 10, 109, 10, 101, 10, 
- 	110, 10, 32, 10, 116, 10, 101, 10, 
- 	108, 10, 108, 10, 32, 10, 110, 10, 
- 	111, 10, 32, 10, 116, 10, 97, 10, 
- 	108, 10, 101, 10, 115, 10, 101, 10, 
- 	97, 10, 118, 10, 101, 10, 32, 10, 
- 	116, 10, 111, 10, 104, 10, 105, 10, 
- 	118, 10, 101, 10, 114, 10, 32, 10, 
- 	109, 10, 101, 10, 32, 10, 116, 10, 
- 	105, 10, 109, 10, 98, 10, 101, 10, 
- 	114, 10, 111, 10, 45, 10, 104, 10, 
- 	111, 10, 45, 10, 104, 97, 115, 116, 
- 	101, 0
- };
- 
- static const char _lexer_single_lengths[] = {
- 	0, 17, 1, 1, 16, 1, 1, 2, 
- 	2, 3, 3, 3, 3, 2, 2, 2, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	2, 2, 3, 5, 3, 3, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 10, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 16, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 5, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 13, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 4, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 11, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 4, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 12, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 4, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 4, 3, 2, 
- 	4, 16, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 1, 1, 1, 1, 0
- };
- 
- static const char _lexer_range_lengths[] = {
- 	0, 1, 0, 0, 1, 0, 0, 0, 
- 	0, 1, 1, 1, 1, 1, 1, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 1, 1, 1, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 1, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 1, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 1, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 1, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 1, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 1, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 1, 1, 0, 0, 
- 	1, 1, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0
- };
- 
- static const short _lexer_index_offsets[] = {
- 	0, 0, 19, 21, 23, 41, 43, 45, 
- 	48, 51, 56, 61, 66, 71, 75, 79, 
- 	82, 84, 86, 88, 90, 92, 94, 96, 
- 	98, 100, 102, 104, 106, 108, 110, 112, 
- 	114, 117, 120, 125, 132, 137, 141, 143, 
- 	145, 147, 149, 151, 153, 155, 157, 159, 
- 	161, 163, 165, 177, 180, 183, 186, 189, 
- 	192, 195, 198, 201, 204, 207, 210, 213, 
- 	216, 219, 222, 225, 228, 231, 234, 237, 
- 	240, 243, 246, 249, 252, 270, 272, 274, 
- 	276, 278, 280, 282, 284, 286, 288, 290, 
- 	292, 294, 296, 298, 300, 302, 304, 306, 
- 	308, 310, 312, 314, 316, 318, 320, 322, 
- 	324, 326, 328, 330, 337, 340, 343, 346, 
- 	349, 352, 355, 358, 361, 364, 367, 370, 
- 	372, 374, 376, 378, 380, 382, 384, 386, 
- 	388, 390, 392, 394, 396, 398, 400, 415, 
- 	418, 421, 424, 427, 430, 433, 436, 439, 
- 	442, 445, 448, 451, 454, 457, 460, 465, 
- 	468, 471, 474, 477, 480, 483, 486, 489, 
- 	492, 495, 498, 501, 504, 507, 510, 513, 
- 	516, 519, 522, 525, 528, 531, 534, 537, 
- 	540, 543, 546, 549, 552, 555, 558, 561, 
- 	564, 567, 570, 573, 576, 579, 582, 585, 
- 	588, 591, 594, 597, 600, 603, 606, 609, 
- 	612, 615, 618, 621, 624, 627, 630, 633, 
- 	636, 639, 642, 645, 648, 651, 654, 657, 
- 	660, 663, 666, 669, 671, 673, 675, 677, 
- 	679, 681, 683, 685, 687, 689, 691, 693, 
- 	695, 697, 699, 701, 703, 705, 707, 709, 
- 	711, 713, 715, 717, 719, 721, 723, 725, 
- 	727, 729, 731, 733, 735, 748, 751, 754, 
- 	757, 760, 763, 766, 769, 772, 775, 778, 
- 	781, 784, 787, 790, 793, 798, 801, 804, 
- 	807, 810, 813, 816, 819, 822, 825, 828, 
- 	831, 834, 837, 840, 843, 846, 849, 852, 
- 	855, 858, 861, 864, 867, 870, 873, 876, 
- 	879, 882, 885, 888, 891, 894, 897, 900, 
- 	903, 906, 909, 912, 915, 918, 921, 924, 
- 	927, 930, 933, 936, 938, 940, 942, 944, 
- 	946, 948, 950, 952, 954, 956, 970, 973, 
- 	976, 979, 982, 985, 988, 991, 994, 997, 
- 	1000, 1003, 1006, 1009, 1012, 1015, 1020, 1023, 
- 	1026, 1029, 1032, 1035, 1038, 1041, 1044, 1047, 
- 	1050, 1053, 1056, 1059, 1062, 1065, 1068, 1071, 
- 	1074, 1077, 1080, 1083, 1086, 1089, 1092, 1095, 
- 	1098, 1101, 1104, 1107, 1110, 1113, 1116, 1119, 
- 	1122, 1125, 1128, 1131, 1134, 1137, 1140, 1143, 
- 	1146, 1149, 1152, 1155, 1158, 1161, 1164, 1167, 
- 	1170, 1173, 1176, 1179, 1182, 1185, 1188, 1191, 
- 	1194, 1197, 1200, 1203, 1206, 1210, 1216, 1220, 
- 	1223, 1229, 1247, 1250, 1253, 1256, 1259, 1262, 
- 	1265, 1268, 1271, 1274, 1277, 1280, 1283, 1286, 
- 	1289, 1292, 1295, 1298, 1301, 1304, 1307, 1310, 
- 	1313, 1316, 1319, 1322, 1325, 1328, 1331, 1334, 
- 	1337, 1340, 1343, 1346, 1349, 1352, 1355, 1358, 
- 	1361, 1364, 1367, 1370, 1373, 1376, 1379, 1382, 
- 	1385, 1388, 1391, 1394, 1396, 1398, 1400, 1402
- };
- 
- static const short _lexer_trans_targs[] = {
- 	2, 4, 4, 5, 15, 17, 31, 34, 
- 	37, 77, 83, 119, 124, 219, 233, 315, 
- 	404, 4, 0, 3, 0, 4, 0, 4, 
- 	4, 5, 15, 17, 31, 34, 37, 77, 
- 	83, 119, 124, 219, 233, 315, 404, 4, 
- 	0, 6, 0, 7, 0, 9, 8, 8, 
- 	9, 8, 8, 10, 10, 11, 10, 10, 
- 	10, 10, 11, 10, 10, 10, 10, 12, 
- 	10, 10, 10, 10, 13, 10, 10, 4, 
- 	14, 14, 0, 4, 14, 14, 0, 4, 
- 	16, 15, 4, 0, 18, 0, 19, 0, 
- 	20, 0, 21, 0, 22, 0, 23, 0, 
- 	24, 0, 25, 0, 26, 0, 27, 0, 
- 	28, 0, 29, 0, 30, 0, 463, 0, 
- 	32, 0, 4, 16, 33, 4, 16, 33, 
- 	0, 0, 0, 0, 35, 36, 4, 36, 
- 	36, 34, 35, 35, 4, 36, 34, 36, 
- 	0, 38, 459, 462, 0, 39, 0, 40, 
- 	0, 41, 0, 42, 0, 43, 0, 44, 
- 	0, 45, 0, 46, 0, 47, 0, 48, 
- 	0, 50, 49, 50, 49, 50, 50, 4, 
- 	51, 4, 65, 410, 431, 438, 453, 50, 
- 	49, 50, 52, 49, 50, 53, 49, 50, 
- 	54, 49, 50, 55, 49, 50, 56, 49, 
- 	50, 57, 49, 50, 58, 49, 50, 59, 
- 	49, 50, 60, 49, 50, 61, 49, 50, 
- 	62, 49, 50, 63, 49, 50, 64, 49, 
- 	50, 4, 49, 50, 66, 49, 50, 67, 
- 	49, 50, 68, 49, 50, 69, 49, 50, 
- 	70, 49, 50, 71, 49, 50, 72, 49, 
- 	50, 73, 49, 50, 74, 49, 50, 75, 
- 	49, 50, 76, 49, 4, 4, 5, 15, 
- 	17, 31, 34, 37, 77, 83, 119, 124, 
- 	219, 233, 315, 404, 4, 0, 78, 0, 
- 	79, 0, 80, 0, 81, 0, 82, 0, 
- 	31, 0, 84, 0, 85, 0, 86, 0, 
- 	87, 0, 88, 0, 89, 0, 90, 0, 
- 	91, 0, 92, 0, 93, 0, 94, 0, 
- 	95, 0, 96, 0, 97, 0, 98, 0, 
- 	99, 0, 100, 0, 101, 0, 102, 0, 
- 	103, 0, 104, 0, 105, 0, 107, 106, 
- 	107, 106, 107, 107, 4, 108, 4, 107, 
- 	106, 107, 109, 106, 107, 110, 106, 107, 
- 	111, 106, 107, 112, 106, 107, 113, 106, 
- 	107, 114, 106, 107, 115, 106, 107, 116, 
- 	106, 107, 117, 106, 107, 118, 106, 107, 
- 	76, 106, 120, 0, 121, 0, 122, 0, 
- 	123, 0, 81, 0, 125, 0, 126, 0, 
- 	127, 0, 128, 0, 129, 0, 130, 0, 
- 	131, 0, 132, 0, 134, 133, 134, 133, 
- 	134, 134, 4, 135, 149, 4, 150, 166, 
- 	171, 176, 183, 197, 213, 134, 133, 134, 
- 	136, 133, 134, 137, 133, 134, 138, 133, 
- 	134, 139, 133, 134, 140, 133, 134, 141, 
- 	133, 134, 142, 133, 134, 143, 133, 134, 
- 	144, 133, 134, 145, 133, 134, 146, 133, 
- 	134, 147, 133, 134, 148, 133, 134, 4, 
- 	133, 134, 76, 133, 134, 151, 161, 165, 
- 	133, 134, 152, 133, 134, 153, 133, 134, 
- 	154, 133, 134, 155, 133, 134, 156, 133, 
- 	134, 157, 133, 134, 158, 133, 134, 159, 
- 	133, 134, 160, 133, 134, 76, 133, 134, 
- 	162, 133, 134, 163, 133, 134, 164, 133, 
- 	134, 149, 133, 134, 149, 133, 134, 167, 
- 	133, 134, 168, 133, 134, 169, 133, 134, 
- 	170, 133, 134, 164, 133, 134, 172, 133, 
- 	134, 173, 133, 134, 174, 133, 134, 175, 
- 	133, 134, 170, 133, 134, 177, 133, 134, 
- 	178, 133, 134, 179, 133, 134, 180, 133, 
- 	134, 181, 133, 134, 182, 133, 134, 160, 
- 	133, 134, 184, 133, 134, 185, 133, 134, 
- 	186, 133, 134, 187, 133, 134, 188, 133, 
- 	134, 189, 133, 134, 190, 133, 134, 191, 
- 	133, 134, 192, 133, 134, 193, 133, 134, 
- 	194, 133, 134, 195, 133, 134, 196, 133, 
- 	134, 149, 133, 134, 198, 133, 134, 199, 
- 	133, 134, 200, 133, 134, 201, 133, 134, 
- 	202, 133, 134, 203, 133, 134, 204, 133, 
- 	134, 205, 133, 134, 206, 133, 134, 207, 
- 	133, 134, 208, 133, 134, 209, 133, 134, 
- 	210, 133, 134, 211, 133, 134, 212, 133, 
- 	134, 160, 133, 134, 214, 133, 134, 215, 
- 	133, 134, 216, 133, 134, 217, 133, 134, 
- 	218, 133, 134, 182, 133, 220, 0, 221, 
- 	0, 222, 0, 223, 0, 224, 0, 225, 
- 	0, 226, 0, 227, 0, 228, 0, 229, 
- 	0, 230, 0, 231, 0, 232, 0, 31, 
- 	0, 234, 0, 235, 0, 236, 0, 237, 
- 	0, 238, 0, 239, 0, 240, 0, 241, 
- 	0, 242, 0, 243, 0, 244, 0, 245, 
- 	0, 246, 0, 247, 0, 248, 0, 249, 
- 	0, 250, 0, 252, 251, 252, 251, 252, 
- 	252, 4, 253, 267, 4, 268, 284, 289, 
- 	294, 301, 252, 251, 252, 254, 251, 252, 
- 	255, 251, 252, 256, 251, 252, 257, 251, 
- 	252, 258, 251, 252, 259, 251, 252, 260, 
- 	251, 252, 261, 251, 252, 262, 251, 252, 
- 	263, 251, 252, 264, 251, 252, 265, 251, 
- 	252, 266, 251, 252, 4, 251, 252, 76, 
- 	251, 252, 269, 279, 283, 251, 252, 270, 
- 	251, 252, 271, 251, 252, 272, 251, 252, 
- 	273, 251, 252, 274, 251, 252, 275, 251, 
- 	252, 276, 251, 252, 277, 251, 252, 278, 
- 	251, 252, 76, 251, 252, 280, 251, 252, 
- 	281, 251, 252, 282, 251, 252, 267, 251, 
- 	252, 267, 251, 252, 285, 251, 252, 286, 
- 	251, 252, 287, 251, 252, 288, 251, 252, 
- 	282, 251, 252, 290, 251, 252, 291, 251, 
- 	252, 292, 251, 252, 293, 251, 252, 288, 
- 	251, 252, 295, 251, 252, 296, 251, 252, 
- 	297, 251, 252, 298, 251, 252, 299, 251, 
- 	252, 300, 251, 252, 278, 251, 252, 302, 
- 	251, 252, 303, 251, 252, 304, 251, 252, 
- 	305, 251, 252, 306, 251, 252, 307, 251, 
- 	252, 308, 251, 252, 309, 251, 252, 310, 
- 	251, 252, 311, 251, 252, 312, 251, 252, 
- 	313, 251, 252, 314, 251, 252, 267, 251, 
- 	316, 0, 317, 0, 318, 0, 319, 0, 
- 	320, 0, 321, 0, 322, 0, 323, 0, 
- 	325, 324, 325, 324, 325, 325, 4, 326, 
- 	340, 4, 341, 357, 362, 367, 374, 388, 
- 	325, 324, 325, 327, 324, 325, 328, 324, 
- 	325, 329, 324, 325, 330, 324, 325, 331, 
- 	324, 325, 332, 324, 325, 333, 324, 325, 
- 	334, 324, 325, 335, 324, 325, 336, 324, 
- 	325, 337, 324, 325, 338, 324, 325, 339, 
- 	324, 325, 4, 324, 325, 76, 324, 325, 
- 	342, 352, 356, 324, 325, 343, 324, 325, 
- 	344, 324, 325, 345, 324, 325, 346, 324, 
- 	325, 347, 324, 325, 348, 324, 325, 349, 
- 	324, 325, 350, 324, 325, 351, 324, 325, 
- 	76, 324, 325, 353, 324, 325, 354, 324, 
- 	325, 355, 324, 325, 340, 324, 325, 340, 
- 	324, 325, 358, 324, 325, 359, 324, 325, 
- 	360, 324, 325, 361, 324, 325, 355, 324, 
- 	325, 363, 324, 325, 364, 324, 325, 365, 
- 	324, 325, 366, 324, 325, 361, 324, 325, 
- 	368, 324, 325, 369, 324, 325, 370, 324, 
- 	325, 371, 324, 325, 372, 324, 325, 373, 
- 	324, 325, 351, 324, 325, 375, 324, 325, 
- 	376, 324, 325, 377, 324, 325, 378, 324, 
- 	325, 379, 324, 325, 380, 324, 325, 381, 
- 	324, 325, 382, 324, 325, 383, 324, 325, 
- 	384, 324, 325, 385, 324, 325, 386, 324, 
- 	325, 387, 324, 325, 340, 324, 325, 389, 
- 	324, 325, 390, 324, 325, 391, 324, 325, 
- 	392, 324, 325, 393, 324, 325, 394, 324, 
- 	325, 395, 324, 325, 396, 324, 325, 397, 
- 	324, 325, 398, 324, 325, 399, 324, 325, 
- 	400, 324, 325, 401, 324, 325, 402, 324, 
- 	325, 403, 324, 325, 351, 324, 404, 405, 
- 	404, 0, 409, 408, 407, 405, 408, 406, 
- 	0, 407, 405, 406, 0, 407, 406, 409, 
- 	408, 407, 405, 408, 406, 409, 409, 5, 
- 	15, 17, 31, 34, 37, 77, 83, 119, 
- 	124, 219, 233, 315, 404, 409, 0, 50, 
- 	411, 49, 50, 412, 49, 50, 413, 49, 
- 	50, 414, 49, 50, 415, 49, 50, 416, 
- 	49, 50, 417, 49, 50, 418, 49, 50, 
- 	419, 49, 50, 420, 49, 50, 421, 49, 
- 	50, 422, 49, 50, 423, 49, 50, 424, 
- 	49, 50, 425, 49, 50, 426, 49, 50, 
- 	427, 49, 50, 428, 49, 50, 429, 49, 
- 	50, 430, 49, 50, 75, 49, 50, 432, 
- 	49, 50, 433, 49, 50, 434, 49, 50, 
- 	435, 49, 50, 436, 49, 50, 437, 49, 
- 	50, 75, 49, 50, 439, 49, 50, 440, 
- 	49, 50, 441, 49, 50, 442, 49, 50, 
- 	443, 49, 50, 444, 49, 50, 445, 49, 
- 	50, 446, 49, 50, 447, 49, 50, 448, 
- 	49, 50, 449, 49, 50, 450, 49, 50, 
- 	451, 49, 50, 452, 49, 50, 430, 49, 
- 	50, 454, 49, 50, 455, 49, 50, 456, 
- 	49, 50, 457, 49, 50, 458, 49, 50, 
- 	437, 49, 460, 0, 461, 0, 82, 0, 
- 	31, 0, 0, 0
- };
- 
- static const unsigned char _lexer_trans_actions[] = {
- 	0, 54, 0, 5, 1, 0, 29, 1, 
- 	29, 29, 29, 29, 29, 29, 29, 29, 
- 	35, 0, 43, 0, 43, 0, 43, 54, 
- 	0, 5, 1, 0, 29, 1, 29, 29, 
- 	29, 29, 29, 29, 29, 29, 35, 0, 
- 	43, 0, 43, 0, 43, 139, 48, 9, 
- 	106, 11, 0, 134, 45, 45, 45, 3, 
- 	122, 33, 33, 33, 0, 122, 33, 33, 
- 	33, 0, 122, 33, 0, 33, 0, 102, 
- 	7, 7, 43, 54, 0, 0, 43, 114, 
- 	25, 0, 54, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 149, 126, 57, 110, 23, 0, 
- 	43, 43, 43, 43, 0, 27, 118, 27, 
- 	27, 51, 27, 0, 54, 0, 1, 0, 
- 	43, 0, 0, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 144, 57, 54, 0, 54, 0, 69, 
- 	33, 69, 84, 84, 84, 84, 84, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 13, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 13, 0, 130, 31, 60, 57, 
- 	31, 63, 57, 63, 63, 63, 63, 63, 
- 	63, 63, 63, 66, 31, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 144, 57, 
- 	54, 0, 54, 0, 81, 84, 81, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	21, 0, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 144, 57, 54, 0, 
- 	54, 0, 75, 33, 84, 75, 84, 84, 
- 	84, 84, 84, 84, 84, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 17, 
- 	0, 54, 17, 0, 54, 0, 0, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 17, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 144, 57, 54, 0, 54, 
- 	0, 78, 33, 84, 78, 84, 84, 84, 
- 	84, 84, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 19, 0, 54, 19, 
- 	0, 54, 0, 0, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 19, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	144, 57, 54, 0, 54, 0, 72, 33, 
- 	84, 72, 84, 84, 84, 84, 84, 84, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 15, 0, 54, 15, 0, 54, 
- 	0, 0, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	15, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 0, 0, 
- 	0, 43, 54, 37, 37, 87, 37, 37, 
- 	43, 0, 39, 0, 43, 0, 0, 54, 
- 	0, 0, 39, 0, 0, 54, 0, 93, 
- 	90, 41, 96, 90, 96, 96, 96, 96, 
- 	96, 96, 96, 96, 99, 0, 43, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 0
- };
- 
- static const unsigned char _lexer_eof_actions[] = {
- 	0, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43
- };
- 
- static const int lexer_start = 1;
- static const int lexer_first_final = 463;
- static const int lexer_error = 0;
- 
- static const int lexer_en_main = 1;
- 
- 
- #line 258 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
- 
- static VALUE 
- unindent(VALUE con, int start_col)
- {
-   VALUE re;
-   // Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters
-   char pat[32]; 
-   snprintf(pat, 32, "^[\t ]{0,%d}", start_col); 
-   re = rb_reg_regcomp(rb_str_new2(pat));
-   rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2(""));
- 
-   return Qnil;
- 
- }
- 
- static void 
- store_kw_con(VALUE listener, const char * event_name, 
-              const char * keyword_at, size_t keyword_length, 
-              const char * at,         size_t length, 
-              int current_line)
- {
-   VALUE con = Qnil, kw = Qnil;
-   kw = ENCODED_STR_NEW(keyword_at, keyword_length);
-   con = ENCODED_STR_NEW(at, length);
-   rb_funcall(con, rb_intern("strip!"), 0);
-   rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); 
- }
- 
- static void
- store_multiline_kw_con(VALUE listener, const char * event_name,
-                       const char * keyword_at, size_t keyword_length,
-                       const char * at,         size_t length,
-                       int current_line, int start_col)
- {
-   VALUE split;
-   VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil;
- 
-   kw = ENCODED_STR_NEW(keyword_at, keyword_length);
-   con = ENCODED_STR_NEW(at, length);
- 
-   unindent(con, start_col);
-   
-   split = rb_str_split(con, "\n");
- 
-   name = rb_funcall(split, rb_intern("shift"), 0);
-   desc = rb_ary_join(split, rb_str_new2( "\n" ));
- 
-   if( name == Qnil ) 
-   {
-     name = rb_str_new2("");
-   }
-   if( rb_funcall(desc, rb_intern("size"), 0) == 0) 
-   {
-     desc = rb_str_new2("");
-   }
-   rb_funcall(name, rb_intern("strip!"), 0);
-   rb_funcall(desc, rb_intern("rstrip!"), 0);
-   rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); 
- }
- 
- static void 
- store_attr(VALUE listener, const char * attr_type,
-            const char * at, size_t length, 
-            int line)
- {
-   VALUE val = ENCODED_STR_NEW(at, length);
-   rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line));
- }
- static void 
- store_docstring_content(VALUE listener, 
-           int start_col, 
-           const char *type_at, size_t type_length,
-           const char *at, size_t length, 
-           int current_line)
- {
-   VALUE re2;
-   VALUE unescape_escaped_quotes;
-   VALUE con = ENCODED_STR_NEW(at, length);
-   VALUE con_type = ENCODED_STR_NEW(type_at, type_length);
- 
-   unindent(con, start_col);
- 
-   re2 = rb_reg_regcomp(rb_str_new2("\r\\Z"));
-   unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\""));
-   rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2(""));
-   rb_funcall(con_type, rb_intern("strip!"), 0);
-   rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\""));
-   rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line));
- }
- static void 
- raise_lexer_error(const char * at, int line)
- { 
-   rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at);
- }
- 
- static void lexer_init(lexer_state *lexer) {
-   lexer->content_start = 0;
-   lexer->content_end = 0;
-   lexer->content_len = 0;
-   lexer->docstring_content_type_start = 0;
-   lexer->docstring_content_type_end = 0;
-   lexer->mark = 0;
-   lexer->keyword_start = 0;
-   lexer->keyword_end = 0;
-   lexer->next_keyword_start = 0;
-   lexer->line_number = 1;
-   lexer->last_newline = 0;
-   lexer->final_newline = 0;
-   lexer->start_col = 0;
- }
- 
- static VALUE CLexer_alloc(VALUE klass)
- {
-   VALUE obj;
-   lexer_state *lxr = ALLOC(lexer_state);
-   lexer_init(lxr);
- 
-   obj = Data_Wrap_Struct(klass, NULL, -1, lxr);
- 
-   return obj;
- }
- 
- static VALUE CLexer_init(VALUE self, VALUE listener)
- {
-   lexer_state *lxr; 
-   rb_iv_set(self, "@listener", listener);
-   
-   lxr = NULL;
-   DATA_GET(self, lexer_state, lxr);
-   lexer_init(lxr);
-   
-   return self;
- }
- 
- static VALUE CLexer_scan(VALUE self, VALUE input)
- {
-   VALUE input_copy;
-   char *data;
-   size_t len;
-   VALUE listener = rb_iv_get(self, "@listener");
- 
-   lexer_state *lexer;
-   lexer = NULL;
-   DATA_GET(self, lexer_state, lexer);
- 
-   input_copy = rb_str_dup(input);
- 
-   rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%"));
-   data = RSTRING_PTR(input_copy);
-   len = RSTRING_LEN(input_copy);
-   
-   if (len == 0) { 
-     rb_raise(rb_eGherkinLexingError, "No content to lex.");
-   } else {
- 
-     const char *p, *pe, *eof;
-     int cs = 0;
-     
-     VALUE current_row = Qnil;
- 
-     p = data;
-     pe = data + len;
-     eof = pe;
-     
-     assert(*pe == '\0' && "pointer does not end on NULL");
-     
-     
- #line 1075 "ext/gherkin_lexer_en_pirate/gherkin_lexer_en_pirate.c"
- 	{
- 	cs = lexer_start;
- 	}
- 
- #line 425 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
-     
- #line 1082 "ext/gherkin_lexer_en_pirate/gherkin_lexer_en_pirate.c"
- 	{
- 	int _klen;
- 	unsigned int _trans;
- 	const char *_acts;
- 	unsigned int _nacts;
- 	const char *_keys;
- 
- 	if ( p == pe )
- 		goto _test_eof;
- 	if ( cs == 0 )
- 		goto _out;
- _resume:
- 	_keys = _lexer_trans_keys + _lexer_key_offsets[cs];
- 	_trans = _lexer_index_offsets[cs];
- 
- 	_klen = _lexer_single_lengths[cs];
- 	if ( _klen > 0 ) {
- 		const char *_lower = _keys;
- 		const char *_mid;
- 		const char *_upper = _keys + _klen - 1;
- 		while (1) {
- 			if ( _upper < _lower )
- 				break;
- 
- 			_mid = _lower + ((_upper-_lower) >> 1);
- 			if ( (*p) < *_mid )
- 				_upper = _mid - 1;
- 			else if ( (*p) > *_mid )
- 				_lower = _mid + 1;
- 			else {
- 				_trans += (_mid - _keys);
- 				goto _match;
- 			}
- 		}
- 		_keys += _klen;
- 		_trans += _klen;
- 	}
- 
- 	_klen = _lexer_range_lengths[cs];
- 	if ( _klen > 0 ) {
- 		const char *_lower = _keys;
- 		const char *_mid;
- 		const char *_upper = _keys + (_klen<<1) - 2;
- 		while (1) {
- 			if ( _upper < _lower )
- 				break;
- 
- 			_mid = _lower + (((_upper-_lower) >> 1) & ~1);
- 			if ( (*p) < _mid[0] )
- 				_upper = _mid - 2;
- 			else if ( (*p) > _mid[1] )
- 				_lower = _mid + 2;
- 			else {
- 				_trans += ((_mid - _keys)>>1);
- 				goto _match;
- 			}
- 		}
- 		_trans += _klen;
- 	}
- 
- _match:
- 	cs = _lexer_trans_targs[_trans];
- 
- 	if ( _lexer_trans_actions[_trans] == 0 )
- 		goto _again;
- 
- 	_acts = _lexer_actions + _lexer_trans_actions[_trans];
- 	_nacts = (unsigned int) *_acts++;
- 	while ( _nacts-- > 0 )
- 	{
- 		switch ( *_acts++ )
- 		{
- 	case 0:
- #line 83 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
- 	{
- 		MARK(content_start, p);
-     lexer->current_line = lexer->line_number;
-     lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2;
-   }
- 	break;
- 	case 1:
- #line 89 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
- 	{
-     MARK(content_start, p);
-   }
- 	break;
- 	case 2:
- #line 93 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
- 	{
-     lexer->current_line = lexer->line_number;
-     lexer->start_col = p - data - lexer->last_newline;
-   }
- 	break;
- 	case 3:
- #line 98 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
- 	{
-     int len = LEN(content_start, PTR_TO(final_newline));
-     int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end));
- 
-     if (len < 0) len = 0;
-     if (type_len < 0) len = 0;
- 
-     store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line);
-   }
- 	break;
- 	case 4:
- #line 108 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
- 	{ 
-     MARK(docstring_content_type_start, p);
-   }
- 	break;
- 	case 5:
- #line 112 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
- 	{ 
-     MARK(docstring_content_type_end, p);
-   }
- 	break;
- 	case 6:
- #line 116 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
- 	{
-     STORE_KW_END_CON(feature);
-   }
- 	break;
- 	case 7:
- #line 120 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
- 	{
-     STORE_KW_END_CON(background);
-   }
- 	break;
- 	case 8:
- #line 124 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
- 	{
-     STORE_KW_END_CON(scenario);
-   }
- 	break;
- 	case 9:
- #line 128 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
- 	{
-     STORE_KW_END_CON(scenario_outline);
-   }
- 	break;
- 	case 10:
- #line 132 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
- 	{
-     STORE_KW_END_CON(examples);
-   }
- 	break;
- 	case 11:
- #line 136 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
- 	{
-     store_kw_con(listener, "step",
-       PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-       PTR_TO(content_start), LEN(content_start, p), 
-       lexer->current_line);
-   }
- 	break;
- 	case 12:
- #line 143 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
- 	{
-     STORE_ATTR(comment);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 13:
- #line 148 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
- 	{
-     STORE_ATTR(tag);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 14:
- #line 153 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
- 	{
-     lexer->line_number += 1;
-     MARK(final_newline, p);
-   }
- 	break;
- 	case 15:
- #line 158 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
- 	{
-     MARK(last_newline, p + 1);
-   }
- 	break;
- 	case 16:
- #line 162 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
- 	{
-     if (lexer->mark == 0) {
-       MARK(mark, p);
-     }
-   }
- 	break;
- 	case 17:
- #line 168 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
- 	{
-     MARK(keyword_end, p);
-     MARK(keyword_start, PTR_TO(mark));
-     MARK(content_start, p + 1);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 18:
- #line 175 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
- 	{
-     MARK(content_end, p);
-   }
- 	break;
- 	case 19:
- #line 179 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
- 	{
-     p = p - 1;
-     lexer->current_line = lexer->line_number;
-     current_row = rb_ary_new();
-   }
- 	break;
- 	case 20:
- #line 185 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
- 	{
- 		MARK(content_start, p);
-   }
- 	break;
- 	case 21:
- #line 189 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
- 	{
-     VALUE re_pipe, re_newline, re_backslash;
-     VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
-     rb_funcall(con, rb_intern("strip!"), 0);
-     re_pipe      = rb_reg_regcomp(rb_str_new2("\\\\\\|"));
-     re_newline   = rb_reg_regcomp(rb_str_new2("\\\\n"));
-     re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_pipe,      rb_str_new2("|"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_newline,   rb_str_new2("\n"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\"));
- 
-     rb_ary_push(current_row, con);
-   }
- 	break;
- 	case 22:
- #line 203 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
- 	{
-     rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
-   }
- 	break;
- 	case 23:
- #line 207 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
- 	{
-     int line;
-     if (cs < lexer_first_final) {
-       size_t count = 0;
-       VALUE newstr_val;
-       char *newstr;
-       int newstr_count = 0;        
-       size_t len;
-       const char *buff;
-       if (lexer->last_newline != 0) {
-         len = LEN(last_newline, eof);
-         buff = PTR_TO(last_newline);
-       } else {
-         len = strlen(data);
-         buff = data;
-       }
- 
-       // Allocate as a ruby string so that it gets cleaned up by GC
-       newstr_val = rb_str_new(buff, len);
-       newstr = RSTRING_PTR(newstr_val);
- 
- 
-       for (count = 0; count < len; count++) {
-         if(buff[count] == 10) {
-           newstr[newstr_count] = '\0'; // terminate new string at first newline found
-           break;
-         } else {
-           if (buff[count] == '%') {
-             newstr[newstr_count++] = buff[count];
-             newstr[newstr_count] = buff[count];
-           } else {
-             newstr[newstr_count] = buff[count];
-           }
-         }
-         newstr_count++;
-       }
- 
-       line = lexer->line_number;
-       lexer_init(lexer); // Re-initialize so we can scan again with the same lexer
-       raise_lexer_error(newstr, line);
-     } else {
-       rb_funcall(listener, rb_intern("eof"), 0);
-     }
-   }
- 	break;
- #line 1372 "ext/gherkin_lexer_en_pirate/gherkin_lexer_en_pirate.c"
- 		}
- 	}
- 
- _again:
- 	if ( cs == 0 )
- 		goto _out;
- 	if ( ++p != pe )
- 		goto _resume;
- 	_test_eof: {}
- 	if ( p == eof )
- 	{
- 	const char *__acts = _lexer_actions + _lexer_eof_actions[cs];
- 	unsigned int __nacts = (unsigned int) *__acts++;
- 	while ( __nacts-- > 0 ) {
- 		switch ( *__acts++ ) {
- 	case 23:
- #line 207 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
- 	{
-     int line;
-     if (cs < lexer_first_final) {
-       size_t count = 0;
-       VALUE newstr_val;
-       char *newstr;
-       int newstr_count = 0;        
-       size_t len;
-       const char *buff;
-       if (lexer->last_newline != 0) {
-         len = LEN(last_newline, eof);
-         buff = PTR_TO(last_newline);
-       } else {
-         len = strlen(data);
-         buff = data;
-       }
- 
-       // Allocate as a ruby string so that it gets cleaned up by GC
-       newstr_val = rb_str_new(buff, len);
-       newstr = RSTRING_PTR(newstr_val);
- 
- 
-       for (count = 0; count < len; count++) {
-         if(buff[count] == 10) {
-           newstr[newstr_count] = '\0'; // terminate new string at first newline found
-           break;
-         } else {
-           if (buff[count] == '%') {
-             newstr[newstr_count++] = buff[count];
-             newstr[newstr_count] = buff[count];
-           } else {
-             newstr[newstr_count] = buff[count];
-           }
-         }
-         newstr_count++;
-       }
- 
-       line = lexer->line_number;
-       lexer_init(lexer); // Re-initialize so we can scan again with the same lexer
-       raise_lexer_error(newstr, line);
-     } else {
-       rb_funcall(listener, rb_intern("eof"), 0);
-     }
-   }
- 	break;
- #line 1435 "ext/gherkin_lexer_en_pirate/gherkin_lexer_en_pirate.c"
- 		}
- 	}
- 	}
- 
- 	_out: {}
- 	}
- 
- #line 426 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_pirate.c.rl"
- 
-     assert(p <= pe && "data overflow after parsing execute");
-     assert(lexer->content_start <= len && "content starts after data end");
-     assert(lexer->mark < len && "mark is after data end");
-     
-     // Reset lexer by re-initializing the whole thing
-     lexer_init(lexer);
- 
-     if (cs == lexer_error) {
-       rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails.");
-     } else {
-       return Qtrue;
-     }
-   }
- }
- 
- void Init_gherkin_lexer_en_pirate()
- {
-   mGherkin = rb_define_module("Gherkin");
-   mGherkinLexer = rb_define_module_under(mGherkin, "Lexer");
-   rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError"));
- 
-   mCLexer = rb_define_module_under(mGherkin, "CLexer");
-   cI18nLexer = rb_define_class_under(mCLexer, "En_pirate", rb_cObject);
-   rb_define_alloc_func(cI18nLexer, CLexer_alloc);
-   rb_define_method(cI18nLexer, "initialize", CLexer_init, 1);
-   rb_define_method(cI18nLexer, "scan", CLexer_scan, 1);
- }
- 
 -#line 1 "ragel/i18n/en_pirate.c.rl"
 -#include <assert.h>
 -#include <ruby.h>
 -
 -#if defined(_WIN32)
 -#include <stddef.h>
 -#endif
 -
 -#ifdef HAVE_RUBY_RE_H
 -#include <ruby/re.h>
 -#else
 -#include <re.h>
 -#endif
 -
 -#ifdef HAVE_RUBY_ENCODING_H
 -#include <ruby/encoding.h>
 -#define ENCODED_STR_NEW(ptr, len) \
 -    rb_enc_str_new(ptr, len, rb_utf8_encoding())
 -#else
 -#define ENCODED_STR_NEW(ptr, len) \
 -    rb_str_new(ptr, len)
 -#endif
 -
 -#ifndef RSTRING_PTR
 -#define RSTRING_PTR(s) (RSTRING(s)->ptr)
 -#endif
 -
 -#ifndef RSTRING_LEN
 -#define RSTRING_LEN(s) (RSTRING(s)->len)
 -#endif
 -
 -#define DATA_GET(FROM, TYPE, NAME) \
 -  Data_Get_Struct(FROM, TYPE, NAME); \
 -  if (NAME == NULL) { \
 -    rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \
 -  }
 - 
 -typedef struct lexer_state {
 -  int content_len;
 -  int line_number;
 -  int current_line;
 -  int start_col;
 -  size_t mark;
 -  size_t keyword_start;
 -  size_t keyword_end;
 -  size_t next_keyword_start;
 -  size_t content_start;
 -  size_t content_end;
 -  size_t docstring_content_type_start;
 -  size_t docstring_content_type_end;
 -  size_t query_start;
 -  size_t last_newline;
 -  size_t final_newline;
 -} lexer_state;
 -
 -static VALUE mGherkin;
 -static VALUE mGherkinLexer;
 -static VALUE mCLexer;
 -static VALUE cI18nLexer;
 -static VALUE rb_eGherkinLexingError;
 -
 -#define LEN(AT, P) (P - data - lexer->AT)
 -#define MARK(M, P) (lexer->M = (P) - data)
 -#define PTR_TO(P) (data + lexer->P)
 -
 -#define STORE_KW_END_CON(EVENT) \
 -  store_multiline_kw_con(listener, # EVENT, \
 -    PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \
 -    PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \
 -    lexer->current_line, lexer->start_col); \
 -    if (lexer->content_end != 0) { \
 -      p = PTR_TO(content_end - 1); \
 -    } \
 -    lexer->content_end = 0
 -
 -#define STORE_ATTR(ATTR) \
 -    store_attr(listener, # ATTR, \
 -      PTR_TO(content_start), LEN(content_start, p), \
 -      lexer->line_number)
 -
 -
 -#line 254 "ragel/i18n/en_pirate.c.rl"
 -
 -
 -/** Data **/
 -
 -#line 89 "ext/gherkin_lexer_en_pirate/gherkin_lexer_en_pirate.c"
 -static const char _lexer_actions[] = {
 -	0, 1, 0, 1, 1, 1, 2, 1, 
 -	3, 1, 4, 1, 5, 1, 6, 1, 
 -	7, 1, 8, 1, 9, 1, 10, 1, 
 -	11, 1, 12, 1, 13, 1, 16, 1, 
 -	17, 1, 18, 1, 19, 1, 20, 1, 
 -	21, 1, 22, 1, 23, 2, 1, 18, 
 -	2, 4, 5, 2, 13, 0, 2, 14, 
 -	15, 2, 17, 0, 2, 17, 2, 2, 
 -	17, 16, 2, 17, 19, 2, 18, 6, 
 -	2, 18, 7, 2, 18, 8, 2, 18, 
 -	9, 2, 18, 10, 2, 18, 16, 2, 
 -	20, 21, 2, 22, 0, 2, 22, 2, 
 -	2, 22, 16, 2, 22, 19, 3, 3, 
 -	14, 15, 3, 5, 14, 15, 3, 11, 
 -	14, 15, 3, 12, 14, 15, 3, 13, 
 -	14, 15, 3, 14, 15, 18, 3, 17, 
 -	0, 11, 3, 17, 14, 15, 4, 1, 
 -	14, 15, 18, 4, 4, 5, 14, 15, 
 -	4, 17, 0, 14, 15, 5, 17, 0, 
 -	11, 14, 15
 -};
 -
 -static const short _lexer_key_offsets[] = {
 -	0, 0, 19, 20, 21, 39, 40, 41, 
 -	43, 45, 50, 55, 60, 65, 69, 73, 
 -	75, 76, 77, 78, 79, 80, 81, 82, 
 -	83, 84, 85, 86, 87, 88, 89, 90, 
 -	91, 93, 95, 100, 107, 112, 115, 116, 
 -	117, 118, 119, 120, 121, 122, 123, 124, 
 -	125, 126, 127, 139, 141, 143, 145, 147, 
 -	149, 151, 153, 155, 157, 159, 161, 163, 
 -	165, 167, 169, 171, 173, 175, 177, 179, 
 -	181, 183, 185, 187, 189, 207, 208, 209, 
 -	210, 211, 212, 213, 214, 215, 216, 217, 
 -	218, 219, 220, 221, 222, 223, 224, 225, 
 -	226, 227, 228, 229, 230, 231, 232, 233, 
 -	234, 235, 236, 237, 244, 246, 248, 250, 
 -	252, 254, 256, 258, 260, 262, 264, 266, 
 -	267, 268, 269, 270, 271, 272, 273, 274, 
 -	275, 276, 277, 278, 279, 280, 281, 296, 
 -	298, 300, 302, 304, 306, 308, 310, 312, 
 -	314, 316, 318, 320, 322, 324, 326, 330, 
 -	332, 334, 336, 338, 340, 342, 344, 346, 
 -	348, 350, 352, 354, 356, 358, 360, 362, 
 -	364, 366, 368, 370, 372, 374, 376, 378, 
 -	380, 382, 384, 386, 388, 390, 392, 394, 
 -	396, 398, 400, 402, 404, 406, 408, 410, 
 -	412, 414, 416, 418, 420, 422, 424, 426, 
 -	428, 430, 432, 434, 436, 438, 440, 442, 
 -	444, 446, 448, 450, 452, 454, 456, 458, 
 -	460, 462, 464, 466, 467, 468, 469, 470, 
 -	471, 472, 473, 474, 475, 476, 477, 478, 
 -	479, 480, 481, 482, 483, 484, 485, 486, 
 -	487, 488, 489, 490, 491, 492, 493, 494, 
 -	495, 496, 497, 498, 499, 512, 514, 516, 
 -	518, 520, 522, 524, 526, 528, 530, 532, 
 -	534, 536, 538, 540, 542, 546, 548, 550, 
 -	552, 554, 556, 558, 560, 562, 564, 566, 
 -	568, 570, 572, 574, 576, 578, 580, 582, 
 -	584, 586, 588, 590, 592, 594, 596, 598, 
 -	600, 602, 604, 606, 608, 610, 612, 614, 
 -	616, 618, 620, 622, 624, 626, 628, 630, 
 -	632, 634, 636, 638, 639, 640, 641, 642, 
 -	643, 644, 645, 646, 647, 648, 662, 664, 
 -	666, 668, 670, 672, 674, 676, 678, 680, 
 -	682, 684, 686, 688, 690, 692, 696, 698, 
 -	700, 702, 704, 706, 708, 710, 712, 714, 
 -	716, 718, 720, 722, 724, 726, 728, 730, 
 -	732, 734, 736, 738, 740, 742, 744, 746, 
 -	748, 750, 752, 754, 756, 758, 760, 762, 
 -	764, 766, 768, 770, 772, 774, 776, 778, 
 -	780, 782, 784, 786, 788, 790, 792, 794, 
 -	796, 798, 800, 802, 804, 806, 808, 810, 
 -	812, 814, 816, 818, 820, 824, 830, 833, 
 -	835, 841, 859, 861, 863, 865, 867, 869, 
 -	871, 873, 875, 877, 879, 881, 883, 885, 
 -	887, 889, 891, 893, 895, 897, 899, 901, 
 -	903, 905, 907, 909, 911, 913, 915, 917, 
 -	919, 921, 923, 925, 927, 929, 931, 933, 
 -	935, 937, 939, 941, 943, 945, 947, 949, 
 -	951, 953, 955, 957, 958, 959, 960, 961
 -};
 -
 -static const char _lexer_trans_keys[] = {
 -	-17, 10, 32, 34, 35, 37, 42, 64, 
 -	65, 66, 68, 71, 72, 76, 83, 89, 
 -	124, 9, 13, -69, -65, 10, 32, 34, 
 -	35, 37, 42, 64, 65, 66, 68, 71, 
 -	72, 76, 83, 89, 124, 9, 13, 34, 
 -	34, 10, 13, 10, 13, 10, 32, 34, 
 -	9, 13, 10, 32, 34, 9, 13, 10, 
 -	32, 34, 9, 13, 10, 32, 34, 9, 
 -	13, 10, 32, 9, 13, 10, 32, 9, 
 -	13, 10, 13, 10, 95, 70, 69, 65, 
 -	84, 85, 82, 69, 95, 69, 78, 68, 
 -	95, 37, 32, 10, 13, 10, 13, 13, 
 -	32, 64, 9, 10, 9, 10, 13, 32, 
 -	64, 11, 12, 10, 32, 64, 9, 13, 
 -	104, 118, 121, 111, 121, 32, 109, 97, 
 -	116, 101, 121, 33, 58, 10, 10, 10, 
 -	32, 35, 37, 64, 65, 68, 72, 83, 
 -	89, 9, 13, 10, 95, 10, 70, 10, 
 -	69, 10, 65, 10, 84, 10, 85, 10, 
 -	82, 10, 69, 10, 95, 10, 69, 10, 
 -	78, 10, 68, 10, 95, 10, 37, 10, 
 -	104, 10, 111, 10, 121, 10, 32, 10, 
 -	109, 10, 97, 10, 116, 10, 101, 10, 
 -	121, 10, 33, 10, 58, 10, 32, 34, 
 -	35, 37, 42, 64, 65, 66, 68, 71, 
 -	72, 76, 83, 89, 124, 9, 13, 108, 
 -	105, 109, 101, 121, 33, 101, 97, 100, 
 -	32, 109, 101, 110, 32, 116, 101, 108, 
 -	108, 32, 110, 111, 32, 116, 97, 108, 
 -	101, 115, 58, 10, 10, 10, 32, 35, 
 -	65, 124, 9, 13, 10, 104, 10, 111, 
 -	10, 121, 10, 32, 10, 109, 10, 97, 
 -	10, 116, 10, 101, 10, 121, 10, 33, 
 -	10, 58, 97, 110, 103, 119, 97, 101, 
 -	97, 118, 101, 32, 116, 111, 58, 10, 
 -	10, 10, 32, 35, 37, 42, 64, 65, 
 -	66, 71, 72, 76, 83, 89, 9, 13, 
 -	10, 95, 10, 70, 10, 69, 10, 65, 
 -	10, 84, 10, 85, 10, 82, 10, 69, 
 -	10, 95, 10, 69, 10, 78, 10, 68, 
 -	10, 95, 10, 37, 10, 32, 10, 104, 
 -	118, 121, 10, 111, 10, 121, 10, 32, 
 -	10, 109, 10, 97, 10, 116, 10, 101, 
 -	10, 121, 10, 33, 10, 58, 10, 97, 
 -	10, 115, 10, 116, 10, 33, 10, 101, 
 -	10, 108, 10, 105, 10, 109, 10, 101, 
 -	10, 121, 10, 97, 10, 110, 10, 103, 
 -	10, 119, 10, 97, 10, 101, 10, 97, 
 -	10, 118, 10, 101, 10, 32, 10, 116, 
 -	10, 111, 10, 101, 10, 116, 10, 32, 
 -	10, 103, 10, 111, 10, 32, 10, 97, 
 -	10, 110, 10, 100, 10, 32, 10, 104, 
 -	10, 97, 10, 117, 10, 108, 10, 104, 
 -	10, 105, 10, 118, 10, 101, 10, 114, 
 -	10, 32, 10, 109, 10, 101, 10, 32, 
 -	10, 116, 10, 105, 10, 109, 10, 98, 
 -	10, 101, 10, 114, 10, 115, 10, 111, 
 -	10, 45, 10, 104, 10, 111, 10, 45, 
 -	10, 104, 101, 116, 32, 103, 111, 32, 
 -	97, 110, 100, 32, 104, 97, 117, 108, 
 -	104, 105, 118, 101, 114, 32, 109, 101, 
 -	32, 116, 105, 109, 98, 101, 114, 115, 
 -	58, 10, 10, 10, 32, 35, 37, 42, 
 -	64, 65, 66, 71, 72, 76, 9, 13, 
 -	10, 95, 10, 70, 10, 69, 10, 65, 
 -	10, 84, 10, 85, 10, 82, 10, 69, 
 -	10, 95, 10, 69, 10, 78, 10, 68, 
 -	10, 95, 10, 37, 10, 32, 10, 104, 
 -	118, 121, 10, 111, 10, 121, 10, 32, 
 -	10, 109, 10, 97, 10, 116, 10, 101, 
 -	10, 121, 10, 33, 10, 58, 10, 97, 
 -	10, 115, 10, 116, 10, 33, 10, 101, 
 -	10, 108, 10, 105, 10, 109, 10, 101, 
 -	10, 121, 10, 97, 10, 110, 10, 103, 
 -	10, 119, 10, 97, 10, 101, 10, 97, 
 -	10, 118, 10, 101, 10, 32, 10, 116, 
 -	10, 111, 10, 101, 10, 116, 10, 32, 
 -	10, 103, 10, 111, 10, 32, 10, 97, 
 -	10, 110, 10, 100, 10, 32, 10, 104, 
 -	10, 97, 10, 117, 10, 108, 111, 45, 
 -	104, 111, 45, 104, 111, 58, 10, 10, 
 -	10, 32, 35, 37, 42, 64, 65, 66, 
 -	71, 72, 76, 83, 9, 13, 10, 95, 
 -	10, 70, 10, 69, 10, 65, 10, 84, 
 -	10, 85, 10, 82, 10, 69, 10, 95, 
 -	10, 69, 10, 78, 10, 68, 10, 95, 
 -	10, 37, 10, 32, 10, 104, 118, 121, 
 -	10, 111, 10, 121, 10, 32, 10, 109, 
 -	10, 97, 10, 116, 10, 101, 10, 121, 
 -	10, 33, 10, 58, 10, 97, 10, 115, 
 -	10, 116, 10, 33, 10, 101, 10, 108, 
 -	10, 105, 10, 109, 10, 101, 10, 121, 
 -	10, 97, 10, 110, 10, 103, 10, 119, 
 -	10, 97, 10, 101, 10, 97, 10, 118, 
 -	10, 101, 10, 32, 10, 116, 10, 111, 
 -	10, 101, 10, 116, 10, 32, 10, 103, 
 -	10, 111, 10, 32, 10, 97, 10, 110, 
 -	10, 100, 10, 32, 10, 104, 10, 97, 
 -	10, 117, 10, 108, 10, 104, 10, 105, 
 -	10, 118, 10, 101, 10, 114, 10, 32, 
 -	10, 109, 10, 101, 10, 32, 10, 116, 
 -	10, 105, 10, 109, 10, 98, 10, 101, 
 -	10, 114, 10, 115, 32, 124, 9, 13, 
 -	10, 32, 92, 124, 9, 13, 10, 92, 
 -	124, 10, 92, 10, 32, 92, 124, 9, 
 -	13, 10, 32, 34, 35, 37, 42, 64, 
 -	65, 66, 68, 71, 72, 76, 83, 89, 
 -	124, 9, 13, 10, 101, 10, 97, 10, 
 -	100, 10, 32, 10, 109, 10, 101, 10, 
 -	110, 10, 32, 10, 116, 10, 101, 10, 
 -	108, 10, 108, 10, 32, 10, 110, 10, 
 -	111, 10, 32, 10, 116, 10, 97, 10, 
 -	108, 10, 101, 10, 115, 10, 101, 10, 
 -	97, 10, 118, 10, 101, 10, 32, 10, 
 -	116, 10, 111, 10, 104, 10, 105, 10, 
 -	118, 10, 101, 10, 114, 10, 32, 10, 
 -	109, 10, 101, 10, 32, 10, 116, 10, 
 -	105, 10, 109, 10, 98, 10, 101, 10, 
 -	114, 10, 111, 10, 45, 10, 104, 10, 
 -	111, 10, 45, 10, 104, 97, 115, 116, 
 -	101, 0
 -};
 -
 -static const char _lexer_single_lengths[] = {
 -	0, 17, 1, 1, 16, 1, 1, 2, 
 -	2, 3, 3, 3, 3, 2, 2, 2, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	2, 2, 3, 5, 3, 3, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 10, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 16, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 5, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 13, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 4, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 11, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 4, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 12, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 4, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 4, 3, 2, 
 -	4, 16, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 1, 1, 1, 1, 0
 -};
 -
 -static const char _lexer_range_lengths[] = {
 -	0, 1, 0, 0, 1, 0, 0, 0, 
 -	0, 1, 1, 1, 1, 1, 1, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 1, 1, 1, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 1, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 1, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 1, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 1, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 1, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 1, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 1, 1, 0, 0, 
 -	1, 1, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0
 -};
 -
 -static const short _lexer_index_offsets[] = {
 -	0, 0, 19, 21, 23, 41, 43, 45, 
 -	48, 51, 56, 61, 66, 71, 75, 79, 
 -	82, 84, 86, 88, 90, 92, 94, 96, 
 -	98, 100, 102, 104, 106, 108, 110, 112, 
 -	114, 117, 120, 125, 132, 137, 141, 143, 
 -	145, 147, 149, 151, 153, 155, 157, 159, 
 -	161, 163, 165, 177, 180, 183, 186, 189, 
 -	192, 195, 198, 201, 204, 207, 210, 213, 
 -	216, 219, 222, 225, 228, 231, 234, 237, 
 -	240, 243, 246, 249, 252, 270, 272, 274, 
 -	276, 278, 280, 282, 284, 286, 288, 290, 
 -	292, 294, 296, 298, 300, 302, 304, 306, 
 -	308, 310, 312, 314, 316, 318, 320, 322, 
 -	324, 326, 328, 330, 337, 340, 343, 346, 
 -	349, 352, 355, 358, 361, 364, 367, 370, 
 -	372, 374, 376, 378, 380, 382, 384, 386, 
 -	388, 390, 392, 394, 396, 398, 400, 415, 
 -	418, 421, 424, 427, 430, 433, 436, 439, 
 -	442, 445, 448, 451, 454, 457, 460, 465, 
 -	468, 471, 474, 477, 480, 483, 486, 489, 
 -	492, 495, 498, 501, 504, 507, 510, 513, 
 -	516, 519, 522, 525, 528, 531, 534, 537, 
 -	540, 543, 546, 549, 552, 555, 558, 561, 
 -	564, 567, 570, 573, 576, 579, 582, 585, 
 -	588, 591, 594, 597, 600, 603, 606, 609, 
 -	612, 615, 618, 621, 624, 627, 630, 633, 
 -	636, 639, 642, 645, 648, 651, 654, 657, 
 -	660, 663, 666, 669, 671, 673, 675, 677, 
 -	679, 681, 683, 685, 687, 689, 691, 693, 
 -	695, 697, 699, 701, 703, 705, 707, 709, 
 -	711, 713, 715, 717, 719, 721, 723, 725, 
 -	727, 729, 731, 733, 735, 748, 751, 754, 
 -	757, 760, 763, 766, 769, 772, 775, 778, 
 -	781, 784, 787, 790, 793, 798, 801, 804, 
 -	807, 810, 813, 816, 819, 822, 825, 828, 
 -	831, 834, 837, 840, 843, 846, 849, 852, 
 -	855, 858, 861, 864, 867, 870, 873, 876, 
 -	879, 882, 885, 888, 891, 894, 897, 900, 
 -	903, 906, 909, 912, 915, 918, 921, 924, 
 -	927, 930, 933, 936, 938, 940, 942, 944, 
 -	946, 948, 950, 952, 954, 956, 970, 973, 
 -	976, 979, 982, 985, 988, 991, 994, 997, 
 -	1000, 1003, 1006, 1009, 1012, 1015, 1020, 1023, 
 -	1026, 1029, 1032, 1035, 1038, 1041, 1044, 1047, 
 -	1050, 1053, 1056, 1059, 1062, 1065, 1068, 1071, 
 -	1074, 1077, 1080, 1083, 1086, 1089, 1092, 1095, 
 -	1098, 1101, 1104, 1107, 1110, 1113, 1116, 1119, 
 -	1122, 1125, 1128, 1131, 1134, 1137, 1140, 1143, 
 -	1146, 1149, 1152, 1155, 1158, 1161, 1164, 1167, 
 -	1170, 1173, 1176, 1179, 1182, 1185, 1188, 1191, 
 -	1194, 1197, 1200, 1203, 1206, 1210, 1216, 1220, 
 -	1223, 1229, 1247, 1250, 1253, 1256, 1259, 1262, 
 -	1265, 1268, 1271, 1274, 1277, 1280, 1283, 1286, 
 -	1289, 1292, 1295, 1298, 1301, 1304, 1307, 1310, 
 -	1313, 1316, 1319, 1322, 1325, 1328, 1331, 1334, 
 -	1337, 1340, 1343, 1346, 1349, 1352, 1355, 1358, 
 -	1361, 1364, 1367, 1370, 1373, 1376, 1379, 1382, 
 -	1385, 1388, 1391, 1394, 1396, 1398, 1400, 1402
 -};
 -
 -static const short _lexer_trans_targs[] = {
 -	2, 4, 4, 5, 15, 17, 31, 34, 
 -	37, 77, 83, 119, 124, 219, 233, 315, 
 -	404, 4, 0, 3, 0, 4, 0, 4, 
 -	4, 5, 15, 17, 31, 34, 37, 77, 
 -	83, 119, 124, 219, 233, 315, 404, 4, 
 -	0, 6, 0, 7, 0, 9, 8, 8, 
 -	9, 8, 8, 10, 10, 11, 10, 10, 
 -	10, 10, 11, 10, 10, 10, 10, 12, 
 -	10, 10, 10, 10, 13, 10, 10, 4, 
 -	14, 14, 0, 4, 14, 14, 0, 4, 
 -	16, 15, 4, 0, 18, 0, 19, 0, 
 -	20, 0, 21, 0, 22, 0, 23, 0, 
 -	24, 0, 25, 0, 26, 0, 27, 0, 
 -	28, 0, 29, 0, 30, 0, 463, 0, 
 -	32, 0, 4, 16, 33, 4, 16, 33, 
 -	0, 0, 0, 0, 35, 36, 4, 36, 
 -	36, 34, 35, 35, 4, 36, 34, 36, 
 -	0, 38, 459, 462, 0, 39, 0, 40, 
 -	0, 41, 0, 42, 0, 43, 0, 44, 
 -	0, 45, 0, 46, 0, 47, 0, 48, 
 -	0, 50, 49, 50, 49, 50, 50, 4, 
 -	51, 4, 65, 410, 431, 438, 453, 50, 
 -	49, 50, 52, 49, 50, 53, 49, 50, 
 -	54, 49, 50, 55, 49, 50, 56, 49, 
 -	50, 57, 49, 50, 58, 49, 50, 59, 
 -	49, 50, 60, 49, 50, 61, 49, 50, 
 -	62, 49, 50, 63, 49, 50, 64, 49, 
 -	50, 4, 49, 50, 66, 49, 50, 67, 
 -	49, 50, 68, 49, 50, 69, 49, 50, 
 -	70, 49, 50, 71, 49, 50, 72, 49, 
 -	50, 73, 49, 50, 74, 49, 50, 75, 
 -	49, 50, 76, 49, 4, 4, 5, 15, 
 -	17, 31, 34, 37, 77, 83, 119, 124, 
 -	219, 233, 315, 404, 4, 0, 78, 0, 
 -	79, 0, 80, 0, 81, 0, 82, 0, 
 -	31, 0, 84, 0, 85, 0, 86, 0, 
 -	87, 0, 88, 0, 89, 0, 90, 0, 
 -	91, 0, 92, 0, 93, 0, 94, 0, 
 -	95, 0, 96, 0, 97, 0, 98, 0, 
 -	99, 0, 100, 0, 101, 0, 102, 0, 
 -	103, 0, 104, 0, 105, 0, 107, 106, 
 -	107, 106, 107, 107, 4, 108, 4, 107, 
 -	106, 107, 109, 106, 107, 110, 106, 107, 
 -	111, 106, 107, 112, 106, 107, 113, 106, 
 -	107, 114, 106, 107, 115, 106, 107, 116, 
 -	106, 107, 117, 106, 107, 118, 106, 107, 
 -	76, 106, 120, 0, 121, 0, 122, 0, 
 -	123, 0, 81, 0, 125, 0, 126, 0, 
 -	127, 0, 128, 0, 129, 0, 130, 0, 
 -	131, 0, 132, 0, 134, 133, 134, 133, 
 -	134, 134, 4, 135, 149, 4, 150, 166, 
 -	171, 176, 183, 197, 213, 134, 133, 134, 
 -	136, 133, 134, 137, 133, 134, 138, 133, 
 -	134, 139, 133, 134, 140, 133, 134, 141, 
 -	133, 134, 142, 133, 134, 143, 133, 134, 
 -	144, 133, 134, 145, 133, 134, 146, 133, 
 -	134, 147, 133, 134, 148, 133, 134, 4, 
 -	133, 134, 76, 133, 134, 151, 161, 165, 
 -	133, 134, 152, 133, 134, 153, 133, 134, 
 -	154, 133, 134, 155, 133, 134, 156, 133, 
 -	134, 157, 133, 134, 158, 133, 134, 159, 
 -	133, 134, 160, 133, 134, 76, 133, 134, 
 -	162, 133, 134, 163, 133, 134, 164, 133, 
 -	134, 149, 133, 134, 149, 133, 134, 167, 
 -	133, 134, 168, 133, 134, 169, 133, 134, 
 -	170, 133, 134, 164, 133, 134, 172, 133, 
 -	134, 173, 133, 134, 174, 133, 134, 175, 
 -	133, 134, 170, 133, 134, 177, 133, 134, 
 -	178, 133, 134, 179, 133, 134, 180, 133, 
 -	134, 181, 133, 134, 182, 133, 134, 160, 
 -	133, 134, 184, 133, 134, 185, 133, 134, 
 -	186, 133, 134, 187, 133, 134, 188, 133, 
 -	134, 189, 133, 134, 190, 133, 134, 191, 
 -	133, 134, 192, 133, 134, 193, 133, 134, 
 -	194, 133, 134, 195, 133, 134, 196, 133, 
 -	134, 149, 133, 134, 198, 133, 134, 199, 
 -	133, 134, 200, 133, 134, 201, 133, 134, 
 -	202, 133, 134, 203, 133, 134, 204, 133, 
 -	134, 205, 133, 134, 206, 133, 134, 207, 
 -	133, 134, 208, 133, 134, 209, 133, 134, 
 -	210, 133, 134, 211, 133, 134, 212, 133, 
 -	134, 160, 133, 134, 214, 133, 134, 215, 
 -	133, 134, 216, 133, 134, 217, 133, 134, 
 -	218, 133, 134, 182, 133, 220, 0, 221, 
 -	0, 222, 0, 223, 0, 224, 0, 225, 
 -	0, 226, 0, 227, 0, 228, 0, 229, 
 -	0, 230, 0, 231, 0, 232, 0, 31, 
 -	0, 234, 0, 235, 0, 236, 0, 237, 
 -	0, 238, 0, 239, 0, 240, 0, 241, 
 -	0, 242, 0, 243, 0, 244, 0, 245, 
 -	0, 246, 0, 247, 0, 248, 0, 249, 
 -	0, 250, 0, 252, 251, 252, 251, 252, 
 -	252, 4, 253, 267, 4, 268, 284, 289, 
 -	294, 301, 252, 251, 252, 254, 251, 252, 
 -	255, 251, 252, 256, 251, 252, 257, 251, 
 -	252, 258, 251, 252, 259, 251, 252, 260, 
 -	251, 252, 261, 251, 252, 262, 251, 252, 
 -	263, 251, 252, 264, 251, 252, 265, 251, 
 -	252, 266, 251, 252, 4, 251, 252, 76, 
 -	251, 252, 269, 279, 283, 251, 252, 270, 
 -	251, 252, 271, 251, 252, 272, 251, 252, 
 -	273, 251, 252, 274, 251, 252, 275, 251, 
 -	252, 276, 251, 252, 277, 251, 252, 278, 
 -	251, 252, 76, 251, 252, 280, 251, 252, 
 -	281, 251, 252, 282, 251, 252, 267, 251, 
 -	252, 267, 251, 252, 285, 251, 252, 286, 
 -	251, 252, 287, 251, 252, 288, 251, 252, 
 -	282, 251, 252, 290, 251, 252, 291, 251, 
 -	252, 292, 251, 252, 293, 251, 252, 288, 
 -	251, 252, 295, 251, 252, 296, 251, 252, 
 -	297, 251, 252, 298, 251, 252, 299, 251, 
 -	252, 300, 251, 252, 278, 251, 252, 302, 
 -	251, 252, 303, 251, 252, 304, 251, 252, 
 -	305, 251, 252, 306, 251, 252, 307, 251, 
 -	252, 308, 251, 252, 309, 251, 252, 310, 
 -	251, 252, 311, 251, 252, 312, 251, 252, 
 -	313, 251, 252, 314, 251, 252, 267, 251, 
 -	316, 0, 317, 0, 318, 0, 319, 0, 
 -	320, 0, 321, 0, 322, 0, 323, 0, 
 -	325, 324, 325, 324, 325, 325, 4, 326, 
 -	340, 4, 341, 357, 362, 367, 374, 388, 
 -	325, 324, 325, 327, 324, 325, 328, 324, 
 -	325, 329, 324, 325, 330, 324, 325, 331, 
 -	324, 325, 332, 324, 325, 333, 324, 325, 
 -	334, 324, 325, 335, 324, 325, 336, 324, 
 -	325, 337, 324, 325, 338, 324, 325, 339, 
 -	324, 325, 4, 324, 325, 76, 324, 325, 
 -	342, 352, 356, 324, 325, 343, 324, 325, 
 -	344, 324, 325, 345, 324, 325, 346, 324, 
 -	325, 347, 324, 325, 348, 324, 325, 349, 
 -	324, 325, 350, 324, 325, 351, 324, 325, 
 -	76, 324, 325, 353, 324, 325, 354, 324, 
 -	325, 355, 324, 325, 340, 324, 325, 340, 
 -	324, 325, 358, 324, 325, 359, 324, 325, 
 -	360, 324, 325, 361, 324, 325, 355, 324, 
 -	325, 363, 324, 325, 364, 324, 325, 365, 
 -	324, 325, 366, 324, 325, 361, 324, 325, 
 -	368, 324, 325, 369, 324, 325, 370, 324, 
 -	325, 371, 324, 325, 372, 324, 325, 373, 
 -	324, 325, 351, 324, 325, 375, 324, 325, 
 -	376, 324, 325, 377, 324, 325, 378, 324, 
 -	325, 379, 324, 325, 380, 324, 325, 381, 
 -	324, 325, 382, 324, 325, 383, 324, 325, 
 -	384, 324, 325, 385, 324, 325, 386, 324, 
 -	325, 387, 324, 325, 340, 324, 325, 389, 
 -	324, 325, 390, 324, 325, 391, 324, 325, 
 -	392, 324, 325, 393, 324, 325, 394, 324, 
 -	325, 395, 324, 325, 396, 324, 325, 397, 
 -	324, 325, 398, 324, 325, 399, 324, 325, 
 -	400, 324, 325, 401, 324, 325, 402, 324, 
 -	325, 403, 324, 325, 351, 324, 404, 405, 
 -	404, 0, 409, 408, 407, 405, 408, 406, 
 -	0, 407, 405, 406, 0, 407, 406, 409, 
 -	408, 407, 405, 408, 406, 409, 409, 5, 
 -	15, 17, 31, 34, 37, 77, 83, 119, 
 -	124, 219, 233, 315, 404, 409, 0, 50, 
 -	411, 49, 50, 412, 49, 50, 413, 49, 
 -	50, 414, 49, 50, 415, 49, 50, 416, 
 -	49, 50, 417, 49, 50, 418, 49, 50, 
 -	419, 49, 50, 420, 49, 50, 421, 49, 
 -	50, 422, 49, 50, 423, 49, 50, 424, 
 -	49, 50, 425, 49, 50, 426, 49, 50, 
 -	427, 49, 50, 428, 49, 50, 429, 49, 
 -	50, 430, 49, 50, 75, 49, 50, 432, 
 -	49, 50, 433, 49, 50, 434, 49, 50, 
 -	435, 49, 50, 436, 49, 50, 437, 49, 
 -	50, 75, 49, 50, 439, 49, 50, 440, 
 -	49, 50, 441, 49, 50, 442, 49, 50, 
 -	443, 49, 50, 444, 49, 50, 445, 49, 
 -	50, 446, 49, 50, 447, 49, 50, 448, 
 -	49, 50, 449, 49, 50, 450, 49, 50, 
 -	451, 49, 50, 452, 49, 50, 430, 49, 
 -	50, 454, 49, 50, 455, 49, 50, 456, 
 -	49, 50, 457, 49, 50, 458, 49, 50, 
 -	437, 49, 460, 0, 461, 0, 82, 0, 
 -	31, 0, 0, 0
 -};
 -
 -static const unsigned char _lexer_trans_actions[] = {
 -	0, 54, 0, 5, 1, 0, 29, 1, 
 -	29, 29, 29, 29, 29, 29, 29, 29, 
 -	35, 0, 43, 0, 43, 0, 43, 54, 
 -	0, 5, 1, 0, 29, 1, 29, 29, 
 -	29, 29, 29, 29, 29, 29, 35, 0, 
 -	43, 0, 43, 0, 43, 139, 48, 9, 
 -	106, 11, 0, 134, 45, 45, 45, 3, 
 -	122, 33, 33, 33, 0, 122, 33, 33, 
 -	33, 0, 122, 33, 0, 33, 0, 102, 
 -	7, 7, 43, 54, 0, 0, 43, 114, 
 -	25, 0, 54, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 149, 126, 57, 110, 23, 0, 
 -	43, 43, 43, 43, 0, 27, 118, 27, 
 -	27, 51, 27, 0, 54, 0, 1, 0, 
 -	43, 0, 0, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 144, 57, 54, 0, 54, 0, 69, 
 -	33, 69, 84, 84, 84, 84, 84, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 13, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 13, 0, 130, 31, 60, 57, 
 -	31, 63, 57, 63, 63, 63, 63, 63, 
 -	63, 63, 63, 66, 31, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 144, 57, 
 -	54, 0, 54, 0, 81, 84, 81, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	21, 0, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 144, 57, 54, 0, 
 -	54, 0, 75, 33, 84, 75, 84, 84, 
 -	84, 84, 84, 84, 84, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 17, 
 -	0, 54, 17, 0, 54, 0, 0, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 17, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 144, 57, 54, 0, 54, 
 -	0, 78, 33, 84, 78, 84, 84, 84, 
 -	84, 84, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 19, 0, 54, 19, 
 -	0, 54, 0, 0, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 19, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	144, 57, 54, 0, 54, 0, 72, 33, 
 -	84, 72, 84, 84, 84, 84, 84, 84, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 15, 0, 54, 15, 0, 54, 
 -	0, 0, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	15, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 0, 0, 
 -	0, 43, 54, 37, 37, 87, 37, 37, 
 -	43, 0, 39, 0, 43, 0, 0, 54, 
 -	0, 0, 39, 0, 0, 54, 0, 93, 
 -	90, 41, 96, 90, 96, 96, 96, 96, 
 -	96, 96, 96, 96, 99, 0, 43, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 0
 -};
 -
 -static const unsigned char _lexer_eof_actions[] = {
 -	0, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43
 -};
 -
 -static const int lexer_start = 1;
 -static const int lexer_first_final = 463;
 -static const int lexer_error = 0;
 -
 -static const int lexer_en_main = 1;
 -
 -
 -#line 258 "ragel/i18n/en_pirate.c.rl"
 -
 -static VALUE 
 -unindent(VALUE con, int start_col)
 -{
 -  VALUE re;
 -  /* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */
 -  char pat[32]; 
 -  snprintf(pat, 32, "^[\t ]{0,%d}", start_col); 
 -  re = rb_reg_regcomp(rb_str_new2(pat));
 -  rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2(""));
 -
 -  return Qnil;
 -
 -}
 -
 -static void 
 -store_kw_con(VALUE listener, const char * event_name, 
 -             const char * keyword_at, size_t keyword_length, 
 -             const char * at,         size_t length, 
 -             int current_line)
 -{
 -  VALUE con = Qnil, kw = Qnil;
 -  kw = ENCODED_STR_NEW(keyword_at, keyword_length);
 -  con = ENCODED_STR_NEW(at, length);
 -  rb_funcall(con, rb_intern("strip!"), 0);
 -  rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); 
 -}
 -
 -static void
 -store_multiline_kw_con(VALUE listener, const char * event_name,
 -                      const char * keyword_at, size_t keyword_length,
 -                      const char * at,         size_t length,
 -                      int current_line, int start_col)
 -{
 -  VALUE split;
 -  VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil;
 -
 -  kw = ENCODED_STR_NEW(keyword_at, keyword_length);
 -  con = ENCODED_STR_NEW(at, length);
 -
 -  unindent(con, start_col);
 -  
 -  split = rb_str_split(con, "\n");
 -
 -  name = rb_funcall(split, rb_intern("shift"), 0);
 -  desc = rb_ary_join(split, rb_str_new2( "\n" ));
 -
 -  if( name == Qnil ) 
 -  {
 -    name = rb_str_new2("");
 -  }
 -  if( rb_funcall(desc, rb_intern("size"), 0) == 0) 
 -  {
 -    desc = rb_str_new2("");
 -  }
 -  rb_funcall(name, rb_intern("strip!"), 0);
 -  rb_funcall(desc, rb_intern("rstrip!"), 0);
 -  rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); 
 -}
 -
 -static void 
 -store_attr(VALUE listener, const char * attr_type,
 -           const char * at, size_t length, 
 -           int line)
 -{
 -  VALUE val = ENCODED_STR_NEW(at, length);
 -  rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line));
 -}
 -static void 
 -store_docstring_content(VALUE listener, 
 -          int start_col, 
 -          const char *type_at, size_t type_length,
 -          const char *at, size_t length, 
 -          int current_line)
 -{
 -  VALUE re2;
 -  VALUE unescape_escaped_quotes;
 -  VALUE con = ENCODED_STR_NEW(at, length);
 -  VALUE con_type = ENCODED_STR_NEW(type_at, type_length);
 -
 -  unindent(con, start_col);
 -
 -  re2 = rb_reg_regcomp(rb_str_new2("\r\\Z"));
 -  unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\""));
 -  rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2(""));
 -  rb_funcall(con_type, rb_intern("strip!"), 0);
 -  rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\""));
 -  rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line));
 -}
 -static void 
 -raise_lexer_error(const char * at, int line)
 -{ 
 -  rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at);
 -}
 -
 -static void lexer_init(lexer_state *lexer) {
 -  lexer->content_start = 0;
 -  lexer->content_end = 0;
 -  lexer->content_len = 0;
 -  lexer->docstring_content_type_start = 0;
 -  lexer->docstring_content_type_end = 0;
 -  lexer->mark = 0;
 -  lexer->keyword_start = 0;
 -  lexer->keyword_end = 0;
 -  lexer->next_keyword_start = 0;
 -  lexer->line_number = 1;
 -  lexer->last_newline = 0;
 -  lexer->final_newline = 0;
 -  lexer->start_col = 0;
 -}
 -
 -static VALUE CLexer_alloc(VALUE klass)
 -{
 -  VALUE obj;
 -  lexer_state *lxr = ALLOC(lexer_state);
 -  lexer_init(lxr);
 -
 -  obj = Data_Wrap_Struct(klass, NULL, -1, lxr);
 -
 -  return obj;
 -}
 -
 -static VALUE CLexer_init(VALUE self, VALUE listener)
 -{
 -  lexer_state *lxr; 
 -  rb_iv_set(self, "@listener", listener);
 -  
 -  lxr = NULL;
 -  DATA_GET(self, lexer_state, lxr);
 -  lexer_init(lxr);
 -  
 -  return self;
 -}
 -
 -static VALUE CLexer_scan(VALUE self, VALUE input)
 -{
 -  VALUE input_copy;
 -  char *data;
 -  size_t len;
 -  VALUE listener = rb_iv_get(self, "@listener");
 -
 -  lexer_state *lexer;
 -  lexer = NULL;
 -  DATA_GET(self, lexer_state, lexer);
 -
 -  input_copy = rb_str_dup(input);
 -
 -  rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%"));
 -  data = RSTRING_PTR(input_copy);
 -  len = RSTRING_LEN(input_copy);
 -  
 -  if (len == 0) { 
 -    rb_raise(rb_eGherkinLexingError, "No content to lex.");
 -  } else {
 -
 -    const char *p, *pe, *eof;
 -    int cs = 0;
 -    
 -    VALUE current_row = Qnil;
 -
 -    p = data;
 -    pe = data + len;
 -    eof = pe;
 -    
 -    assert(*pe == '\0' && "pointer does not end on NULL");
 -    
 -    
 -#line 1075 "ext/gherkin_lexer_en_pirate/gherkin_lexer_en_pirate.c"
 -	{
 -	cs = lexer_start;
 -	}
 -
 -#line 425 "ragel/i18n/en_pirate.c.rl"
 -    
 -#line 1082 "ext/gherkin_lexer_en_pirate/gherkin_lexer_en_pirate.c"
 -	{
 -	int _klen;
 -	unsigned int _trans;
 -	const char *_acts;
 -	unsigned int _nacts;
 -	const char *_keys;
 -
 -	if ( p == pe )
 -		goto _test_eof;
 -	if ( cs == 0 )
 -		goto _out;
 -_resume:
 -	_keys = _lexer_trans_keys + _lexer_key_offsets[cs];
 -	_trans = _lexer_index_offsets[cs];
 -
 -	_klen = _lexer_single_lengths[cs];
 -	if ( _klen > 0 ) {
 -		const char *_lower = _keys;
 -		const char *_mid;
 -		const char *_upper = _keys + _klen - 1;
 -		while (1) {
 -			if ( _upper < _lower )
 -				break;
 -
 -			_mid = _lower + ((_upper-_lower) >> 1);
 -			if ( (*p) < *_mid )
 -				_upper = _mid - 1;
 -			else if ( (*p) > *_mid )
 -				_lower = _mid + 1;
 -			else {
 -				_trans += (unsigned int)(_mid - _keys);
 -				goto _match;
 -			}
 -		}
 -		_keys += _klen;
 -		_trans += _klen;
 -	}
 -
 -	_klen = _lexer_range_lengths[cs];
 -	if ( _klen > 0 ) {
 -		const char *_lower = _keys;
 -		const char *_mid;
 -		const char *_upper = _keys + (_klen<<1) - 2;
 -		while (1) {
 -			if ( _upper < _lower )
 -				break;
 -
 -			_mid = _lower + (((_upper-_lower) >> 1) & ~1);
 -			if ( (*p) < _mid[0] )
 -				_upper = _mid - 2;
 -			else if ( (*p) > _mid[1] )
 -				_lower = _mid + 2;
 -			else {
 -				_trans += (unsigned int)((_mid - _keys)>>1);
 -				goto _match;
 -			}
 -		}
 -		_trans += _klen;
 -	}
 -
 -_match:
 -	cs = _lexer_trans_targs[_trans];
 -
 -	if ( _lexer_trans_actions[_trans] == 0 )
 -		goto _again;
 -
 -	_acts = _lexer_actions + _lexer_trans_actions[_trans];
 -	_nacts = (unsigned int) *_acts++;
 -	while ( _nacts-- > 0 )
 -	{
 -		switch ( *_acts++ )
 -		{
 -	case 0:
 -#line 83 "ragel/i18n/en_pirate.c.rl"
 -	{
 -		MARK(content_start, p);
 -    lexer->current_line = lexer->line_number;
 -    lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2;
 -  }
 -	break;
 -	case 1:
 -#line 89 "ragel/i18n/en_pirate.c.rl"
 -	{
 -    MARK(content_start, p);
 -  }
 -	break;
 -	case 2:
 -#line 93 "ragel/i18n/en_pirate.c.rl"
 -	{
 -    lexer->current_line = lexer->line_number;
 -    lexer->start_col = p - data - lexer->last_newline;
 -  }
 -	break;
 -	case 3:
 -#line 98 "ragel/i18n/en_pirate.c.rl"
 -	{
 -    int len = LEN(content_start, PTR_TO(final_newline));
 -    int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end));
 -
 -    if (len < 0) len = 0;
 -    if (type_len < 0) len = 0;
 -
 -    store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line);
 -  }
 -	break;
 -	case 4:
 -#line 108 "ragel/i18n/en_pirate.c.rl"
 -	{ 
 -    MARK(docstring_content_type_start, p);
 -  }
 -	break;
 -	case 5:
 -#line 112 "ragel/i18n/en_pirate.c.rl"
 -	{ 
 -    MARK(docstring_content_type_end, p);
 -  }
 -	break;
 -	case 6:
 -#line 116 "ragel/i18n/en_pirate.c.rl"
 -	{
 -    STORE_KW_END_CON(feature);
 -  }
 -	break;
 -	case 7:
 -#line 120 "ragel/i18n/en_pirate.c.rl"
 -	{
 -    STORE_KW_END_CON(background);
 -  }
 -	break;
 -	case 8:
 -#line 124 "ragel/i18n/en_pirate.c.rl"
 -	{
 -    STORE_KW_END_CON(scenario);
 -  }
 -	break;
 -	case 9:
 -#line 128 "ragel/i18n/en_pirate.c.rl"
 -	{
 -    STORE_KW_END_CON(scenario_outline);
 -  }
 -	break;
 -	case 10:
 -#line 132 "ragel/i18n/en_pirate.c.rl"
 -	{
 -    STORE_KW_END_CON(examples);
 -  }
 -	break;
 -	case 11:
 -#line 136 "ragel/i18n/en_pirate.c.rl"
 -	{
 -    store_kw_con(listener, "step",
 -      PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
 -      PTR_TO(content_start), LEN(content_start, p), 
 -      lexer->current_line);
 -  }
 -	break;
 -	case 12:
 -#line 143 "ragel/i18n/en_pirate.c.rl"
 -	{
 -    STORE_ATTR(comment);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 13:
 -#line 148 "ragel/i18n/en_pirate.c.rl"
 -	{
 -    STORE_ATTR(tag);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 14:
 -#line 153 "ragel/i18n/en_pirate.c.rl"
 -	{
 -    lexer->line_number += 1;
 -    MARK(final_newline, p);
 -  }
 -	break;
 -	case 15:
 -#line 158 "ragel/i18n/en_pirate.c.rl"
 -	{
 -    MARK(last_newline, p + 1);
 -  }
 -	break;
 -	case 16:
 -#line 162 "ragel/i18n/en_pirate.c.rl"
 -	{
 -    if (lexer->mark == 0) {
 -      MARK(mark, p);
 -    }
 -  }
 -	break;
 -	case 17:
 -#line 168 "ragel/i18n/en_pirate.c.rl"
 -	{
 -    MARK(keyword_end, p);
 -    MARK(keyword_start, PTR_TO(mark));
 -    MARK(content_start, p + 1);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 18:
 -#line 175 "ragel/i18n/en_pirate.c.rl"
 -	{
 -    MARK(content_end, p);
 -  }
 -	break;
 -	case 19:
 -#line 179 "ragel/i18n/en_pirate.c.rl"
 -	{
 -    p = p - 1;
 -    lexer->current_line = lexer->line_number;
 -    current_row = rb_ary_new();
 -  }
 -	break;
 -	case 20:
 -#line 185 "ragel/i18n/en_pirate.c.rl"
 -	{
 -		MARK(content_start, p);
 -  }
 -	break;
 -	case 21:
 -#line 189 "ragel/i18n/en_pirate.c.rl"
 -	{
 -    VALUE re_pipe, re_newline, re_backslash;
 -    VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
 -    rb_funcall(con, rb_intern("strip!"), 0);
 -    re_pipe      = rb_reg_regcomp(rb_str_new2("\\\\\\|"));
 -    re_newline   = rb_reg_regcomp(rb_str_new2("\\\\n"));
 -    re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_pipe,      rb_str_new2("|"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_newline,   rb_str_new2("\n"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\"));
 -
 -    rb_ary_push(current_row, con);
 -  }
 -	break;
 -	case 22:
 -#line 203 "ragel/i18n/en_pirate.c.rl"
 -	{
 -    rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
 -  }
 -	break;
 -	case 23:
 -#line 207 "ragel/i18n/en_pirate.c.rl"
 -	{
 -    int line;
 -    if (cs < lexer_first_final) {
 -      size_t count = 0;
 -      VALUE newstr_val;
 -      char *newstr;
 -      int newstr_count = 0;        
 -      size_t len;
 -      const char *buff;
 -      if (lexer->last_newline != 0) {
 -        len = LEN(last_newline, eof);
 -        buff = PTR_TO(last_newline);
 -      } else {
 -        len = strlen(data);
 -        buff = data;
 -      }
 -
 -      /* Allocate as a ruby string so that it gets cleaned up by GC */
 -      newstr_val = rb_str_new(buff, len);
 -      newstr = RSTRING_PTR(newstr_val);
 -
 -
 -      for (count = 0; count < len; count++) {
 -        if(buff[count] == 10) {
 -          newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
 -          break;
 -        } else {
 -          if (buff[count] == '%') {
 -            newstr[newstr_count++] = buff[count];
 -            newstr[newstr_count] = buff[count];
 -          } else {
 -            newstr[newstr_count] = buff[count];
 -          }
 -        }
 -        newstr_count++;
 -      }
 -
 -      line = lexer->line_number;
 -      lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
 -      raise_lexer_error(newstr, line);
 -    } else {
 -      rb_funcall(listener, rb_intern("eof"), 0);
 -    }
 -  }
 -	break;
 -#line 1372 "ext/gherkin_lexer_en_pirate/gherkin_lexer_en_pirate.c"
 -		}
 -	}
 -
 -_again:
 -	if ( cs == 0 )
 -		goto _out;
 -	if ( ++p != pe )
 -		goto _resume;
 -	_test_eof: {}
 -	if ( p == eof )
 -	{
 -	const char *__acts = _lexer_actions + _lexer_eof_actions[cs];
 -	unsigned int __nacts = (unsigned int) *__acts++;
 -	while ( __nacts-- > 0 ) {
 -		switch ( *__acts++ ) {
 -	case 23:
 -#line 207 "ragel/i18n/en_pirate.c.rl"
 -	{
 -    int line;
 -    if (cs < lexer_first_final) {
 -      size_t count = 0;
 -      VALUE newstr_val;
 -      char *newstr;
 -      int newstr_count = 0;        
 -      size_t len;
 -      const char *buff;
 -      if (lexer->last_newline != 0) {
 -        len = LEN(last_newline, eof);
 -        buff = PTR_TO(last_newline);
 -      } else {
 -        len = strlen(data);
 -        buff = data;
 -      }
 -
 -      /* Allocate as a ruby string so that it gets cleaned up by GC */
 -      newstr_val = rb_str_new(buff, len);
 -      newstr = RSTRING_PTR(newstr_val);
 -
 -
 -      for (count = 0; count < len; count++) {
 -        if(buff[count] == 10) {
 -          newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
 -          break;
 -        } else {
 -          if (buff[count] == '%') {
 -            newstr[newstr_count++] = buff[count];
 -            newstr[newstr_count] = buff[count];
 -          } else {
 -            newstr[newstr_count] = buff[count];
 -          }
 -        }
 -        newstr_count++;
 -      }
 -
 -      line = lexer->line_number;
 -      lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
 -      raise_lexer_error(newstr, line);
 -    } else {
 -      rb_funcall(listener, rb_intern("eof"), 0);
 -    }
 -  }
 -	break;
 -#line 1435 "ext/gherkin_lexer_en_pirate/gherkin_lexer_en_pirate.c"
 -		}
 -	}
 -	}
 -
 -	_out: {}
 -	}
 -
 -#line 426 "ragel/i18n/en_pirate.c.rl"
 -
 -    assert(p <= pe && "data overflow after parsing execute");
 -    assert(lexer->content_start <= len && "content starts after data end");
 -    assert(lexer->mark < len && "mark is after data end");
 -    
 -    /* Reset lexer by re-initializing the whole thing */
 -    lexer_init(lexer);
 -
 -    if (cs == lexer_error) {
 -      rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails.");
 -    } else {
 -      return Qtrue;
 -    }
 -  }
 -}
 -
 -void Init_gherkin_lexer_en_pirate()
 -{
 -  mGherkin = rb_define_module("Gherkin");
 -  mGherkinLexer = rb_define_module_under(mGherkin, "Lexer");
 -  rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError"));
 -
 -  mCLexer = rb_define_module_under(mGherkin, "CLexer");
 -  cI18nLexer = rb_define_class_under(mCLexer, "En_pirate", rb_cObject);
 -  rb_define_alloc_func(cI18nLexer, CLexer_alloc);
 -  rb_define_method(cI18nLexer, "initialize", CLexer_init, 1);
 -  rb_define_method(cI18nLexer, "scan", CLexer_scan, 1);
 -}
 -
diff --cc ext/gherkin_lexer_en_scouse/extconf.rb
index 8985079,8985079..0000000
deleted file mode 100644,100644
--- a/ext/gherkin_lexer_en_scouse/extconf.rb
+++ /dev/null
@@@ -1,6 -1,6 +1,0 @@@
--require 'mkmf'
--CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags']
--$CFLAGS << ' -O0 -Wall' if CONFIG['CC'] =~ /gcc|clang/
--dir_config("gherkin_lexer_en_scouse")
--have_library("c", "main")
--create_makefile("gherkin_lexer_en_scouse")
diff --cc ext/gherkin_lexer_en_scouse/gherkin_lexer_en_scouse.c
index 8ee1bd1,207758d..0000000
deleted file mode 100644,100644
--- a/ext/gherkin_lexer_en_scouse/gherkin_lexer_en_scouse.c
+++ /dev/null
@@@ -1,1634 -1,1634 +1,0 @@@
--
- #line 1 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
- #include <assert.h>
- #include <ruby.h>
- 
- #if defined(_WIN32)
- #include <stddef.h>
- #endif
- 
- #ifdef HAVE_RUBY_RE_H
- #include <ruby/re.h>
- #else
- #include <re.h>
- #endif
- 
- #ifdef HAVE_RUBY_ENCODING_H
- #include <ruby/encoding.h>
- #define ENCODED_STR_NEW(ptr, len) \
-     rb_enc_str_new(ptr, len, rb_utf8_encoding())
- #else
- #define ENCODED_STR_NEW(ptr, len) \
-     rb_str_new(ptr, len)
- #endif
- 
- #ifndef RSTRING_PTR
- #define RSTRING_PTR(s) (RSTRING(s)->ptr)
- #endif
- 
- #ifndef RSTRING_LEN
- #define RSTRING_LEN(s) (RSTRING(s)->len)
- #endif
- 
- #define DATA_GET(FROM, TYPE, NAME) \
-   Data_Get_Struct(FROM, TYPE, NAME); \
-   if (NAME == NULL) { \
-     rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \
-   }
-  
- typedef struct lexer_state {
-   int content_len;
-   int line_number;
-   int current_line;
-   int start_col;
-   size_t mark;
-   size_t keyword_start;
-   size_t keyword_end;
-   size_t next_keyword_start;
-   size_t content_start;
-   size_t content_end;
-   size_t docstring_content_type_start;
-   size_t docstring_content_type_end;
-   size_t query_start;
-   size_t last_newline;
-   size_t final_newline;
- } lexer_state;
- 
- static VALUE mGherkin;
- static VALUE mGherkinLexer;
- static VALUE mCLexer;
- static VALUE cI18nLexer;
- static VALUE rb_eGherkinLexingError;
- 
- #define LEN(AT, P) (P - data - lexer->AT)
- #define MARK(M, P) (lexer->M = (P) - data)
- #define PTR_TO(P) (data + lexer->P)
- 
- #define STORE_KW_END_CON(EVENT) \
-   store_multiline_kw_con(listener, # EVENT, \
-     PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \
-     PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \
-     lexer->current_line, lexer->start_col); \
-     if (lexer->content_end != 0) { \
-       p = PTR_TO(content_end - 1); \
-     } \
-     lexer->content_end = 0
- 
- #define STORE_ATTR(ATTR) \
-     store_attr(listener, # ATTR, \
-       PTR_TO(content_start), LEN(content_start, p), \
-       lexer->line_number)
- 
- 
- #line 254 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
- 
- 
- /** Data **/
- 
- #line 89 "ext/gherkin_lexer_en_scouse/gherkin_lexer_en_scouse.c"
- static const char _lexer_actions[] = {
- 	0, 1, 0, 1, 1, 1, 2, 1, 
- 	3, 1, 4, 1, 5, 1, 6, 1, 
- 	7, 1, 8, 1, 9, 1, 10, 1, 
- 	11, 1, 12, 1, 13, 1, 16, 1, 
- 	17, 1, 18, 1, 19, 1, 20, 1, 
- 	21, 1, 22, 1, 23, 2, 1, 18, 
- 	2, 4, 5, 2, 13, 0, 2, 14, 
- 	15, 2, 17, 0, 2, 17, 2, 2, 
- 	17, 16, 2, 17, 19, 2, 18, 6, 
- 	2, 18, 7, 2, 18, 8, 2, 18, 
- 	9, 2, 18, 10, 2, 18, 16, 2, 
- 	20, 21, 2, 22, 0, 2, 22, 2, 
- 	2, 22, 16, 2, 22, 19, 3, 3, 
- 	14, 15, 3, 5, 14, 15, 3, 11, 
- 	14, 15, 3, 12, 14, 15, 3, 13, 
- 	14, 15, 3, 14, 15, 18, 3, 17, 
- 	0, 11, 3, 17, 14, 15, 4, 1, 
- 	14, 15, 18, 4, 4, 5, 14, 15, 
- 	4, 17, 0, 14, 15, 5, 17, 0, 
- 	11, 14, 15
- };
- 
- static const short _lexer_key_offsets[] = {
- 	0, 0, 20, 21, 22, 41, 42, 43, 
- 	45, 47, 52, 57, 62, 67, 71, 75, 
- 	77, 78, 79, 80, 81, 82, 83, 84, 
- 	85, 86, 87, 88, 89, 90, 91, 92, 
- 	93, 95, 97, 102, 109, 114, 115, 116, 
- 	117, 120, 121, 122, 123, 124, 125, 126, 
- 	127, 128, 129, 130, 131, 132, 133, 134, 
- 	135, 136, 137, 138, 139, 140, 141, 142, 
- 	143, 144, 145, 146, 147, 148, 149, 150, 
- 	151, 152, 153, 154, 155, 171, 173, 175, 
- 	177, 179, 181, 183, 185, 187, 189, 191, 
- 	193, 195, 197, 199, 201, 220, 221, 222, 
- 	223, 224, 225, 226, 227, 228, 229, 230, 
- 	237, 239, 241, 243, 245, 247, 249, 251, 
- 	252, 253, 254, 255, 256, 257, 258, 259, 
- 	260, 272, 274, 276, 278, 280, 282, 284, 
- 	286, 288, 290, 292, 294, 296, 298, 300, 
- 	302, 304, 306, 308, 310, 312, 314, 316, 
- 	318, 320, 322, 324, 326, 328, 330, 332, 
- 	334, 336, 338, 340, 342, 344, 346, 348, 
- 	350, 352, 354, 356, 358, 360, 362, 364, 
- 	366, 368, 370, 372, 374, 376, 378, 380, 
- 	382, 384, 386, 388, 390, 392, 394, 396, 
- 	398, 400, 402, 404, 406, 408, 410, 412, 
- 	414, 416, 418, 419, 420, 421, 422, 423, 
- 	424, 425, 426, 427, 428, 429, 430, 431, 
- 	432, 433, 434, 435, 436, 437, 438, 439, 
- 	440, 441, 457, 459, 461, 463, 465, 467, 
- 	469, 471, 473, 475, 477, 479, 481, 483, 
- 	485, 487, 489, 491, 493, 497, 499, 501, 
- 	503, 505, 507, 509, 511, 513, 515, 517, 
- 	519, 521, 523, 525, 527, 529, 531, 533, 
- 	535, 537, 539, 541, 543, 545, 547, 549, 
- 	551, 553, 555, 557, 559, 561, 563, 565, 
- 	567, 569, 571, 573, 575, 577, 579, 581, 
- 	583, 585, 587, 589, 591, 593, 595, 597, 
- 	599, 601, 603, 605, 607, 609, 611, 613, 
- 	615, 618, 620, 622, 624, 626, 628, 630, 
- 	632, 634, 636, 638, 640, 642, 644, 646, 
- 	648, 650, 652, 654, 657, 659, 661, 663, 
- 	665, 667, 669, 671, 673, 675, 677, 679, 
- 	681, 683, 685, 687, 689, 691, 693, 695, 
- 	697, 699, 700, 701, 702, 703, 704, 705, 
- 	706, 707, 708, 709, 710, 711, 712, 713, 
- 	729, 731, 733, 735, 737, 739, 741, 743, 
- 	745, 747, 749, 751, 753, 755, 757, 759, 
- 	761, 763, 765, 768, 770, 772, 774, 776, 
- 	778, 780, 782, 784, 786, 788, 790, 792, 
- 	794, 796, 798, 800, 802, 804, 806, 808, 
- 	810, 812, 814, 816, 818, 820, 822, 824, 
- 	826, 828, 830, 832, 834, 836, 838, 840, 
- 	842, 844, 846, 848, 850, 852, 854, 856, 
- 	858, 860, 862, 864, 866, 868, 871, 873, 
- 	875, 877, 879, 881, 883, 885, 887, 889, 
- 	891, 893, 895, 897, 899, 901, 903, 905, 
- 	907, 909, 911, 912, 913, 914, 915, 916, 
- 	917, 918, 919, 920, 921, 923, 924, 925, 
- 	926, 927, 928, 929, 930, 931, 932, 933, 
- 	934, 935, 936, 937, 938, 939, 940, 941, 
- 	942, 943, 947, 953, 956, 958, 964, 983, 
- 	985, 987, 989, 992, 994, 996, 998, 1000, 
- 	1002, 1004, 1006, 1008, 1010, 1012, 1014, 1016, 
- 	1018, 1020, 1022, 1024, 1026, 1028, 1030, 1032, 
- 	1034, 1036, 1038, 1040, 1042, 1044, 1046, 1048, 
- 	1050, 1052, 1054, 1056, 1058, 1060, 1062, 1064, 
- 	1066, 1068, 1070, 1072, 1075, 1077, 1079, 1081, 
- 	1083, 1085, 1087, 1089, 1091, 1093, 1095, 1097, 
- 	1099, 1101, 1103, 1105, 1107, 1109, 1111, 1114, 
- 	1116, 1118, 1120, 1122, 1124, 1126, 1128, 1130, 
- 	1132, 1134, 1136, 1138, 1140, 1142, 1144, 1146, 
- 	1148, 1150, 1152, 1154
- };
- 
- static const char _lexer_trans_keys[] = {
- 	-17, 10, 32, 34, 35, 37, 42, 64, 
- 	65, 66, 68, 69, 70, 71, 84, 87, 
- 	89, 124, 9, 13, -69, -65, 10, 32, 
- 	34, 35, 37, 42, 64, 65, 66, 68, 
- 	69, 70, 71, 84, 87, 89, 124, 9, 
- 	13, 34, 34, 10, 13, 10, 13, 10, 
- 	32, 34, 9, 13, 10, 32, 34, 9, 
- 	13, 10, 32, 34, 9, 13, 10, 32, 
- 	34, 9, 13, 10, 32, 9, 13, 10, 
- 	32, 9, 13, 10, 13, 10, 95, 70, 
- 	69, 65, 84, 85, 82, 69, 95, 69, 
- 	78, 68, 95, 37, 32, 10, 13, 10, 
- 	13, 13, 32, 64, 9, 10, 9, 10, 
- 	13, 32, 64, 11, 12, 10, 32, 64, 
- 	9, 13, 110, 117, 104, 101, 105, 117, 
- 	110, 32, 121, 111, 117, 115, 101, 32, 
- 	103, 111, 116, 116, 97, 115, 32, 105, 
- 	115, 32, 119, 104, 97, 116, 32, 119, 
- 	101, 110, 116, 32, 100, 111, 119, 110, 
- 	58, 10, 10, 10, 32, 35, 37, 42, 
- 	64, 65, 66, 68, 70, 71, 84, 87, 
- 	89, 9, 13, 10, 95, 10, 70, 10, 
- 	69, 10, 65, 10, 84, 10, 85, 10, 
- 	82, 10, 69, 10, 95, 10, 69, 10, 
- 	78, 10, 68, 10, 95, 10, 37, 10, 
- 	32, 10, 32, 34, 35, 37, 42, 64, 
- 	65, 66, 68, 69, 70, 71, 84, 87, 
- 	89, 124, 9, 13, 120, 97, 109, 112, 
- 	108, 101, 115, 58, 10, 10, 10, 32, 
- 	35, 70, 124, 9, 13, 10, 101, 10, 
- 	97, 10, 116, 10, 117, 10, 114, 10, 
- 	101, 10, 58, 101, 97, 116, 117, 114, 
- 	101, 58, 10, 10, 10, 32, 35, 37, 
- 	64, 68, 69, 70, 84, 87, 9, 13, 
- 	10, 95, 10, 70, 10, 69, 10, 65, 
- 	10, 84, 10, 85, 10, 82, 10, 69, 
- 	10, 95, 10, 69, 10, 78, 10, 68, 
- 	10, 95, 10, 37, 10, 105, 10, 115, 
- 	10, 32, 10, 105, 10, 115, 10, 32, 
- 	10, 119, 10, 104, 10, 97, 10, 116, 
- 	10, 32, 10, 119, 10, 101, 10, 110, 
- 	10, 116, 10, 32, 10, 100, 10, 111, 
- 	10, 119, 10, 110, 10, 58, 10, 120, 
- 	10, 97, 10, 109, 10, 112, 10, 108, 
- 	10, 101, 10, 115, 10, 101, 10, 97, 
- 	10, 116, 10, 117, 10, 114, 10, 101, 
- 	10, 104, 10, 101, 10, 32, 10, 116, 
- 	10, 104, 10, 105, 10, 110, 10, 103, 
- 	10, 32, 10, 111, 10, 102, 10, 32, 
- 	10, 105, 10, 116, 10, 32, 10, 105, 
- 	10, 104, 10, 97, 10, 114, 10, 114, 
- 	10, 105, 10, 109, 10, 101, 10, 97, 
- 	10, 110, 105, 118, 117, 104, 101, 32, 
- 	116, 104, 105, 110, 103, 32, 111, 102, 
- 	32, 105, 116, 32, 105, 115, 58, 10, 
- 	10, 10, 32, 35, 37, 42, 64, 65, 
- 	66, 68, 70, 71, 84, 87, 89, 9, 
- 	13, 10, 95, 10, 70, 10, 69, 10, 
- 	65, 10, 84, 10, 85, 10, 82, 10, 
- 	69, 10, 95, 10, 69, 10, 78, 10, 
- 	68, 10, 95, 10, 37, 10, 32, 10, 
- 	110, 10, 117, 10, 104, 10, 101, 105, 
- 	117, 10, 110, 10, 32, 10, 121, 10, 
- 	111, 10, 117, 10, 115, 10, 101, 10, 
- 	32, 10, 103, 10, 111, 10, 116, 10, 
- 	116, 10, 97, 10, 115, 10, 32, 10, 
- 	105, 10, 115, 10, 32, 10, 119, 10, 
- 	104, 10, 97, 10, 116, 10, 32, 10, 
- 	119, 10, 101, 10, 110, 10, 116, 10, 
- 	32, 10, 100, 10, 111, 10, 119, 10, 
- 	110, 10, 58, 10, 101, 10, 97, 10, 
- 	116, 10, 117, 10, 114, 10, 101, 10, 
- 	105, 10, 118, 10, 117, 10, 104, 10, 
- 	101, 10, 32, 10, 116, 10, 104, 10, 
- 	105, 10, 110, 10, 103, 10, 32, 10, 
- 	111, 10, 102, 10, 32, 10, 105, 10, 
- 	116, 10, 32, 10, 105, 10, 115, 10, 
- 	104, 117, 10, 97, 10, 114, 10, 114, 
- 	10, 105, 10, 109, 10, 101, 10, 97, 
- 	10, 110, 10, 111, 10, 117, 10, 115, 
- 	10, 101, 10, 32, 10, 107, 10, 110, 
- 	10, 111, 10, 119, 10, 32, 10, 108, 
- 	119, 10, 105, 10, 107, 10, 101, 10, 
- 	32, 10, 119, 10, 104, 10, 101, 10, 
- 	104, 10, 101, 10, 110, 10, 32, 10, 
- 	121, 10, 111, 10, 117, 10, 115, 10, 
- 	101, 10, 32, 10, 103, 10, 111, 10, 
- 	116, 104, 117, 97, 114, 114, 105, 109, 
- 	101, 97, 110, 32, 105, 115, 58, 10, 
- 	10, 10, 32, 35, 37, 42, 64, 65, 
- 	66, 68, 70, 71, 84, 87, 89, 9, 
- 	13, 10, 95, 10, 70, 10, 69, 10, 
- 	65, 10, 84, 10, 85, 10, 82, 10, 
- 	69, 10, 95, 10, 69, 10, 78, 10, 
- 	68, 10, 95, 10, 37, 10, 32, 10, 
- 	110, 10, 117, 10, 104, 10, 101, 117, 
- 	10, 110, 10, 32, 10, 121, 10, 111, 
- 	10, 117, 10, 115, 10, 101, 10, 32, 
- 	10, 103, 10, 111, 10, 116, 10, 116, 
- 	10, 97, 10, 101, 10, 97, 10, 116, 
- 	10, 117, 10, 114, 10, 101, 10, 58, 
- 	10, 105, 10, 118, 10, 117, 10, 104, 
- 	10, 101, 10, 32, 10, 116, 10, 104, 
- 	10, 105, 10, 110, 10, 103, 10, 32, 
- 	10, 111, 10, 102, 10, 32, 10, 105, 
- 	10, 116, 10, 32, 10, 105, 10, 115, 
- 	10, 111, 10, 117, 10, 115, 10, 101, 
- 	10, 32, 10, 107, 10, 110, 10, 111, 
- 	10, 119, 10, 32, 10, 108, 119, 10, 
- 	105, 10, 107, 10, 101, 10, 32, 10, 
- 	119, 10, 104, 10, 101, 10, 104, 10, 
- 	101, 10, 110, 10, 32, 10, 121, 10, 
- 	111, 10, 117, 10, 115, 10, 101, 10, 
- 	32, 10, 103, 10, 111, 10, 116, 111, 
- 	117, 115, 101, 32, 107, 110, 111, 119, 
- 	32, 108, 119, 105, 107, 101, 32, 119, 
- 	104, 101, 104, 101, 110, 32, 121, 111, 
- 	117, 115, 101, 32, 103, 111, 116, 32, 
- 	124, 9, 13, 10, 32, 92, 124, 9, 
- 	13, 10, 92, 124, 10, 92, 10, 32, 
- 	92, 124, 9, 13, 10, 32, 34, 35, 
- 	37, 42, 64, 65, 66, 68, 69, 70, 
- 	71, 84, 87, 89, 124, 9, 13, 10, 
- 	110, 10, 117, 10, 104, 10, 101, 117, 
- 	10, 110, 10, 32, 10, 121, 10, 111, 
- 	10, 117, 10, 115, 10, 101, 10, 32, 
- 	10, 103, 10, 111, 10, 116, 10, 116, 
- 	10, 97, 10, 101, 10, 97, 10, 116, 
- 	10, 117, 10, 114, 10, 101, 10, 58, 
- 	10, 105, 10, 118, 10, 117, 10, 104, 
- 	10, 101, 10, 32, 10, 116, 10, 104, 
- 	10, 105, 10, 110, 10, 103, 10, 32, 
- 	10, 111, 10, 102, 10, 32, 10, 105, 
- 	10, 116, 10, 32, 10, 105, 10, 115, 
- 	10, 104, 117, 10, 97, 10, 114, 10, 
- 	114, 10, 105, 10, 109, 10, 101, 10, 
- 	97, 10, 110, 10, 111, 10, 117, 10, 
- 	115, 10, 101, 10, 32, 10, 107, 10, 
- 	110, 10, 111, 10, 119, 10, 32, 10, 
- 	108, 119, 10, 105, 10, 107, 10, 101, 
- 	10, 32, 10, 119, 10, 104, 10, 101, 
- 	10, 104, 10, 101, 10, 110, 10, 32, 
- 	10, 121, 10, 111, 10, 117, 10, 115, 
- 	10, 101, 10, 32, 10, 103, 10, 111, 
- 	10, 116, 0
- };
- 
- static const char _lexer_single_lengths[] = {
- 	0, 18, 1, 1, 17, 1, 1, 2, 
- 	2, 3, 3, 3, 3, 2, 2, 2, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	2, 2, 3, 5, 3, 1, 1, 1, 
- 	3, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 14, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 17, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 5, 
- 	2, 2, 2, 2, 2, 2, 2, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	10, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 14, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 4, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	3, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 3, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 14, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 3, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 3, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 2, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 2, 4, 3, 2, 4, 17, 2, 
- 	2, 2, 3, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 3, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 3, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 0
- };
- 
- static const char _lexer_range_lengths[] = {
- 	0, 1, 0, 0, 1, 0, 0, 0, 
- 	0, 1, 1, 1, 1, 1, 1, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 1, 1, 1, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 1, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 1, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 1, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	1, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 1, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 1, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 1, 1, 0, 0, 1, 1, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0
- };
- 
- static const short _lexer_index_offsets[] = {
- 	0, 0, 20, 22, 24, 43, 45, 47, 
- 	50, 53, 58, 63, 68, 73, 77, 81, 
- 	84, 86, 88, 90, 92, 94, 96, 98, 
- 	100, 102, 104, 106, 108, 110, 112, 114, 
- 	116, 119, 122, 127, 134, 139, 141, 143, 
- 	145, 149, 151, 153, 155, 157, 159, 161, 
- 	163, 165, 167, 169, 171, 173, 175, 177, 
- 	179, 181, 183, 185, 187, 189, 191, 193, 
- 	195, 197, 199, 201, 203, 205, 207, 209, 
- 	211, 213, 215, 217, 219, 235, 238, 241, 
- 	244, 247, 250, 253, 256, 259, 262, 265, 
- 	268, 271, 274, 277, 280, 299, 301, 303, 
- 	305, 307, 309, 311, 313, 315, 317, 319, 
- 	326, 329, 332, 335, 338, 341, 344, 347, 
- 	349, 351, 353, 355, 357, 359, 361, 363, 
- 	365, 377, 380, 383, 386, 389, 392, 395, 
- 	398, 401, 404, 407, 410, 413, 416, 419, 
- 	422, 425, 428, 431, 434, 437, 440, 443, 
- 	446, 449, 452, 455, 458, 461, 464, 467, 
- 	470, 473, 476, 479, 482, 485, 488, 491, 
- 	494, 497, 500, 503, 506, 509, 512, 515, 
- 	518, 521, 524, 527, 530, 533, 536, 539, 
- 	542, 545, 548, 551, 554, 557, 560, 563, 
- 	566, 569, 572, 575, 578, 581, 584, 587, 
- 	590, 593, 596, 598, 600, 602, 604, 606, 
- 	608, 610, 612, 614, 616, 618, 620, 622, 
- 	624, 626, 628, 630, 632, 634, 636, 638, 
- 	640, 642, 658, 661, 664, 667, 670, 673, 
- 	676, 679, 682, 685, 688, 691, 694, 697, 
- 	700, 703, 706, 709, 712, 717, 720, 723, 
- 	726, 729, 732, 735, 738, 741, 744, 747, 
- 	750, 753, 756, 759, 762, 765, 768, 771, 
- 	774, 777, 780, 783, 786, 789, 792, 795, 
- 	798, 801, 804, 807, 810, 813, 816, 819, 
- 	822, 825, 828, 831, 834, 837, 840, 843, 
- 	846, 849, 852, 855, 858, 861, 864, 867, 
- 	870, 873, 876, 879, 882, 885, 888, 891, 
- 	894, 898, 901, 904, 907, 910, 913, 916, 
- 	919, 922, 925, 928, 931, 934, 937, 940, 
- 	943, 946, 949, 952, 956, 959, 962, 965, 
- 	968, 971, 974, 977, 980, 983, 986, 989, 
- 	992, 995, 998, 1001, 1004, 1007, 1010, 1013, 
- 	1016, 1019, 1021, 1023, 1025, 1027, 1029, 1031, 
- 	1033, 1035, 1037, 1039, 1041, 1043, 1045, 1047, 
- 	1063, 1066, 1069, 1072, 1075, 1078, 1081, 1084, 
- 	1087, 1090, 1093, 1096, 1099, 1102, 1105, 1108, 
- 	1111, 1114, 1117, 1121, 1124, 1127, 1130, 1133, 
- 	1136, 1139, 1142, 1145, 1148, 1151, 1154, 1157, 
- 	1160, 1163, 1166, 1169, 1172, 1175, 1178, 1181, 
- 	1184, 1187, 1190, 1193, 1196, 1199, 1202, 1205, 
- 	1208, 1211, 1214, 1217, 1220, 1223, 1226, 1229, 
- 	1232, 1235, 1238, 1241, 1244, 1247, 1250, 1253, 
- 	1256, 1259, 1262, 1265, 1268, 1271, 1275, 1278, 
- 	1281, 1284, 1287, 1290, 1293, 1296, 1299, 1302, 
- 	1305, 1308, 1311, 1314, 1317, 1320, 1323, 1326, 
- 	1329, 1332, 1335, 1337, 1339, 1341, 1343, 1345, 
- 	1347, 1349, 1351, 1353, 1355, 1358, 1360, 1362, 
- 	1364, 1366, 1368, 1370, 1372, 1374, 1376, 1378, 
- 	1380, 1382, 1384, 1386, 1388, 1390, 1392, 1394, 
- 	1396, 1398, 1402, 1408, 1412, 1415, 1421, 1440, 
- 	1443, 1446, 1449, 1453, 1456, 1459, 1462, 1465, 
- 	1468, 1471, 1474, 1477, 1480, 1483, 1486, 1489, 
- 	1492, 1495, 1498, 1501, 1504, 1507, 1510, 1513, 
- 	1516, 1519, 1522, 1525, 1528, 1531, 1534, 1537, 
- 	1540, 1543, 1546, 1549, 1552, 1555, 1558, 1561, 
- 	1564, 1567, 1570, 1573, 1577, 1580, 1583, 1586, 
- 	1589, 1592, 1595, 1598, 1601, 1604, 1607, 1610, 
- 	1613, 1616, 1619, 1622, 1625, 1628, 1631, 1635, 
- 	1638, 1641, 1644, 1647, 1650, 1653, 1656, 1659, 
- 	1662, 1665, 1668, 1671, 1674, 1677, 1680, 1683, 
- 	1686, 1689, 1692, 1695
- };
- 
- static const short _lexer_trans_targs[] = {
- 	2, 4, 4, 5, 15, 17, 31, 34, 
- 	37, 38, 40, 93, 111, 194, 197, 336, 
- 	442, 473, 4, 0, 3, 0, 4, 0, 
- 	4, 4, 5, 15, 17, 31, 34, 37, 
- 	38, 40, 93, 111, 194, 197, 336, 442, 
- 	473, 4, 0, 6, 0, 7, 0, 9, 
- 	8, 8, 9, 8, 8, 10, 10, 11, 
- 	10, 10, 10, 10, 11, 10, 10, 10, 
- 	10, 12, 10, 10, 10, 10, 13, 10, 
- 	10, 4, 14, 14, 0, 4, 14, 14, 
- 	0, 4, 16, 15, 4, 0, 18, 0, 
- 	19, 0, 20, 0, 21, 0, 22, 0, 
- 	23, 0, 24, 0, 25, 0, 26, 0, 
- 	27, 0, 28, 0, 29, 0, 30, 0, 
- 	563, 0, 32, 0, 4, 16, 33, 4, 
- 	16, 33, 0, 0, 0, 0, 35, 36, 
- 	4, 36, 36, 34, 35, 35, 4, 36, 
- 	34, 36, 0, 31, 0, 39, 0, 31, 
- 	0, 41, 54, 37, 0, 42, 0, 43, 
- 	0, 44, 0, 45, 0, 46, 0, 47, 
- 	0, 48, 0, 49, 0, 50, 0, 51, 
- 	0, 52, 0, 53, 0, 31, 0, 55, 
- 	0, 56, 0, 57, 0, 58, 0, 59, 
- 	0, 60, 0, 61, 0, 62, 0, 63, 
- 	0, 64, 0, 65, 0, 66, 0, 67, 
- 	0, 68, 0, 69, 0, 70, 0, 71, 
- 	0, 72, 0, 73, 0, 74, 0, 76, 
- 	75, 76, 75, 76, 76, 4, 77, 91, 
- 	4, 479, 480, 482, 496, 503, 506, 523, 
- 	532, 76, 75, 76, 78, 75, 76, 79, 
- 	75, 76, 80, 75, 76, 81, 75, 76, 
- 	82, 75, 76, 83, 75, 76, 84, 75, 
- 	76, 85, 75, 76, 86, 75, 76, 87, 
- 	75, 76, 88, 75, 76, 89, 75, 76, 
- 	90, 75, 76, 4, 75, 76, 92, 75, 
- 	4, 4, 5, 15, 17, 31, 34, 37, 
- 	38, 40, 93, 111, 194, 197, 336, 442, 
- 	473, 4, 0, 94, 0, 95, 0, 96, 
- 	0, 97, 0, 98, 0, 99, 0, 100, 
- 	0, 101, 0, 103, 102, 103, 102, 103, 
- 	103, 4, 104, 4, 103, 102, 103, 105, 
- 	102, 103, 106, 102, 103, 107, 102, 103, 
- 	108, 102, 103, 109, 102, 103, 110, 102, 
- 	103, 92, 102, 112, 0, 113, 0, 114, 
- 	0, 115, 0, 116, 0, 117, 0, 118, 
- 	0, 120, 119, 120, 119, 120, 120, 4, 
- 	121, 4, 135, 156, 163, 169, 185, 120, 
- 	119, 120, 122, 119, 120, 123, 119, 120, 
- 	124, 119, 120, 125, 119, 120, 126, 119, 
- 	120, 127, 119, 120, 128, 119, 120, 129, 
- 	119, 120, 130, 119, 120, 131, 119, 120, 
- 	132, 119, 120, 133, 119, 120, 134, 119, 
- 	120, 4, 119, 120, 136, 119, 120, 137, 
- 	119, 120, 138, 119, 120, 139, 119, 120, 
- 	140, 119, 120, 141, 119, 120, 142, 119, 
- 	120, 143, 119, 120, 144, 119, 120, 145, 
- 	119, 120, 146, 119, 120, 147, 119, 120, 
- 	148, 119, 120, 149, 119, 120, 150, 119, 
- 	120, 151, 119, 120, 152, 119, 120, 153, 
- 	119, 120, 154, 119, 120, 155, 119, 120, 
- 	92, 119, 120, 157, 119, 120, 158, 119, 
- 	120, 159, 119, 120, 160, 119, 120, 161, 
- 	119, 120, 162, 119, 120, 155, 119, 120, 
- 	164, 119, 120, 165, 119, 120, 166, 119, 
- 	120, 167, 119, 120, 168, 119, 120, 155, 
- 	119, 120, 170, 119, 120, 171, 119, 120, 
- 	172, 119, 120, 173, 119, 120, 174, 119, 
- 	120, 175, 119, 120, 176, 119, 120, 177, 
- 	119, 120, 178, 119, 120, 179, 119, 120, 
- 	180, 119, 120, 181, 119, 120, 182, 119, 
- 	120, 183, 119, 120, 184, 119, 120, 162, 
- 	119, 120, 186, 119, 120, 187, 119, 120, 
- 	188, 119, 120, 189, 119, 120, 190, 119, 
- 	120, 191, 119, 120, 192, 119, 120, 193, 
- 	119, 120, 183, 119, 195, 0, 196, 0, 
- 	37, 0, 198, 0, 199, 0, 200, 0, 
- 	201, 0, 202, 0, 203, 0, 204, 0, 
- 	205, 0, 206, 0, 207, 0, 208, 0, 
- 	209, 0, 210, 0, 211, 0, 212, 0, 
- 	213, 0, 214, 0, 215, 0, 217, 216, 
- 	217, 216, 217, 217, 4, 218, 232, 4, 
- 	233, 234, 236, 270, 276, 279, 296, 305, 
- 	217, 216, 217, 219, 216, 217, 220, 216, 
- 	217, 221, 216, 217, 222, 216, 217, 223, 
- 	216, 217, 224, 216, 217, 225, 216, 217, 
- 	226, 216, 217, 227, 216, 217, 228, 216, 
- 	217, 229, 216, 217, 230, 216, 217, 231, 
- 	216, 217, 4, 216, 217, 92, 216, 217, 
- 	232, 216, 217, 235, 216, 217, 232, 216, 
- 	217, 237, 250, 233, 216, 217, 238, 216, 
- 	217, 239, 216, 217, 240, 216, 217, 241, 
- 	216, 217, 242, 216, 217, 243, 216, 217, 
- 	244, 216, 217, 245, 216, 217, 246, 216, 
- 	217, 247, 216, 217, 248, 216, 217, 249, 
- 	216, 217, 232, 216, 217, 251, 216, 217, 
- 	252, 216, 217, 253, 216, 217, 254, 216, 
- 	217, 255, 216, 217, 256, 216, 217, 257, 
- 	216, 217, 258, 216, 217, 259, 216, 217, 
- 	260, 216, 217, 261, 216, 217, 262, 216, 
- 	217, 263, 216, 217, 264, 216, 217, 265, 
- 	216, 217, 266, 216, 217, 267, 216, 217, 
- 	268, 216, 217, 269, 216, 217, 92, 216, 
- 	217, 271, 216, 217, 272, 216, 217, 273, 
- 	216, 217, 274, 216, 217, 275, 216, 217, 
- 	269, 216, 217, 277, 216, 217, 278, 216, 
- 	217, 233, 216, 217, 280, 216, 217, 281, 
- 	216, 217, 282, 216, 217, 283, 216, 217, 
- 	284, 216, 217, 285, 216, 217, 286, 216, 
- 	217, 287, 216, 217, 288, 216, 217, 289, 
- 	216, 217, 290, 216, 217, 291, 216, 217, 
- 	292, 216, 217, 293, 216, 217, 294, 216, 
- 	217, 295, 216, 217, 269, 216, 217, 297, 
- 	233, 216, 217, 298, 216, 217, 299, 216, 
- 	217, 300, 216, 217, 301, 216, 217, 302, 
- 	216, 217, 303, 216, 217, 304, 216, 217, 
- 	293, 216, 217, 306, 216, 217, 307, 216, 
- 	217, 308, 216, 217, 309, 216, 217, 310, 
- 	216, 217, 311, 216, 217, 312, 216, 217, 
- 	313, 216, 217, 314, 216, 217, 315, 216, 
- 	217, 316, 323, 216, 217, 317, 216, 217, 
- 	318, 216, 217, 319, 216, 217, 320, 216, 
- 	217, 321, 216, 217, 322, 216, 217, 233, 
- 	216, 217, 324, 216, 217, 325, 216, 217, 
- 	326, 216, 217, 327, 216, 217, 328, 216, 
- 	217, 329, 216, 217, 330, 216, 217, 331, 
- 	216, 217, 332, 216, 217, 333, 216, 217, 
- 	334, 216, 217, 335, 216, 217, 232, 216, 
- 	337, 37, 0, 338, 0, 339, 0, 340, 
- 	0, 341, 0, 342, 0, 343, 0, 344, 
- 	0, 345, 0, 346, 0, 347, 0, 348, 
- 	0, 349, 0, 351, 350, 351, 350, 351, 
- 	351, 4, 352, 366, 4, 367, 368, 370, 
- 	384, 391, 394, 393, 411, 351, 350, 351, 
- 	353, 350, 351, 354, 350, 351, 355, 350, 
- 	351, 356, 350, 351, 357, 350, 351, 358, 
- 	350, 351, 359, 350, 351, 360, 350, 351, 
- 	361, 350, 351, 362, 350, 351, 363, 350, 
- 	351, 364, 350, 351, 365, 350, 351, 4, 
- 	350, 351, 92, 350, 351, 366, 350, 351, 
- 	369, 350, 351, 366, 350, 351, 371, 367, 
- 	350, 351, 372, 350, 351, 373, 350, 351, 
- 	374, 350, 351, 375, 350, 351, 376, 350, 
- 	351, 377, 350, 351, 378, 350, 351, 379, 
- 	350, 351, 380, 350, 351, 381, 350, 351, 
- 	382, 350, 351, 383, 350, 351, 366, 350, 
- 	351, 385, 350, 351, 386, 350, 351, 387, 
- 	350, 351, 388, 350, 351, 389, 350, 351, 
- 	390, 350, 351, 92, 350, 351, 392, 350, 
- 	351, 393, 350, 351, 367, 350, 351, 395, 
- 	350, 351, 396, 350, 351, 397, 350, 351, 
- 	398, 350, 351, 399, 350, 351, 400, 350, 
- 	351, 401, 350, 351, 402, 350, 351, 403, 
- 	350, 351, 404, 350, 351, 405, 350, 351, 
- 	406, 350, 351, 407, 350, 351, 408, 350, 
- 	351, 409, 350, 351, 410, 350, 351, 390, 
- 	350, 351, 412, 350, 351, 413, 350, 351, 
- 	414, 350, 351, 415, 350, 351, 416, 350, 
- 	351, 417, 350, 351, 418, 350, 351, 419, 
- 	350, 351, 420, 350, 351, 421, 350, 351, 
- 	422, 429, 350, 351, 423, 350, 351, 424, 
- 	350, 351, 425, 350, 351, 426, 350, 351, 
- 	427, 350, 351, 428, 350, 351, 367, 350, 
- 	351, 430, 350, 351, 431, 350, 351, 432, 
- 	350, 351, 433, 350, 351, 434, 350, 351, 
- 	435, 350, 351, 436, 350, 351, 437, 350, 
- 	351, 438, 350, 351, 439, 350, 351, 440, 
- 	350, 351, 441, 350, 351, 366, 350, 443, 
- 	0, 444, 0, 445, 0, 446, 0, 447, 
- 	0, 448, 0, 449, 0, 450, 0, 451, 
- 	0, 452, 0, 453, 460, 0, 454, 0, 
- 	455, 0, 456, 0, 457, 0, 458, 0, 
- 	459, 0, 37, 0, 461, 0, 462, 0, 
- 	463, 0, 464, 0, 465, 0, 466, 0, 
- 	467, 0, 468, 0, 469, 0, 470, 0, 
- 	471, 0, 472, 0, 31, 0, 473, 474, 
- 	473, 0, 478, 477, 476, 474, 477, 475, 
- 	0, 476, 474, 475, 0, 476, 475, 478, 
- 	477, 476, 474, 477, 475, 478, 478, 5, 
- 	15, 17, 31, 34, 37, 38, 40, 93, 
- 	111, 194, 197, 336, 442, 473, 478, 0, 
- 	76, 91, 75, 76, 481, 75, 76, 91, 
- 	75, 76, 483, 479, 75, 76, 484, 75, 
- 	76, 485, 75, 76, 486, 75, 76, 487, 
- 	75, 76, 488, 75, 76, 489, 75, 76, 
- 	490, 75, 76, 491, 75, 76, 492, 75, 
- 	76, 493, 75, 76, 494, 75, 76, 495, 
- 	75, 76, 91, 75, 76, 497, 75, 76, 
- 	498, 75, 76, 499, 75, 76, 500, 75, 
- 	76, 501, 75, 76, 502, 75, 76, 92, 
- 	75, 76, 504, 75, 76, 505, 75, 76, 
- 	479, 75, 76, 507, 75, 76, 508, 75, 
- 	76, 509, 75, 76, 510, 75, 76, 511, 
- 	75, 76, 512, 75, 76, 513, 75, 76, 
- 	514, 75, 76, 515, 75, 76, 516, 75, 
- 	76, 517, 75, 76, 518, 75, 76, 519, 
- 	75, 76, 520, 75, 76, 521, 75, 76, 
- 	522, 75, 76, 502, 75, 76, 524, 479, 
- 	75, 76, 525, 75, 76, 526, 75, 76, 
- 	527, 75, 76, 528, 75, 76, 529, 75, 
- 	76, 530, 75, 76, 531, 75, 76, 520, 
- 	75, 76, 533, 75, 76, 534, 75, 76, 
- 	535, 75, 76, 536, 75, 76, 537, 75, 
- 	76, 538, 75, 76, 539, 75, 76, 540, 
- 	75, 76, 541, 75, 76, 542, 75, 76, 
- 	543, 550, 75, 76, 544, 75, 76, 545, 
- 	75, 76, 546, 75, 76, 547, 75, 76, 
- 	548, 75, 76, 549, 75, 76, 479, 75, 
- 	76, 551, 75, 76, 552, 75, 76, 553, 
- 	75, 76, 554, 75, 76, 555, 75, 76, 
- 	556, 75, 76, 557, 75, 76, 558, 75, 
- 	76, 559, 75, 76, 560, 75, 76, 561, 
- 	75, 76, 562, 75, 76, 91, 75, 0, 
- 	0
- };
- 
- static const unsigned char _lexer_trans_actions[] = {
- 	0, 54, 0, 5, 1, 0, 29, 1, 
- 	29, 29, 29, 29, 29, 29, 29, 29, 
- 	29, 35, 0, 43, 0, 43, 0, 43, 
- 	54, 0, 5, 1, 0, 29, 1, 29, 
- 	29, 29, 29, 29, 29, 29, 29, 29, 
- 	35, 0, 43, 0, 43, 0, 43, 139, 
- 	48, 9, 106, 11, 0, 134, 45, 45, 
- 	45, 3, 122, 33, 33, 33, 0, 122, 
- 	33, 33, 33, 0, 122, 33, 0, 33, 
- 	0, 102, 7, 7, 43, 54, 0, 0, 
- 	43, 114, 25, 0, 54, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 149, 126, 57, 110, 
- 	23, 0, 43, 43, 43, 43, 0, 27, 
- 	118, 27, 27, 51, 27, 0, 54, 0, 
- 	1, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 0, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 144, 
- 	57, 54, 0, 54, 0, 72, 33, 84, 
- 	72, 84, 84, 84, 84, 84, 84, 84, 
- 	84, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 15, 0, 54, 15, 0, 
- 	130, 31, 60, 57, 31, 63, 57, 63, 
- 	63, 63, 63, 63, 63, 63, 63, 63, 
- 	66, 31, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 144, 57, 54, 0, 54, 
- 	0, 81, 84, 81, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 21, 0, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 144, 57, 54, 0, 54, 0, 69, 
- 	33, 69, 84, 84, 84, 84, 84, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 13, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	13, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 144, 57, 
- 	54, 0, 54, 0, 75, 33, 84, 75, 
- 	84, 84, 84, 84, 84, 84, 84, 84, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 17, 0, 54, 17, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 17, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	0, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 144, 57, 54, 0, 54, 
- 	0, 78, 33, 84, 78, 84, 84, 84, 
- 	84, 84, 84, 84, 84, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 19, 
- 	0, 54, 19, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 19, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 0, 
- 	0, 43, 54, 37, 37, 87, 37, 37, 
- 	43, 0, 39, 0, 43, 0, 0, 54, 
- 	0, 0, 39, 0, 0, 54, 0, 93, 
- 	90, 41, 96, 90, 96, 96, 96, 96, 
- 	96, 96, 96, 96, 96, 99, 0, 43, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 15, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 0, 
- 	0
- };
- 
- static const unsigned char _lexer_eof_actions[] = {
- 	0, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43
- };
- 
- static const int lexer_start = 1;
- static const int lexer_first_final = 563;
- static const int lexer_error = 0;
- 
- static const int lexer_en_main = 1;
- 
- 
- #line 258 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
- 
- static VALUE 
- unindent(VALUE con, int start_col)
- {
-   VALUE re;
-   // Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters
-   char pat[32]; 
-   snprintf(pat, 32, "^[\t ]{0,%d}", start_col); 
-   re = rb_reg_regcomp(rb_str_new2(pat));
-   rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2(""));
- 
-   return Qnil;
- 
- }
- 
- static void 
- store_kw_con(VALUE listener, const char * event_name, 
-              const char * keyword_at, size_t keyword_length, 
-              const char * at,         size_t length, 
-              int current_line)
- {
-   VALUE con = Qnil, kw = Qnil;
-   kw = ENCODED_STR_NEW(keyword_at, keyword_length);
-   con = ENCODED_STR_NEW(at, length);
-   rb_funcall(con, rb_intern("strip!"), 0);
-   rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); 
- }
- 
- static void
- store_multiline_kw_con(VALUE listener, const char * event_name,
-                       const char * keyword_at, size_t keyword_length,
-                       const char * at,         size_t length,
-                       int current_line, int start_col)
- {
-   VALUE split;
-   VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil;
- 
-   kw = ENCODED_STR_NEW(keyword_at, keyword_length);
-   con = ENCODED_STR_NEW(at, length);
- 
-   unindent(con, start_col);
-   
-   split = rb_str_split(con, "\n");
- 
-   name = rb_funcall(split, rb_intern("shift"), 0);
-   desc = rb_ary_join(split, rb_str_new2( "\n" ));
- 
-   if( name == Qnil ) 
-   {
-     name = rb_str_new2("");
-   }
-   if( rb_funcall(desc, rb_intern("size"), 0) == 0) 
-   {
-     desc = rb_str_new2("");
-   }
-   rb_funcall(name, rb_intern("strip!"), 0);
-   rb_funcall(desc, rb_intern("rstrip!"), 0);
-   rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); 
- }
- 
- static void 
- store_attr(VALUE listener, const char * attr_type,
-            const char * at, size_t length, 
-            int line)
- {
-   VALUE val = ENCODED_STR_NEW(at, length);
-   rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line));
- }
- static void 
- store_docstring_content(VALUE listener, 
-           int start_col, 
-           const char *type_at, size_t type_length,
-           const char *at, size_t length, 
-           int current_line)
- {
-   VALUE re2;
-   VALUE unescape_escaped_quotes;
-   VALUE con = ENCODED_STR_NEW(at, length);
-   VALUE con_type = ENCODED_STR_NEW(type_at, type_length);
- 
-   unindent(con, start_col);
- 
-   re2 = rb_reg_regcomp(rb_str_new2("\r\\Z"));
-   unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\""));
-   rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2(""));
-   rb_funcall(con_type, rb_intern("strip!"), 0);
-   rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\""));
-   rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line));
- }
- static void 
- raise_lexer_error(const char * at, int line)
- { 
-   rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at);
- }
- 
- static void lexer_init(lexer_state *lexer) {
-   lexer->content_start = 0;
-   lexer->content_end = 0;
-   lexer->content_len = 0;
-   lexer->docstring_content_type_start = 0;
-   lexer->docstring_content_type_end = 0;
-   lexer->mark = 0;
-   lexer->keyword_start = 0;
-   lexer->keyword_end = 0;
-   lexer->next_keyword_start = 0;
-   lexer->line_number = 1;
-   lexer->last_newline = 0;
-   lexer->final_newline = 0;
-   lexer->start_col = 0;
- }
- 
- static VALUE CLexer_alloc(VALUE klass)
- {
-   VALUE obj;
-   lexer_state *lxr = ALLOC(lexer_state);
-   lexer_init(lxr);
- 
-   obj = Data_Wrap_Struct(klass, NULL, -1, lxr);
- 
-   return obj;
- }
- 
- static VALUE CLexer_init(VALUE self, VALUE listener)
- {
-   lexer_state *lxr; 
-   rb_iv_set(self, "@listener", listener);
-   
-   lxr = NULL;
-   DATA_GET(self, lexer_state, lxr);
-   lexer_init(lxr);
-   
-   return self;
- }
- 
- static VALUE CLexer_scan(VALUE self, VALUE input)
- {
-   VALUE input_copy;
-   char *data;
-   size_t len;
-   VALUE listener = rb_iv_get(self, "@listener");
- 
-   lexer_state *lexer;
-   lexer = NULL;
-   DATA_GET(self, lexer_state, lexer);
- 
-   input_copy = rb_str_dup(input);
- 
-   rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%"));
-   data = RSTRING_PTR(input_copy);
-   len = RSTRING_LEN(input_copy);
-   
-   if (len == 0) { 
-     rb_raise(rb_eGherkinLexingError, "No content to lex.");
-   } else {
- 
-     const char *p, *pe, *eof;
-     int cs = 0;
-     
-     VALUE current_row = Qnil;
- 
-     p = data;
-     pe = data + len;
-     eof = pe;
-     
-     assert(*pe == '\0' && "pointer does not end on NULL");
-     
-     
- #line 1238 "ext/gherkin_lexer_en_scouse/gherkin_lexer_en_scouse.c"
- 	{
- 	cs = lexer_start;
- 	}
- 
- #line 425 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
-     
- #line 1245 "ext/gherkin_lexer_en_scouse/gherkin_lexer_en_scouse.c"
- 	{
- 	int _klen;
- 	unsigned int _trans;
- 	const char *_acts;
- 	unsigned int _nacts;
- 	const char *_keys;
- 
- 	if ( p == pe )
- 		goto _test_eof;
- 	if ( cs == 0 )
- 		goto _out;
- _resume:
- 	_keys = _lexer_trans_keys + _lexer_key_offsets[cs];
- 	_trans = _lexer_index_offsets[cs];
- 
- 	_klen = _lexer_single_lengths[cs];
- 	if ( _klen > 0 ) {
- 		const char *_lower = _keys;
- 		const char *_mid;
- 		const char *_upper = _keys + _klen - 1;
- 		while (1) {
- 			if ( _upper < _lower )
- 				break;
- 
- 			_mid = _lower + ((_upper-_lower) >> 1);
- 			if ( (*p) < *_mid )
- 				_upper = _mid - 1;
- 			else if ( (*p) > *_mid )
- 				_lower = _mid + 1;
- 			else {
- 				_trans += (_mid - _keys);
- 				goto _match;
- 			}
- 		}
- 		_keys += _klen;
- 		_trans += _klen;
- 	}
- 
- 	_klen = _lexer_range_lengths[cs];
- 	if ( _klen > 0 ) {
- 		const char *_lower = _keys;
- 		const char *_mid;
- 		const char *_upper = _keys + (_klen<<1) - 2;
- 		while (1) {
- 			if ( _upper < _lower )
- 				break;
- 
- 			_mid = _lower + (((_upper-_lower) >> 1) & ~1);
- 			if ( (*p) < _mid[0] )
- 				_upper = _mid - 2;
- 			else if ( (*p) > _mid[1] )
- 				_lower = _mid + 2;
- 			else {
- 				_trans += ((_mid - _keys)>>1);
- 				goto _match;
- 			}
- 		}
- 		_trans += _klen;
- 	}
- 
- _match:
- 	cs = _lexer_trans_targs[_trans];
- 
- 	if ( _lexer_trans_actions[_trans] == 0 )
- 		goto _again;
- 
- 	_acts = _lexer_actions + _lexer_trans_actions[_trans];
- 	_nacts = (unsigned int) *_acts++;
- 	while ( _nacts-- > 0 )
- 	{
- 		switch ( *_acts++ )
- 		{
- 	case 0:
- #line 83 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
- 	{
- 		MARK(content_start, p);
-     lexer->current_line = lexer->line_number;
-     lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2;
-   }
- 	break;
- 	case 1:
- #line 89 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
- 	{
-     MARK(content_start, p);
-   }
- 	break;
- 	case 2:
- #line 93 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
- 	{
-     lexer->current_line = lexer->line_number;
-     lexer->start_col = p - data - lexer->last_newline;
-   }
- 	break;
- 	case 3:
- #line 98 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
- 	{
-     int len = LEN(content_start, PTR_TO(final_newline));
-     int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end));
- 
-     if (len < 0) len = 0;
-     if (type_len < 0) len = 0;
- 
-     store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line);
-   }
- 	break;
- 	case 4:
- #line 108 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
- 	{ 
-     MARK(docstring_content_type_start, p);
-   }
- 	break;
- 	case 5:
- #line 112 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
- 	{ 
-     MARK(docstring_content_type_end, p);
-   }
- 	break;
- 	case 6:
- #line 116 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
- 	{
-     STORE_KW_END_CON(feature);
-   }
- 	break;
- 	case 7:
- #line 120 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
- 	{
-     STORE_KW_END_CON(background);
-   }
- 	break;
- 	case 8:
- #line 124 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
- 	{
-     STORE_KW_END_CON(scenario);
-   }
- 	break;
- 	case 9:
- #line 128 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
- 	{
-     STORE_KW_END_CON(scenario_outline);
-   }
- 	break;
- 	case 10:
- #line 132 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
- 	{
-     STORE_KW_END_CON(examples);
-   }
- 	break;
- 	case 11:
- #line 136 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
- 	{
-     store_kw_con(listener, "step",
-       PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-       PTR_TO(content_start), LEN(content_start, p), 
-       lexer->current_line);
-   }
- 	break;
- 	case 12:
- #line 143 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
- 	{
-     STORE_ATTR(comment);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 13:
- #line 148 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
- 	{
-     STORE_ATTR(tag);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 14:
- #line 153 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
- 	{
-     lexer->line_number += 1;
-     MARK(final_newline, p);
-   }
- 	break;
- 	case 15:
- #line 158 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
- 	{
-     MARK(last_newline, p + 1);
-   }
- 	break;
- 	case 16:
- #line 162 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
- 	{
-     if (lexer->mark == 0) {
-       MARK(mark, p);
-     }
-   }
- 	break;
- 	case 17:
- #line 168 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
- 	{
-     MARK(keyword_end, p);
-     MARK(keyword_start, PTR_TO(mark));
-     MARK(content_start, p + 1);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 18:
- #line 175 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
- 	{
-     MARK(content_end, p);
-   }
- 	break;
- 	case 19:
- #line 179 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
- 	{
-     p = p - 1;
-     lexer->current_line = lexer->line_number;
-     current_row = rb_ary_new();
-   }
- 	break;
- 	case 20:
- #line 185 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
- 	{
- 		MARK(content_start, p);
-   }
- 	break;
- 	case 21:
- #line 189 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
- 	{
-     VALUE re_pipe, re_newline, re_backslash;
-     VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
-     rb_funcall(con, rb_intern("strip!"), 0);
-     re_pipe      = rb_reg_regcomp(rb_str_new2("\\\\\\|"));
-     re_newline   = rb_reg_regcomp(rb_str_new2("\\\\n"));
-     re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_pipe,      rb_str_new2("|"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_newline,   rb_str_new2("\n"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\"));
- 
-     rb_ary_push(current_row, con);
-   }
- 	break;
- 	case 22:
- #line 203 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
- 	{
-     rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
-   }
- 	break;
- 	case 23:
- #line 207 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
- 	{
-     int line;
-     if (cs < lexer_first_final) {
-       size_t count = 0;
-       VALUE newstr_val;
-       char *newstr;
-       int newstr_count = 0;        
-       size_t len;
-       const char *buff;
-       if (lexer->last_newline != 0) {
-         len = LEN(last_newline, eof);
-         buff = PTR_TO(last_newline);
-       } else {
-         len = strlen(data);
-         buff = data;
-       }
- 
-       // Allocate as a ruby string so that it gets cleaned up by GC
-       newstr_val = rb_str_new(buff, len);
-       newstr = RSTRING_PTR(newstr_val);
- 
- 
-       for (count = 0; count < len; count++) {
-         if(buff[count] == 10) {
-           newstr[newstr_count] = '\0'; // terminate new string at first newline found
-           break;
-         } else {
-           if (buff[count] == '%') {
-             newstr[newstr_count++] = buff[count];
-             newstr[newstr_count] = buff[count];
-           } else {
-             newstr[newstr_count] = buff[count];
-           }
-         }
-         newstr_count++;
-       }
- 
-       line = lexer->line_number;
-       lexer_init(lexer); // Re-initialize so we can scan again with the same lexer
-       raise_lexer_error(newstr, line);
-     } else {
-       rb_funcall(listener, rb_intern("eof"), 0);
-     }
-   }
- 	break;
- #line 1535 "ext/gherkin_lexer_en_scouse/gherkin_lexer_en_scouse.c"
- 		}
- 	}
- 
- _again:
- 	if ( cs == 0 )
- 		goto _out;
- 	if ( ++p != pe )
- 		goto _resume;
- 	_test_eof: {}
- 	if ( p == eof )
- 	{
- 	const char *__acts = _lexer_actions + _lexer_eof_actions[cs];
- 	unsigned int __nacts = (unsigned int) *__acts++;
- 	while ( __nacts-- > 0 ) {
- 		switch ( *__acts++ ) {
- 	case 23:
- #line 207 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
- 	{
-     int line;
-     if (cs < lexer_first_final) {
-       size_t count = 0;
-       VALUE newstr_val;
-       char *newstr;
-       int newstr_count = 0;        
-       size_t len;
-       const char *buff;
-       if (lexer->last_newline != 0) {
-         len = LEN(last_newline, eof);
-         buff = PTR_TO(last_newline);
-       } else {
-         len = strlen(data);
-         buff = data;
-       }
- 
-       // Allocate as a ruby string so that it gets cleaned up by GC
-       newstr_val = rb_str_new(buff, len);
-       newstr = RSTRING_PTR(newstr_val);
- 
- 
-       for (count = 0; count < len; count++) {
-         if(buff[count] == 10) {
-           newstr[newstr_count] = '\0'; // terminate new string at first newline found
-           break;
-         } else {
-           if (buff[count] == '%') {
-             newstr[newstr_count++] = buff[count];
-             newstr[newstr_count] = buff[count];
-           } else {
-             newstr[newstr_count] = buff[count];
-           }
-         }
-         newstr_count++;
-       }
- 
-       line = lexer->line_number;
-       lexer_init(lexer); // Re-initialize so we can scan again with the same lexer
-       raise_lexer_error(newstr, line);
-     } else {
-       rb_funcall(listener, rb_intern("eof"), 0);
-     }
-   }
- 	break;
- #line 1598 "ext/gherkin_lexer_en_scouse/gherkin_lexer_en_scouse.c"
- 		}
- 	}
- 	}
- 
- 	_out: {}
- 	}
- 
- #line 426 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_scouse.c.rl"
- 
-     assert(p <= pe && "data overflow after parsing execute");
-     assert(lexer->content_start <= len && "content starts after data end");
-     assert(lexer->mark < len && "mark is after data end");
-     
-     // Reset lexer by re-initializing the whole thing
-     lexer_init(lexer);
- 
-     if (cs == lexer_error) {
-       rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails.");
-     } else {
-       return Qtrue;
-     }
-   }
- }
- 
- void Init_gherkin_lexer_en_scouse()
- {
-   mGherkin = rb_define_module("Gherkin");
-   mGherkinLexer = rb_define_module_under(mGherkin, "Lexer");
-   rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError"));
- 
-   mCLexer = rb_define_module_under(mGherkin, "CLexer");
-   cI18nLexer = rb_define_class_under(mCLexer, "En_scouse", rb_cObject);
-   rb_define_alloc_func(cI18nLexer, CLexer_alloc);
-   rb_define_method(cI18nLexer, "initialize", CLexer_init, 1);
-   rb_define_method(cI18nLexer, "scan", CLexer_scan, 1);
- }
- 
 -#line 1 "ragel/i18n/en_scouse.c.rl"
 -#include <assert.h>
 -#include <ruby.h>
 -
 -#if defined(_WIN32)
 -#include <stddef.h>
 -#endif
 -
 -#ifdef HAVE_RUBY_RE_H
 -#include <ruby/re.h>
 -#else
 -#include <re.h>
 -#endif
 -
 -#ifdef HAVE_RUBY_ENCODING_H
 -#include <ruby/encoding.h>
 -#define ENCODED_STR_NEW(ptr, len) \
 -    rb_enc_str_new(ptr, len, rb_utf8_encoding())
 -#else
 -#define ENCODED_STR_NEW(ptr, len) \
 -    rb_str_new(ptr, len)
 -#endif
 -
 -#ifndef RSTRING_PTR
 -#define RSTRING_PTR(s) (RSTRING(s)->ptr)
 -#endif
 -
 -#ifndef RSTRING_LEN
 -#define RSTRING_LEN(s) (RSTRING(s)->len)
 -#endif
 -
 -#define DATA_GET(FROM, TYPE, NAME) \
 -  Data_Get_Struct(FROM, TYPE, NAME); \
 -  if (NAME == NULL) { \
 -    rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \
 -  }
 - 
 -typedef struct lexer_state {
 -  int content_len;
 -  int line_number;
 -  int current_line;
 -  int start_col;
 -  size_t mark;
 -  size_t keyword_start;
 -  size_t keyword_end;
 -  size_t next_keyword_start;
 -  size_t content_start;
 -  size_t content_end;
 -  size_t docstring_content_type_start;
 -  size_t docstring_content_type_end;
 -  size_t query_start;
 -  size_t last_newline;
 -  size_t final_newline;
 -} lexer_state;
 -
 -static VALUE mGherkin;
 -static VALUE mGherkinLexer;
 -static VALUE mCLexer;
 -static VALUE cI18nLexer;
 -static VALUE rb_eGherkinLexingError;
 -
 -#define LEN(AT, P) (P - data - lexer->AT)
 -#define MARK(M, P) (lexer->M = (P) - data)
 -#define PTR_TO(P) (data + lexer->P)
 -
 -#define STORE_KW_END_CON(EVENT) \
 -  store_multiline_kw_con(listener, # EVENT, \
 -    PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \
 -    PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \
 -    lexer->current_line, lexer->start_col); \
 -    if (lexer->content_end != 0) { \
 -      p = PTR_TO(content_end - 1); \
 -    } \
 -    lexer->content_end = 0
 -
 -#define STORE_ATTR(ATTR) \
 -    store_attr(listener, # ATTR, \
 -      PTR_TO(content_start), LEN(content_start, p), \
 -      lexer->line_number)
 -
 -
 -#line 254 "ragel/i18n/en_scouse.c.rl"
 -
 -
 -/** Data **/
 -
 -#line 89 "ext/gherkin_lexer_en_scouse/gherkin_lexer_en_scouse.c"
 -static const char _lexer_actions[] = {
 -	0, 1, 0, 1, 1, 1, 2, 1, 
 -	3, 1, 4, 1, 5, 1, 6, 1, 
 -	7, 1, 8, 1, 9, 1, 10, 1, 
 -	11, 1, 12, 1, 13, 1, 16, 1, 
 -	17, 1, 18, 1, 19, 1, 20, 1, 
 -	21, 1, 22, 1, 23, 2, 1, 18, 
 -	2, 4, 5, 2, 13, 0, 2, 14, 
 -	15, 2, 17, 0, 2, 17, 2, 2, 
 -	17, 16, 2, 17, 19, 2, 18, 6, 
 -	2, 18, 7, 2, 18, 8, 2, 18, 
 -	9, 2, 18, 10, 2, 18, 16, 2, 
 -	20, 21, 2, 22, 0, 2, 22, 2, 
 -	2, 22, 16, 2, 22, 19, 3, 3, 
 -	14, 15, 3, 5, 14, 15, 3, 11, 
 -	14, 15, 3, 12, 14, 15, 3, 13, 
 -	14, 15, 3, 14, 15, 18, 3, 17, 
 -	0, 11, 3, 17, 14, 15, 4, 1, 
 -	14, 15, 18, 4, 4, 5, 14, 15, 
 -	4, 17, 0, 14, 15, 5, 17, 0, 
 -	11, 14, 15
 -};
 -
 -static const short _lexer_key_offsets[] = {
 -	0, 0, 20, 21, 22, 41, 42, 43, 
 -	45, 47, 52, 57, 62, 67, 71, 75, 
 -	77, 78, 79, 80, 81, 82, 83, 84, 
 -	85, 86, 87, 88, 89, 90, 91, 92, 
 -	93, 95, 97, 102, 109, 114, 115, 116, 
 -	117, 120, 121, 122, 123, 124, 125, 126, 
 -	127, 128, 129, 130, 131, 132, 133, 134, 
 -	135, 136, 137, 138, 139, 140, 141, 142, 
 -	143, 144, 145, 146, 147, 148, 149, 150, 
 -	151, 152, 153, 154, 155, 171, 173, 175, 
 -	177, 179, 181, 183, 185, 187, 189, 191, 
 -	193, 195, 197, 199, 201, 220, 221, 222, 
 -	223, 224, 225, 226, 227, 228, 229, 230, 
 -	237, 239, 241, 243, 245, 247, 249, 251, 
 -	252, 253, 254, 255, 256, 257, 258, 259, 
 -	260, 272, 274, 276, 278, 280, 282, 284, 
 -	286, 288, 290, 292, 294, 296, 298, 300, 
 -	302, 304, 306, 308, 310, 312, 314, 316, 
 -	318, 320, 322, 324, 326, 328, 330, 332, 
 -	334, 336, 338, 340, 342, 344, 346, 348, 
 -	350, 352, 354, 356, 358, 360, 362, 364, 
 -	366, 368, 370, 372, 374, 376, 378, 380, 
 -	382, 384, 386, 388, 390, 392, 394, 396, 
 -	398, 400, 402, 404, 406, 408, 410, 412, 
 -	414, 416, 418, 419, 420, 421, 422, 423, 
 -	424, 425, 426, 427, 428, 429, 430, 431, 
 -	432, 433, 434, 435, 436, 437, 438, 439, 
 -	440, 441, 457, 459, 461, 463, 465, 467, 
 -	469, 471, 473, 475, 477, 479, 481, 483, 
 -	485, 487, 489, 491, 493, 497, 499, 501, 
 -	503, 505, 507, 509, 511, 513, 515, 517, 
 -	519, 521, 523, 525, 527, 529, 531, 533, 
 -	535, 537, 539, 541, 543, 545, 547, 549, 
 -	551, 553, 555, 557, 559, 561, 563, 565, 
 -	567, 569, 571, 573, 575, 577, 579, 581, 
 -	583, 585, 587, 589, 591, 593, 595, 597, 
 -	599, 601, 603, 605, 607, 609, 611, 613, 
 -	615, 618, 620, 622, 624, 626, 628, 630, 
 -	632, 634, 636, 638, 640, 642, 644, 646, 
 -	648, 650, 652, 654, 657, 659, 661, 663, 
 -	665, 667, 669, 671, 673, 675, 677, 679, 
 -	681, 683, 685, 687, 689, 691, 693, 695, 
 -	697, 699, 700, 701, 702, 703, 704, 705, 
 -	706, 707, 708, 709, 710, 711, 712, 713, 
 -	729, 731, 733, 735, 737, 739, 741, 743, 
 -	745, 747, 749, 751, 753, 755, 757, 759, 
 -	761, 763, 765, 768, 770, 772, 774, 776, 
 -	778, 780, 782, 784, 786, 788, 790, 792, 
 -	794, 796, 798, 800, 802, 804, 806, 808, 
 -	810, 812, 814, 816, 818, 820, 822, 824, 
 -	826, 828, 830, 832, 834, 836, 838, 840, 
 -	842, 844, 846, 848, 850, 852, 854, 856, 
 -	858, 860, 862, 864, 866, 868, 871, 873, 
 -	875, 877, 879, 881, 883, 885, 887, 889, 
 -	891, 893, 895, 897, 899, 901, 903, 905, 
 -	907, 909, 911, 912, 913, 914, 915, 916, 
 -	917, 918, 919, 920, 921, 923, 924, 925, 
 -	926, 927, 928, 929, 930, 931, 932, 933, 
 -	934, 935, 936, 937, 938, 939, 940, 941, 
 -	942, 943, 947, 953, 956, 958, 964, 983, 
 -	985, 987, 989, 992, 994, 996, 998, 1000, 
 -	1002, 1004, 1006, 1008, 1010, 1012, 1014, 1016, 
 -	1018, 1020, 1022, 1024, 1026, 1028, 1030, 1032, 
 -	1034, 1036, 1038, 1040, 1042, 1044, 1046, 1048, 
 -	1050, 1052, 1054, 1056, 1058, 1060, 1062, 1064, 
 -	1066, 1068, 1070, 1072, 1075, 1077, 1079, 1081, 
 -	1083, 1085, 1087, 1089, 1091, 1093, 1095, 1097, 
 -	1099, 1101, 1103, 1105, 1107, 1109, 1111, 1114, 
 -	1116, 1118, 1120, 1122, 1124, 1126, 1128, 1130, 
 -	1132, 1134, 1136, 1138, 1140, 1142, 1144, 1146, 
 -	1148, 1150, 1152, 1154
 -};
 -
 -static const char _lexer_trans_keys[] = {
 -	-17, 10, 32, 34, 35, 37, 42, 64, 
 -	65, 66, 68, 69, 70, 71, 84, 87, 
 -	89, 124, 9, 13, -69, -65, 10, 32, 
 -	34, 35, 37, 42, 64, 65, 66, 68, 
 -	69, 70, 71, 84, 87, 89, 124, 9, 
 -	13, 34, 34, 10, 13, 10, 13, 10, 
 -	32, 34, 9, 13, 10, 32, 34, 9, 
 -	13, 10, 32, 34, 9, 13, 10, 32, 
 -	34, 9, 13, 10, 32, 9, 13, 10, 
 -	32, 9, 13, 10, 13, 10, 95, 70, 
 -	69, 65, 84, 85, 82, 69, 95, 69, 
 -	78, 68, 95, 37, 32, 10, 13, 10, 
 -	13, 13, 32, 64, 9, 10, 9, 10, 
 -	13, 32, 64, 11, 12, 10, 32, 64, 
 -	9, 13, 110, 117, 104, 101, 105, 117, 
 -	110, 32, 121, 111, 117, 115, 101, 32, 
 -	103, 111, 116, 116, 97, 115, 32, 105, 
 -	115, 32, 119, 104, 97, 116, 32, 119, 
 -	101, 110, 116, 32, 100, 111, 119, 110, 
 -	58, 10, 10, 10, 32, 35, 37, 42, 
 -	64, 65, 66, 68, 70, 71, 84, 87, 
 -	89, 9, 13, 10, 95, 10, 70, 10, 
 -	69, 10, 65, 10, 84, 10, 85, 10, 
 -	82, 10, 69, 10, 95, 10, 69, 10, 
 -	78, 10, 68, 10, 95, 10, 37, 10, 
 -	32, 10, 32, 34, 35, 37, 42, 64, 
 -	65, 66, 68, 69, 70, 71, 84, 87, 
 -	89, 124, 9, 13, 120, 97, 109, 112, 
 -	108, 101, 115, 58, 10, 10, 10, 32, 
 -	35, 70, 124, 9, 13, 10, 101, 10, 
 -	97, 10, 116, 10, 117, 10, 114, 10, 
 -	101, 10, 58, 101, 97, 116, 117, 114, 
 -	101, 58, 10, 10, 10, 32, 35, 37, 
 -	64, 68, 69, 70, 84, 87, 9, 13, 
 -	10, 95, 10, 70, 10, 69, 10, 65, 
 -	10, 84, 10, 85, 10, 82, 10, 69, 
 -	10, 95, 10, 69, 10, 78, 10, 68, 
 -	10, 95, 10, 37, 10, 105, 10, 115, 
 -	10, 32, 10, 105, 10, 115, 10, 32, 
 -	10, 119, 10, 104, 10, 97, 10, 116, 
 -	10, 32, 10, 119, 10, 101, 10, 110, 
 -	10, 116, 10, 32, 10, 100, 10, 111, 
 -	10, 119, 10, 110, 10, 58, 10, 120, 
 -	10, 97, 10, 109, 10, 112, 10, 108, 
 -	10, 101, 10, 115, 10, 101, 10, 97, 
 -	10, 116, 10, 117, 10, 114, 10, 101, 
 -	10, 104, 10, 101, 10, 32, 10, 116, 
 -	10, 104, 10, 105, 10, 110, 10, 103, 
 -	10, 32, 10, 111, 10, 102, 10, 32, 
 -	10, 105, 10, 116, 10, 32, 10, 105, 
 -	10, 104, 10, 97, 10, 114, 10, 114, 
 -	10, 105, 10, 109, 10, 101, 10, 97, 
 -	10, 110, 105, 118, 117, 104, 101, 32, 
 -	116, 104, 105, 110, 103, 32, 111, 102, 
 -	32, 105, 116, 32, 105, 115, 58, 10, 
 -	10, 10, 32, 35, 37, 42, 64, 65, 
 -	66, 68, 70, 71, 84, 87, 89, 9, 
 -	13, 10, 95, 10, 70, 10, 69, 10, 
 -	65, 10, 84, 10, 85, 10, 82, 10, 
 -	69, 10, 95, 10, 69, 10, 78, 10, 
 -	68, 10, 95, 10, 37, 10, 32, 10, 
 -	110, 10, 117, 10, 104, 10, 101, 105, 
 -	117, 10, 110, 10, 32, 10, 121, 10, 
 -	111, 10, 117, 10, 115, 10, 101, 10, 
 -	32, 10, 103, 10, 111, 10, 116, 10, 
 -	116, 10, 97, 10, 115, 10, 32, 10, 
 -	105, 10, 115, 10, 32, 10, 119, 10, 
 -	104, 10, 97, 10, 116, 10, 32, 10, 
 -	119, 10, 101, 10, 110, 10, 116, 10, 
 -	32, 10, 100, 10, 111, 10, 119, 10, 
 -	110, 10, 58, 10, 101, 10, 97, 10, 
 -	116, 10, 117, 10, 114, 10, 101, 10, 
 -	105, 10, 118, 10, 117, 10, 104, 10, 
 -	101, 10, 32, 10, 116, 10, 104, 10, 
 -	105, 10, 110, 10, 103, 10, 32, 10, 
 -	111, 10, 102, 10, 32, 10, 105, 10, 
 -	116, 10, 32, 10, 105, 10, 115, 10, 
 -	104, 117, 10, 97, 10, 114, 10, 114, 
 -	10, 105, 10, 109, 10, 101, 10, 97, 
 -	10, 110, 10, 111, 10, 117, 10, 115, 
 -	10, 101, 10, 32, 10, 107, 10, 110, 
 -	10, 111, 10, 119, 10, 32, 10, 108, 
 -	119, 10, 105, 10, 107, 10, 101, 10, 
 -	32, 10, 119, 10, 104, 10, 101, 10, 
 -	104, 10, 101, 10, 110, 10, 32, 10, 
 -	121, 10, 111, 10, 117, 10, 115, 10, 
 -	101, 10, 32, 10, 103, 10, 111, 10, 
 -	116, 104, 117, 97, 114, 114, 105, 109, 
 -	101, 97, 110, 32, 105, 115, 58, 10, 
 -	10, 10, 32, 35, 37, 42, 64, 65, 
 -	66, 68, 70, 71, 84, 87, 89, 9, 
 -	13, 10, 95, 10, 70, 10, 69, 10, 
 -	65, 10, 84, 10, 85, 10, 82, 10, 
 -	69, 10, 95, 10, 69, 10, 78, 10, 
 -	68, 10, 95, 10, 37, 10, 32, 10, 
 -	110, 10, 117, 10, 104, 10, 101, 117, 
 -	10, 110, 10, 32, 10, 121, 10, 111, 
 -	10, 117, 10, 115, 10, 101, 10, 32, 
 -	10, 103, 10, 111, 10, 116, 10, 116, 
 -	10, 97, 10, 101, 10, 97, 10, 116, 
 -	10, 117, 10, 114, 10, 101, 10, 58, 
 -	10, 105, 10, 118, 10, 117, 10, 104, 
 -	10, 101, 10, 32, 10, 116, 10, 104, 
 -	10, 105, 10, 110, 10, 103, 10, 32, 
 -	10, 111, 10, 102, 10, 32, 10, 105, 
 -	10, 116, 10, 32, 10, 105, 10, 115, 
 -	10, 111, 10, 117, 10, 115, 10, 101, 
 -	10, 32, 10, 107, 10, 110, 10, 111, 
 -	10, 119, 10, 32, 10, 108, 119, 10, 
 -	105, 10, 107, 10, 101, 10, 32, 10, 
 -	119, 10, 104, 10, 101, 10, 104, 10, 
 -	101, 10, 110, 10, 32, 10, 121, 10, 
 -	111, 10, 117, 10, 115, 10, 101, 10, 
 -	32, 10, 103, 10, 111, 10, 116, 111, 
 -	117, 115, 101, 32, 107, 110, 111, 119, 
 -	32, 108, 119, 105, 107, 101, 32, 119, 
 -	104, 101, 104, 101, 110, 32, 121, 111, 
 -	117, 115, 101, 32, 103, 111, 116, 32, 
 -	124, 9, 13, 10, 32, 92, 124, 9, 
 -	13, 10, 92, 124, 10, 92, 10, 32, 
 -	92, 124, 9, 13, 10, 32, 34, 35, 
 -	37, 42, 64, 65, 66, 68, 69, 70, 
 -	71, 84, 87, 89, 124, 9, 13, 10, 
 -	110, 10, 117, 10, 104, 10, 101, 117, 
 -	10, 110, 10, 32, 10, 121, 10, 111, 
 -	10, 117, 10, 115, 10, 101, 10, 32, 
 -	10, 103, 10, 111, 10, 116, 10, 116, 
 -	10, 97, 10, 101, 10, 97, 10, 116, 
 -	10, 117, 10, 114, 10, 101, 10, 58, 
 -	10, 105, 10, 118, 10, 117, 10, 104, 
 -	10, 101, 10, 32, 10, 116, 10, 104, 
 -	10, 105, 10, 110, 10, 103, 10, 32, 
 -	10, 111, 10, 102, 10, 32, 10, 105, 
 -	10, 116, 10, 32, 10, 105, 10, 115, 
 -	10, 104, 117, 10, 97, 10, 114, 10, 
 -	114, 10, 105, 10, 109, 10, 101, 10, 
 -	97, 10, 110, 10, 111, 10, 117, 10, 
 -	115, 10, 101, 10, 32, 10, 107, 10, 
 -	110, 10, 111, 10, 119, 10, 32, 10, 
 -	108, 119, 10, 105, 10, 107, 10, 101, 
 -	10, 32, 10, 119, 10, 104, 10, 101, 
 -	10, 104, 10, 101, 10, 110, 10, 32, 
 -	10, 121, 10, 111, 10, 117, 10, 115, 
 -	10, 101, 10, 32, 10, 103, 10, 111, 
 -	10, 116, 0
 -};
 -
 -static const char _lexer_single_lengths[] = {
 -	0, 18, 1, 1, 17, 1, 1, 2, 
 -	2, 3, 3, 3, 3, 2, 2, 2, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	2, 2, 3, 5, 3, 1, 1, 1, 
 -	3, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 14, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 17, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 5, 
 -	2, 2, 2, 2, 2, 2, 2, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	10, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 14, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 4, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	3, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 3, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 14, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 3, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 3, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 2, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 2, 4, 3, 2, 4, 17, 2, 
 -	2, 2, 3, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 3, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 3, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 0
 -};
 -
 -static const char _lexer_range_lengths[] = {
 -	0, 1, 0, 0, 1, 0, 0, 0, 
 -	0, 1, 1, 1, 1, 1, 1, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 1, 1, 1, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 1, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 1, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 1, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	1, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 1, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 1, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 1, 1, 0, 0, 1, 1, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0
 -};
 -
 -static const short _lexer_index_offsets[] = {
 -	0, 0, 20, 22, 24, 43, 45, 47, 
 -	50, 53, 58, 63, 68, 73, 77, 81, 
 -	84, 86, 88, 90, 92, 94, 96, 98, 
 -	100, 102, 104, 106, 108, 110, 112, 114, 
 -	116, 119, 122, 127, 134, 139, 141, 143, 
 -	145, 149, 151, 153, 155, 157, 159, 161, 
 -	163, 165, 167, 169, 171, 173, 175, 177, 
 -	179, 181, 183, 185, 187, 189, 191, 193, 
 -	195, 197, 199, 201, 203, 205, 207, 209, 
 -	211, 213, 215, 217, 219, 235, 238, 241, 
 -	244, 247, 250, 253, 256, 259, 262, 265, 
 -	268, 271, 274, 277, 280, 299, 301, 303, 
 -	305, 307, 309, 311, 313, 315, 317, 319, 
 -	326, 329, 332, 335, 338, 341, 344, 347, 
 -	349, 351, 353, 355, 357, 359, 361, 363, 
 -	365, 377, 380, 383, 386, 389, 392, 395, 
 -	398, 401, 404, 407, 410, 413, 416, 419, 
 -	422, 425, 428, 431, 434, 437, 440, 443, 
 -	446, 449, 452, 455, 458, 461, 464, 467, 
 -	470, 473, 476, 479, 482, 485, 488, 491, 
 -	494, 497, 500, 503, 506, 509, 512, 515, 
 -	518, 521, 524, 527, 530, 533, 536, 539, 
 -	542, 545, 548, 551, 554, 557, 560, 563, 
 -	566, 569, 572, 575, 578, 581, 584, 587, 
 -	590, 593, 596, 598, 600, 602, 604, 606, 
 -	608, 610, 612, 614, 616, 618, 620, 622, 
 -	624, 626, 628, 630, 632, 634, 636, 638, 
 -	640, 642, 658, 661, 664, 667, 670, 673, 
 -	676, 679, 682, 685, 688, 691, 694, 697, 
 -	700, 703, 706, 709, 712, 717, 720, 723, 
 -	726, 729, 732, 735, 738, 741, 744, 747, 
 -	750, 753, 756, 759, 762, 765, 768, 771, 
 -	774, 777, 780, 783, 786, 789, 792, 795, 
 -	798, 801, 804, 807, 810, 813, 816, 819, 
 -	822, 825, 828, 831, 834, 837, 840, 843, 
 -	846, 849, 852, 855, 858, 861, 864, 867, 
 -	870, 873, 876, 879, 882, 885, 888, 891, 
 -	894, 898, 901, 904, 907, 910, 913, 916, 
 -	919, 922, 925, 928, 931, 934, 937, 940, 
 -	943, 946, 949, 952, 956, 959, 962, 965, 
 -	968, 971, 974, 977, 980, 983, 986, 989, 
 -	992, 995, 998, 1001, 1004, 1007, 1010, 1013, 
 -	1016, 1019, 1021, 1023, 1025, 1027, 1029, 1031, 
 -	1033, 1035, 1037, 1039, 1041, 1043, 1045, 1047, 
 -	1063, 1066, 1069, 1072, 1075, 1078, 1081, 1084, 
 -	1087, 1090, 1093, 1096, 1099, 1102, 1105, 1108, 
 -	1111, 1114, 1117, 1121, 1124, 1127, 1130, 1133, 
 -	1136, 1139, 1142, 1145, 1148, 1151, 1154, 1157, 
 -	1160, 1163, 1166, 1169, 1172, 1175, 1178, 1181, 
 -	1184, 1187, 1190, 1193, 1196, 1199, 1202, 1205, 
 -	1208, 1211, 1214, 1217, 1220, 1223, 1226, 1229, 
 -	1232, 1235, 1238, 1241, 1244, 1247, 1250, 1253, 
 -	1256, 1259, 1262, 1265, 1268, 1271, 1275, 1278, 
 -	1281, 1284, 1287, 1290, 1293, 1296, 1299, 1302, 
 -	1305, 1308, 1311, 1314, 1317, 1320, 1323, 1326, 
 -	1329, 1332, 1335, 1337, 1339, 1341, 1343, 1345, 
 -	1347, 1349, 1351, 1353, 1355, 1358, 1360, 1362, 
 -	1364, 1366, 1368, 1370, 1372, 1374, 1376, 1378, 
 -	1380, 1382, 1384, 1386, 1388, 1390, 1392, 1394, 
 -	1396, 1398, 1402, 1408, 1412, 1415, 1421, 1440, 
 -	1443, 1446, 1449, 1453, 1456, 1459, 1462, 1465, 
 -	1468, 1471, 1474, 1477, 1480, 1483, 1486, 1489, 
 -	1492, 1495, 1498, 1501, 1504, 1507, 1510, 1513, 
 -	1516, 1519, 1522, 1525, 1528, 1531, 1534, 1537, 
 -	1540, 1543, 1546, 1549, 1552, 1555, 1558, 1561, 
 -	1564, 1567, 1570, 1573, 1577, 1580, 1583, 1586, 
 -	1589, 1592, 1595, 1598, 1601, 1604, 1607, 1610, 
 -	1613, 1616, 1619, 1622, 1625, 1628, 1631, 1635, 
 -	1638, 1641, 1644, 1647, 1650, 1653, 1656, 1659, 
 -	1662, 1665, 1668, 1671, 1674, 1677, 1680, 1683, 
 -	1686, 1689, 1692, 1695
 -};
 -
 -static const short _lexer_trans_targs[] = {
 -	2, 4, 4, 5, 15, 17, 31, 34, 
 -	37, 38, 40, 93, 111, 194, 197, 336, 
 -	442, 473, 4, 0, 3, 0, 4, 0, 
 -	4, 4, 5, 15, 17, 31, 34, 37, 
 -	38, 40, 93, 111, 194, 197, 336, 442, 
 -	473, 4, 0, 6, 0, 7, 0, 9, 
 -	8, 8, 9, 8, 8, 10, 10, 11, 
 -	10, 10, 10, 10, 11, 10, 10, 10, 
 -	10, 12, 10, 10, 10, 10, 13, 10, 
 -	10, 4, 14, 14, 0, 4, 14, 14, 
 -	0, 4, 16, 15, 4, 0, 18, 0, 
 -	19, 0, 20, 0, 21, 0, 22, 0, 
 -	23, 0, 24, 0, 25, 0, 26, 0, 
 -	27, 0, 28, 0, 29, 0, 30, 0, 
 -	563, 0, 32, 0, 4, 16, 33, 4, 
 -	16, 33, 0, 0, 0, 0, 35, 36, 
 -	4, 36, 36, 34, 35, 35, 4, 36, 
 -	34, 36, 0, 31, 0, 39, 0, 31, 
 -	0, 41, 54, 37, 0, 42, 0, 43, 
 -	0, 44, 0, 45, 0, 46, 0, 47, 
 -	0, 48, 0, 49, 0, 50, 0, 51, 
 -	0, 52, 0, 53, 0, 31, 0, 55, 
 -	0, 56, 0, 57, 0, 58, 0, 59, 
 -	0, 60, 0, 61, 0, 62, 0, 63, 
 -	0, 64, 0, 65, 0, 66, 0, 67, 
 -	0, 68, 0, 69, 0, 70, 0, 71, 
 -	0, 72, 0, 73, 0, 74, 0, 76, 
 -	75, 76, 75, 76, 76, 4, 77, 91, 
 -	4, 479, 480, 482, 496, 503, 506, 523, 
 -	532, 76, 75, 76, 78, 75, 76, 79, 
 -	75, 76, 80, 75, 76, 81, 75, 76, 
 -	82, 75, 76, 83, 75, 76, 84, 75, 
 -	76, 85, 75, 76, 86, 75, 76, 87, 
 -	75, 76, 88, 75, 76, 89, 75, 76, 
 -	90, 75, 76, 4, 75, 76, 92, 75, 
 -	4, 4, 5, 15, 17, 31, 34, 37, 
 -	38, 40, 93, 111, 194, 197, 336, 442, 
 -	473, 4, 0, 94, 0, 95, 0, 96, 
 -	0, 97, 0, 98, 0, 99, 0, 100, 
 -	0, 101, 0, 103, 102, 103, 102, 103, 
 -	103, 4, 104, 4, 103, 102, 103, 105, 
 -	102, 103, 106, 102, 103, 107, 102, 103, 
 -	108, 102, 103, 109, 102, 103, 110, 102, 
 -	103, 92, 102, 112, 0, 113, 0, 114, 
 -	0, 115, 0, 116, 0, 117, 0, 118, 
 -	0, 120, 119, 120, 119, 120, 120, 4, 
 -	121, 4, 135, 156, 163, 169, 185, 120, 
 -	119, 120, 122, 119, 120, 123, 119, 120, 
 -	124, 119, 120, 125, 119, 120, 126, 119, 
 -	120, 127, 119, 120, 128, 119, 120, 129, 
 -	119, 120, 130, 119, 120, 131, 119, 120, 
 -	132, 119, 120, 133, 119, 120, 134, 119, 
 -	120, 4, 119, 120, 136, 119, 120, 137, 
 -	119, 120, 138, 119, 120, 139, 119, 120, 
 -	140, 119, 120, 141, 119, 120, 142, 119, 
 -	120, 143, 119, 120, 144, 119, 120, 145, 
 -	119, 120, 146, 119, 120, 147, 119, 120, 
 -	148, 119, 120, 149, 119, 120, 150, 119, 
 -	120, 151, 119, 120, 152, 119, 120, 153, 
 -	119, 120, 154, 119, 120, 155, 119, 120, 
 -	92, 119, 120, 157, 119, 120, 158, 119, 
 -	120, 159, 119, 120, 160, 119, 120, 161, 
 -	119, 120, 162, 119, 120, 155, 119, 120, 
 -	164, 119, 120, 165, 119, 120, 166, 119, 
 -	120, 167, 119, 120, 168, 119, 120, 155, 
 -	119, 120, 170, 119, 120, 171, 119, 120, 
 -	172, 119, 120, 173, 119, 120, 174, 119, 
 -	120, 175, 119, 120, 176, 119, 120, 177, 
 -	119, 120, 178, 119, 120, 179, 119, 120, 
 -	180, 119, 120, 181, 119, 120, 182, 119, 
 -	120, 183, 119, 120, 184, 119, 120, 162, 
 -	119, 120, 186, 119, 120, 187, 119, 120, 
 -	188, 119, 120, 189, 119, 120, 190, 119, 
 -	120, 191, 119, 120, 192, 119, 120, 193, 
 -	119, 120, 183, 119, 195, 0, 196, 0, 
 -	37, 0, 198, 0, 199, 0, 200, 0, 
 -	201, 0, 202, 0, 203, 0, 204, 0, 
 -	205, 0, 206, 0, 207, 0, 208, 0, 
 -	209, 0, 210, 0, 211, 0, 212, 0, 
 -	213, 0, 214, 0, 215, 0, 217, 216, 
 -	217, 216, 217, 217, 4, 218, 232, 4, 
 -	233, 234, 236, 270, 276, 279, 296, 305, 
 -	217, 216, 217, 219, 216, 217, 220, 216, 
 -	217, 221, 216, 217, 222, 216, 217, 223, 
 -	216, 217, 224, 216, 217, 225, 216, 217, 
 -	226, 216, 217, 227, 216, 217, 228, 216, 
 -	217, 229, 216, 217, 230, 216, 217, 231, 
 -	216, 217, 4, 216, 217, 92, 216, 217, 
 -	232, 216, 217, 235, 216, 217, 232, 216, 
 -	217, 237, 250, 233, 216, 217, 238, 216, 
 -	217, 239, 216, 217, 240, 216, 217, 241, 
 -	216, 217, 242, 216, 217, 243, 216, 217, 
 -	244, 216, 217, 245, 216, 217, 246, 216, 
 -	217, 247, 216, 217, 248, 216, 217, 249, 
 -	216, 217, 232, 216, 217, 251, 216, 217, 
 -	252, 216, 217, 253, 216, 217, 254, 216, 
 -	217, 255, 216, 217, 256, 216, 217, 257, 
 -	216, 217, 258, 216, 217, 259, 216, 217, 
 -	260, 216, 217, 261, 216, 217, 262, 216, 
 -	217, 263, 216, 217, 264, 216, 217, 265, 
 -	216, 217, 266, 216, 217, 267, 216, 217, 
 -	268, 216, 217, 269, 216, 217, 92, 216, 
 -	217, 271, 216, 217, 272, 216, 217, 273, 
 -	216, 217, 274, 216, 217, 275, 216, 217, 
 -	269, 216, 217, 277, 216, 217, 278, 216, 
 -	217, 233, 216, 217, 280, 216, 217, 281, 
 -	216, 217, 282, 216, 217, 283, 216, 217, 
 -	284, 216, 217, 285, 216, 217, 286, 216, 
 -	217, 287, 216, 217, 288, 216, 217, 289, 
 -	216, 217, 290, 216, 217, 291, 216, 217, 
 -	292, 216, 217, 293, 216, 217, 294, 216, 
 -	217, 295, 216, 217, 269, 216, 217, 297, 
 -	233, 216, 217, 298, 216, 217, 299, 216, 
 -	217, 300, 216, 217, 301, 216, 217, 302, 
 -	216, 217, 303, 216, 217, 304, 216, 217, 
 -	293, 216, 217, 306, 216, 217, 307, 216, 
 -	217, 308, 216, 217, 309, 216, 217, 310, 
 -	216, 217, 311, 216, 217, 312, 216, 217, 
 -	313, 216, 217, 314, 216, 217, 315, 216, 
 -	217, 316, 323, 216, 217, 317, 216, 217, 
 -	318, 216, 217, 319, 216, 217, 320, 216, 
 -	217, 321, 216, 217, 322, 216, 217, 233, 
 -	216, 217, 324, 216, 217, 325, 216, 217, 
 -	326, 216, 217, 327, 216, 217, 328, 216, 
 -	217, 329, 216, 217, 330, 216, 217, 331, 
 -	216, 217, 332, 216, 217, 333, 216, 217, 
 -	334, 216, 217, 335, 216, 217, 232, 216, 
 -	337, 37, 0, 338, 0, 339, 0, 340, 
 -	0, 341, 0, 342, 0, 343, 0, 344, 
 -	0, 345, 0, 346, 0, 347, 0, 348, 
 -	0, 349, 0, 351, 350, 351, 350, 351, 
 -	351, 4, 352, 366, 4, 367, 368, 370, 
 -	384, 391, 394, 393, 411, 351, 350, 351, 
 -	353, 350, 351, 354, 350, 351, 355, 350, 
 -	351, 356, 350, 351, 357, 350, 351, 358, 
 -	350, 351, 359, 350, 351, 360, 350, 351, 
 -	361, 350, 351, 362, 350, 351, 363, 350, 
 -	351, 364, 350, 351, 365, 350, 351, 4, 
 -	350, 351, 92, 350, 351, 366, 350, 351, 
 -	369, 350, 351, 366, 350, 351, 371, 367, 
 -	350, 351, 372, 350, 351, 373, 350, 351, 
 -	374, 350, 351, 375, 350, 351, 376, 350, 
 -	351, 377, 350, 351, 378, 350, 351, 379, 
 -	350, 351, 380, 350, 351, 381, 350, 351, 
 -	382, 350, 351, 383, 350, 351, 366, 350, 
 -	351, 385, 350, 351, 386, 350, 351, 387, 
 -	350, 351, 388, 350, 351, 389, 350, 351, 
 -	390, 350, 351, 92, 350, 351, 392, 350, 
 -	351, 393, 350, 351, 367, 350, 351, 395, 
 -	350, 351, 396, 350, 351, 397, 350, 351, 
 -	398, 350, 351, 399, 350, 351, 400, 350, 
 -	351, 401, 350, 351, 402, 350, 351, 403, 
 -	350, 351, 404, 350, 351, 405, 350, 351, 
 -	406, 350, 351, 407, 350, 351, 408, 350, 
 -	351, 409, 350, 351, 410, 350, 351, 390, 
 -	350, 351, 412, 350, 351, 413, 350, 351, 
 -	414, 350, 351, 415, 350, 351, 416, 350, 
 -	351, 417, 350, 351, 418, 350, 351, 419, 
 -	350, 351, 420, 350, 351, 421, 350, 351, 
 -	422, 429, 350, 351, 423, 350, 351, 424, 
 -	350, 351, 425, 350, 351, 426, 350, 351, 
 -	427, 350, 351, 428, 350, 351, 367, 350, 
 -	351, 430, 350, 351, 431, 350, 351, 432, 
 -	350, 351, 433, 350, 351, 434, 350, 351, 
 -	435, 350, 351, 436, 350, 351, 437, 350, 
 -	351, 438, 350, 351, 439, 350, 351, 440, 
 -	350, 351, 441, 350, 351, 366, 350, 443, 
 -	0, 444, 0, 445, 0, 446, 0, 447, 
 -	0, 448, 0, 449, 0, 450, 0, 451, 
 -	0, 452, 0, 453, 460, 0, 454, 0, 
 -	455, 0, 456, 0, 457, 0, 458, 0, 
 -	459, 0, 37, 0, 461, 0, 462, 0, 
 -	463, 0, 464, 0, 465, 0, 466, 0, 
 -	467, 0, 468, 0, 469, 0, 470, 0, 
 -	471, 0, 472, 0, 31, 0, 473, 474, 
 -	473, 0, 478, 477, 476, 474, 477, 475, 
 -	0, 476, 474, 475, 0, 476, 475, 478, 
 -	477, 476, 474, 477, 475, 478, 478, 5, 
 -	15, 17, 31, 34, 37, 38, 40, 93, 
 -	111, 194, 197, 336, 442, 473, 478, 0, 
 -	76, 91, 75, 76, 481, 75, 76, 91, 
 -	75, 76, 483, 479, 75, 76, 484, 75, 
 -	76, 485, 75, 76, 486, 75, 76, 487, 
 -	75, 76, 488, 75, 76, 489, 75, 76, 
 -	490, 75, 76, 491, 75, 76, 492, 75, 
 -	76, 493, 75, 76, 494, 75, 76, 495, 
 -	75, 76, 91, 75, 76, 497, 75, 76, 
 -	498, 75, 76, 499, 75, 76, 500, 75, 
 -	76, 501, 75, 76, 502, 75, 76, 92, 
 -	75, 76, 504, 75, 76, 505, 75, 76, 
 -	479, 75, 76, 507, 75, 76, 508, 75, 
 -	76, 509, 75, 76, 510, 75, 76, 511, 
 -	75, 76, 512, 75, 76, 513, 75, 76, 
 -	514, 75, 76, 515, 75, 76, 516, 75, 
 -	76, 517, 75, 76, 518, 75, 76, 519, 
 -	75, 76, 520, 75, 76, 521, 75, 76, 
 -	522, 75, 76, 502, 75, 76, 524, 479, 
 -	75, 76, 525, 75, 76, 526, 75, 76, 
 -	527, 75, 76, 528, 75, 76, 529, 75, 
 -	76, 530, 75, 76, 531, 75, 76, 520, 
 -	75, 76, 533, 75, 76, 534, 75, 76, 
 -	535, 75, 76, 536, 75, 76, 537, 75, 
 -	76, 538, 75, 76, 539, 75, 76, 540, 
 -	75, 76, 541, 75, 76, 542, 75, 76, 
 -	543, 550, 75, 76, 544, 75, 76, 545, 
 -	75, 76, 546, 75, 76, 547, 75, 76, 
 -	548, 75, 76, 549, 75, 76, 479, 75, 
 -	76, 551, 75, 76, 552, 75, 76, 553, 
 -	75, 76, 554, 75, 76, 555, 75, 76, 
 -	556, 75, 76, 557, 75, 76, 558, 75, 
 -	76, 559, 75, 76, 560, 75, 76, 561, 
 -	75, 76, 562, 75, 76, 91, 75, 0, 
 -	0
 -};
 -
 -static const unsigned char _lexer_trans_actions[] = {
 -	0, 54, 0, 5, 1, 0, 29, 1, 
 -	29, 29, 29, 29, 29, 29, 29, 29, 
 -	29, 35, 0, 43, 0, 43, 0, 43, 
 -	54, 0, 5, 1, 0, 29, 1, 29, 
 -	29, 29, 29, 29, 29, 29, 29, 29, 
 -	35, 0, 43, 0, 43, 0, 43, 139, 
 -	48, 9, 106, 11, 0, 134, 45, 45, 
 -	45, 3, 122, 33, 33, 33, 0, 122, 
 -	33, 33, 33, 0, 122, 33, 0, 33, 
 -	0, 102, 7, 7, 43, 54, 0, 0, 
 -	43, 114, 25, 0, 54, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 149, 126, 57, 110, 
 -	23, 0, 43, 43, 43, 43, 0, 27, 
 -	118, 27, 27, 51, 27, 0, 54, 0, 
 -	1, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 0, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 144, 
 -	57, 54, 0, 54, 0, 72, 33, 84, 
 -	72, 84, 84, 84, 84, 84, 84, 84, 
 -	84, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 15, 0, 54, 15, 0, 
 -	130, 31, 60, 57, 31, 63, 57, 63, 
 -	63, 63, 63, 63, 63, 63, 63, 63, 
 -	66, 31, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 144, 57, 54, 0, 54, 
 -	0, 81, 84, 81, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 21, 0, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 144, 57, 54, 0, 54, 0, 69, 
 -	33, 69, 84, 84, 84, 84, 84, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 13, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	13, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 144, 57, 
 -	54, 0, 54, 0, 75, 33, 84, 75, 
 -	84, 84, 84, 84, 84, 84, 84, 84, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 17, 0, 54, 17, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 17, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	0, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 144, 57, 54, 0, 54, 
 -	0, 78, 33, 84, 78, 84, 84, 84, 
 -	84, 84, 84, 84, 84, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 19, 
 -	0, 54, 19, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 19, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 0, 
 -	0, 43, 54, 37, 37, 87, 37, 37, 
 -	43, 0, 39, 0, 43, 0, 0, 54, 
 -	0, 0, 39, 0, 0, 54, 0, 93, 
 -	90, 41, 96, 90, 96, 96, 96, 96, 
 -	96, 96, 96, 96, 96, 99, 0, 43, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 15, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 0, 
 -	0
 -};
 -
 -static const unsigned char _lexer_eof_actions[] = {
 -	0, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43
 -};
 -
 -static const int lexer_start = 1;
 -static const int lexer_first_final = 563;
 -static const int lexer_error = 0;
 -
 -static const int lexer_en_main = 1;
 -
 -
 -#line 258 "ragel/i18n/en_scouse.c.rl"
 -
 -static VALUE 
 -unindent(VALUE con, int start_col)
 -{
 -  VALUE re;
 -  /* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */
 -  char pat[32]; 
 -  snprintf(pat, 32, "^[\t ]{0,%d}", start_col); 
 -  re = rb_reg_regcomp(rb_str_new2(pat));
 -  rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2(""));
 -
 -  return Qnil;
 -
 -}
 -
 -static void 
 -store_kw_con(VALUE listener, const char * event_name, 
 -             const char * keyword_at, size_t keyword_length, 
 -             const char * at,         size_t length, 
 -             int current_line)
 -{
 -  VALUE con = Qnil, kw = Qnil;
 -  kw = ENCODED_STR_NEW(keyword_at, keyword_length);
 -  con = ENCODED_STR_NEW(at, length);
 -  rb_funcall(con, rb_intern("strip!"), 0);
 -  rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); 
 -}
 -
 -static void
 -store_multiline_kw_con(VALUE listener, const char * event_name,
 -                      const char * keyword_at, size_t keyword_length,
 -                      const char * at,         size_t length,
 -                      int current_line, int start_col)
 -{
 -  VALUE split;
 -  VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil;
 -
 -  kw = ENCODED_STR_NEW(keyword_at, keyword_length);
 -  con = ENCODED_STR_NEW(at, length);
 -
 -  unindent(con, start_col);
 -  
 -  split = rb_str_split(con, "\n");
 -
 -  name = rb_funcall(split, rb_intern("shift"), 0);
 -  desc = rb_ary_join(split, rb_str_new2( "\n" ));
 -
 -  if( name == Qnil ) 
 -  {
 -    name = rb_str_new2("");
 -  }
 -  if( rb_funcall(desc, rb_intern("size"), 0) == 0) 
 -  {
 -    desc = rb_str_new2("");
 -  }
 -  rb_funcall(name, rb_intern("strip!"), 0);
 -  rb_funcall(desc, rb_intern("rstrip!"), 0);
 -  rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); 
 -}
 -
 -static void 
 -store_attr(VALUE listener, const char * attr_type,
 -           const char * at, size_t length, 
 -           int line)
 -{
 -  VALUE val = ENCODED_STR_NEW(at, length);
 -  rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line));
 -}
 -static void 
 -store_docstring_content(VALUE listener, 
 -          int start_col, 
 -          const char *type_at, size_t type_length,
 -          const char *at, size_t length, 
 -          int current_line)
 -{
 -  VALUE re2;
 -  VALUE unescape_escaped_quotes;
 -  VALUE con = ENCODED_STR_NEW(at, length);
 -  VALUE con_type = ENCODED_STR_NEW(type_at, type_length);
 -
 -  unindent(con, start_col);
 -
 -  re2 = rb_reg_regcomp(rb_str_new2("\r\\Z"));
 -  unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\""));
 -  rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2(""));
 -  rb_funcall(con_type, rb_intern("strip!"), 0);
 -  rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\""));
 -  rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line));
 -}
 -static void 
 -raise_lexer_error(const char * at, int line)
 -{ 
 -  rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at);
 -}
 -
 -static void lexer_init(lexer_state *lexer) {
 -  lexer->content_start = 0;
 -  lexer->content_end = 0;
 -  lexer->content_len = 0;
 -  lexer->docstring_content_type_start = 0;
 -  lexer->docstring_content_type_end = 0;
 -  lexer->mark = 0;
 -  lexer->keyword_start = 0;
 -  lexer->keyword_end = 0;
 -  lexer->next_keyword_start = 0;
 -  lexer->line_number = 1;
 -  lexer->last_newline = 0;
 -  lexer->final_newline = 0;
 -  lexer->start_col = 0;
 -}
 -
 -static VALUE CLexer_alloc(VALUE klass)
 -{
 -  VALUE obj;
 -  lexer_state *lxr = ALLOC(lexer_state);
 -  lexer_init(lxr);
 -
 -  obj = Data_Wrap_Struct(klass, NULL, -1, lxr);
 -
 -  return obj;
 -}
 -
 -static VALUE CLexer_init(VALUE self, VALUE listener)
 -{
 -  lexer_state *lxr; 
 -  rb_iv_set(self, "@listener", listener);
 -  
 -  lxr = NULL;
 -  DATA_GET(self, lexer_state, lxr);
 -  lexer_init(lxr);
 -  
 -  return self;
 -}
 -
 -static VALUE CLexer_scan(VALUE self, VALUE input)
 -{
 -  VALUE input_copy;
 -  char *data;
 -  size_t len;
 -  VALUE listener = rb_iv_get(self, "@listener");
 -
 -  lexer_state *lexer;
 -  lexer = NULL;
 -  DATA_GET(self, lexer_state, lexer);
 -
 -  input_copy = rb_str_dup(input);
 -
 -  rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%"));
 -  data = RSTRING_PTR(input_copy);
 -  len = RSTRING_LEN(input_copy);
 -  
 -  if (len == 0) { 
 -    rb_raise(rb_eGherkinLexingError, "No content to lex.");
 -  } else {
 -
 -    const char *p, *pe, *eof;
 -    int cs = 0;
 -    
 -    VALUE current_row = Qnil;
 -
 -    p = data;
 -    pe = data + len;
 -    eof = pe;
 -    
 -    assert(*pe == '\0' && "pointer does not end on NULL");
 -    
 -    
 -#line 1238 "ext/gherkin_lexer_en_scouse/gherkin_lexer_en_scouse.c"
 -	{
 -	cs = lexer_start;
 -	}
 -
 -#line 425 "ragel/i18n/en_scouse.c.rl"
 -    
 -#line 1245 "ext/gherkin_lexer_en_scouse/gherkin_lexer_en_scouse.c"
 -	{
 -	int _klen;
 -	unsigned int _trans;
 -	const char *_acts;
 -	unsigned int _nacts;
 -	const char *_keys;
 -
 -	if ( p == pe )
 -		goto _test_eof;
 -	if ( cs == 0 )
 -		goto _out;
 -_resume:
 -	_keys = _lexer_trans_keys + _lexer_key_offsets[cs];
 -	_trans = _lexer_index_offsets[cs];
 -
 -	_klen = _lexer_single_lengths[cs];
 -	if ( _klen > 0 ) {
 -		const char *_lower = _keys;
 -		const char *_mid;
 -		const char *_upper = _keys + _klen - 1;
 -		while (1) {
 -			if ( _upper < _lower )
 -				break;
 -
 -			_mid = _lower + ((_upper-_lower) >> 1);
 -			if ( (*p) < *_mid )
 -				_upper = _mid - 1;
 -			else if ( (*p) > *_mid )
 -				_lower = _mid + 1;
 -			else {
 -				_trans += (unsigned int)(_mid - _keys);
 -				goto _match;
 -			}
 -		}
 -		_keys += _klen;
 -		_trans += _klen;
 -	}
 -
 -	_klen = _lexer_range_lengths[cs];
 -	if ( _klen > 0 ) {
 -		const char *_lower = _keys;
 -		const char *_mid;
 -		const char *_upper = _keys + (_klen<<1) - 2;
 -		while (1) {
 -			if ( _upper < _lower )
 -				break;
 -
 -			_mid = _lower + (((_upper-_lower) >> 1) & ~1);
 -			if ( (*p) < _mid[0] )
 -				_upper = _mid - 2;
 -			else if ( (*p) > _mid[1] )
 -				_lower = _mid + 2;
 -			else {
 -				_trans += (unsigned int)((_mid - _keys)>>1);
 -				goto _match;
 -			}
 -		}
 -		_trans += _klen;
 -	}
 -
 -_match:
 -	cs = _lexer_trans_targs[_trans];
 -
 -	if ( _lexer_trans_actions[_trans] == 0 )
 -		goto _again;
 -
 -	_acts = _lexer_actions + _lexer_trans_actions[_trans];
 -	_nacts = (unsigned int) *_acts++;
 -	while ( _nacts-- > 0 )
 -	{
 -		switch ( *_acts++ )
 -		{
 -	case 0:
 -#line 83 "ragel/i18n/en_scouse.c.rl"
 -	{
 -		MARK(content_start, p);
 -    lexer->current_line = lexer->line_number;
 -    lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2;
 -  }
 -	break;
 -	case 1:
 -#line 89 "ragel/i18n/en_scouse.c.rl"
 -	{
 -    MARK(content_start, p);
 -  }
 -	break;
 -	case 2:
 -#line 93 "ragel/i18n/en_scouse.c.rl"
 -	{
 -    lexer->current_line = lexer->line_number;
 -    lexer->start_col = p - data - lexer->last_newline;
 -  }
 -	break;
 -	case 3:
 -#line 98 "ragel/i18n/en_scouse.c.rl"
 -	{
 -    int len = LEN(content_start, PTR_TO(final_newline));
 -    int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end));
 -
 -    if (len < 0) len = 0;
 -    if (type_len < 0) len = 0;
 -
 -    store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line);
 -  }
 -	break;
 -	case 4:
 -#line 108 "ragel/i18n/en_scouse.c.rl"
 -	{ 
 -    MARK(docstring_content_type_start, p);
 -  }
 -	break;
 -	case 5:
 -#line 112 "ragel/i18n/en_scouse.c.rl"
 -	{ 
 -    MARK(docstring_content_type_end, p);
 -  }
 -	break;
 -	case 6:
 -#line 116 "ragel/i18n/en_scouse.c.rl"
 -	{
 -    STORE_KW_END_CON(feature);
 -  }
 -	break;
 -	case 7:
 -#line 120 "ragel/i18n/en_scouse.c.rl"
 -	{
 -    STORE_KW_END_CON(background);
 -  }
 -	break;
 -	case 8:
 -#line 124 "ragel/i18n/en_scouse.c.rl"
 -	{
 -    STORE_KW_END_CON(scenario);
 -  }
 -	break;
 -	case 9:
 -#line 128 "ragel/i18n/en_scouse.c.rl"
 -	{
 -    STORE_KW_END_CON(scenario_outline);
 -  }
 -	break;
 -	case 10:
 -#line 132 "ragel/i18n/en_scouse.c.rl"
 -	{
 -    STORE_KW_END_CON(examples);
 -  }
 -	break;
 -	case 11:
 -#line 136 "ragel/i18n/en_scouse.c.rl"
 -	{
 -    store_kw_con(listener, "step",
 -      PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
 -      PTR_TO(content_start), LEN(content_start, p), 
 -      lexer->current_line);
 -  }
 -	break;
 -	case 12:
 -#line 143 "ragel/i18n/en_scouse.c.rl"
 -	{
 -    STORE_ATTR(comment);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 13:
 -#line 148 "ragel/i18n/en_scouse.c.rl"
 -	{
 -    STORE_ATTR(tag);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 14:
 -#line 153 "ragel/i18n/en_scouse.c.rl"
 -	{
 -    lexer->line_number += 1;
 -    MARK(final_newline, p);
 -  }
 -	break;
 -	case 15:
 -#line 158 "ragel/i18n/en_scouse.c.rl"
 -	{
 -    MARK(last_newline, p + 1);
 -  }
 -	break;
 -	case 16:
 -#line 162 "ragel/i18n/en_scouse.c.rl"
 -	{
 -    if (lexer->mark == 0) {
 -      MARK(mark, p);
 -    }
 -  }
 -	break;
 -	case 17:
 -#line 168 "ragel/i18n/en_scouse.c.rl"
 -	{
 -    MARK(keyword_end, p);
 -    MARK(keyword_start, PTR_TO(mark));
 -    MARK(content_start, p + 1);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 18:
 -#line 175 "ragel/i18n/en_scouse.c.rl"
 -	{
 -    MARK(content_end, p);
 -  }
 -	break;
 -	case 19:
 -#line 179 "ragel/i18n/en_scouse.c.rl"
 -	{
 -    p = p - 1;
 -    lexer->current_line = lexer->line_number;
 -    current_row = rb_ary_new();
 -  }
 -	break;
 -	case 20:
 -#line 185 "ragel/i18n/en_scouse.c.rl"
 -	{
 -		MARK(content_start, p);
 -  }
 -	break;
 -	case 21:
 -#line 189 "ragel/i18n/en_scouse.c.rl"
 -	{
 -    VALUE re_pipe, re_newline, re_backslash;
 -    VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
 -    rb_funcall(con, rb_intern("strip!"), 0);
 -    re_pipe      = rb_reg_regcomp(rb_str_new2("\\\\\\|"));
 -    re_newline   = rb_reg_regcomp(rb_str_new2("\\\\n"));
 -    re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_pipe,      rb_str_new2("|"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_newline,   rb_str_new2("\n"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\"));
 -
 -    rb_ary_push(current_row, con);
 -  }
 -	break;
 -	case 22:
 -#line 203 "ragel/i18n/en_scouse.c.rl"
 -	{
 -    rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
 -  }
 -	break;
 -	case 23:
 -#line 207 "ragel/i18n/en_scouse.c.rl"
 -	{
 -    int line;
 -    if (cs < lexer_first_final) {
 -      size_t count = 0;
 -      VALUE newstr_val;
 -      char *newstr;
 -      int newstr_count = 0;        
 -      size_t len;
 -      const char *buff;
 -      if (lexer->last_newline != 0) {
 -        len = LEN(last_newline, eof);
 -        buff = PTR_TO(last_newline);
 -      } else {
 -        len = strlen(data);
 -        buff = data;
 -      }
 -
 -      /* Allocate as a ruby string so that it gets cleaned up by GC */
 -      newstr_val = rb_str_new(buff, len);
 -      newstr = RSTRING_PTR(newstr_val);
 -
 -
 -      for (count = 0; count < len; count++) {
 -        if(buff[count] == 10) {
 -          newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
 -          break;
 -        } else {
 -          if (buff[count] == '%') {
 -            newstr[newstr_count++] = buff[count];
 -            newstr[newstr_count] = buff[count];
 -          } else {
 -            newstr[newstr_count] = buff[count];
 -          }
 -        }
 -        newstr_count++;
 -      }
 -
 -      line = lexer->line_number;
 -      lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
 -      raise_lexer_error(newstr, line);
 -    } else {
 -      rb_funcall(listener, rb_intern("eof"), 0);
 -    }
 -  }
 -	break;
 -#line 1535 "ext/gherkin_lexer_en_scouse/gherkin_lexer_en_scouse.c"
 -		}
 -	}
 -
 -_again:
 -	if ( cs == 0 )
 -		goto _out;
 -	if ( ++p != pe )
 -		goto _resume;
 -	_test_eof: {}
 -	if ( p == eof )
 -	{
 -	const char *__acts = _lexer_actions + _lexer_eof_actions[cs];
 -	unsigned int __nacts = (unsigned int) *__acts++;
 -	while ( __nacts-- > 0 ) {
 -		switch ( *__acts++ ) {
 -	case 23:
 -#line 207 "ragel/i18n/en_scouse.c.rl"
 -	{
 -    int line;
 -    if (cs < lexer_first_final) {
 -      size_t count = 0;
 -      VALUE newstr_val;
 -      char *newstr;
 -      int newstr_count = 0;        
 -      size_t len;
 -      const char *buff;
 -      if (lexer->last_newline != 0) {
 -        len = LEN(last_newline, eof);
 -        buff = PTR_TO(last_newline);
 -      } else {
 -        len = strlen(data);
 -        buff = data;
 -      }
 -
 -      /* Allocate as a ruby string so that it gets cleaned up by GC */
 -      newstr_val = rb_str_new(buff, len);
 -      newstr = RSTRING_PTR(newstr_val);
 -
 -
 -      for (count = 0; count < len; count++) {
 -        if(buff[count] == 10) {
 -          newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
 -          break;
 -        } else {
 -          if (buff[count] == '%') {
 -            newstr[newstr_count++] = buff[count];
 -            newstr[newstr_count] = buff[count];
 -          } else {
 -            newstr[newstr_count] = buff[count];
 -          }
 -        }
 -        newstr_count++;
 -      }
 -
 -      line = lexer->line_number;
 -      lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
 -      raise_lexer_error(newstr, line);
 -    } else {
 -      rb_funcall(listener, rb_intern("eof"), 0);
 -    }
 -  }
 -	break;
 -#line 1598 "ext/gherkin_lexer_en_scouse/gherkin_lexer_en_scouse.c"
 -		}
 -	}
 -	}
 -
 -	_out: {}
 -	}
 -
 -#line 426 "ragel/i18n/en_scouse.c.rl"
 -
 -    assert(p <= pe && "data overflow after parsing execute");
 -    assert(lexer->content_start <= len && "content starts after data end");
 -    assert(lexer->mark < len && "mark is after data end");
 -    
 -    /* Reset lexer by re-initializing the whole thing */
 -    lexer_init(lexer);
 -
 -    if (cs == lexer_error) {
 -      rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails.");
 -    } else {
 -      return Qtrue;
 -    }
 -  }
 -}
 -
 -void Init_gherkin_lexer_en_scouse()
 -{
 -  mGherkin = rb_define_module("Gherkin");
 -  mGherkinLexer = rb_define_module_under(mGherkin, "Lexer");
 -  rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError"));
 -
 -  mCLexer = rb_define_module_under(mGherkin, "CLexer");
 -  cI18nLexer = rb_define_class_under(mCLexer, "En_scouse", rb_cObject);
 -  rb_define_alloc_func(cI18nLexer, CLexer_alloc);
 -  rb_define_method(cI18nLexer, "initialize", CLexer_init, 1);
 -  rb_define_method(cI18nLexer, "scan", CLexer_scan, 1);
 -}
 -
diff --cc ext/gherkin_lexer_en_tx/extconf.rb
index a4f3523,a4f3523..0000000
deleted file mode 100644,100644
--- a/ext/gherkin_lexer_en_tx/extconf.rb
+++ /dev/null
@@@ -1,6 -1,6 +1,0 @@@
--require 'mkmf'
--CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags']
--$CFLAGS << ' -O0 -Wall' if CONFIG['CC'] =~ /gcc|clang/
--dir_config("gherkin_lexer_en_tx")
--have_library("c", "main")
--create_makefile("gherkin_lexer_en_tx")
diff --cc ext/gherkin_lexer_en_tx/gherkin_lexer_en_tx.c
index b85ac60,edb7a81..0000000
deleted file mode 100644,100644
--- a/ext/gherkin_lexer_en_tx/gherkin_lexer_en_tx.c
+++ /dev/null
@@@ -1,1265 -1,1265 +1,0 @@@
--
- #line 1 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
- #include <assert.h>
- #include <ruby.h>
- 
- #if defined(_WIN32)
- #include <stddef.h>
- #endif
- 
- #ifdef HAVE_RUBY_RE_H
- #include <ruby/re.h>
- #else
- #include <re.h>
- #endif
- 
- #ifdef HAVE_RUBY_ENCODING_H
- #include <ruby/encoding.h>
- #define ENCODED_STR_NEW(ptr, len) \
-     rb_enc_str_new(ptr, len, rb_utf8_encoding())
- #else
- #define ENCODED_STR_NEW(ptr, len) \
-     rb_str_new(ptr, len)
- #endif
- 
- #ifndef RSTRING_PTR
- #define RSTRING_PTR(s) (RSTRING(s)->ptr)
- #endif
- 
- #ifndef RSTRING_LEN
- #define RSTRING_LEN(s) (RSTRING(s)->len)
- #endif
- 
- #define DATA_GET(FROM, TYPE, NAME) \
-   Data_Get_Struct(FROM, TYPE, NAME); \
-   if (NAME == NULL) { \
-     rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \
-   }
-  
- typedef struct lexer_state {
-   int content_len;
-   int line_number;
-   int current_line;
-   int start_col;
-   size_t mark;
-   size_t keyword_start;
-   size_t keyword_end;
-   size_t next_keyword_start;
-   size_t content_start;
-   size_t content_end;
-   size_t docstring_content_type_start;
-   size_t docstring_content_type_end;
-   size_t query_start;
-   size_t last_newline;
-   size_t final_newline;
- } lexer_state;
- 
- static VALUE mGherkin;
- static VALUE mGherkinLexer;
- static VALUE mCLexer;
- static VALUE cI18nLexer;
- static VALUE rb_eGherkinLexingError;
- 
- #define LEN(AT, P) (P - data - lexer->AT)
- #define MARK(M, P) (lexer->M = (P) - data)
- #define PTR_TO(P) (data + lexer->P)
- 
- #define STORE_KW_END_CON(EVENT) \
-   store_multiline_kw_con(listener, # EVENT, \
-     PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \
-     PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \
-     lexer->current_line, lexer->start_col); \
-     if (lexer->content_end != 0) { \
-       p = PTR_TO(content_end - 1); \
-     } \
-     lexer->content_end = 0
- 
- #define STORE_ATTR(ATTR) \
-     store_attr(listener, # ATTR, \
-       PTR_TO(content_start), LEN(content_start, p), \
-       lexer->line_number)
- 
- 
- #line 254 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
- 
- 
- /** Data **/
- 
- #line 89 "ext/gherkin_lexer_en_tx/gherkin_lexer_en_tx.c"
- static const char _lexer_actions[] = {
- 	0, 1, 0, 1, 1, 1, 2, 1, 
- 	3, 1, 4, 1, 5, 1, 6, 1, 
- 	7, 1, 8, 1, 9, 1, 10, 1, 
- 	11, 1, 12, 1, 13, 1, 16, 1, 
- 	17, 1, 18, 1, 19, 1, 20, 1, 
- 	21, 1, 22, 1, 23, 2, 1, 18, 
- 	2, 4, 5, 2, 13, 0, 2, 14, 
- 	15, 2, 17, 0, 2, 17, 2, 2, 
- 	17, 16, 2, 17, 19, 2, 18, 6, 
- 	2, 18, 7, 2, 18, 8, 2, 18, 
- 	9, 2, 18, 10, 2, 18, 16, 2, 
- 	20, 21, 2, 22, 0, 2, 22, 2, 
- 	2, 22, 16, 2, 22, 19, 3, 3, 
- 	14, 15, 3, 5, 14, 15, 3, 11, 
- 	14, 15, 3, 12, 14, 15, 3, 13, 
- 	14, 15, 3, 14, 15, 18, 3, 17, 
- 	0, 11, 3, 17, 14, 15, 4, 1, 
- 	14, 15, 18, 4, 4, 5, 14, 15, 
- 	4, 17, 0, 14, 15, 5, 17, 0, 
- 	11, 14, 15
- };
- 
- static const short _lexer_key_offsets[] = {
- 	0, 0, 19, 20, 21, 39, 40, 41, 
- 	43, 45, 50, 55, 60, 65, 69, 73, 
- 	75, 76, 77, 78, 79, 80, 81, 82, 
- 	83, 84, 85, 86, 87, 88, 89, 90, 
- 	91, 93, 95, 100, 107, 112, 114, 115, 
- 	116, 117, 118, 119, 120, 121, 122, 123, 
- 	124, 139, 141, 143, 145, 147, 149, 151, 
- 	153, 155, 157, 159, 161, 163, 165, 167, 
- 	169, 187, 189, 190, 191, 192, 193, 194, 
- 	195, 196, 197, 198, 199, 200, 215, 217, 
- 	219, 221, 223, 225, 227, 229, 231, 233, 
- 	235, 237, 239, 241, 243, 245, 248, 250, 
- 	252, 254, 256, 258, 260, 262, 264, 266, 
- 	268, 270, 272, 274, 276, 278, 280, 282, 
- 	284, 286, 288, 290, 292, 294, 296, 298, 
- 	300, 302, 304, 306, 308, 310, 312, 314, 
- 	316, 318, 319, 320, 321, 322, 323, 324, 
- 	325, 326, 327, 328, 329, 330, 331, 332, 
- 	333, 334, 335, 342, 344, 346, 348, 350, 
- 	352, 354, 356, 357, 358, 359, 360, 361, 
- 	362, 363, 364, 365, 377, 379, 381, 383, 
- 	385, 387, 389, 391, 393, 395, 397, 399, 
- 	401, 403, 405, 407, 409, 411, 413, 415, 
- 	417, 419, 421, 423, 425, 427, 429, 431, 
- 	433, 435, 437, 439, 441, 443, 445, 447, 
- 	449, 451, 453, 455, 457, 459, 461, 463, 
- 	465, 467, 469, 471, 473, 475, 477, 479, 
- 	481, 482, 483, 484, 485, 486, 487, 488, 
- 	489, 490, 491, 492, 493, 494, 495, 510, 
- 	512, 514, 516, 518, 520, 522, 524, 526, 
- 	528, 530, 532, 534, 536, 538, 540, 543, 
- 	545, 547, 549, 551, 553, 555, 557, 559, 
- 	561, 563, 565, 567, 569, 571, 573, 576, 
- 	578, 580, 582, 584, 586, 588, 590, 592, 
- 	594, 596, 598, 600, 602, 604, 606, 608, 
- 	610, 612, 614, 616, 618, 620, 622, 624, 
- 	626, 628, 630, 631, 635, 641, 644, 646, 
- 	652, 670, 672, 674, 676, 678, 680, 682, 
- 	684, 686, 688, 690, 692, 694, 696, 698, 
- 	700, 702, 704, 706, 708, 710, 712, 714, 
- 	716, 718, 720, 722, 724, 726, 728, 729
- };
- 
- static const char _lexer_trans_keys[] = {
- 	-17, 10, 32, 34, 35, 37, 42, 64, 
- 	65, 66, 69, 70, 71, 83, 84, 87, 
- 	124, 9, 13, -69, -65, 10, 32, 34, 
- 	35, 37, 42, 64, 65, 66, 69, 70, 
- 	71, 83, 84, 87, 124, 9, 13, 34, 
- 	34, 10, 13, 10, 13, 10, 32, 34, 
- 	9, 13, 10, 32, 34, 9, 13, 10, 
- 	32, 34, 9, 13, 10, 32, 34, 9, 
- 	13, 10, 32, 9, 13, 10, 32, 9, 
- 	13, 10, 13, 10, 95, 70, 69, 65, 
- 	84, 85, 82, 69, 95, 69, 78, 68, 
- 	95, 37, 32, 10, 13, 10, 13, 13, 
- 	32, 64, 9, 10, 9, 10, 13, 32, 
- 	64, 11, 12, 10, 32, 64, 9, 13, 
- 	108, 110, 108, 32, 121, 39, 97, 108, 
- 	108, 58, 10, 10, 10, 32, 35, 37, 
- 	42, 64, 65, 66, 70, 71, 83, 84, 
- 	87, 9, 13, 10, 95, 10, 70, 10, 
- 	69, 10, 65, 10, 84, 10, 85, 10, 
- 	82, 10, 69, 10, 95, 10, 69, 10, 
- 	78, 10, 68, 10, 95, 10, 37, 10, 
- 	32, 10, 32, 34, 35, 37, 42, 64, 
- 	65, 66, 69, 70, 71, 83, 84, 87, 
- 	124, 9, 13, 97, 117, 99, 107, 103, 
- 	114, 111, 117, 110, 100, 58, 10, 10, 
- 	10, 32, 35, 37, 42, 64, 65, 66, 
- 	70, 71, 83, 84, 87, 9, 13, 10, 
- 	95, 10, 70, 10, 69, 10, 65, 10, 
- 	84, 10, 85, 10, 82, 10, 69, 10, 
- 	95, 10, 69, 10, 78, 10, 68, 10, 
- 	95, 10, 37, 10, 32, 10, 108, 110, 
- 	10, 108, 10, 32, 10, 121, 10, 39, 
- 	10, 97, 10, 108, 10, 108, 10, 58, 
- 	10, 100, 10, 32, 10, 121, 10, 39, 
- 	10, 97, 10, 108, 10, 108, 10, 117, 
- 	10, 116, 10, 101, 10, 97, 10, 116, 
- 	10, 117, 10, 114, 10, 101, 10, 105, 
- 	10, 118, 10, 101, 10, 110, 10, 99, 
- 	10, 101, 10, 110, 10, 97, 10, 114, 
- 	10, 105, 10, 111, 10, 104, 116, 32, 
- 	121, 39, 97, 108, 108, 120, 97, 109, 
- 	112, 108, 101, 115, 58, 10, 10, 10, 
- 	32, 35, 70, 124, 9, 13, 10, 101, 
- 	10, 97, 10, 116, 10, 117, 10, 114, 
- 	10, 101, 10, 58, 101, 97, 116, 117, 
- 	114, 101, 58, 10, 10, 10, 32, 35, 
- 	37, 64, 65, 66, 69, 70, 83, 9, 
- 	13, 10, 95, 10, 70, 10, 69, 10, 
- 	65, 10, 84, 10, 85, 10, 82, 10, 
- 	69, 10, 95, 10, 69, 10, 78, 10, 
- 	68, 10, 95, 10, 37, 10, 108, 10, 
- 	108, 10, 32, 10, 121, 10, 39, 10, 
- 	97, 10, 108, 10, 108, 10, 58, 10, 
- 	97, 10, 99, 10, 107, 10, 103, 10, 
- 	114, 10, 111, 10, 117, 10, 110, 10, 
- 	100, 10, 120, 10, 97, 10, 109, 10, 
- 	112, 10, 108, 10, 101, 10, 115, 10, 
- 	101, 10, 97, 10, 116, 10, 117, 10, 
- 	114, 10, 101, 10, 99, 10, 101, 10, 
- 	110, 10, 97, 10, 114, 10, 105, 10, 
- 	111, 105, 118, 101, 110, 99, 101, 110, 
- 	97, 114, 105, 111, 58, 10, 10, 10, 
- 	32, 35, 37, 42, 64, 65, 66, 70, 
- 	71, 83, 84, 87, 9, 13, 10, 95, 
- 	10, 70, 10, 69, 10, 65, 10, 84, 
- 	10, 85, 10, 82, 10, 69, 10, 95, 
- 	10, 69, 10, 78, 10, 68, 10, 95, 
- 	10, 37, 10, 32, 10, 108, 110, 10, 
- 	108, 10, 32, 10, 121, 10, 39, 10, 
- 	97, 10, 108, 10, 108, 10, 58, 10, 
- 	100, 10, 32, 10, 121, 10, 39, 10, 
- 	97, 10, 108, 10, 108, 10, 97, 117, 
- 	10, 99, 10, 107, 10, 103, 10, 114, 
- 	10, 111, 10, 117, 10, 110, 10, 100, 
- 	10, 116, 10, 101, 10, 97, 10, 116, 
- 	10, 117, 10, 114, 10, 101, 10, 105, 
- 	10, 118, 10, 101, 10, 110, 10, 99, 
- 	10, 101, 10, 110, 10, 97, 10, 114, 
- 	10, 105, 10, 111, 10, 104, 104, 32, 
- 	124, 9, 13, 10, 32, 92, 124, 9, 
- 	13, 10, 92, 124, 10, 92, 10, 32, 
- 	92, 124, 9, 13, 10, 32, 34, 35, 
- 	37, 42, 64, 65, 66, 69, 70, 71, 
- 	83, 84, 87, 124, 9, 13, 10, 110, 
- 	10, 100, 10, 32, 10, 121, 10, 39, 
- 	10, 97, 10, 108, 10, 108, 10, 117, 
- 	10, 116, 10, 101, 10, 97, 10, 116, 
- 	10, 117, 10, 114, 10, 101, 10, 58, 
- 	10, 105, 10, 118, 10, 101, 10, 110, 
- 	10, 99, 10, 101, 10, 110, 10, 97, 
- 	10, 114, 10, 105, 10, 111, 10, 104, 
- 	100, 0
- };
- 
- static const char _lexer_single_lengths[] = {
- 	0, 17, 1, 1, 16, 1, 1, 2, 
- 	2, 3, 3, 3, 3, 2, 2, 2, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	2, 2, 3, 5, 3, 2, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	13, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	16, 2, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 13, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 3, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 5, 2, 2, 2, 2, 2, 
- 	2, 2, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 10, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 13, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 3, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 3, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 1, 2, 4, 3, 2, 4, 
- 	16, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 1, 0
- };
- 
- static const char _lexer_range_lengths[] = {
- 	0, 1, 0, 0, 1, 0, 0, 0, 
- 	0, 1, 1, 1, 1, 1, 1, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 1, 1, 1, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	1, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	1, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 1, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 1, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 1, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 1, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 1, 1, 0, 0, 1, 
- 	1, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0
- };
- 
- static const short _lexer_index_offsets[] = {
- 	0, 0, 19, 21, 23, 41, 43, 45, 
- 	48, 51, 56, 61, 66, 71, 75, 79, 
- 	82, 84, 86, 88, 90, 92, 94, 96, 
- 	98, 100, 102, 104, 106, 108, 110, 112, 
- 	114, 117, 120, 125, 132, 137, 140, 142, 
- 	144, 146, 148, 150, 152, 154, 156, 158, 
- 	160, 175, 178, 181, 184, 187, 190, 193, 
- 	196, 199, 202, 205, 208, 211, 214, 217, 
- 	220, 238, 241, 243, 245, 247, 249, 251, 
- 	253, 255, 257, 259, 261, 263, 278, 281, 
- 	284, 287, 290, 293, 296, 299, 302, 305, 
- 	308, 311, 314, 317, 320, 323, 327, 330, 
- 	333, 336, 339, 342, 345, 348, 351, 354, 
- 	357, 360, 363, 366, 369, 372, 375, 378, 
- 	381, 384, 387, 390, 393, 396, 399, 402, 
- 	405, 408, 411, 414, 417, 420, 423, 426, 
- 	429, 432, 434, 436, 438, 440, 442, 444, 
- 	446, 448, 450, 452, 454, 456, 458, 460, 
- 	462, 464, 466, 473, 476, 479, 482, 485, 
- 	488, 491, 494, 496, 498, 500, 502, 504, 
- 	506, 508, 510, 512, 524, 527, 530, 533, 
- 	536, 539, 542, 545, 548, 551, 554, 557, 
- 	560, 563, 566, 569, 572, 575, 578, 581, 
- 	584, 587, 590, 593, 596, 599, 602, 605, 
- 	608, 611, 614, 617, 620, 623, 626, 629, 
- 	632, 635, 638, 641, 644, 647, 650, 653, 
- 	656, 659, 662, 665, 668, 671, 674, 677, 
- 	680, 682, 684, 686, 688, 690, 692, 694, 
- 	696, 698, 700, 702, 704, 706, 708, 723, 
- 	726, 729, 732, 735, 738, 741, 744, 747, 
- 	750, 753, 756, 759, 762, 765, 768, 772, 
- 	775, 778, 781, 784, 787, 790, 793, 796, 
- 	799, 802, 805, 808, 811, 814, 817, 821, 
- 	824, 827, 830, 833, 836, 839, 842, 845, 
- 	848, 851, 854, 857, 860, 863, 866, 869, 
- 	872, 875, 878, 881, 884, 887, 890, 893, 
- 	896, 899, 902, 904, 908, 914, 918, 921, 
- 	927, 945, 948, 951, 954, 957, 960, 963, 
- 	966, 969, 972, 975, 978, 981, 984, 987, 
- 	990, 993, 996, 999, 1002, 1005, 1008, 1011, 
- 	1014, 1017, 1020, 1023, 1026, 1029, 1032, 1034
- };
- 
- static const short _lexer_trans_targs[] = {
- 	2, 4, 4, 5, 15, 17, 31, 34, 
- 	37, 65, 136, 154, 216, 220, 290, 290, 
- 	291, 4, 0, 3, 0, 4, 0, 4, 
- 	4, 5, 15, 17, 31, 34, 37, 65, 
- 	136, 154, 216, 220, 290, 290, 291, 4, 
- 	0, 6, 0, 7, 0, 9, 8, 8, 
- 	9, 8, 8, 10, 10, 11, 10, 10, 
- 	10, 10, 11, 10, 10, 10, 10, 12, 
- 	10, 10, 10, 10, 13, 10, 10, 4, 
- 	14, 14, 0, 4, 14, 14, 0, 4, 
- 	16, 15, 4, 0, 18, 0, 19, 0, 
- 	20, 0, 21, 0, 22, 0, 23, 0, 
- 	24, 0, 25, 0, 26, 0, 27, 0, 
- 	28, 0, 29, 0, 30, 0, 327, 0, 
- 	32, 0, 4, 16, 33, 4, 16, 33, 
- 	0, 0, 0, 0, 35, 36, 4, 36, 
- 	36, 34, 35, 35, 4, 36, 34, 36, 
- 	0, 38, 326, 0, 39, 0, 40, 0, 
- 	41, 0, 42, 0, 43, 0, 44, 0, 
- 	45, 0, 46, 0, 48, 47, 48, 47, 
- 	48, 48, 4, 49, 63, 4, 297, 305, 
- 	307, 314, 318, 325, 325, 48, 47, 48, 
- 	50, 47, 48, 51, 47, 48, 52, 47, 
- 	48, 53, 47, 48, 54, 47, 48, 55, 
- 	47, 48, 56, 47, 48, 57, 47, 48, 
- 	58, 47, 48, 59, 47, 48, 60, 47, 
- 	48, 61, 47, 48, 62, 47, 48, 4, 
- 	47, 48, 64, 47, 4, 4, 5, 15, 
- 	17, 31, 34, 37, 65, 136, 154, 216, 
- 	220, 290, 290, 291, 4, 0, 66, 129, 
- 	0, 67, 0, 68, 0, 69, 0, 70, 
- 	0, 71, 0, 72, 0, 73, 0, 74, 
- 	0, 75, 0, 77, 76, 77, 76, 77, 
- 	77, 4, 78, 92, 4, 93, 109, 111, 
- 	117, 121, 128, 128, 77, 76, 77, 79, 
- 	76, 77, 80, 76, 77, 81, 76, 77, 
- 	82, 76, 77, 83, 76, 77, 84, 76, 
- 	77, 85, 76, 77, 86, 76, 77, 87, 
- 	76, 77, 88, 76, 77, 89, 76, 77, 
- 	90, 76, 77, 91, 76, 77, 4, 76, 
- 	77, 64, 76, 77, 94, 102, 76, 77, 
- 	95, 76, 77, 96, 76, 77, 97, 76, 
- 	77, 98, 76, 77, 99, 76, 77, 100, 
- 	76, 77, 101, 76, 77, 64, 76, 77, 
- 	103, 76, 77, 104, 76, 77, 105, 76, 
- 	77, 106, 76, 77, 107, 76, 77, 108, 
- 	76, 77, 92, 76, 77, 110, 76, 77, 
- 	103, 76, 77, 112, 76, 77, 113, 76, 
- 	77, 114, 76, 77, 115, 76, 77, 116, 
- 	76, 77, 101, 76, 77, 118, 76, 77, 
- 	119, 76, 77, 120, 76, 77, 103, 76, 
- 	77, 122, 76, 77, 123, 76, 77, 124, 
- 	76, 77, 125, 76, 77, 126, 76, 77, 
- 	127, 76, 77, 101, 76, 77, 119, 76, 
- 	130, 0, 131, 0, 132, 0, 133, 0, 
- 	134, 0, 135, 0, 31, 0, 137, 0, 
- 	138, 0, 139, 0, 140, 0, 141, 0, 
- 	142, 0, 143, 0, 144, 0, 146, 145, 
- 	146, 145, 146, 146, 4, 147, 4, 146, 
- 	145, 146, 148, 145, 146, 149, 145, 146, 
- 	150, 145, 146, 151, 145, 146, 152, 145, 
- 	146, 153, 145, 146, 64, 145, 155, 0, 
- 	156, 0, 157, 0, 158, 0, 159, 0, 
- 	160, 0, 161, 0, 163, 162, 163, 162, 
- 	163, 163, 4, 164, 4, 178, 187, 196, 
- 	203, 209, 163, 162, 163, 165, 162, 163, 
- 	166, 162, 163, 167, 162, 163, 168, 162, 
- 	163, 169, 162, 163, 170, 162, 163, 171, 
- 	162, 163, 172, 162, 163, 173, 162, 163, 
- 	174, 162, 163, 175, 162, 163, 176, 162, 
- 	163, 177, 162, 163, 4, 162, 163, 179, 
- 	162, 163, 180, 162, 163, 181, 162, 163, 
- 	182, 162, 163, 183, 162, 163, 184, 162, 
- 	163, 185, 162, 163, 186, 162, 163, 64, 
- 	162, 163, 188, 162, 163, 189, 162, 163, 
- 	190, 162, 163, 191, 162, 163, 192, 162, 
- 	163, 193, 162, 163, 194, 162, 163, 195, 
- 	162, 163, 186, 162, 163, 197, 162, 163, 
- 	198, 162, 163, 199, 162, 163, 200, 162, 
- 	163, 201, 162, 163, 202, 162, 163, 186, 
- 	162, 163, 204, 162, 163, 205, 162, 163, 
- 	206, 162, 163, 207, 162, 163, 208, 162, 
- 	163, 186, 162, 163, 210, 162, 163, 211, 
- 	162, 163, 212, 162, 163, 213, 162, 163, 
- 	214, 162, 163, 215, 162, 163, 186, 162, 
- 	217, 0, 218, 0, 219, 0, 130, 0, 
- 	221, 0, 222, 0, 223, 0, 224, 0, 
- 	225, 0, 226, 0, 227, 0, 228, 0, 
- 	230, 229, 230, 229, 230, 230, 4, 231, 
- 	245, 4, 246, 262, 272, 278, 282, 289, 
- 	289, 230, 229, 230, 232, 229, 230, 233, 
- 	229, 230, 234, 229, 230, 235, 229, 230, 
- 	236, 229, 230, 237, 229, 230, 238, 229, 
- 	230, 239, 229, 230, 240, 229, 230, 241, 
- 	229, 230, 242, 229, 230, 243, 229, 230, 
- 	244, 229, 230, 4, 229, 230, 64, 229, 
- 	230, 247, 255, 229, 230, 248, 229, 230, 
- 	249, 229, 230, 250, 229, 230, 251, 229, 
- 	230, 252, 229, 230, 253, 229, 230, 254, 
- 	229, 230, 64, 229, 230, 256, 229, 230, 
- 	257, 229, 230, 258, 229, 230, 259, 229, 
- 	230, 260, 229, 230, 261, 229, 230, 245, 
- 	229, 230, 263, 271, 229, 230, 264, 229, 
- 	230, 265, 229, 230, 266, 229, 230, 267, 
- 	229, 230, 268, 229, 230, 269, 229, 230, 
- 	270, 229, 230, 254, 229, 230, 256, 229, 
- 	230, 273, 229, 230, 274, 229, 230, 275, 
- 	229, 230, 276, 229, 230, 277, 229, 230, 
- 	254, 229, 230, 279, 229, 230, 280, 229, 
- 	230, 281, 229, 230, 256, 229, 230, 283, 
- 	229, 230, 284, 229, 230, 285, 229, 230, 
- 	286, 229, 230, 287, 229, 230, 288, 229, 
- 	230, 254, 229, 230, 280, 229, 218, 0, 
- 	291, 292, 291, 0, 296, 295, 294, 292, 
- 	295, 293, 0, 294, 292, 293, 0, 294, 
- 	293, 296, 295, 294, 292, 295, 293, 296, 
- 	296, 5, 15, 17, 31, 34, 37, 65, 
- 	136, 154, 216, 220, 290, 290, 291, 296, 
- 	0, 48, 298, 47, 48, 299, 47, 48, 
- 	300, 47, 48, 301, 47, 48, 302, 47, 
- 	48, 303, 47, 48, 304, 47, 48, 63, 
- 	47, 48, 306, 47, 48, 299, 47, 48, 
- 	308, 47, 48, 309, 47, 48, 310, 47, 
- 	48, 311, 47, 48, 312, 47, 48, 313, 
- 	47, 48, 64, 47, 48, 315, 47, 48, 
- 	316, 47, 48, 317, 47, 48, 299, 47, 
- 	48, 319, 47, 48, 320, 47, 48, 321, 
- 	47, 48, 322, 47, 48, 323, 47, 48, 
- 	324, 47, 48, 313, 47, 48, 316, 47, 
- 	130, 0, 0, 0
- };
- 
- static const unsigned char _lexer_trans_actions[] = {
- 	0, 54, 0, 5, 1, 0, 29, 1, 
- 	29, 29, 29, 29, 29, 29, 29, 29, 
- 	35, 0, 43, 0, 43, 0, 43, 54, 
- 	0, 5, 1, 0, 29, 1, 29, 29, 
- 	29, 29, 29, 29, 29, 29, 35, 0, 
- 	43, 0, 43, 0, 43, 139, 48, 9, 
- 	106, 11, 0, 134, 45, 45, 45, 3, 
- 	122, 33, 33, 33, 0, 122, 33, 33, 
- 	33, 0, 122, 33, 0, 33, 0, 102, 
- 	7, 7, 43, 54, 0, 0, 43, 114, 
- 	25, 0, 54, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 149, 126, 57, 110, 23, 0, 
- 	43, 43, 43, 43, 0, 27, 118, 27, 
- 	27, 51, 27, 0, 54, 0, 1, 0, 
- 	43, 0, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 144, 57, 54, 0, 
- 	54, 0, 78, 33, 84, 78, 84, 84, 
- 	84, 84, 84, 84, 84, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 19, 
- 	0, 54, 19, 0, 130, 31, 60, 57, 
- 	31, 63, 57, 63, 63, 63, 63, 63, 
- 	63, 63, 63, 66, 31, 43, 0, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 144, 57, 54, 0, 54, 
- 	0, 72, 33, 84, 72, 84, 84, 84, 
- 	84, 84, 84, 84, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 15, 0, 
- 	54, 15, 0, 54, 0, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 15, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 144, 57, 
- 	54, 0, 54, 0, 81, 84, 81, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 21, 0, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 144, 57, 54, 0, 
- 	54, 0, 69, 33, 69, 84, 84, 84, 
- 	84, 84, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 13, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 13, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	144, 57, 54, 0, 54, 0, 75, 33, 
- 	84, 75, 84, 84, 84, 84, 84, 84, 
- 	84, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 17, 0, 54, 17, 0, 
- 	54, 0, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 17, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 0, 43, 
- 	0, 0, 0, 43, 54, 37, 37, 87, 
- 	37, 37, 43, 0, 39, 0, 43, 0, 
- 	0, 54, 0, 0, 39, 0, 0, 54, 
- 	0, 93, 90, 41, 96, 90, 96, 96, 
- 	96, 96, 96, 96, 96, 96, 99, 0, 
- 	43, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 19, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	0, 43, 0, 0
- };
- 
- static const unsigned char _lexer_eof_actions[] = {
- 	0, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43
- };
- 
- static const int lexer_start = 1;
- static const int lexer_first_final = 327;
- static const int lexer_error = 0;
- 
- static const int lexer_en_main = 1;
- 
- 
- #line 258 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
- 
- static VALUE 
- unindent(VALUE con, int start_col)
- {
-   VALUE re;
-   // Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters
-   char pat[32]; 
-   snprintf(pat, 32, "^[\t ]{0,%d}", start_col); 
-   re = rb_reg_regcomp(rb_str_new2(pat));
-   rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2(""));
- 
-   return Qnil;
- 
- }
- 
- static void 
- store_kw_con(VALUE listener, const char * event_name, 
-              const char * keyword_at, size_t keyword_length, 
-              const char * at,         size_t length, 
-              int current_line)
- {
-   VALUE con = Qnil, kw = Qnil;
-   kw = ENCODED_STR_NEW(keyword_at, keyword_length);
-   con = ENCODED_STR_NEW(at, length);
-   rb_funcall(con, rb_intern("strip!"), 0);
-   rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); 
- }
- 
- static void
- store_multiline_kw_con(VALUE listener, const char * event_name,
-                       const char * keyword_at, size_t keyword_length,
-                       const char * at,         size_t length,
-                       int current_line, int start_col)
- {
-   VALUE split;
-   VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil;
- 
-   kw = ENCODED_STR_NEW(keyword_at, keyword_length);
-   con = ENCODED_STR_NEW(at, length);
- 
-   unindent(con, start_col);
-   
-   split = rb_str_split(con, "\n");
- 
-   name = rb_funcall(split, rb_intern("shift"), 0);
-   desc = rb_ary_join(split, rb_str_new2( "\n" ));
- 
-   if( name == Qnil ) 
-   {
-     name = rb_str_new2("");
-   }
-   if( rb_funcall(desc, rb_intern("size"), 0) == 0) 
-   {
-     desc = rb_str_new2("");
-   }
-   rb_funcall(name, rb_intern("strip!"), 0);
-   rb_funcall(desc, rb_intern("rstrip!"), 0);
-   rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); 
- }
- 
- static void 
- store_attr(VALUE listener, const char * attr_type,
-            const char * at, size_t length, 
-            int line)
- {
-   VALUE val = ENCODED_STR_NEW(at, length);
-   rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line));
- }
- static void 
- store_docstring_content(VALUE listener, 
-           int start_col, 
-           const char *type_at, size_t type_length,
-           const char *at, size_t length, 
-           int current_line)
- {
-   VALUE re2;
-   VALUE unescape_escaped_quotes;
-   VALUE con = ENCODED_STR_NEW(at, length);
-   VALUE con_type = ENCODED_STR_NEW(type_at, type_length);
- 
-   unindent(con, start_col);
- 
-   re2 = rb_reg_regcomp(rb_str_new2("\r\\Z"));
-   unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\""));
-   rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2(""));
-   rb_funcall(con_type, rb_intern("strip!"), 0);
-   rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\""));
-   rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line));
- }
- static void 
- raise_lexer_error(const char * at, int line)
- { 
-   rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at);
- }
- 
- static void lexer_init(lexer_state *lexer) {
-   lexer->content_start = 0;
-   lexer->content_end = 0;
-   lexer->content_len = 0;
-   lexer->docstring_content_type_start = 0;
-   lexer->docstring_content_type_end = 0;
-   lexer->mark = 0;
-   lexer->keyword_start = 0;
-   lexer->keyword_end = 0;
-   lexer->next_keyword_start = 0;
-   lexer->line_number = 1;
-   lexer->last_newline = 0;
-   lexer->final_newline = 0;
-   lexer->start_col = 0;
- }
- 
- static VALUE CLexer_alloc(VALUE klass)
- {
-   VALUE obj;
-   lexer_state *lxr = ALLOC(lexer_state);
-   lexer_init(lxr);
- 
-   obj = Data_Wrap_Struct(klass, NULL, -1, lxr);
- 
-   return obj;
- }
- 
- static VALUE CLexer_init(VALUE self, VALUE listener)
- {
-   lexer_state *lxr; 
-   rb_iv_set(self, "@listener", listener);
-   
-   lxr = NULL;
-   DATA_GET(self, lexer_state, lxr);
-   lexer_init(lxr);
-   
-   return self;
- }
- 
- static VALUE CLexer_scan(VALUE self, VALUE input)
- {
-   VALUE input_copy;
-   char *data;
-   size_t len;
-   VALUE listener = rb_iv_get(self, "@listener");
- 
-   lexer_state *lexer;
-   lexer = NULL;
-   DATA_GET(self, lexer_state, lexer);
- 
-   input_copy = rb_str_dup(input);
- 
-   rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%"));
-   data = RSTRING_PTR(input_copy);
-   len = RSTRING_LEN(input_copy);
-   
-   if (len == 0) { 
-     rb_raise(rb_eGherkinLexingError, "No content to lex.");
-   } else {
- 
-     const char *p, *pe, *eof;
-     int cs = 0;
-     
-     VALUE current_row = Qnil;
- 
-     p = data;
-     pe = data + len;
-     eof = pe;
-     
-     assert(*pe == '\0' && "pointer does not end on NULL");
-     
-     
- #line 869 "ext/gherkin_lexer_en_tx/gherkin_lexer_en_tx.c"
- 	{
- 	cs = lexer_start;
- 	}
- 
- #line 425 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
-     
- #line 876 "ext/gherkin_lexer_en_tx/gherkin_lexer_en_tx.c"
- 	{
- 	int _klen;
- 	unsigned int _trans;
- 	const char *_acts;
- 	unsigned int _nacts;
- 	const char *_keys;
- 
- 	if ( p == pe )
- 		goto _test_eof;
- 	if ( cs == 0 )
- 		goto _out;
- _resume:
- 	_keys = _lexer_trans_keys + _lexer_key_offsets[cs];
- 	_trans = _lexer_index_offsets[cs];
- 
- 	_klen = _lexer_single_lengths[cs];
- 	if ( _klen > 0 ) {
- 		const char *_lower = _keys;
- 		const char *_mid;
- 		const char *_upper = _keys + _klen - 1;
- 		while (1) {
- 			if ( _upper < _lower )
- 				break;
- 
- 			_mid = _lower + ((_upper-_lower) >> 1);
- 			if ( (*p) < *_mid )
- 				_upper = _mid - 1;
- 			else if ( (*p) > *_mid )
- 				_lower = _mid + 1;
- 			else {
- 				_trans += (_mid - _keys);
- 				goto _match;
- 			}
- 		}
- 		_keys += _klen;
- 		_trans += _klen;
- 	}
- 
- 	_klen = _lexer_range_lengths[cs];
- 	if ( _klen > 0 ) {
- 		const char *_lower = _keys;
- 		const char *_mid;
- 		const char *_upper = _keys + (_klen<<1) - 2;
- 		while (1) {
- 			if ( _upper < _lower )
- 				break;
- 
- 			_mid = _lower + (((_upper-_lower) >> 1) & ~1);
- 			if ( (*p) < _mid[0] )
- 				_upper = _mid - 2;
- 			else if ( (*p) > _mid[1] )
- 				_lower = _mid + 2;
- 			else {
- 				_trans += ((_mid - _keys)>>1);
- 				goto _match;
- 			}
- 		}
- 		_trans += _klen;
- 	}
- 
- _match:
- 	cs = _lexer_trans_targs[_trans];
- 
- 	if ( _lexer_trans_actions[_trans] == 0 )
- 		goto _again;
- 
- 	_acts = _lexer_actions + _lexer_trans_actions[_trans];
- 	_nacts = (unsigned int) *_acts++;
- 	while ( _nacts-- > 0 )
- 	{
- 		switch ( *_acts++ )
- 		{
- 	case 0:
- #line 83 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
- 	{
- 		MARK(content_start, p);
-     lexer->current_line = lexer->line_number;
-     lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2;
-   }
- 	break;
- 	case 1:
- #line 89 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
- 	{
-     MARK(content_start, p);
-   }
- 	break;
- 	case 2:
- #line 93 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
- 	{
-     lexer->current_line = lexer->line_number;
-     lexer->start_col = p - data - lexer->last_newline;
-   }
- 	break;
- 	case 3:
- #line 98 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
- 	{
-     int len = LEN(content_start, PTR_TO(final_newline));
-     int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end));
- 
-     if (len < 0) len = 0;
-     if (type_len < 0) len = 0;
- 
-     store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line);
-   }
- 	break;
- 	case 4:
- #line 108 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
- 	{ 
-     MARK(docstring_content_type_start, p);
-   }
- 	break;
- 	case 5:
- #line 112 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
- 	{ 
-     MARK(docstring_content_type_end, p);
-   }
- 	break;
- 	case 6:
- #line 116 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
- 	{
-     STORE_KW_END_CON(feature);
-   }
- 	break;
- 	case 7:
- #line 120 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
- 	{
-     STORE_KW_END_CON(background);
-   }
- 	break;
- 	case 8:
- #line 124 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
- 	{
-     STORE_KW_END_CON(scenario);
-   }
- 	break;
- 	case 9:
- #line 128 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
- 	{
-     STORE_KW_END_CON(scenario_outline);
-   }
- 	break;
- 	case 10:
- #line 132 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
- 	{
-     STORE_KW_END_CON(examples);
-   }
- 	break;
- 	case 11:
- #line 136 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
- 	{
-     store_kw_con(listener, "step",
-       PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-       PTR_TO(content_start), LEN(content_start, p), 
-       lexer->current_line);
-   }
- 	break;
- 	case 12:
- #line 143 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
- 	{
-     STORE_ATTR(comment);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 13:
- #line 148 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
- 	{
-     STORE_ATTR(tag);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 14:
- #line 153 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
- 	{
-     lexer->line_number += 1;
-     MARK(final_newline, p);
-   }
- 	break;
- 	case 15:
- #line 158 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
- 	{
-     MARK(last_newline, p + 1);
-   }
- 	break;
- 	case 16:
- #line 162 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
- 	{
-     if (lexer->mark == 0) {
-       MARK(mark, p);
-     }
-   }
- 	break;
- 	case 17:
- #line 168 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
- 	{
-     MARK(keyword_end, p);
-     MARK(keyword_start, PTR_TO(mark));
-     MARK(content_start, p + 1);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 18:
- #line 175 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
- 	{
-     MARK(content_end, p);
-   }
- 	break;
- 	case 19:
- #line 179 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
- 	{
-     p = p - 1;
-     lexer->current_line = lexer->line_number;
-     current_row = rb_ary_new();
-   }
- 	break;
- 	case 20:
- #line 185 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
- 	{
- 		MARK(content_start, p);
-   }
- 	break;
- 	case 21:
- #line 189 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
- 	{
-     VALUE re_pipe, re_newline, re_backslash;
-     VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
-     rb_funcall(con, rb_intern("strip!"), 0);
-     re_pipe      = rb_reg_regcomp(rb_str_new2("\\\\\\|"));
-     re_newline   = rb_reg_regcomp(rb_str_new2("\\\\n"));
-     re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_pipe,      rb_str_new2("|"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_newline,   rb_str_new2("\n"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\"));
- 
-     rb_ary_push(current_row, con);
-   }
- 	break;
- 	case 22:
- #line 203 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
- 	{
-     rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
-   }
- 	break;
- 	case 23:
- #line 207 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
- 	{
-     int line;
-     if (cs < lexer_first_final) {
-       size_t count = 0;
-       VALUE newstr_val;
-       char *newstr;
-       int newstr_count = 0;        
-       size_t len;
-       const char *buff;
-       if (lexer->last_newline != 0) {
-         len = LEN(last_newline, eof);
-         buff = PTR_TO(last_newline);
-       } else {
-         len = strlen(data);
-         buff = data;
-       }
- 
-       // Allocate as a ruby string so that it gets cleaned up by GC
-       newstr_val = rb_str_new(buff, len);
-       newstr = RSTRING_PTR(newstr_val);
- 
- 
-       for (count = 0; count < len; count++) {
-         if(buff[count] == 10) {
-           newstr[newstr_count] = '\0'; // terminate new string at first newline found
-           break;
-         } else {
-           if (buff[count] == '%') {
-             newstr[newstr_count++] = buff[count];
-             newstr[newstr_count] = buff[count];
-           } else {
-             newstr[newstr_count] = buff[count];
-           }
-         }
-         newstr_count++;
-       }
- 
-       line = lexer->line_number;
-       lexer_init(lexer); // Re-initialize so we can scan again with the same lexer
-       raise_lexer_error(newstr, line);
-     } else {
-       rb_funcall(listener, rb_intern("eof"), 0);
-     }
-   }
- 	break;
- #line 1166 "ext/gherkin_lexer_en_tx/gherkin_lexer_en_tx.c"
- 		}
- 	}
- 
- _again:
- 	if ( cs == 0 )
- 		goto _out;
- 	if ( ++p != pe )
- 		goto _resume;
- 	_test_eof: {}
- 	if ( p == eof )
- 	{
- 	const char *__acts = _lexer_actions + _lexer_eof_actions[cs];
- 	unsigned int __nacts = (unsigned int) *__acts++;
- 	while ( __nacts-- > 0 ) {
- 		switch ( *__acts++ ) {
- 	case 23:
- #line 207 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
- 	{
-     int line;
-     if (cs < lexer_first_final) {
-       size_t count = 0;
-       VALUE newstr_val;
-       char *newstr;
-       int newstr_count = 0;        
-       size_t len;
-       const char *buff;
-       if (lexer->last_newline != 0) {
-         len = LEN(last_newline, eof);
-         buff = PTR_TO(last_newline);
-       } else {
-         len = strlen(data);
-         buff = data;
-       }
- 
-       // Allocate as a ruby string so that it gets cleaned up by GC
-       newstr_val = rb_str_new(buff, len);
-       newstr = RSTRING_PTR(newstr_val);
- 
- 
-       for (count = 0; count < len; count++) {
-         if(buff[count] == 10) {
-           newstr[newstr_count] = '\0'; // terminate new string at first newline found
-           break;
-         } else {
-           if (buff[count] == '%') {
-             newstr[newstr_count++] = buff[count];
-             newstr[newstr_count] = buff[count];
-           } else {
-             newstr[newstr_count] = buff[count];
-           }
-         }
-         newstr_count++;
-       }
- 
-       line = lexer->line_number;
-       lexer_init(lexer); // Re-initialize so we can scan again with the same lexer
-       raise_lexer_error(newstr, line);
-     } else {
-       rb_funcall(listener, rb_intern("eof"), 0);
-     }
-   }
- 	break;
- #line 1229 "ext/gherkin_lexer_en_tx/gherkin_lexer_en_tx.c"
- 		}
- 	}
- 	}
- 
- 	_out: {}
- 	}
- 
- #line 426 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/en_tx.c.rl"
- 
-     assert(p <= pe && "data overflow after parsing execute");
-     assert(lexer->content_start <= len && "content starts after data end");
-     assert(lexer->mark < len && "mark is after data end");
-     
-     // Reset lexer by re-initializing the whole thing
-     lexer_init(lexer);
- 
-     if (cs == lexer_error) {
-       rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails.");
-     } else {
-       return Qtrue;
-     }
-   }
- }
- 
- void Init_gherkin_lexer_en_tx()
- {
-   mGherkin = rb_define_module("Gherkin");
-   mGherkinLexer = rb_define_module_under(mGherkin, "Lexer");
-   rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError"));
- 
-   mCLexer = rb_define_module_under(mGherkin, "CLexer");
-   cI18nLexer = rb_define_class_under(mCLexer, "En_tx", rb_cObject);
-   rb_define_alloc_func(cI18nLexer, CLexer_alloc);
-   rb_define_method(cI18nLexer, "initialize", CLexer_init, 1);
-   rb_define_method(cI18nLexer, "scan", CLexer_scan, 1);
- }
- 
 -#line 1 "ragel/i18n/en_tx.c.rl"
 -#include <assert.h>
 -#include <ruby.h>
 -
 -#if defined(_WIN32)
 -#include <stddef.h>
 -#endif
 -
 -#ifdef HAVE_RUBY_RE_H
 -#include <ruby/re.h>
 -#else
 -#include <re.h>
 -#endif
 -
 -#ifdef HAVE_RUBY_ENCODING_H
 -#include <ruby/encoding.h>
 -#define ENCODED_STR_NEW(ptr, len) \
 -    rb_enc_str_new(ptr, len, rb_utf8_encoding())
 -#else
 -#define ENCODED_STR_NEW(ptr, len) \
 -    rb_str_new(ptr, len)
 -#endif
 -
 -#ifndef RSTRING_PTR
 -#define RSTRING_PTR(s) (RSTRING(s)->ptr)
 -#endif
 -
 -#ifndef RSTRING_LEN
 -#define RSTRING_LEN(s) (RSTRING(s)->len)
 -#endif
 -
 -#define DATA_GET(FROM, TYPE, NAME) \
 -  Data_Get_Struct(FROM, TYPE, NAME); \
 -  if (NAME == NULL) { \
 -    rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \
 -  }
 - 
 -typedef struct lexer_state {
 -  int content_len;
 -  int line_number;
 -  int current_line;
 -  int start_col;
 -  size_t mark;
 -  size_t keyword_start;
 -  size_t keyword_end;
 -  size_t next_keyword_start;
 -  size_t content_start;
 -  size_t content_end;
 -  size_t docstring_content_type_start;
 -  size_t docstring_content_type_end;
 -  size_t query_start;
 -  size_t last_newline;
 -  size_t final_newline;
 -} lexer_state;
 -
 -static VALUE mGherkin;
 -static VALUE mGherkinLexer;
 -static VALUE mCLexer;
 -static VALUE cI18nLexer;
 -static VALUE rb_eGherkinLexingError;
 -
 -#define LEN(AT, P) (P - data - lexer->AT)
 -#define MARK(M, P) (lexer->M = (P) - data)
 -#define PTR_TO(P) (data + lexer->P)
 -
 -#define STORE_KW_END_CON(EVENT) \
 -  store_multiline_kw_con(listener, # EVENT, \
 -    PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \
 -    PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \
 -    lexer->current_line, lexer->start_col); \
 -    if (lexer->content_end != 0) { \
 -      p = PTR_TO(content_end - 1); \
 -    } \
 -    lexer->content_end = 0
 -
 -#define STORE_ATTR(ATTR) \
 -    store_attr(listener, # ATTR, \
 -      PTR_TO(content_start), LEN(content_start, p), \
 -      lexer->line_number)
 -
 -
 -#line 254 "ragel/i18n/en_tx.c.rl"
 -
 -
 -/** Data **/
 -
 -#line 89 "ext/gherkin_lexer_en_tx/gherkin_lexer_en_tx.c"
 -static const char _lexer_actions[] = {
 -	0, 1, 0, 1, 1, 1, 2, 1, 
 -	3, 1, 4, 1, 5, 1, 6, 1, 
 -	7, 1, 8, 1, 9, 1, 10, 1, 
 -	11, 1, 12, 1, 13, 1, 16, 1, 
 -	17, 1, 18, 1, 19, 1, 20, 1, 
 -	21, 1, 22, 1, 23, 2, 1, 18, 
 -	2, 4, 5, 2, 13, 0, 2, 14, 
 -	15, 2, 17, 0, 2, 17, 2, 2, 
 -	17, 16, 2, 17, 19, 2, 18, 6, 
 -	2, 18, 7, 2, 18, 8, 2, 18, 
 -	9, 2, 18, 10, 2, 18, 16, 2, 
 -	20, 21, 2, 22, 0, 2, 22, 2, 
 -	2, 22, 16, 2, 22, 19, 3, 3, 
 -	14, 15, 3, 5, 14, 15, 3, 11, 
 -	14, 15, 3, 12, 14, 15, 3, 13, 
 -	14, 15, 3, 14, 15, 18, 3, 17, 
 -	0, 11, 3, 17, 14, 15, 4, 1, 
 -	14, 15, 18, 4, 4, 5, 14, 15, 
 -	4, 17, 0, 14, 15, 5, 17, 0, 
 -	11, 14, 15
 -};
 -
 -static const short _lexer_key_offsets[] = {
 -	0, 0, 19, 20, 21, 39, 40, 41, 
 -	43, 45, 50, 55, 60, 65, 69, 73, 
 -	75, 76, 77, 78, 79, 80, 81, 82, 
 -	83, 84, 85, 86, 87, 88, 89, 90, 
 -	91, 93, 95, 100, 107, 112, 114, 115, 
 -	116, 117, 118, 119, 120, 121, 122, 123, 
 -	124, 139, 141, 143, 145, 147, 149, 151, 
 -	153, 155, 157, 159, 161, 163, 165, 167, 
 -	169, 187, 189, 190, 191, 192, 193, 194, 
 -	195, 196, 197, 198, 199, 200, 215, 217, 
 -	219, 221, 223, 225, 227, 229, 231, 233, 
 -	235, 237, 239, 241, 243, 245, 248, 250, 
 -	252, 254, 256, 258, 260, 262, 264, 266, 
 -	268, 270, 272, 274, 276, 278, 280, 282, 
 -	284, 286, 288, 290, 292, 294, 296, 298, 
 -	300, 302, 304, 306, 308, 310, 312, 314, 
 -	316, 318, 319, 320, 321, 322, 323, 324, 
 -	325, 326, 327, 328, 329, 330, 331, 332, 
 -	333, 334, 335, 342, 344, 346, 348, 350, 
 -	352, 354, 356, 357, 358, 359, 360, 361, 
 -	362, 363, 364, 365, 377, 379, 381, 383, 
 -	385, 387, 389, 391, 393, 395, 397, 399, 
 -	401, 403, 405, 407, 409, 411, 413, 415, 
 -	417, 419, 421, 423, 425, 427, 429, 431, 
 -	433, 435, 437, 439, 441, 443, 445, 447, 
 -	449, 451, 453, 455, 457, 459, 461, 463, 
 -	465, 467, 469, 471, 473, 475, 477, 479, 
 -	481, 482, 483, 484, 485, 486, 487, 488, 
 -	489, 490, 491, 492, 493, 494, 495, 510, 
 -	512, 514, 516, 518, 520, 522, 524, 526, 
 -	528, 530, 532, 534, 536, 538, 540, 543, 
 -	545, 547, 549, 551, 553, 555, 557, 559, 
 -	561, 563, 565, 567, 569, 571, 573, 576, 
 -	578, 580, 582, 584, 586, 588, 590, 592, 
 -	594, 596, 598, 600, 602, 604, 606, 608, 
 -	610, 612, 614, 616, 618, 620, 622, 624, 
 -	626, 628, 630, 631, 635, 641, 644, 646, 
 -	652, 670, 672, 674, 676, 678, 680, 682, 
 -	684, 686, 688, 690, 692, 694, 696, 698, 
 -	700, 702, 704, 706, 708, 710, 712, 714, 
 -	716, 718, 720, 722, 724, 726, 728, 729
 -};
 -
 -static const char _lexer_trans_keys[] = {
 -	-17, 10, 32, 34, 35, 37, 42, 64, 
 -	65, 66, 69, 70, 71, 83, 84, 87, 
 -	124, 9, 13, -69, -65, 10, 32, 34, 
 -	35, 37, 42, 64, 65, 66, 69, 70, 
 -	71, 83, 84, 87, 124, 9, 13, 34, 
 -	34, 10, 13, 10, 13, 10, 32, 34, 
 -	9, 13, 10, 32, 34, 9, 13, 10, 
 -	32, 34, 9, 13, 10, 32, 34, 9, 
 -	13, 10, 32, 9, 13, 10, 32, 9, 
 -	13, 10, 13, 10, 95, 70, 69, 65, 
 -	84, 85, 82, 69, 95, 69, 78, 68, 
 -	95, 37, 32, 10, 13, 10, 13, 13, 
 -	32, 64, 9, 10, 9, 10, 13, 32, 
 -	64, 11, 12, 10, 32, 64, 9, 13, 
 -	108, 110, 108, 32, 121, 39, 97, 108, 
 -	108, 58, 10, 10, 10, 32, 35, 37, 
 -	42, 64, 65, 66, 70, 71, 83, 84, 
 -	87, 9, 13, 10, 95, 10, 70, 10, 
 -	69, 10, 65, 10, 84, 10, 85, 10, 
 -	82, 10, 69, 10, 95, 10, 69, 10, 
 -	78, 10, 68, 10, 95, 10, 37, 10, 
 -	32, 10, 32, 34, 35, 37, 42, 64, 
 -	65, 66, 69, 70, 71, 83, 84, 87, 
 -	124, 9, 13, 97, 117, 99, 107, 103, 
 -	114, 111, 117, 110, 100, 58, 10, 10, 
 -	10, 32, 35, 37, 42, 64, 65, 66, 
 -	70, 71, 83, 84, 87, 9, 13, 10, 
 -	95, 10, 70, 10, 69, 10, 65, 10, 
 -	84, 10, 85, 10, 82, 10, 69, 10, 
 -	95, 10, 69, 10, 78, 10, 68, 10, 
 -	95, 10, 37, 10, 32, 10, 108, 110, 
 -	10, 108, 10, 32, 10, 121, 10, 39, 
 -	10, 97, 10, 108, 10, 108, 10, 58, 
 -	10, 100, 10, 32, 10, 121, 10, 39, 
 -	10, 97, 10, 108, 10, 108, 10, 117, 
 -	10, 116, 10, 101, 10, 97, 10, 116, 
 -	10, 117, 10, 114, 10, 101, 10, 105, 
 -	10, 118, 10, 101, 10, 110, 10, 99, 
 -	10, 101, 10, 110, 10, 97, 10, 114, 
 -	10, 105, 10, 111, 10, 104, 116, 32, 
 -	121, 39, 97, 108, 108, 120, 97, 109, 
 -	112, 108, 101, 115, 58, 10, 10, 10, 
 -	32, 35, 70, 124, 9, 13, 10, 101, 
 -	10, 97, 10, 116, 10, 117, 10, 114, 
 -	10, 101, 10, 58, 101, 97, 116, 117, 
 -	114, 101, 58, 10, 10, 10, 32, 35, 
 -	37, 64, 65, 66, 69, 70, 83, 9, 
 -	13, 10, 95, 10, 70, 10, 69, 10, 
 -	65, 10, 84, 10, 85, 10, 82, 10, 
 -	69, 10, 95, 10, 69, 10, 78, 10, 
 -	68, 10, 95, 10, 37, 10, 108, 10, 
 -	108, 10, 32, 10, 121, 10, 39, 10, 
 -	97, 10, 108, 10, 108, 10, 58, 10, 
 -	97, 10, 99, 10, 107, 10, 103, 10, 
 -	114, 10, 111, 10, 117, 10, 110, 10, 
 -	100, 10, 120, 10, 97, 10, 109, 10, 
 -	112, 10, 108, 10, 101, 10, 115, 10, 
 -	101, 10, 97, 10, 116, 10, 117, 10, 
 -	114, 10, 101, 10, 99, 10, 101, 10, 
 -	110, 10, 97, 10, 114, 10, 105, 10, 
 -	111, 105, 118, 101, 110, 99, 101, 110, 
 -	97, 114, 105, 111, 58, 10, 10, 10, 
 -	32, 35, 37, 42, 64, 65, 66, 70, 
 -	71, 83, 84, 87, 9, 13, 10, 95, 
 -	10, 70, 10, 69, 10, 65, 10, 84, 
 -	10, 85, 10, 82, 10, 69, 10, 95, 
 -	10, 69, 10, 78, 10, 68, 10, 95, 
 -	10, 37, 10, 32, 10, 108, 110, 10, 
 -	108, 10, 32, 10, 121, 10, 39, 10, 
 -	97, 10, 108, 10, 108, 10, 58, 10, 
 -	100, 10, 32, 10, 121, 10, 39, 10, 
 -	97, 10, 108, 10, 108, 10, 97, 117, 
 -	10, 99, 10, 107, 10, 103, 10, 114, 
 -	10, 111, 10, 117, 10, 110, 10, 100, 
 -	10, 116, 10, 101, 10, 97, 10, 116, 
 -	10, 117, 10, 114, 10, 101, 10, 105, 
 -	10, 118, 10, 101, 10, 110, 10, 99, 
 -	10, 101, 10, 110, 10, 97, 10, 114, 
 -	10, 105, 10, 111, 10, 104, 104, 32, 
 -	124, 9, 13, 10, 32, 92, 124, 9, 
 -	13, 10, 92, 124, 10, 92, 10, 32, 
 -	92, 124, 9, 13, 10, 32, 34, 35, 
 -	37, 42, 64, 65, 66, 69, 70, 71, 
 -	83, 84, 87, 124, 9, 13, 10, 110, 
 -	10, 100, 10, 32, 10, 121, 10, 39, 
 -	10, 97, 10, 108, 10, 108, 10, 117, 
 -	10, 116, 10, 101, 10, 97, 10, 116, 
 -	10, 117, 10, 114, 10, 101, 10, 58, 
 -	10, 105, 10, 118, 10, 101, 10, 110, 
 -	10, 99, 10, 101, 10, 110, 10, 97, 
 -	10, 114, 10, 105, 10, 111, 10, 104, 
 -	100, 0
 -};
 -
 -static const char _lexer_single_lengths[] = {
 -	0, 17, 1, 1, 16, 1, 1, 2, 
 -	2, 3, 3, 3, 3, 2, 2, 2, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	2, 2, 3, 5, 3, 2, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	13, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	16, 2, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 13, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 3, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 5, 2, 2, 2, 2, 2, 
 -	2, 2, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 10, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 13, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 3, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 3, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 1, 2, 4, 3, 2, 4, 
 -	16, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 1, 0
 -};
 -
 -static const char _lexer_range_lengths[] = {
 -	0, 1, 0, 0, 1, 0, 0, 0, 
 -	0, 1, 1, 1, 1, 1, 1, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 1, 1, 1, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	1, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	1, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 1, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 1, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 1, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 1, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 1, 1, 0, 0, 1, 
 -	1, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0
 -};
 -
 -static const short _lexer_index_offsets[] = {
 -	0, 0, 19, 21, 23, 41, 43, 45, 
 -	48, 51, 56, 61, 66, 71, 75, 79, 
 -	82, 84, 86, 88, 90, 92, 94, 96, 
 -	98, 100, 102, 104, 106, 108, 110, 112, 
 -	114, 117, 120, 125, 132, 137, 140, 142, 
 -	144, 146, 148, 150, 152, 154, 156, 158, 
 -	160, 175, 178, 181, 184, 187, 190, 193, 
 -	196, 199, 202, 205, 208, 211, 214, 217, 
 -	220, 238, 241, 243, 245, 247, 249, 251, 
 -	253, 255, 257, 259, 261, 263, 278, 281, 
 -	284, 287, 290, 293, 296, 299, 302, 305, 
 -	308, 311, 314, 317, 320, 323, 327, 330, 
 -	333, 336, 339, 342, 345, 348, 351, 354, 
 -	357, 360, 363, 366, 369, 372, 375, 378, 
 -	381, 384, 387, 390, 393, 396, 399, 402, 
 -	405, 408, 411, 414, 417, 420, 423, 426, 
 -	429, 432, 434, 436, 438, 440, 442, 444, 
 -	446, 448, 450, 452, 454, 456, 458, 460, 
 -	462, 464, 466, 473, 476, 479, 482, 485, 
 -	488, 491, 494, 496, 498, 500, 502, 504, 
 -	506, 508, 510, 512, 524, 527, 530, 533, 
 -	536, 539, 542, 545, 548, 551, 554, 557, 
 -	560, 563, 566, 569, 572, 575, 578, 581, 
 -	584, 587, 590, 593, 596, 599, 602, 605, 
 -	608, 611, 614, 617, 620, 623, 626, 629, 
 -	632, 635, 638, 641, 644, 647, 650, 653, 
 -	656, 659, 662, 665, 668, 671, 674, 677, 
 -	680, 682, 684, 686, 688, 690, 692, 694, 
 -	696, 698, 700, 702, 704, 706, 708, 723, 
 -	726, 729, 732, 735, 738, 741, 744, 747, 
 -	750, 753, 756, 759, 762, 765, 768, 772, 
 -	775, 778, 781, 784, 787, 790, 793, 796, 
 -	799, 802, 805, 808, 811, 814, 817, 821, 
 -	824, 827, 830, 833, 836, 839, 842, 845, 
 -	848, 851, 854, 857, 860, 863, 866, 869, 
 -	872, 875, 878, 881, 884, 887, 890, 893, 
 -	896, 899, 902, 904, 908, 914, 918, 921, 
 -	927, 945, 948, 951, 954, 957, 960, 963, 
 -	966, 969, 972, 975, 978, 981, 984, 987, 
 -	990, 993, 996, 999, 1002, 1005, 1008, 1011, 
 -	1014, 1017, 1020, 1023, 1026, 1029, 1032, 1034
 -};
 -
 -static const short _lexer_trans_targs[] = {
 -	2, 4, 4, 5, 15, 17, 31, 34, 
 -	37, 65, 136, 154, 216, 220, 290, 290, 
 -	291, 4, 0, 3, 0, 4, 0, 4, 
 -	4, 5, 15, 17, 31, 34, 37, 65, 
 -	136, 154, 216, 220, 290, 290, 291, 4, 
 -	0, 6, 0, 7, 0, 9, 8, 8, 
 -	9, 8, 8, 10, 10, 11, 10, 10, 
 -	10, 10, 11, 10, 10, 10, 10, 12, 
 -	10, 10, 10, 10, 13, 10, 10, 4, 
 -	14, 14, 0, 4, 14, 14, 0, 4, 
 -	16, 15, 4, 0, 18, 0, 19, 0, 
 -	20, 0, 21, 0, 22, 0, 23, 0, 
 -	24, 0, 25, 0, 26, 0, 27, 0, 
 -	28, 0, 29, 0, 30, 0, 327, 0, 
 -	32, 0, 4, 16, 33, 4, 16, 33, 
 -	0, 0, 0, 0, 35, 36, 4, 36, 
 -	36, 34, 35, 35, 4, 36, 34, 36, 
 -	0, 38, 326, 0, 39, 0, 40, 0, 
 -	41, 0, 42, 0, 43, 0, 44, 0, 
 -	45, 0, 46, 0, 48, 47, 48, 47, 
 -	48, 48, 4, 49, 63, 4, 297, 305, 
 -	307, 314, 318, 325, 325, 48, 47, 48, 
 -	50, 47, 48, 51, 47, 48, 52, 47, 
 -	48, 53, 47, 48, 54, 47, 48, 55, 
 -	47, 48, 56, 47, 48, 57, 47, 48, 
 -	58, 47, 48, 59, 47, 48, 60, 47, 
 -	48, 61, 47, 48, 62, 47, 48, 4, 
 -	47, 48, 64, 47, 4, 4, 5, 15, 
 -	17, 31, 34, 37, 65, 136, 154, 216, 
 -	220, 290, 290, 291, 4, 0, 66, 129, 
 -	0, 67, 0, 68, 0, 69, 0, 70, 
 -	0, 71, 0, 72, 0, 73, 0, 74, 
 -	0, 75, 0, 77, 76, 77, 76, 77, 
 -	77, 4, 78, 92, 4, 93, 109, 111, 
 -	117, 121, 128, 128, 77, 76, 77, 79, 
 -	76, 77, 80, 76, 77, 81, 76, 77, 
 -	82, 76, 77, 83, 76, 77, 84, 76, 
 -	77, 85, 76, 77, 86, 76, 77, 87, 
 -	76, 77, 88, 76, 77, 89, 76, 77, 
 -	90, 76, 77, 91, 76, 77, 4, 76, 
 -	77, 64, 76, 77, 94, 102, 76, 77, 
 -	95, 76, 77, 96, 76, 77, 97, 76, 
 -	77, 98, 76, 77, 99, 76, 77, 100, 
 -	76, 77, 101, 76, 77, 64, 76, 77, 
 -	103, 76, 77, 104, 76, 77, 105, 76, 
 -	77, 106, 76, 77, 107, 76, 77, 108, 
 -	76, 77, 92, 76, 77, 110, 76, 77, 
 -	103, 76, 77, 112, 76, 77, 113, 76, 
 -	77, 114, 76, 77, 115, 76, 77, 116, 
 -	76, 77, 101, 76, 77, 118, 76, 77, 
 -	119, 76, 77, 120, 76, 77, 103, 76, 
 -	77, 122, 76, 77, 123, 76, 77, 124, 
 -	76, 77, 125, 76, 77, 126, 76, 77, 
 -	127, 76, 77, 101, 76, 77, 119, 76, 
 -	130, 0, 131, 0, 132, 0, 133, 0, 
 -	134, 0, 135, 0, 31, 0, 137, 0, 
 -	138, 0, 139, 0, 140, 0, 141, 0, 
 -	142, 0, 143, 0, 144, 0, 146, 145, 
 -	146, 145, 146, 146, 4, 147, 4, 146, 
 -	145, 146, 148, 145, 146, 149, 145, 146, 
 -	150, 145, 146, 151, 145, 146, 152, 145, 
 -	146, 153, 145, 146, 64, 145, 155, 0, 
 -	156, 0, 157, 0, 158, 0, 159, 0, 
 -	160, 0, 161, 0, 163, 162, 163, 162, 
 -	163, 163, 4, 164, 4, 178, 187, 196, 
 -	203, 209, 163, 162, 163, 165, 162, 163, 
 -	166, 162, 163, 167, 162, 163, 168, 162, 
 -	163, 169, 162, 163, 170, 162, 163, 171, 
 -	162, 163, 172, 162, 163, 173, 162, 163, 
 -	174, 162, 163, 175, 162, 163, 176, 162, 
 -	163, 177, 162, 163, 4, 162, 163, 179, 
 -	162, 163, 180, 162, 163, 181, 162, 163, 
 -	182, 162, 163, 183, 162, 163, 184, 162, 
 -	163, 185, 162, 163, 186, 162, 163, 64, 
 -	162, 163, 188, 162, 163, 189, 162, 163, 
 -	190, 162, 163, 191, 162, 163, 192, 162, 
 -	163, 193, 162, 163, 194, 162, 163, 195, 
 -	162, 163, 186, 162, 163, 197, 162, 163, 
 -	198, 162, 163, 199, 162, 163, 200, 162, 
 -	163, 201, 162, 163, 202, 162, 163, 186, 
 -	162, 163, 204, 162, 163, 205, 162, 163, 
 -	206, 162, 163, 207, 162, 163, 208, 162, 
 -	163, 186, 162, 163, 210, 162, 163, 211, 
 -	162, 163, 212, 162, 163, 213, 162, 163, 
 -	214, 162, 163, 215, 162, 163, 186, 162, 
 -	217, 0, 218, 0, 219, 0, 130, 0, 
 -	221, 0, 222, 0, 223, 0, 224, 0, 
 -	225, 0, 226, 0, 227, 0, 228, 0, 
 -	230, 229, 230, 229, 230, 230, 4, 231, 
 -	245, 4, 246, 262, 272, 278, 282, 289, 
 -	289, 230, 229, 230, 232, 229, 230, 233, 
 -	229, 230, 234, 229, 230, 235, 229, 230, 
 -	236, 229, 230, 237, 229, 230, 238, 229, 
 -	230, 239, 229, 230, 240, 229, 230, 241, 
 -	229, 230, 242, 229, 230, 243, 229, 230, 
 -	244, 229, 230, 4, 229, 230, 64, 229, 
 -	230, 247, 255, 229, 230, 248, 229, 230, 
 -	249, 229, 230, 250, 229, 230, 251, 229, 
 -	230, 252, 229, 230, 253, 229, 230, 254, 
 -	229, 230, 64, 229, 230, 256, 229, 230, 
 -	257, 229, 230, 258, 229, 230, 259, 229, 
 -	230, 260, 229, 230, 261, 229, 230, 245, 
 -	229, 230, 263, 271, 229, 230, 264, 229, 
 -	230, 265, 229, 230, 266, 229, 230, 267, 
 -	229, 230, 268, 229, 230, 269, 229, 230, 
 -	270, 229, 230, 254, 229, 230, 256, 229, 
 -	230, 273, 229, 230, 274, 229, 230, 275, 
 -	229, 230, 276, 229, 230, 277, 229, 230, 
 -	254, 229, 230, 279, 229, 230, 280, 229, 
 -	230, 281, 229, 230, 256, 229, 230, 283, 
 -	229, 230, 284, 229, 230, 285, 229, 230, 
 -	286, 229, 230, 287, 229, 230, 288, 229, 
 -	230, 254, 229, 230, 280, 229, 218, 0, 
 -	291, 292, 291, 0, 296, 295, 294, 292, 
 -	295, 293, 0, 294, 292, 293, 0, 294, 
 -	293, 296, 295, 294, 292, 295, 293, 296, 
 -	296, 5, 15, 17, 31, 34, 37, 65, 
 -	136, 154, 216, 220, 290, 290, 291, 296, 
 -	0, 48, 298, 47, 48, 299, 47, 48, 
 -	300, 47, 48, 301, 47, 48, 302, 47, 
 -	48, 303, 47, 48, 304, 47, 48, 63, 
 -	47, 48, 306, 47, 48, 299, 47, 48, 
 -	308, 47, 48, 309, 47, 48, 310, 47, 
 -	48, 311, 47, 48, 312, 47, 48, 313, 
 -	47, 48, 64, 47, 48, 315, 47, 48, 
 -	316, 47, 48, 317, 47, 48, 299, 47, 
 -	48, 319, 47, 48, 320, 47, 48, 321, 
 -	47, 48, 322, 47, 48, 323, 47, 48, 
 -	324, 47, 48, 313, 47, 48, 316, 47, 
 -	130, 0, 0, 0
 -};
 -
 -static const unsigned char _lexer_trans_actions[] = {
 -	0, 54, 0, 5, 1, 0, 29, 1, 
 -	29, 29, 29, 29, 29, 29, 29, 29, 
 -	35, 0, 43, 0, 43, 0, 43, 54, 
 -	0, 5, 1, 0, 29, 1, 29, 29, 
 -	29, 29, 29, 29, 29, 29, 35, 0, 
 -	43, 0, 43, 0, 43, 139, 48, 9, 
 -	106, 11, 0, 134, 45, 45, 45, 3, 
 -	122, 33, 33, 33, 0, 122, 33, 33, 
 -	33, 0, 122, 33, 0, 33, 0, 102, 
 -	7, 7, 43, 54, 0, 0, 43, 114, 
 -	25, 0, 54, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 149, 126, 57, 110, 23, 0, 
 -	43, 43, 43, 43, 0, 27, 118, 27, 
 -	27, 51, 27, 0, 54, 0, 1, 0, 
 -	43, 0, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 144, 57, 54, 0, 
 -	54, 0, 78, 33, 84, 78, 84, 84, 
 -	84, 84, 84, 84, 84, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 19, 
 -	0, 54, 19, 0, 130, 31, 60, 57, 
 -	31, 63, 57, 63, 63, 63, 63, 63, 
 -	63, 63, 63, 66, 31, 43, 0, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 144, 57, 54, 0, 54, 
 -	0, 72, 33, 84, 72, 84, 84, 84, 
 -	84, 84, 84, 84, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 15, 0, 
 -	54, 15, 0, 54, 0, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 15, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 144, 57, 
 -	54, 0, 54, 0, 81, 84, 81, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 21, 0, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 144, 57, 54, 0, 
 -	54, 0, 69, 33, 69, 84, 84, 84, 
 -	84, 84, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 13, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 13, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	144, 57, 54, 0, 54, 0, 75, 33, 
 -	84, 75, 84, 84, 84, 84, 84, 84, 
 -	84, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 17, 0, 54, 17, 0, 
 -	54, 0, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 17, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 0, 43, 
 -	0, 0, 0, 43, 54, 37, 37, 87, 
 -	37, 37, 43, 0, 39, 0, 43, 0, 
 -	0, 54, 0, 0, 39, 0, 0, 54, 
 -	0, 93, 90, 41, 96, 90, 96, 96, 
 -	96, 96, 96, 96, 96, 96, 99, 0, 
 -	43, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 19, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	0, 43, 0, 0
 -};
 -
 -static const unsigned char _lexer_eof_actions[] = {
 -	0, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43
 -};
 -
 -static const int lexer_start = 1;
 -static const int lexer_first_final = 327;
 -static const int lexer_error = 0;
 -
 -static const int lexer_en_main = 1;
 -
 -
 -#line 258 "ragel/i18n/en_tx.c.rl"
 -
 -static VALUE 
 -unindent(VALUE con, int start_col)
 -{
 -  VALUE re;
 -  /* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */
 -  char pat[32]; 
 -  snprintf(pat, 32, "^[\t ]{0,%d}", start_col); 
 -  re = rb_reg_regcomp(rb_str_new2(pat));
 -  rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2(""));
 -
 -  return Qnil;
 -
 -}
 -
 -static void 
 -store_kw_con(VALUE listener, const char * event_name, 
 -             const char * keyword_at, size_t keyword_length, 
 -             const char * at,         size_t length, 
 -             int current_line)
 -{
 -  VALUE con = Qnil, kw = Qnil;
 -  kw = ENCODED_STR_NEW(keyword_at, keyword_length);
 -  con = ENCODED_STR_NEW(at, length);
 -  rb_funcall(con, rb_intern("strip!"), 0);
 -  rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); 
 -}
 -
 -static void
 -store_multiline_kw_con(VALUE listener, const char * event_name,
 -                      const char * keyword_at, size_t keyword_length,
 -                      const char * at,         size_t length,
 -                      int current_line, int start_col)
 -{
 -  VALUE split;
 -  VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil;
 -
 -  kw = ENCODED_STR_NEW(keyword_at, keyword_length);
 -  con = ENCODED_STR_NEW(at, length);
 -
 -  unindent(con, start_col);
 -  
 -  split = rb_str_split(con, "\n");
 -
 -  name = rb_funcall(split, rb_intern("shift"), 0);
 -  desc = rb_ary_join(split, rb_str_new2( "\n" ));
 -
 -  if( name == Qnil ) 
 -  {
 -    name = rb_str_new2("");
 -  }
 -  if( rb_funcall(desc, rb_intern("size"), 0) == 0) 
 -  {
 -    desc = rb_str_new2("");
 -  }
 -  rb_funcall(name, rb_intern("strip!"), 0);
 -  rb_funcall(desc, rb_intern("rstrip!"), 0);
 -  rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); 
 -}
 -
 -static void 
 -store_attr(VALUE listener, const char * attr_type,
 -           const char * at, size_t length, 
 -           int line)
 -{
 -  VALUE val = ENCODED_STR_NEW(at, length);
 -  rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line));
 -}
 -static void 
 -store_docstring_content(VALUE listener, 
 -          int start_col, 
 -          const char *type_at, size_t type_length,
 -          const char *at, size_t length, 
 -          int current_line)
 -{
 -  VALUE re2;
 -  VALUE unescape_escaped_quotes;
 -  VALUE con = ENCODED_STR_NEW(at, length);
 -  VALUE con_type = ENCODED_STR_NEW(type_at, type_length);
 -
 -  unindent(con, start_col);
 -
 -  re2 = rb_reg_regcomp(rb_str_new2("\r\\Z"));
 -  unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\""));
 -  rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2(""));
 -  rb_funcall(con_type, rb_intern("strip!"), 0);
 -  rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\""));
 -  rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line));
 -}
 -static void 
 -raise_lexer_error(const char * at, int line)
 -{ 
 -  rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at);
 -}
 -
 -static void lexer_init(lexer_state *lexer) {
 -  lexer->content_start = 0;
 -  lexer->content_end = 0;
 -  lexer->content_len = 0;
 -  lexer->docstring_content_type_start = 0;
 -  lexer->docstring_content_type_end = 0;
 -  lexer->mark = 0;
 -  lexer->keyword_start = 0;
 -  lexer->keyword_end = 0;
 -  lexer->next_keyword_start = 0;
 -  lexer->line_number = 1;
 -  lexer->last_newline = 0;
 -  lexer->final_newline = 0;
 -  lexer->start_col = 0;
 -}
 -
 -static VALUE CLexer_alloc(VALUE klass)
 -{
 -  VALUE obj;
 -  lexer_state *lxr = ALLOC(lexer_state);
 -  lexer_init(lxr);
 -
 -  obj = Data_Wrap_Struct(klass, NULL, -1, lxr);
 -
 -  return obj;
 -}
 -
 -static VALUE CLexer_init(VALUE self, VALUE listener)
 -{
 -  lexer_state *lxr; 
 -  rb_iv_set(self, "@listener", listener);
 -  
 -  lxr = NULL;
 -  DATA_GET(self, lexer_state, lxr);
 -  lexer_init(lxr);
 -  
 -  return self;
 -}
 -
 -static VALUE CLexer_scan(VALUE self, VALUE input)
 -{
 -  VALUE input_copy;
 -  char *data;
 -  size_t len;
 -  VALUE listener = rb_iv_get(self, "@listener");
 -
 -  lexer_state *lexer;
 -  lexer = NULL;
 -  DATA_GET(self, lexer_state, lexer);
 -
 -  input_copy = rb_str_dup(input);
 -
 -  rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%"));
 -  data = RSTRING_PTR(input_copy);
 -  len = RSTRING_LEN(input_copy);
 -  
 -  if (len == 0) { 
 -    rb_raise(rb_eGherkinLexingError, "No content to lex.");
 -  } else {
 -
 -    const char *p, *pe, *eof;
 -    int cs = 0;
 -    
 -    VALUE current_row = Qnil;
 -
 -    p = data;
 -    pe = data + len;
 -    eof = pe;
 -    
 -    assert(*pe == '\0' && "pointer does not end on NULL");
 -    
 -    
 -#line 869 "ext/gherkin_lexer_en_tx/gherkin_lexer_en_tx.c"
 -	{
 -	cs = lexer_start;
 -	}
 -
 -#line 425 "ragel/i18n/en_tx.c.rl"
 -    
 -#line 876 "ext/gherkin_lexer_en_tx/gherkin_lexer_en_tx.c"
 -	{
 -	int _klen;
 -	unsigned int _trans;
 -	const char *_acts;
 -	unsigned int _nacts;
 -	const char *_keys;
 -
 -	if ( p == pe )
 -		goto _test_eof;
 -	if ( cs == 0 )
 -		goto _out;
 -_resume:
 -	_keys = _lexer_trans_keys + _lexer_key_offsets[cs];
 -	_trans = _lexer_index_offsets[cs];
 -
 -	_klen = _lexer_single_lengths[cs];
 -	if ( _klen > 0 ) {
 -		const char *_lower = _keys;
 -		const char *_mid;
 -		const char *_upper = _keys + _klen - 1;
 -		while (1) {
 -			if ( _upper < _lower )
 -				break;
 -
 -			_mid = _lower + ((_upper-_lower) >> 1);
 -			if ( (*p) < *_mid )
 -				_upper = _mid - 1;
 -			else if ( (*p) > *_mid )
 -				_lower = _mid + 1;
 -			else {
 -				_trans += (unsigned int)(_mid - _keys);
 -				goto _match;
 -			}
 -		}
 -		_keys += _klen;
 -		_trans += _klen;
 -	}
 -
 -	_klen = _lexer_range_lengths[cs];
 -	if ( _klen > 0 ) {
 -		const char *_lower = _keys;
 -		const char *_mid;
 -		const char *_upper = _keys + (_klen<<1) - 2;
 -		while (1) {
 -			if ( _upper < _lower )
 -				break;
 -
 -			_mid = _lower + (((_upper-_lower) >> 1) & ~1);
 -			if ( (*p) < _mid[0] )
 -				_upper = _mid - 2;
 -			else if ( (*p) > _mid[1] )
 -				_lower = _mid + 2;
 -			else {
 -				_trans += (unsigned int)((_mid - _keys)>>1);
 -				goto _match;
 -			}
 -		}
 -		_trans += _klen;
 -	}
 -
 -_match:
 -	cs = _lexer_trans_targs[_trans];
 -
 -	if ( _lexer_trans_actions[_trans] == 0 )
 -		goto _again;
 -
 -	_acts = _lexer_actions + _lexer_trans_actions[_trans];
 -	_nacts = (unsigned int) *_acts++;
 -	while ( _nacts-- > 0 )
 -	{
 -		switch ( *_acts++ )
 -		{
 -	case 0:
 -#line 83 "ragel/i18n/en_tx.c.rl"
 -	{
 -		MARK(content_start, p);
 -    lexer->current_line = lexer->line_number;
 -    lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2;
 -  }
 -	break;
 -	case 1:
 -#line 89 "ragel/i18n/en_tx.c.rl"
 -	{
 -    MARK(content_start, p);
 -  }
 -	break;
 -	case 2:
 -#line 93 "ragel/i18n/en_tx.c.rl"
 -	{
 -    lexer->current_line = lexer->line_number;
 -    lexer->start_col = p - data - lexer->last_newline;
 -  }
 -	break;
 -	case 3:
 -#line 98 "ragel/i18n/en_tx.c.rl"
 -	{
 -    int len = LEN(content_start, PTR_TO(final_newline));
 -    int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end));
 -
 -    if (len < 0) len = 0;
 -    if (type_len < 0) len = 0;
 -
 -    store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line);
 -  }
 -	break;
 -	case 4:
 -#line 108 "ragel/i18n/en_tx.c.rl"
 -	{ 
 -    MARK(docstring_content_type_start, p);
 -  }
 -	break;
 -	case 5:
 -#line 112 "ragel/i18n/en_tx.c.rl"
 -	{ 
 -    MARK(docstring_content_type_end, p);
 -  }
 -	break;
 -	case 6:
 -#line 116 "ragel/i18n/en_tx.c.rl"
 -	{
 -    STORE_KW_END_CON(feature);
 -  }
 -	break;
 -	case 7:
 -#line 120 "ragel/i18n/en_tx.c.rl"
 -	{
 -    STORE_KW_END_CON(background);
 -  }
 -	break;
 -	case 8:
 -#line 124 "ragel/i18n/en_tx.c.rl"
 -	{
 -    STORE_KW_END_CON(scenario);
 -  }
 -	break;
 -	case 9:
 -#line 128 "ragel/i18n/en_tx.c.rl"
 -	{
 -    STORE_KW_END_CON(scenario_outline);
 -  }
 -	break;
 -	case 10:
 -#line 132 "ragel/i18n/en_tx.c.rl"
 -	{
 -    STORE_KW_END_CON(examples);
 -  }
 -	break;
 -	case 11:
 -#line 136 "ragel/i18n/en_tx.c.rl"
 -	{
 -    store_kw_con(listener, "step",
 -      PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
 -      PTR_TO(content_start), LEN(content_start, p), 
 -      lexer->current_line);
 -  }
 -	break;
 -	case 12:
 -#line 143 "ragel/i18n/en_tx.c.rl"
 -	{
 -    STORE_ATTR(comment);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 13:
 -#line 148 "ragel/i18n/en_tx.c.rl"
 -	{
 -    STORE_ATTR(tag);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 14:
 -#line 153 "ragel/i18n/en_tx.c.rl"
 -	{
 -    lexer->line_number += 1;
 -    MARK(final_newline, p);
 -  }
 -	break;
 -	case 15:
 -#line 158 "ragel/i18n/en_tx.c.rl"
 -	{
 -    MARK(last_newline, p + 1);
 -  }
 -	break;
 -	case 16:
 -#line 162 "ragel/i18n/en_tx.c.rl"
 -	{
 -    if (lexer->mark == 0) {
 -      MARK(mark, p);
 -    }
 -  }
 -	break;
 -	case 17:
 -#line 168 "ragel/i18n/en_tx.c.rl"
 -	{
 -    MARK(keyword_end, p);
 -    MARK(keyword_start, PTR_TO(mark));
 -    MARK(content_start, p + 1);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 18:
 -#line 175 "ragel/i18n/en_tx.c.rl"
 -	{
 -    MARK(content_end, p);
 -  }
 -	break;
 -	case 19:
 -#line 179 "ragel/i18n/en_tx.c.rl"
 -	{
 -    p = p - 1;
 -    lexer->current_line = lexer->line_number;
 -    current_row = rb_ary_new();
 -  }
 -	break;
 -	case 20:
 -#line 185 "ragel/i18n/en_tx.c.rl"
 -	{
 -		MARK(content_start, p);
 -  }
 -	break;
 -	case 21:
 -#line 189 "ragel/i18n/en_tx.c.rl"
 -	{
 -    VALUE re_pipe, re_newline, re_backslash;
 -    VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
 -    rb_funcall(con, rb_intern("strip!"), 0);
 -    re_pipe      = rb_reg_regcomp(rb_str_new2("\\\\\\|"));
 -    re_newline   = rb_reg_regcomp(rb_str_new2("\\\\n"));
 -    re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_pipe,      rb_str_new2("|"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_newline,   rb_str_new2("\n"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\"));
 -
 -    rb_ary_push(current_row, con);
 -  }
 -	break;
 -	case 22:
 -#line 203 "ragel/i18n/en_tx.c.rl"
 -	{
 -    rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
 -  }
 -	break;
 -	case 23:
 -#line 207 "ragel/i18n/en_tx.c.rl"
 -	{
 -    int line;
 -    if (cs < lexer_first_final) {
 -      size_t count = 0;
 -      VALUE newstr_val;
 -      char *newstr;
 -      int newstr_count = 0;        
 -      size_t len;
 -      const char *buff;
 -      if (lexer->last_newline != 0) {
 -        len = LEN(last_newline, eof);
 -        buff = PTR_TO(last_newline);
 -      } else {
 -        len = strlen(data);
 -        buff = data;
 -      }
 -
 -      /* Allocate as a ruby string so that it gets cleaned up by GC */
 -      newstr_val = rb_str_new(buff, len);
 -      newstr = RSTRING_PTR(newstr_val);
 -
 -
 -      for (count = 0; count < len; count++) {
 -        if(buff[count] == 10) {
 -          newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
 -          break;
 -        } else {
 -          if (buff[count] == '%') {
 -            newstr[newstr_count++] = buff[count];
 -            newstr[newstr_count] = buff[count];
 -          } else {
 -            newstr[newstr_count] = buff[count];
 -          }
 -        }
 -        newstr_count++;
 -      }
 -
 -      line = lexer->line_number;
 -      lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
 -      raise_lexer_error(newstr, line);
 -    } else {
 -      rb_funcall(listener, rb_intern("eof"), 0);
 -    }
 -  }
 -	break;
 -#line 1166 "ext/gherkin_lexer_en_tx/gherkin_lexer_en_tx.c"
 -		}
 -	}
 -
 -_again:
 -	if ( cs == 0 )
 -		goto _out;
 -	if ( ++p != pe )
 -		goto _resume;
 -	_test_eof: {}
 -	if ( p == eof )
 -	{
 -	const char *__acts = _lexer_actions + _lexer_eof_actions[cs];
 -	unsigned int __nacts = (unsigned int) *__acts++;
 -	while ( __nacts-- > 0 ) {
 -		switch ( *__acts++ ) {
 -	case 23:
 -#line 207 "ragel/i18n/en_tx.c.rl"
 -	{
 -    int line;
 -    if (cs < lexer_first_final) {
 -      size_t count = 0;
 -      VALUE newstr_val;
 -      char *newstr;
 -      int newstr_count = 0;        
 -      size_t len;
 -      const char *buff;
 -      if (lexer->last_newline != 0) {
 -        len = LEN(last_newline, eof);
 -        buff = PTR_TO(last_newline);
 -      } else {
 -        len = strlen(data);
 -        buff = data;
 -      }
 -
 -      /* Allocate as a ruby string so that it gets cleaned up by GC */
 -      newstr_val = rb_str_new(buff, len);
 -      newstr = RSTRING_PTR(newstr_val);
 -
 -
 -      for (count = 0; count < len; count++) {
 -        if(buff[count] == 10) {
 -          newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
 -          break;
 -        } else {
 -          if (buff[count] == '%') {
 -            newstr[newstr_count++] = buff[count];
 -            newstr[newstr_count] = buff[count];
 -          } else {
 -            newstr[newstr_count] = buff[count];
 -          }
 -        }
 -        newstr_count++;
 -      }
 -
 -      line = lexer->line_number;
 -      lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
 -      raise_lexer_error(newstr, line);
 -    } else {
 -      rb_funcall(listener, rb_intern("eof"), 0);
 -    }
 -  }
 -	break;
 -#line 1229 "ext/gherkin_lexer_en_tx/gherkin_lexer_en_tx.c"
 -		}
 -	}
 -	}
 -
 -	_out: {}
 -	}
 -
 -#line 426 "ragel/i18n/en_tx.c.rl"
 -
 -    assert(p <= pe && "data overflow after parsing execute");
 -    assert(lexer->content_start <= len && "content starts after data end");
 -    assert(lexer->mark < len && "mark is after data end");
 -    
 -    /* Reset lexer by re-initializing the whole thing */
 -    lexer_init(lexer);
 -
 -    if (cs == lexer_error) {
 -      rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails.");
 -    } else {
 -      return Qtrue;
 -    }
 -  }
 -}
 -
 -void Init_gherkin_lexer_en_tx()
 -{
 -  mGherkin = rb_define_module("Gherkin");
 -  mGherkinLexer = rb_define_module_under(mGherkin, "Lexer");
 -  rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError"));
 -
 -  mCLexer = rb_define_module_under(mGherkin, "CLexer");
 -  cI18nLexer = rb_define_class_under(mCLexer, "En_tx", rb_cObject);
 -  rb_define_alloc_func(cI18nLexer, CLexer_alloc);
 -  rb_define_method(cI18nLexer, "initialize", CLexer_init, 1);
 -  rb_define_method(cI18nLexer, "scan", CLexer_scan, 1);
 -}
 -
diff --cc ext/gherkin_lexer_eo/extconf.rb
index 1fb1ce6,1fb1ce6..0000000
deleted file mode 100644,100644
--- a/ext/gherkin_lexer_eo/extconf.rb
+++ /dev/null
@@@ -1,6 -1,6 +1,0 @@@
--require 'mkmf'
--CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags']
--$CFLAGS << ' -O0 -Wall' if CONFIG['CC'] =~ /gcc|clang/
--dir_config("gherkin_lexer_eo")
--have_library("c", "main")
--create_makefile("gherkin_lexer_eo")
diff --cc ext/gherkin_lexer_eo/gherkin_lexer_eo.c
index 93d4c43,87f766a..0000000
deleted file mode 100644,100644
--- a/ext/gherkin_lexer_eo/gherkin_lexer_eo.c
+++ /dev/null
@@@ -1,1241 -1,1241 +1,0 @@@
--
- #line 1 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/eo.c.rl"
- #include <assert.h>
- #include <ruby.h>
- 
- #if defined(_WIN32)
- #include <stddef.h>
- #endif
- 
- #ifdef HAVE_RUBY_RE_H
- #include <ruby/re.h>
- #else
- #include <re.h>
- #endif
- 
- #ifdef HAVE_RUBY_ENCODING_H
- #include <ruby/encoding.h>
- #define ENCODED_STR_NEW(ptr, len) \
-     rb_enc_str_new(ptr, len, rb_utf8_encoding())
- #else
- #define ENCODED_STR_NEW(ptr, len) \
-     rb_str_new(ptr, len)
- #endif
- 
- #ifndef RSTRING_PTR
- #define RSTRING_PTR(s) (RSTRING(s)->ptr)
- #endif
- 
- #ifndef RSTRING_LEN
- #define RSTRING_LEN(s) (RSTRING(s)->len)
- #endif
- 
- #define DATA_GET(FROM, TYPE, NAME) \
-   Data_Get_Struct(FROM, TYPE, NAME); \
-   if (NAME == NULL) { \
-     rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \
-   }
-  
- typedef struct lexer_state {
-   int content_len;
-   int line_number;
-   int current_line;
-   int start_col;
-   size_t mark;
-   size_t keyword_start;
-   size_t keyword_end;
-   size_t next_keyword_start;
-   size_t content_start;
-   size_t content_end;
-   size_t docstring_content_type_start;
-   size_t docstring_content_type_end;
-   size_t query_start;
-   size_t last_newline;
-   size_t final_newline;
- } lexer_state;
- 
- static VALUE mGherkin;
- static VALUE mGherkinLexer;
- static VALUE mCLexer;
- static VALUE cI18nLexer;
- static VALUE rb_eGherkinLexingError;
- 
- #define LEN(AT, P) (P - data - lexer->AT)
- #define MARK(M, P) (lexer->M = (P) - data)
- #define PTR_TO(P) (data + lexer->P)
- 
- #define STORE_KW_END_CON(EVENT) \
-   store_multiline_kw_con(listener, # EVENT, \
-     PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \
-     PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \
-     lexer->current_line, lexer->start_col); \
-     if (lexer->content_end != 0) { \
-       p = PTR_TO(content_end - 1); \
-     } \
-     lexer->content_end = 0
- 
- #define STORE_ATTR(ATTR) \
-     store_attr(listener, # ATTR, \
-       PTR_TO(content_start), LEN(content_start, p), \
-       lexer->line_number)
- 
- 
- #line 254 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/eo.c.rl"
- 
- 
- /** Data **/
- 
- #line 89 "ext/gherkin_lexer_eo/gherkin_lexer_eo.c"
- static const char _lexer_actions[] = {
- 	0, 1, 0, 1, 1, 1, 2, 1, 
- 	3, 1, 4, 1, 5, 1, 6, 1, 
- 	7, 1, 8, 1, 9, 1, 10, 1, 
- 	11, 1, 12, 1, 13, 1, 16, 1, 
- 	17, 1, 18, 1, 19, 1, 20, 1, 
- 	21, 1, 22, 1, 23, 2, 1, 18, 
- 	2, 4, 5, 2, 13, 0, 2, 14, 
- 	15, 2, 17, 0, 2, 17, 2, 2, 
- 	17, 16, 2, 17, 19, 2, 18, 6, 
- 	2, 18, 7, 2, 18, 8, 2, 18, 
- 	9, 2, 18, 10, 2, 18, 16, 2, 
- 	20, 21, 2, 22, 0, 2, 22, 2, 
- 	2, 22, 16, 2, 22, 19, 3, 3, 
- 	14, 15, 3, 5, 14, 15, 3, 11, 
- 	14, 15, 3, 12, 14, 15, 3, 13, 
- 	14, 15, 3, 14, 15, 18, 3, 17, 
- 	0, 11, 3, 17, 14, 15, 4, 1, 
- 	14, 15, 18, 4, 4, 5, 14, 15, 
- 	4, 17, 0, 14, 15, 5, 17, 0, 
- 	11, 14, 15
- };
- 
- static const short _lexer_key_offsets[] = {
- 	0, 0, 17, 18, 19, 35, 36, 37, 
- 	39, 41, 46, 51, 56, 61, 65, 69, 
- 	71, 72, 73, 74, 75, 76, 77, 78, 
- 	79, 80, 81, 82, 83, 84, 85, 86, 
- 	87, 89, 91, 96, 103, 108, 109, 111, 
- 	112, 113, 114, 115, 116, 117, 118, 119, 
- 	120, 121, 122, 123, 124, 125, 126, 127, 
- 	128, 135, 137, 139, 141, 143, 145, 147, 
- 	163, 164, 165, 166, 167, 168, 169, 181, 
- 	183, 185, 187, 189, 191, 193, 195, 197, 
- 	199, 201, 203, 205, 207, 209, 211, 213, 
- 	216, 218, 220, 222, 224, 226, 228, 231, 
- 	233, 235, 237, 239, 241, 243, 245, 247, 
- 	249, 251, 253, 255, 257, 259, 261, 263, 
- 	265, 267, 269, 271, 273, 276, 279, 281, 
- 	283, 285, 287, 289, 290, 291, 292, 293, 
- 	294, 295, 296, 297, 298, 299, 300, 301, 
- 	302, 303, 304, 305, 306, 307, 308, 309, 
- 	310, 311, 312, 324, 326, 328, 330, 332, 
- 	334, 336, 338, 340, 342, 344, 346, 348, 
- 	350, 352, 354, 356, 359, 361, 363, 365, 
- 	367, 369, 371, 373, 375, 378, 380, 382, 
- 	384, 386, 388, 390, 393, 395, 397, 399, 
- 	401, 403, 404, 405, 406, 407, 408, 409, 
- 	410, 411, 424, 426, 428, 430, 432, 434, 
- 	436, 438, 440, 442, 444, 446, 448, 450, 
- 	452, 454, 456, 459, 461, 463, 465, 467, 
- 	469, 471, 473, 475, 477, 479, 482, 484, 
- 	486, 488, 490, 492, 494, 496, 498, 500, 
- 	502, 504, 506, 508, 510, 512, 514, 516, 
- 	518, 520, 523, 526, 528, 530, 532, 534, 
- 	536, 537, 538, 539, 540, 541, 542, 543, 
- 	544, 556, 558, 560, 562, 564, 566, 568, 
- 	570, 572, 574, 576, 578, 580, 582, 584, 
- 	586, 588, 590, 592, 594, 596, 598, 600, 
- 	602, 604, 606, 608, 610, 612, 614, 616, 
- 	618, 620, 622, 624, 626, 628, 630, 632, 
- 	634, 636, 638, 640, 642, 644, 646, 648, 
- 	650, 652, 654, 658, 664, 667, 669, 675, 
- 	691
- };
- 
- static const char _lexer_trans_keys[] = {
- 	-17, 10, 32, 34, 35, 37, 42, 64, 
- 	68, 69, 70, 75, 83, 84, 124, 9, 
- 	13, -69, -65, 10, 32, 34, 35, 37, 
- 	42, 64, 68, 69, 70, 75, 83, 84, 
- 	124, 9, 13, 34, 34, 10, 13, 10, 
- 	13, 10, 32, 34, 9, 13, 10, 32, 
- 	34, 9, 13, 10, 32, 34, 9, 13, 
- 	10, 32, 34, 9, 13, 10, 32, 9, 
- 	13, 10, 32, 9, 13, 10, 13, 10, 
- 	95, 70, 69, 65, 84, 85, 82, 69, 
- 	95, 69, 78, 68, 95, 37, 32, 10, 
- 	13, 10, 13, 13, 32, 64, 9, 10, 
- 	9, 10, 13, 32, 64, 11, 12, 10, 
- 	32, 64, 9, 13, 111, 32, 110, 105, 
- 	116, 97, -60, -75, 111, 107, 122, 101, 
- 	109, 112, 108, 111, 106, 58, 10, 10, 
- 	10, 32, 35, 84, 124, 9, 13, 10, 
- 	114, 10, 97, 10, 106, 10, 116, 10, 
- 	111, 10, 58, 10, 32, 34, 35, 37, 
- 	42, 64, 68, 69, 70, 75, 83, 84, 
- 	124, 9, 13, 111, 110, 111, 58, 10, 
- 	10, 10, 32, 35, 37, 42, 64, 68, 
- 	75, 83, 84, 9, 13, 10, 95, 10, 
- 	70, 10, 69, 10, 65, 10, 84, 10, 
- 	85, 10, 82, 10, 69, 10, 95, 10, 
- 	69, 10, 78, 10, 68, 10, 95, 10, 
- 	37, 10, 32, 10, 111, 10, 32, 110, 
- 	10, 105, 10, 116, 10, 97, -60, 10, 
- 	-75, 10, 10, 111, 10, 97, 111, 10, 
- 	106, 10, 110, 10, 116, 10, 117, 10, 
- 	114, 10, 111, 10, 32, 10, 100, 10, 
- 	101, 10, 32, 10, 108, 10, 97, 10, 
- 	32, 10, 115, 10, 99, 10, 101, 10, 
- 	110, 10, 97, 10, 114, 10, 111, 10, 
- 	58, 10, 99, 101, 10, 32, 100, 10, 
- 	114, 10, 97, 10, 106, 10, 116, 97, 
- 	111, 106, 110, 116, 117, 114, 111, 32, 
- 	100, 101, 32, 108, 97, 32, 115, 99, 
- 	101, 110, 97, 114, 111, 58, 10, 10, 
- 	10, 32, 35, 37, 42, 64, 68, 75, 
- 	83, 84, 9, 13, 10, 95, 10, 70, 
- 	10, 69, 10, 65, 10, 84, 10, 85, 
- 	10, 82, 10, 69, 10, 95, 10, 69, 
- 	10, 78, 10, 68, 10, 95, 10, 37, 
- 	10, 32, 10, 111, 10, 32, 110, 10, 
- 	105, 10, 116, 10, 97, -60, 10, -75, 
- 	10, 10, 111, 10, 97, 10, 106, 10, 
- 	99, 101, 10, 101, 10, 110, 10, 97, 
- 	10, 114, 10, 111, 10, 58, 10, 32, 
- 	100, 10, 114, 10, 97, 10, 106, 10, 
- 	116, 99, 101, 101, 110, 97, 114, 111, 
- 	58, 10, 10, 10, 32, 35, 37, 42, 
- 	64, 68, 70, 75, 83, 84, 9, 13, 
- 	10, 95, 10, 70, 10, 69, 10, 65, 
- 	10, 84, 10, 85, 10, 82, 10, 69, 
- 	10, 95, 10, 69, 10, 78, 10, 68, 
- 	10, 95, 10, 37, 10, 32, 10, 111, 
- 	10, 32, 110, 10, 105, 10, 116, 10, 
- 	97, -60, 10, -75, 10, 10, 111, 10, 
- 	111, 10, 110, 10, 111, 10, 58, 10, 
- 	97, 111, 10, 106, 10, 110, 10, 116, 
- 	10, 117, 10, 114, 10, 111, 10, 32, 
- 	10, 100, 10, 101, 10, 32, 10, 108, 
- 	10, 97, 10, 32, 10, 115, 10, 99, 
- 	10, 101, 10, 110, 10, 97, 10, 114, 
- 	10, 99, 101, 10, 32, 100, 10, 114, 
- 	10, 97, 10, 106, 10, 116, 32, 100, 
- 	114, 97, 106, 116, 111, 58, 10, 10, 
- 	10, 32, 35, 37, 64, 69, 70, 75, 
- 	83, 84, 9, 13, 10, 95, 10, 70, 
- 	10, 69, 10, 65, 10, 84, 10, 85, 
- 	10, 82, 10, 69, 10, 95, 10, 69, 
- 	10, 78, 10, 68, 10, 95, 10, 37, 
- 	10, 107, 10, 122, 10, 101, 10, 109, 
- 	10, 112, 10, 108, 10, 111, 10, 106, 
- 	10, 58, 10, 111, 10, 110, 10, 111, 
- 	10, 111, 10, 110, 10, 116, 10, 117, 
- 	10, 114, 10, 111, 10, 32, 10, 100, 
- 	10, 101, 10, 32, 10, 108, 10, 97, 
- 	10, 32, 10, 115, 10, 99, 10, 101, 
- 	10, 110, 10, 97, 10, 114, 10, 114, 
- 	10, 97, 10, 106, 10, 116, 32, 124, 
- 	9, 13, 10, 32, 92, 124, 9, 13, 
- 	10, 92, 124, 10, 92, 10, 32, 92, 
- 	124, 9, 13, 10, 32, 34, 35, 37, 
- 	42, 64, 68, 69, 70, 75, 83, 84, 
- 	124, 9, 13, 0
- };
- 
- static const char _lexer_single_lengths[] = {
- 	0, 15, 1, 1, 14, 1, 1, 2, 
- 	2, 3, 3, 3, 3, 2, 2, 2, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	2, 2, 3, 5, 3, 1, 2, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	5, 2, 2, 2, 2, 2, 2, 14, 
- 	1, 1, 1, 1, 1, 1, 10, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 3, 
- 	2, 2, 2, 2, 2, 2, 3, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 3, 3, 2, 2, 
- 	2, 2, 2, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 10, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 3, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 3, 2, 2, 2, 
- 	2, 2, 2, 3, 2, 2, 2, 2, 
- 	2, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 11, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 3, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 3, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 3, 3, 2, 2, 2, 2, 2, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	10, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 4, 3, 2, 4, 14, 
- 	0
- };
- 
- static const char _lexer_range_lengths[] = {
- 	0, 1, 0, 0, 1, 0, 0, 0, 
- 	0, 1, 1, 1, 1, 1, 1, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 1, 1, 1, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	1, 0, 0, 0, 0, 0, 0, 1, 
- 	0, 0, 0, 0, 0, 0, 1, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 1, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 1, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	1, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 1, 1, 0, 0, 1, 1, 
- 	0
- };
- 
- static const short _lexer_index_offsets[] = {
- 	0, 0, 17, 19, 21, 37, 39, 41, 
- 	44, 47, 52, 57, 62, 67, 71, 75, 
- 	78, 80, 82, 84, 86, 88, 90, 92, 
- 	94, 96, 98, 100, 102, 104, 106, 108, 
- 	110, 113, 116, 121, 128, 133, 135, 138, 
- 	140, 142, 144, 146, 148, 150, 152, 154, 
- 	156, 158, 160, 162, 164, 166, 168, 170, 
- 	172, 179, 182, 185, 188, 191, 194, 197, 
- 	213, 215, 217, 219, 221, 223, 225, 237, 
- 	240, 243, 246, 249, 252, 255, 258, 261, 
- 	264, 267, 270, 273, 276, 279, 282, 285, 
- 	289, 292, 295, 298, 301, 304, 307, 311, 
- 	314, 317, 320, 323, 326, 329, 332, 335, 
- 	338, 341, 344, 347, 350, 353, 356, 359, 
- 	362, 365, 368, 371, 374, 378, 382, 385, 
- 	388, 391, 394, 397, 399, 401, 403, 405, 
- 	407, 409, 411, 413, 415, 417, 419, 421, 
- 	423, 425, 427, 429, 431, 433, 435, 437, 
- 	439, 441, 443, 455, 458, 461, 464, 467, 
- 	470, 473, 476, 479, 482, 485, 488, 491, 
- 	494, 497, 500, 503, 507, 510, 513, 516, 
- 	519, 522, 525, 528, 531, 535, 538, 541, 
- 	544, 547, 550, 553, 557, 560, 563, 566, 
- 	569, 572, 574, 576, 578, 580, 582, 584, 
- 	586, 588, 601, 604, 607, 610, 613, 616, 
- 	619, 622, 625, 628, 631, 634, 637, 640, 
- 	643, 646, 649, 653, 656, 659, 662, 665, 
- 	668, 671, 674, 677, 680, 683, 687, 690, 
- 	693, 696, 699, 702, 705, 708, 711, 714, 
- 	717, 720, 723, 726, 729, 732, 735, 738, 
- 	741, 744, 748, 752, 755, 758, 761, 764, 
- 	767, 769, 771, 773, 775, 777, 779, 781, 
- 	783, 795, 798, 801, 804, 807, 810, 813, 
- 	816, 819, 822, 825, 828, 831, 834, 837, 
- 	840, 843, 846, 849, 852, 855, 858, 861, 
- 	864, 867, 870, 873, 876, 879, 882, 885, 
- 	888, 891, 894, 897, 900, 903, 906, 909, 
- 	912, 915, 918, 921, 924, 927, 930, 933, 
- 	936, 939, 942, 946, 952, 956, 959, 965, 
- 	981
- };
- 
- static const short _lexer_trans_targs[] = {
- 	2, 4, 4, 5, 15, 17, 31, 34, 
- 	37, 45, 64, 122, 184, 248, 306, 4, 
- 	0, 3, 0, 4, 0, 4, 4, 5, 
- 	15, 17, 31, 34, 37, 45, 64, 122, 
- 	184, 248, 306, 4, 0, 6, 0, 7, 
- 	0, 9, 8, 8, 9, 8, 8, 10, 
- 	10, 11, 10, 10, 10, 10, 11, 10, 
- 	10, 10, 10, 12, 10, 10, 10, 10, 
- 	13, 10, 10, 4, 14, 14, 0, 4, 
- 	14, 14, 0, 4, 16, 15, 4, 0, 
- 	18, 0, 19, 0, 20, 0, 21, 0, 
- 	22, 0, 23, 0, 24, 0, 25, 0, 
- 	26, 0, 27, 0, 28, 0, 29, 0, 
- 	30, 0, 312, 0, 32, 0, 4, 16, 
- 	33, 4, 16, 33, 0, 0, 0, 0, 
- 	35, 36, 4, 36, 36, 34, 35, 35, 
- 	4, 36, 34, 36, 0, 38, 0, 32, 
- 	39, 0, 40, 0, 41, 0, 42, 0, 
- 	43, 0, 44, 0, 31, 0, 46, 0, 
- 	47, 0, 48, 0, 49, 0, 50, 0, 
- 	51, 0, 52, 0, 53, 0, 54, 0, 
- 	56, 55, 56, 55, 56, 56, 4, 57, 
- 	4, 56, 55, 56, 58, 55, 56, 59, 
- 	55, 56, 60, 55, 56, 61, 55, 56, 
- 	62, 55, 56, 63, 55, 4, 4, 5, 
- 	15, 17, 31, 34, 37, 45, 64, 122, 
- 	184, 248, 306, 4, 0, 65, 0, 66, 
- 	0, 67, 0, 68, 0, 70, 69, 70, 
- 	69, 70, 70, 4, 71, 85, 4, 86, 
- 	94, 116, 118, 70, 69, 70, 72, 69, 
- 	70, 73, 69, 70, 74, 69, 70, 75, 
- 	69, 70, 76, 69, 70, 77, 69, 70, 
- 	78, 69, 70, 79, 69, 70, 80, 69, 
- 	70, 81, 69, 70, 82, 69, 70, 83, 
- 	69, 70, 84, 69, 70, 4, 69, 70, 
- 	63, 69, 70, 87, 69, 70, 63, 88, 
- 	69, 70, 89, 69, 70, 90, 69, 70, 
- 	91, 69, 92, 70, 69, 93, 70, 69, 
- 	70, 85, 69, 70, 95, 96, 69, 70, 
- 	85, 69, 70, 97, 69, 70, 98, 69, 
- 	70, 99, 69, 70, 100, 69, 70, 101, 
- 	69, 70, 102, 69, 70, 103, 69, 70, 
- 	104, 69, 70, 105, 69, 70, 106, 69, 
- 	70, 107, 69, 70, 108, 69, 70, 109, 
- 	69, 70, 110, 69, 70, 111, 69, 70, 
- 	112, 69, 70, 113, 69, 70, 114, 69, 
- 	70, 115, 69, 70, 63, 69, 70, 110, 
- 	117, 69, 70, 63, 85, 69, 70, 119, 
- 	69, 70, 120, 69, 70, 121, 69, 70, 
- 	114, 69, 123, 124, 0, 31, 0, 125, 
- 	0, 126, 0, 127, 0, 128, 0, 129, 
- 	0, 130, 0, 131, 0, 132, 0, 133, 
- 	0, 134, 0, 135, 0, 136, 0, 137, 
- 	0, 138, 0, 139, 0, 140, 0, 141, 
- 	0, 142, 0, 143, 0, 144, 0, 146, 
- 	145, 146, 145, 146, 146, 4, 147, 161, 
- 	4, 162, 170, 172, 180, 146, 145, 146, 
- 	148, 145, 146, 149, 145, 146, 150, 145, 
- 	146, 151, 145, 146, 152, 145, 146, 153, 
- 	145, 146, 154, 145, 146, 155, 145, 146, 
- 	156, 145, 146, 157, 145, 146, 158, 145, 
- 	146, 159, 145, 146, 160, 145, 146, 4, 
- 	145, 146, 63, 145, 146, 163, 145, 146, 
- 	63, 164, 145, 146, 165, 145, 146, 166, 
- 	145, 146, 167, 145, 168, 146, 145, 169, 
- 	146, 145, 146, 161, 145, 146, 171, 145, 
- 	146, 161, 145, 146, 173, 179, 145, 146, 
- 	174, 145, 146, 175, 145, 146, 176, 145, 
- 	146, 177, 145, 146, 178, 145, 146, 63, 
- 	145, 146, 63, 161, 145, 146, 181, 145, 
- 	146, 182, 145, 146, 183, 145, 146, 177, 
- 	145, 185, 247, 0, 186, 0, 187, 0, 
- 	188, 0, 189, 0, 190, 0, 191, 0, 
- 	193, 192, 193, 192, 193, 193, 4, 194, 
- 	208, 4, 209, 217, 221, 241, 243, 193, 
- 	192, 193, 195, 192, 193, 196, 192, 193, 
- 	197, 192, 193, 198, 192, 193, 199, 192, 
- 	193, 200, 192, 193, 201, 192, 193, 202, 
- 	192, 193, 203, 192, 193, 204, 192, 193, 
- 	205, 192, 193, 206, 192, 193, 207, 192, 
- 	193, 4, 192, 193, 63, 192, 193, 210, 
- 	192, 193, 63, 211, 192, 193, 212, 192, 
- 	193, 213, 192, 193, 214, 192, 215, 193, 
- 	192, 216, 193, 192, 193, 208, 192, 193, 
- 	218, 192, 193, 219, 192, 193, 220, 192, 
- 	193, 63, 192, 193, 222, 223, 192, 193, 
- 	208, 192, 193, 224, 192, 193, 225, 192, 
- 	193, 226, 192, 193, 227, 192, 193, 228, 
- 	192, 193, 229, 192, 193, 230, 192, 193, 
- 	231, 192, 193, 232, 192, 193, 233, 192, 
- 	193, 234, 192, 193, 235, 192, 193, 236, 
- 	192, 193, 237, 192, 193, 238, 192, 193, 
- 	239, 192, 193, 240, 192, 193, 219, 192, 
- 	193, 237, 242, 192, 193, 63, 208, 192, 
- 	193, 244, 192, 193, 245, 192, 193, 246, 
- 	192, 193, 219, 192, 32, 31, 0, 249, 
- 	0, 250, 0, 251, 0, 252, 0, 253, 
- 	0, 254, 0, 256, 255, 256, 255, 256, 
- 	256, 4, 257, 4, 271, 280, 283, 297, 
- 	302, 256, 255, 256, 258, 255, 256, 259, 
- 	255, 256, 260, 255, 256, 261, 255, 256, 
- 	262, 255, 256, 263, 255, 256, 264, 255, 
- 	256, 265, 255, 256, 266, 255, 256, 267, 
- 	255, 256, 268, 255, 256, 269, 255, 256, 
- 	270, 255, 256, 4, 255, 256, 272, 255, 
- 	256, 273, 255, 256, 274, 255, 256, 275, 
- 	255, 256, 276, 255, 256, 277, 255, 256, 
- 	278, 255, 256, 279, 255, 256, 63, 255, 
- 	256, 281, 255, 256, 282, 255, 256, 279, 
- 	255, 256, 284, 255, 256, 285, 255, 256, 
- 	286, 255, 256, 287, 255, 256, 288, 255, 
- 	256, 289, 255, 256, 290, 255, 256, 291, 
- 	255, 256, 292, 255, 256, 293, 255, 256, 
- 	294, 255, 256, 295, 255, 256, 296, 255, 
- 	256, 297, 255, 256, 298, 255, 256, 299, 
- 	255, 256, 300, 255, 256, 301, 255, 256, 
- 	282, 255, 256, 303, 255, 256, 304, 255, 
- 	256, 305, 255, 256, 282, 255, 306, 307, 
- 	306, 0, 311, 310, 309, 307, 310, 308, 
- 	0, 309, 307, 308, 0, 309, 308, 311, 
- 	310, 309, 307, 310, 308, 311, 311, 5, 
- 	15, 17, 31, 34, 37, 45, 64, 122, 
- 	184, 248, 306, 311, 0, 0, 0
- };
- 
- static const unsigned char _lexer_trans_actions[] = {
- 	0, 54, 0, 5, 1, 0, 29, 1, 
- 	29, 29, 29, 29, 29, 29, 35, 0, 
- 	43, 0, 43, 0, 43, 54, 0, 5, 
- 	1, 0, 29, 1, 29, 29, 29, 29, 
- 	29, 29, 35, 0, 43, 0, 43, 0, 
- 	43, 139, 48, 9, 106, 11, 0, 134, 
- 	45, 45, 45, 3, 122, 33, 33, 33, 
- 	0, 122, 33, 33, 33, 0, 122, 33, 
- 	0, 33, 0, 102, 7, 7, 43, 54, 
- 	0, 0, 43, 114, 25, 0, 54, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 149, 126, 
- 	57, 110, 23, 0, 43, 43, 43, 43, 
- 	0, 27, 118, 27, 27, 51, 27, 0, 
- 	54, 0, 1, 0, 43, 0, 43, 0, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	144, 57, 54, 0, 54, 0, 81, 84, 
- 	81, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 21, 0, 130, 31, 60, 
- 	57, 31, 63, 57, 63, 63, 63, 63, 
- 	63, 63, 66, 31, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 144, 57, 54, 
- 	0, 54, 0, 72, 33, 84, 72, 84, 
- 	84, 84, 84, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 15, 0, 54, 
- 	15, 0, 54, 0, 0, 54, 15, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 0, 54, 0, 0, 54, 0, 
- 	54, 0, 0, 54, 0, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 15, 0, 54, 0, 
- 	0, 0, 54, 15, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 0, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 144, 
- 	57, 54, 0, 54, 0, 78, 33, 84, 
- 	78, 84, 84, 84, 84, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 19, 
- 	0, 54, 19, 0, 54, 0, 0, 54, 
- 	19, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 0, 54, 0, 0, 
- 	54, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 19, 
- 	0, 54, 19, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 0, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	144, 57, 54, 0, 54, 0, 75, 33, 
- 	84, 75, 84, 84, 84, 84, 84, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 17, 0, 54, 17, 0, 54, 0, 
- 	0, 54, 17, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 0, 54, 
- 	0, 0, 54, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 17, 0, 54, 0, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 0, 54, 17, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 0, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 144, 57, 54, 0, 54, 
- 	0, 69, 33, 69, 84, 84, 84, 84, 
- 	84, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 13, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 13, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 0, 0, 
- 	0, 43, 54, 37, 37, 87, 37, 37, 
- 	43, 0, 39, 0, 43, 0, 0, 54, 
- 	0, 0, 39, 0, 0, 54, 0, 93, 
- 	90, 41, 96, 90, 96, 96, 96, 96, 
- 	96, 96, 99, 0, 43, 0, 0
- };
- 
- static const unsigned char _lexer_eof_actions[] = {
- 	0, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43
- };
- 
- static const int lexer_start = 1;
- static const int lexer_first_final = 312;
- static const int lexer_error = 0;
- 
- static const int lexer_en_main = 1;
- 
- 
- #line 258 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/eo.c.rl"
- 
- static VALUE 
- unindent(VALUE con, int start_col)
- {
-   VALUE re;
-   // Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters
-   char pat[32]; 
-   snprintf(pat, 32, "^[\t ]{0,%d}", start_col); 
-   re = rb_reg_regcomp(rb_str_new2(pat));
-   rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2(""));
- 
-   return Qnil;
- 
- }
- 
- static void 
- store_kw_con(VALUE listener, const char * event_name, 
-              const char * keyword_at, size_t keyword_length, 
-              const char * at,         size_t length, 
-              int current_line)
- {
-   VALUE con = Qnil, kw = Qnil;
-   kw = ENCODED_STR_NEW(keyword_at, keyword_length);
-   con = ENCODED_STR_NEW(at, length);
-   rb_funcall(con, rb_intern("strip!"), 0);
-   rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); 
- }
- 
- static void
- store_multiline_kw_con(VALUE listener, const char * event_name,
-                       const char * keyword_at, size_t keyword_length,
-                       const char * at,         size_t length,
-                       int current_line, int start_col)
- {
-   VALUE split;
-   VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil;
- 
-   kw = ENCODED_STR_NEW(keyword_at, keyword_length);
-   con = ENCODED_STR_NEW(at, length);
- 
-   unindent(con, start_col);
-   
-   split = rb_str_split(con, "\n");
- 
-   name = rb_funcall(split, rb_intern("shift"), 0);
-   desc = rb_ary_join(split, rb_str_new2( "\n" ));
- 
-   if( name == Qnil ) 
-   {
-     name = rb_str_new2("");
-   }
-   if( rb_funcall(desc, rb_intern("size"), 0) == 0) 
-   {
-     desc = rb_str_new2("");
-   }
-   rb_funcall(name, rb_intern("strip!"), 0);
-   rb_funcall(desc, rb_intern("rstrip!"), 0);
-   rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); 
- }
- 
- static void 
- store_attr(VALUE listener, const char * attr_type,
-            const char * at, size_t length, 
-            int line)
- {
-   VALUE val = ENCODED_STR_NEW(at, length);
-   rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line));
- }
- static void 
- store_docstring_content(VALUE listener, 
-           int start_col, 
-           const char *type_at, size_t type_length,
-           const char *at, size_t length, 
-           int current_line)
- {
-   VALUE re2;
-   VALUE unescape_escaped_quotes;
-   VALUE con = ENCODED_STR_NEW(at, length);
-   VALUE con_type = ENCODED_STR_NEW(type_at, type_length);
- 
-   unindent(con, start_col);
- 
-   re2 = rb_reg_regcomp(rb_str_new2("\r\\Z"));
-   unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\""));
-   rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2(""));
-   rb_funcall(con_type, rb_intern("strip!"), 0);
-   rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\""));
-   rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line));
- }
- static void 
- raise_lexer_error(const char * at, int line)
- { 
-   rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at);
- }
- 
- static void lexer_init(lexer_state *lexer) {
-   lexer->content_start = 0;
-   lexer->content_end = 0;
-   lexer->content_len = 0;
-   lexer->docstring_content_type_start = 0;
-   lexer->docstring_content_type_end = 0;
-   lexer->mark = 0;
-   lexer->keyword_start = 0;
-   lexer->keyword_end = 0;
-   lexer->next_keyword_start = 0;
-   lexer->line_number = 1;
-   lexer->last_newline = 0;
-   lexer->final_newline = 0;
-   lexer->start_col = 0;
- }
- 
- static VALUE CLexer_alloc(VALUE klass)
- {
-   VALUE obj;
-   lexer_state *lxr = ALLOC(lexer_state);
-   lexer_init(lxr);
- 
-   obj = Data_Wrap_Struct(klass, NULL, -1, lxr);
- 
-   return obj;
- }
- 
- static VALUE CLexer_init(VALUE self, VALUE listener)
- {
-   lexer_state *lxr; 
-   rb_iv_set(self, "@listener", listener);
-   
-   lxr = NULL;
-   DATA_GET(self, lexer_state, lxr);
-   lexer_init(lxr);
-   
-   return self;
- }
- 
- static VALUE CLexer_scan(VALUE self, VALUE input)
- {
-   VALUE input_copy;
-   char *data;
-   size_t len;
-   VALUE listener = rb_iv_get(self, "@listener");
- 
-   lexer_state *lexer;
-   lexer = NULL;
-   DATA_GET(self, lexer_state, lexer);
- 
-   input_copy = rb_str_dup(input);
- 
-   rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%"));
-   data = RSTRING_PTR(input_copy);
-   len = RSTRING_LEN(input_copy);
-   
-   if (len == 0) { 
-     rb_raise(rb_eGherkinLexingError, "No content to lex.");
-   } else {
- 
-     const char *p, *pe, *eof;
-     int cs = 0;
-     
-     VALUE current_row = Qnil;
- 
-     p = data;
-     pe = data + len;
-     eof = pe;
-     
-     assert(*pe == '\0' && "pointer does not end on NULL");
-     
-     
- #line 845 "ext/gherkin_lexer_eo/gherkin_lexer_eo.c"
- 	{
- 	cs = lexer_start;
- 	}
- 
- #line 425 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/eo.c.rl"
-     
- #line 852 "ext/gherkin_lexer_eo/gherkin_lexer_eo.c"
- 	{
- 	int _klen;
- 	unsigned int _trans;
- 	const char *_acts;
- 	unsigned int _nacts;
- 	const char *_keys;
- 
- 	if ( p == pe )
- 		goto _test_eof;
- 	if ( cs == 0 )
- 		goto _out;
- _resume:
- 	_keys = _lexer_trans_keys + _lexer_key_offsets[cs];
- 	_trans = _lexer_index_offsets[cs];
- 
- 	_klen = _lexer_single_lengths[cs];
- 	if ( _klen > 0 ) {
- 		const char *_lower = _keys;
- 		const char *_mid;
- 		const char *_upper = _keys + _klen - 1;
- 		while (1) {
- 			if ( _upper < _lower )
- 				break;
- 
- 			_mid = _lower + ((_upper-_lower) >> 1);
- 			if ( (*p) < *_mid )
- 				_upper = _mid - 1;
- 			else if ( (*p) > *_mid )
- 				_lower = _mid + 1;
- 			else {
- 				_trans += (_mid - _keys);
- 				goto _match;
- 			}
- 		}
- 		_keys += _klen;
- 		_trans += _klen;
- 	}
- 
- 	_klen = _lexer_range_lengths[cs];
- 	if ( _klen > 0 ) {
- 		const char *_lower = _keys;
- 		const char *_mid;
- 		const char *_upper = _keys + (_klen<<1) - 2;
- 		while (1) {
- 			if ( _upper < _lower )
- 				break;
- 
- 			_mid = _lower + (((_upper-_lower) >> 1) & ~1);
- 			if ( (*p) < _mid[0] )
- 				_upper = _mid - 2;
- 			else if ( (*p) > _mid[1] )
- 				_lower = _mid + 2;
- 			else {
- 				_trans += ((_mid - _keys)>>1);
- 				goto _match;
- 			}
- 		}
- 		_trans += _klen;
- 	}
- 
- _match:
- 	cs = _lexer_trans_targs[_trans];
- 
- 	if ( _lexer_trans_actions[_trans] == 0 )
- 		goto _again;
- 
- 	_acts = _lexer_actions + _lexer_trans_actions[_trans];
- 	_nacts = (unsigned int) *_acts++;
- 	while ( _nacts-- > 0 )
- 	{
- 		switch ( *_acts++ )
- 		{
- 	case 0:
- #line 83 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/eo.c.rl"
- 	{
- 		MARK(content_start, p);
-     lexer->current_line = lexer->line_number;
-     lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2;
-   }
- 	break;
- 	case 1:
- #line 89 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/eo.c.rl"
- 	{
-     MARK(content_start, p);
-   }
- 	break;
- 	case 2:
- #line 93 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/eo.c.rl"
- 	{
-     lexer->current_line = lexer->line_number;
-     lexer->start_col = p - data - lexer->last_newline;
-   }
- 	break;
- 	case 3:
- #line 98 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/eo.c.rl"
- 	{
-     int len = LEN(content_start, PTR_TO(final_newline));
-     int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end));
- 
-     if (len < 0) len = 0;
-     if (type_len < 0) len = 0;
- 
-     store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line);
-   }
- 	break;
- 	case 4:
- #line 108 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/eo.c.rl"
- 	{ 
-     MARK(docstring_content_type_start, p);
-   }
- 	break;
- 	case 5:
- #line 112 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/eo.c.rl"
- 	{ 
-     MARK(docstring_content_type_end, p);
-   }
- 	break;
- 	case 6:
- #line 116 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/eo.c.rl"
- 	{
-     STORE_KW_END_CON(feature);
-   }
- 	break;
- 	case 7:
- #line 120 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/eo.c.rl"
- 	{
-     STORE_KW_END_CON(background);
-   }
- 	break;
- 	case 8:
- #line 124 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/eo.c.rl"
- 	{
-     STORE_KW_END_CON(scenario);
-   }
- 	break;
- 	case 9:
- #line 128 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/eo.c.rl"
- 	{
-     STORE_KW_END_CON(scenario_outline);
-   }
- 	break;
- 	case 10:
- #line 132 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/eo.c.rl"
- 	{
-     STORE_KW_END_CON(examples);
-   }
- 	break;
- 	case 11:
- #line 136 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/eo.c.rl"
- 	{
-     store_kw_con(listener, "step",
-       PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-       PTR_TO(content_start), LEN(content_start, p), 
-       lexer->current_line);
-   }
- 	break;
- 	case 12:
- #line 143 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/eo.c.rl"
- 	{
-     STORE_ATTR(comment);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 13:
- #line 148 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/eo.c.rl"
- 	{
-     STORE_ATTR(tag);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 14:
- #line 153 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/eo.c.rl"
- 	{
-     lexer->line_number += 1;
-     MARK(final_newline, p);
-   }
- 	break;
- 	case 15:
- #line 158 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/eo.c.rl"
- 	{
-     MARK(last_newline, p + 1);
-   }
- 	break;
- 	case 16:
- #line 162 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/eo.c.rl"
- 	{
-     if (lexer->mark == 0) {
-       MARK(mark, p);
-     }
-   }
- 	break;
- 	case 17:
- #line 168 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/eo.c.rl"
- 	{
-     MARK(keyword_end, p);
-     MARK(keyword_start, PTR_TO(mark));
-     MARK(content_start, p + 1);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 18:
- #line 175 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/eo.c.rl"
- 	{
-     MARK(content_end, p);
-   }
- 	break;
- 	case 19:
- #line 179 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/eo.c.rl"
- 	{
-     p = p - 1;
-     lexer->current_line = lexer->line_number;
-     current_row = rb_ary_new();
-   }
- 	break;
- 	case 20:
- #line 185 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/eo.c.rl"
- 	{
- 		MARK(content_start, p);
-   }
- 	break;
- 	case 21:
- #line 189 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/eo.c.rl"
- 	{
-     VALUE re_pipe, re_newline, re_backslash;
-     VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
-     rb_funcall(con, rb_intern("strip!"), 0);
-     re_pipe      = rb_reg_regcomp(rb_str_new2("\\\\\\|"));
-     re_newline   = rb_reg_regcomp(rb_str_new2("\\\\n"));
-     re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_pipe,      rb_str_new2("|"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_newline,   rb_str_new2("\n"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\"));
- 
-     rb_ary_push(current_row, con);
-   }
- 	break;
- 	case 22:
- #line 203 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/eo.c.rl"
- 	{
-     rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
-   }
- 	break;
- 	case 23:
- #line 207 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/eo.c.rl"
- 	{
-     int line;
-     if (cs < lexer_first_final) {
-       size_t count = 0;
-       VALUE newstr_val;
-       char *newstr;
-       int newstr_count = 0;        
-       size_t len;
-       const char *buff;
-       if (lexer->last_newline != 0) {
-         len = LEN(last_newline, eof);
-         buff = PTR_TO(last_newline);
-       } else {
-         len = strlen(data);
-         buff = data;
-       }
- 
-       // Allocate as a ruby string so that it gets cleaned up by GC
-       newstr_val = rb_str_new(buff, len);
-       newstr = RSTRING_PTR(newstr_val);
- 
- 
-       for (count = 0; count < len; count++) {
-         if(buff[count] == 10) {
-           newstr[newstr_count] = '\0'; // terminate new string at first newline found
-           break;
-         } else {
-           if (buff[count] == '%') {
-             newstr[newstr_count++] = buff[count];
-             newstr[newstr_count] = buff[count];
-           } else {
-             newstr[newstr_count] = buff[count];
-           }
-         }
-         newstr_count++;
-       }
- 
-       line = lexer->line_number;
-       lexer_init(lexer); // Re-initialize so we can scan again with the same lexer
-       raise_lexer_error(newstr, line);
-     } else {
-       rb_funcall(listener, rb_intern("eof"), 0);
-     }
-   }
- 	break;
- #line 1142 "ext/gherkin_lexer_eo/gherkin_lexer_eo.c"
- 		}
- 	}
- 
- _again:
- 	if ( cs == 0 )
- 		goto _out;
- 	if ( ++p != pe )
- 		goto _resume;
- 	_test_eof: {}
- 	if ( p == eof )
- 	{
- 	const char *__acts = _lexer_actions + _lexer_eof_actions[cs];
- 	unsigned int __nacts = (unsigned int) *__acts++;
- 	while ( __nacts-- > 0 ) {
- 		switch ( *__acts++ ) {
- 	case 23:
- #line 207 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/eo.c.rl"
- 	{
-     int line;
-     if (cs < lexer_first_final) {
-       size_t count = 0;
-       VALUE newstr_val;
-       char *newstr;
-       int newstr_count = 0;        
-       size_t len;
-       const char *buff;
-       if (lexer->last_newline != 0) {
-         len = LEN(last_newline, eof);
-         buff = PTR_TO(last_newline);
-       } else {
-         len = strlen(data);
-         buff = data;
-       }
- 
-       // Allocate as a ruby string so that it gets cleaned up by GC
-       newstr_val = rb_str_new(buff, len);
-       newstr = RSTRING_PTR(newstr_val);
- 
- 
-       for (count = 0; count < len; count++) {
-         if(buff[count] == 10) {
-           newstr[newstr_count] = '\0'; // terminate new string at first newline found
-           break;
-         } else {
-           if (buff[count] == '%') {
-             newstr[newstr_count++] = buff[count];
-             newstr[newstr_count] = buff[count];
-           } else {
-             newstr[newstr_count] = buff[count];
-           }
-         }
-         newstr_count++;
-       }
- 
-       line = lexer->line_number;
-       lexer_init(lexer); // Re-initialize so we can scan again with the same lexer
-       raise_lexer_error(newstr, line);
-     } else {
-       rb_funcall(listener, rb_intern("eof"), 0);
-     }
-   }
- 	break;
- #line 1205 "ext/gherkin_lexer_eo/gherkin_lexer_eo.c"
- 		}
- 	}
- 	}
- 
- 	_out: {}
- 	}
- 
- #line 426 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/eo.c.rl"
- 
-     assert(p <= pe && "data overflow after parsing execute");
-     assert(lexer->content_start <= len && "content starts after data end");
-     assert(lexer->mark < len && "mark is after data end");
-     
-     // Reset lexer by re-initializing the whole thing
-     lexer_init(lexer);
- 
-     if (cs == lexer_error) {
-       rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails.");
-     } else {
-       return Qtrue;
-     }
-   }
- }
- 
- void Init_gherkin_lexer_eo()
- {
-   mGherkin = rb_define_module("Gherkin");
-   mGherkinLexer = rb_define_module_under(mGherkin, "Lexer");
-   rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError"));
- 
-   mCLexer = rb_define_module_under(mGherkin, "CLexer");
-   cI18nLexer = rb_define_class_under(mCLexer, "Eo", rb_cObject);
-   rb_define_alloc_func(cI18nLexer, CLexer_alloc);
-   rb_define_method(cI18nLexer, "initialize", CLexer_init, 1);
-   rb_define_method(cI18nLexer, "scan", CLexer_scan, 1);
- }
- 
 -#line 1 "ragel/i18n/eo.c.rl"
 -#include <assert.h>
 -#include <ruby.h>
 -
 -#if defined(_WIN32)
 -#include <stddef.h>
 -#endif
 -
 -#ifdef HAVE_RUBY_RE_H
 -#include <ruby/re.h>
 -#else
 -#include <re.h>
 -#endif
 -
 -#ifdef HAVE_RUBY_ENCODING_H
 -#include <ruby/encoding.h>
 -#define ENCODED_STR_NEW(ptr, len) \
 -    rb_enc_str_new(ptr, len, rb_utf8_encoding())
 -#else
 -#define ENCODED_STR_NEW(ptr, len) \
 -    rb_str_new(ptr, len)
 -#endif
 -
 -#ifndef RSTRING_PTR
 -#define RSTRING_PTR(s) (RSTRING(s)->ptr)
 -#endif
 -
 -#ifndef RSTRING_LEN
 -#define RSTRING_LEN(s) (RSTRING(s)->len)
 -#endif
 -
 -#define DATA_GET(FROM, TYPE, NAME) \
 -  Data_Get_Struct(FROM, TYPE, NAME); \
 -  if (NAME == NULL) { \
 -    rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \
 -  }
 - 
 -typedef struct lexer_state {
 -  int content_len;
 -  int line_number;
 -  int current_line;
 -  int start_col;
 -  size_t mark;
 -  size_t keyword_start;
 -  size_t keyword_end;
 -  size_t next_keyword_start;
 -  size_t content_start;
 -  size_t content_end;
 -  size_t docstring_content_type_start;
 -  size_t docstring_content_type_end;
 -  size_t query_start;
 -  size_t last_newline;
 -  size_t final_newline;
 -} lexer_state;
 -
 -static VALUE mGherkin;
 -static VALUE mGherkinLexer;
 -static VALUE mCLexer;
 -static VALUE cI18nLexer;
 -static VALUE rb_eGherkinLexingError;
 -
 -#define LEN(AT, P) (P - data - lexer->AT)
 -#define MARK(M, P) (lexer->M = (P) - data)
 -#define PTR_TO(P) (data + lexer->P)
 -
 -#define STORE_KW_END_CON(EVENT) \
 -  store_multiline_kw_con(listener, # EVENT, \
 -    PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \
 -    PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \
 -    lexer->current_line, lexer->start_col); \
 -    if (lexer->content_end != 0) { \
 -      p = PTR_TO(content_end - 1); \
 -    } \
 -    lexer->content_end = 0
 -
 -#define STORE_ATTR(ATTR) \
 -    store_attr(listener, # ATTR, \
 -      PTR_TO(content_start), LEN(content_start, p), \
 -      lexer->line_number)
 -
 -
 -#line 254 "ragel/i18n/eo.c.rl"
 -
 -
 -/** Data **/
 -
 -#line 89 "ext/gherkin_lexer_eo/gherkin_lexer_eo.c"
 -static const char _lexer_actions[] = {
 -	0, 1, 0, 1, 1, 1, 2, 1, 
 -	3, 1, 4, 1, 5, 1, 6, 1, 
 -	7, 1, 8, 1, 9, 1, 10, 1, 
 -	11, 1, 12, 1, 13, 1, 16, 1, 
 -	17, 1, 18, 1, 19, 1, 20, 1, 
 -	21, 1, 22, 1, 23, 2, 1, 18, 
 -	2, 4, 5, 2, 13, 0, 2, 14, 
 -	15, 2, 17, 0, 2, 17, 2, 2, 
 -	17, 16, 2, 17, 19, 2, 18, 6, 
 -	2, 18, 7, 2, 18, 8, 2, 18, 
 -	9, 2, 18, 10, 2, 18, 16, 2, 
 -	20, 21, 2, 22, 0, 2, 22, 2, 
 -	2, 22, 16, 2, 22, 19, 3, 3, 
 -	14, 15, 3, 5, 14, 15, 3, 11, 
 -	14, 15, 3, 12, 14, 15, 3, 13, 
 -	14, 15, 3, 14, 15, 18, 3, 17, 
 -	0, 11, 3, 17, 14, 15, 4, 1, 
 -	14, 15, 18, 4, 4, 5, 14, 15, 
 -	4, 17, 0, 14, 15, 5, 17, 0, 
 -	11, 14, 15
 -};
 -
 -static const short _lexer_key_offsets[] = {
 -	0, 0, 17, 18, 19, 35, 36, 37, 
 -	39, 41, 46, 51, 56, 61, 65, 69, 
 -	71, 72, 73, 74, 75, 76, 77, 78, 
 -	79, 80, 81, 82, 83, 84, 85, 86, 
 -	87, 89, 91, 96, 103, 108, 109, 111, 
 -	112, 113, 114, 115, 116, 117, 118, 119, 
 -	120, 121, 122, 123, 124, 125, 126, 127, 
 -	128, 135, 137, 139, 141, 143, 145, 147, 
 -	163, 164, 165, 166, 167, 168, 169, 181, 
 -	183, 185, 187, 189, 191, 193, 195, 197, 
 -	199, 201, 203, 205, 207, 209, 211, 213, 
 -	216, 218, 220, 222, 224, 226, 228, 231, 
 -	233, 235, 237, 239, 241, 243, 245, 247, 
 -	249, 251, 253, 255, 257, 259, 261, 263, 
 -	265, 267, 269, 271, 273, 276, 279, 281, 
 -	283, 285, 287, 289, 290, 291, 292, 293, 
 -	294, 295, 296, 297, 298, 299, 300, 301, 
 -	302, 303, 304, 305, 306, 307, 308, 309, 
 -	310, 311, 312, 324, 326, 328, 330, 332, 
 -	334, 336, 338, 340, 342, 344, 346, 348, 
 -	350, 352, 354, 356, 359, 361, 363, 365, 
 -	367, 369, 371, 373, 375, 378, 380, 382, 
 -	384, 386, 388, 390, 393, 395, 397, 399, 
 -	401, 403, 404, 405, 406, 407, 408, 409, 
 -	410, 411, 424, 426, 428, 430, 432, 434, 
 -	436, 438, 440, 442, 444, 446, 448, 450, 
 -	452, 454, 456, 459, 461, 463, 465, 467, 
 -	469, 471, 473, 475, 477, 479, 482, 484, 
 -	486, 488, 490, 492, 494, 496, 498, 500, 
 -	502, 504, 506, 508, 510, 512, 514, 516, 
 -	518, 520, 523, 526, 528, 530, 532, 534, 
 -	536, 537, 538, 539, 540, 541, 542, 543, 
 -	544, 556, 558, 560, 562, 564, 566, 568, 
 -	570, 572, 574, 576, 578, 580, 582, 584, 
 -	586, 588, 590, 592, 594, 596, 598, 600, 
 -	602, 604, 606, 608, 610, 612, 614, 616, 
 -	618, 620, 622, 624, 626, 628, 630, 632, 
 -	634, 636, 638, 640, 642, 644, 646, 648, 
 -	650, 652, 654, 658, 664, 667, 669, 675, 
 -	691
 -};
 -
 -static const char _lexer_trans_keys[] = {
 -	-17, 10, 32, 34, 35, 37, 42, 64, 
 -	68, 69, 70, 75, 83, 84, 124, 9, 
 -	13, -69, -65, 10, 32, 34, 35, 37, 
 -	42, 64, 68, 69, 70, 75, 83, 84, 
 -	124, 9, 13, 34, 34, 10, 13, 10, 
 -	13, 10, 32, 34, 9, 13, 10, 32, 
 -	34, 9, 13, 10, 32, 34, 9, 13, 
 -	10, 32, 34, 9, 13, 10, 32, 9, 
 -	13, 10, 32, 9, 13, 10, 13, 10, 
 -	95, 70, 69, 65, 84, 85, 82, 69, 
 -	95, 69, 78, 68, 95, 37, 32, 10, 
 -	13, 10, 13, 13, 32, 64, 9, 10, 
 -	9, 10, 13, 32, 64, 11, 12, 10, 
 -	32, 64, 9, 13, 111, 32, 110, 105, 
 -	116, 97, -60, -75, 111, 107, 122, 101, 
 -	109, 112, 108, 111, 106, 58, 10, 10, 
 -	10, 32, 35, 84, 124, 9, 13, 10, 
 -	114, 10, 97, 10, 106, 10, 116, 10, 
 -	111, 10, 58, 10, 32, 34, 35, 37, 
 -	42, 64, 68, 69, 70, 75, 83, 84, 
 -	124, 9, 13, 111, 110, 111, 58, 10, 
 -	10, 10, 32, 35, 37, 42, 64, 68, 
 -	75, 83, 84, 9, 13, 10, 95, 10, 
 -	70, 10, 69, 10, 65, 10, 84, 10, 
 -	85, 10, 82, 10, 69, 10, 95, 10, 
 -	69, 10, 78, 10, 68, 10, 95, 10, 
 -	37, 10, 32, 10, 111, 10, 32, 110, 
 -	10, 105, 10, 116, 10, 97, -60, 10, 
 -	-75, 10, 10, 111, 10, 97, 111, 10, 
 -	106, 10, 110, 10, 116, 10, 117, 10, 
 -	114, 10, 111, 10, 32, 10, 100, 10, 
 -	101, 10, 32, 10, 108, 10, 97, 10, 
 -	32, 10, 115, 10, 99, 10, 101, 10, 
 -	110, 10, 97, 10, 114, 10, 111, 10, 
 -	58, 10, 99, 101, 10, 32, 100, 10, 
 -	114, 10, 97, 10, 106, 10, 116, 97, 
 -	111, 106, 110, 116, 117, 114, 111, 32, 
 -	100, 101, 32, 108, 97, 32, 115, 99, 
 -	101, 110, 97, 114, 111, 58, 10, 10, 
 -	10, 32, 35, 37, 42, 64, 68, 75, 
 -	83, 84, 9, 13, 10, 95, 10, 70, 
 -	10, 69, 10, 65, 10, 84, 10, 85, 
 -	10, 82, 10, 69, 10, 95, 10, 69, 
 -	10, 78, 10, 68, 10, 95, 10, 37, 
 -	10, 32, 10, 111, 10, 32, 110, 10, 
 -	105, 10, 116, 10, 97, -60, 10, -75, 
 -	10, 10, 111, 10, 97, 10, 106, 10, 
 -	99, 101, 10, 101, 10, 110, 10, 97, 
 -	10, 114, 10, 111, 10, 58, 10, 32, 
 -	100, 10, 114, 10, 97, 10, 106, 10, 
 -	116, 99, 101, 101, 110, 97, 114, 111, 
 -	58, 10, 10, 10, 32, 35, 37, 42, 
 -	64, 68, 70, 75, 83, 84, 9, 13, 
 -	10, 95, 10, 70, 10, 69, 10, 65, 
 -	10, 84, 10, 85, 10, 82, 10, 69, 
 -	10, 95, 10, 69, 10, 78, 10, 68, 
 -	10, 95, 10, 37, 10, 32, 10, 111, 
 -	10, 32, 110, 10, 105, 10, 116, 10, 
 -	97, -60, 10, -75, 10, 10, 111, 10, 
 -	111, 10, 110, 10, 111, 10, 58, 10, 
 -	97, 111, 10, 106, 10, 110, 10, 116, 
 -	10, 117, 10, 114, 10, 111, 10, 32, 
 -	10, 100, 10, 101, 10, 32, 10, 108, 
 -	10, 97, 10, 32, 10, 115, 10, 99, 
 -	10, 101, 10, 110, 10, 97, 10, 114, 
 -	10, 99, 101, 10, 32, 100, 10, 114, 
 -	10, 97, 10, 106, 10, 116, 32, 100, 
 -	114, 97, 106, 116, 111, 58, 10, 10, 
 -	10, 32, 35, 37, 64, 69, 70, 75, 
 -	83, 84, 9, 13, 10, 95, 10, 70, 
 -	10, 69, 10, 65, 10, 84, 10, 85, 
 -	10, 82, 10, 69, 10, 95, 10, 69, 
 -	10, 78, 10, 68, 10, 95, 10, 37, 
 -	10, 107, 10, 122, 10, 101, 10, 109, 
 -	10, 112, 10, 108, 10, 111, 10, 106, 
 -	10, 58, 10, 111, 10, 110, 10, 111, 
 -	10, 111, 10, 110, 10, 116, 10, 117, 
 -	10, 114, 10, 111, 10, 32, 10, 100, 
 -	10, 101, 10, 32, 10, 108, 10, 97, 
 -	10, 32, 10, 115, 10, 99, 10, 101, 
 -	10, 110, 10, 97, 10, 114, 10, 114, 
 -	10, 97, 10, 106, 10, 116, 32, 124, 
 -	9, 13, 10, 32, 92, 124, 9, 13, 
 -	10, 92, 124, 10, 92, 10, 32, 92, 
 -	124, 9, 13, 10, 32, 34, 35, 37, 
 -	42, 64, 68, 69, 70, 75, 83, 84, 
 -	124, 9, 13, 0
 -};
 -
 -static const char _lexer_single_lengths[] = {
 -	0, 15, 1, 1, 14, 1, 1, 2, 
 -	2, 3, 3, 3, 3, 2, 2, 2, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	2, 2, 3, 5, 3, 1, 2, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	5, 2, 2, 2, 2, 2, 2, 14, 
 -	1, 1, 1, 1, 1, 1, 10, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 3, 
 -	2, 2, 2, 2, 2, 2, 3, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 3, 3, 2, 2, 
 -	2, 2, 2, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 10, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 3, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 3, 2, 2, 2, 
 -	2, 2, 2, 3, 2, 2, 2, 2, 
 -	2, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 11, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 3, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 3, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 3, 3, 2, 2, 2, 2, 2, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	10, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 4, 3, 2, 4, 14, 
 -	0
 -};
 -
 -static const char _lexer_range_lengths[] = {
 -	0, 1, 0, 0, 1, 0, 0, 0, 
 -	0, 1, 1, 1, 1, 1, 1, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 1, 1, 1, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	1, 0, 0, 0, 0, 0, 0, 1, 
 -	0, 0, 0, 0, 0, 0, 1, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 1, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 1, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	1, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 1, 1, 0, 0, 1, 1, 
 -	0
 -};
 -
 -static const short _lexer_index_offsets[] = {
 -	0, 0, 17, 19, 21, 37, 39, 41, 
 -	44, 47, 52, 57, 62, 67, 71, 75, 
 -	78, 80, 82, 84, 86, 88, 90, 92, 
 -	94, 96, 98, 100, 102, 104, 106, 108, 
 -	110, 113, 116, 121, 128, 133, 135, 138, 
 -	140, 142, 144, 146, 148, 150, 152, 154, 
 -	156, 158, 160, 162, 164, 166, 168, 170, 
 -	172, 179, 182, 185, 188, 191, 194, 197, 
 -	213, 215, 217, 219, 221, 223, 225, 237, 
 -	240, 243, 246, 249, 252, 255, 258, 261, 
 -	264, 267, 270, 273, 276, 279, 282, 285, 
 -	289, 292, 295, 298, 301, 304, 307, 311, 
 -	314, 317, 320, 323, 326, 329, 332, 335, 
 -	338, 341, 344, 347, 350, 353, 356, 359, 
 -	362, 365, 368, 371, 374, 378, 382, 385, 
 -	388, 391, 394, 397, 399, 401, 403, 405, 
 -	407, 409, 411, 413, 415, 417, 419, 421, 
 -	423, 425, 427, 429, 431, 433, 435, 437, 
 -	439, 441, 443, 455, 458, 461, 464, 467, 
 -	470, 473, 476, 479, 482, 485, 488, 491, 
 -	494, 497, 500, 503, 507, 510, 513, 516, 
 -	519, 522, 525, 528, 531, 535, 538, 541, 
 -	544, 547, 550, 553, 557, 560, 563, 566, 
 -	569, 572, 574, 576, 578, 580, 582, 584, 
 -	586, 588, 601, 604, 607, 610, 613, 616, 
 -	619, 622, 625, 628, 631, 634, 637, 640, 
 -	643, 646, 649, 653, 656, 659, 662, 665, 
 -	668, 671, 674, 677, 680, 683, 687, 690, 
 -	693, 696, 699, 702, 705, 708, 711, 714, 
 -	717, 720, 723, 726, 729, 732, 735, 738, 
 -	741, 744, 748, 752, 755, 758, 761, 764, 
 -	767, 769, 771, 773, 775, 777, 779, 781, 
 -	783, 795, 798, 801, 804, 807, 810, 813, 
 -	816, 819, 822, 825, 828, 831, 834, 837, 
 -	840, 843, 846, 849, 852, 855, 858, 861, 
 -	864, 867, 870, 873, 876, 879, 882, 885, 
 -	888, 891, 894, 897, 900, 903, 906, 909, 
 -	912, 915, 918, 921, 924, 927, 930, 933, 
 -	936, 939, 942, 946, 952, 956, 959, 965, 
 -	981
 -};
 -
 -static const short _lexer_trans_targs[] = {
 -	2, 4, 4, 5, 15, 17, 31, 34, 
 -	37, 45, 64, 122, 184, 248, 306, 4, 
 -	0, 3, 0, 4, 0, 4, 4, 5, 
 -	15, 17, 31, 34, 37, 45, 64, 122, 
 -	184, 248, 306, 4, 0, 6, 0, 7, 
 -	0, 9, 8, 8, 9, 8, 8, 10, 
 -	10, 11, 10, 10, 10, 10, 11, 10, 
 -	10, 10, 10, 12, 10, 10, 10, 10, 
 -	13, 10, 10, 4, 14, 14, 0, 4, 
 -	14, 14, 0, 4, 16, 15, 4, 0, 
 -	18, 0, 19, 0, 20, 0, 21, 0, 
 -	22, 0, 23, 0, 24, 0, 25, 0, 
 -	26, 0, 27, 0, 28, 0, 29, 0, 
 -	30, 0, 312, 0, 32, 0, 4, 16, 
 -	33, 4, 16, 33, 0, 0, 0, 0, 
 -	35, 36, 4, 36, 36, 34, 35, 35, 
 -	4, 36, 34, 36, 0, 38, 0, 32, 
 -	39, 0, 40, 0, 41, 0, 42, 0, 
 -	43, 0, 44, 0, 31, 0, 46, 0, 
 -	47, 0, 48, 0, 49, 0, 50, 0, 
 -	51, 0, 52, 0, 53, 0, 54, 0, 
 -	56, 55, 56, 55, 56, 56, 4, 57, 
 -	4, 56, 55, 56, 58, 55, 56, 59, 
 -	55, 56, 60, 55, 56, 61, 55, 56, 
 -	62, 55, 56, 63, 55, 4, 4, 5, 
 -	15, 17, 31, 34, 37, 45, 64, 122, 
 -	184, 248, 306, 4, 0, 65, 0, 66, 
 -	0, 67, 0, 68, 0, 70, 69, 70, 
 -	69, 70, 70, 4, 71, 85, 4, 86, 
 -	94, 116, 118, 70, 69, 70, 72, 69, 
 -	70, 73, 69, 70, 74, 69, 70, 75, 
 -	69, 70, 76, 69, 70, 77, 69, 70, 
 -	78, 69, 70, 79, 69, 70, 80, 69, 
 -	70, 81, 69, 70, 82, 69, 70, 83, 
 -	69, 70, 84, 69, 70, 4, 69, 70, 
 -	63, 69, 70, 87, 69, 70, 63, 88, 
 -	69, 70, 89, 69, 70, 90, 69, 70, 
 -	91, 69, 92, 70, 69, 93, 70, 69, 
 -	70, 85, 69, 70, 95, 96, 69, 70, 
 -	85, 69, 70, 97, 69, 70, 98, 69, 
 -	70, 99, 69, 70, 100, 69, 70, 101, 
 -	69, 70, 102, 69, 70, 103, 69, 70, 
 -	104, 69, 70, 105, 69, 70, 106, 69, 
 -	70, 107, 69, 70, 108, 69, 70, 109, 
 -	69, 70, 110, 69, 70, 111, 69, 70, 
 -	112, 69, 70, 113, 69, 70, 114, 69, 
 -	70, 115, 69, 70, 63, 69, 70, 110, 
 -	117, 69, 70, 63, 85, 69, 70, 119, 
 -	69, 70, 120, 69, 70, 121, 69, 70, 
 -	114, 69, 123, 124, 0, 31, 0, 125, 
 -	0, 126, 0, 127, 0, 128, 0, 129, 
 -	0, 130, 0, 131, 0, 132, 0, 133, 
 -	0, 134, 0, 135, 0, 136, 0, 137, 
 -	0, 138, 0, 139, 0, 140, 0, 141, 
 -	0, 142, 0, 143, 0, 144, 0, 146, 
 -	145, 146, 145, 146, 146, 4, 147, 161, 
 -	4, 162, 170, 172, 180, 146, 145, 146, 
 -	148, 145, 146, 149, 145, 146, 150, 145, 
 -	146, 151, 145, 146, 152, 145, 146, 153, 
 -	145, 146, 154, 145, 146, 155, 145, 146, 
 -	156, 145, 146, 157, 145, 146, 158, 145, 
 -	146, 159, 145, 146, 160, 145, 146, 4, 
 -	145, 146, 63, 145, 146, 163, 145, 146, 
 -	63, 164, 145, 146, 165, 145, 146, 166, 
 -	145, 146, 167, 145, 168, 146, 145, 169, 
 -	146, 145, 146, 161, 145, 146, 171, 145, 
 -	146, 161, 145, 146, 173, 179, 145, 146, 
 -	174, 145, 146, 175, 145, 146, 176, 145, 
 -	146, 177, 145, 146, 178, 145, 146, 63, 
 -	145, 146, 63, 161, 145, 146, 181, 145, 
 -	146, 182, 145, 146, 183, 145, 146, 177, 
 -	145, 185, 247, 0, 186, 0, 187, 0, 
 -	188, 0, 189, 0, 190, 0, 191, 0, 
 -	193, 192, 193, 192, 193, 193, 4, 194, 
 -	208, 4, 209, 217, 221, 241, 243, 193, 
 -	192, 193, 195, 192, 193, 196, 192, 193, 
 -	197, 192, 193, 198, 192, 193, 199, 192, 
 -	193, 200, 192, 193, 201, 192, 193, 202, 
 -	192, 193, 203, 192, 193, 204, 192, 193, 
 -	205, 192, 193, 206, 192, 193, 207, 192, 
 -	193, 4, 192, 193, 63, 192, 193, 210, 
 -	192, 193, 63, 211, 192, 193, 212, 192, 
 -	193, 213, 192, 193, 214, 192, 215, 193, 
 -	192, 216, 193, 192, 193, 208, 192, 193, 
 -	218, 192, 193, 219, 192, 193, 220, 192, 
 -	193, 63, 192, 193, 222, 223, 192, 193, 
 -	208, 192, 193, 224, 192, 193, 225, 192, 
 -	193, 226, 192, 193, 227, 192, 193, 228, 
 -	192, 193, 229, 192, 193, 230, 192, 193, 
 -	231, 192, 193, 232, 192, 193, 233, 192, 
 -	193, 234, 192, 193, 235, 192, 193, 236, 
 -	192, 193, 237, 192, 193, 238, 192, 193, 
 -	239, 192, 193, 240, 192, 193, 219, 192, 
 -	193, 237, 242, 192, 193, 63, 208, 192, 
 -	193, 244, 192, 193, 245, 192, 193, 246, 
 -	192, 193, 219, 192, 32, 31, 0, 249, 
 -	0, 250, 0, 251, 0, 252, 0, 253, 
 -	0, 254, 0, 256, 255, 256, 255, 256, 
 -	256, 4, 257, 4, 271, 280, 283, 297, 
 -	302, 256, 255, 256, 258, 255, 256, 259, 
 -	255, 256, 260, 255, 256, 261, 255, 256, 
 -	262, 255, 256, 263, 255, 256, 264, 255, 
 -	256, 265, 255, 256, 266, 255, 256, 267, 
 -	255, 256, 268, 255, 256, 269, 255, 256, 
 -	270, 255, 256, 4, 255, 256, 272, 255, 
 -	256, 273, 255, 256, 274, 255, 256, 275, 
 -	255, 256, 276, 255, 256, 277, 255, 256, 
 -	278, 255, 256, 279, 255, 256, 63, 255, 
 -	256, 281, 255, 256, 282, 255, 256, 279, 
 -	255, 256, 284, 255, 256, 285, 255, 256, 
 -	286, 255, 256, 287, 255, 256, 288, 255, 
 -	256, 289, 255, 256, 290, 255, 256, 291, 
 -	255, 256, 292, 255, 256, 293, 255, 256, 
 -	294, 255, 256, 295, 255, 256, 296, 255, 
 -	256, 297, 255, 256, 298, 255, 256, 299, 
 -	255, 256, 300, 255, 256, 301, 255, 256, 
 -	282, 255, 256, 303, 255, 256, 304, 255, 
 -	256, 305, 255, 256, 282, 255, 306, 307, 
 -	306, 0, 311, 310, 309, 307, 310, 308, 
 -	0, 309, 307, 308, 0, 309, 308, 311, 
 -	310, 309, 307, 310, 308, 311, 311, 5, 
 -	15, 17, 31, 34, 37, 45, 64, 122, 
 -	184, 248, 306, 311, 0, 0, 0
 -};
 -
 -static const unsigned char _lexer_trans_actions[] = {
 -	0, 54, 0, 5, 1, 0, 29, 1, 
 -	29, 29, 29, 29, 29, 29, 35, 0, 
 -	43, 0, 43, 0, 43, 54, 0, 5, 
 -	1, 0, 29, 1, 29, 29, 29, 29, 
 -	29, 29, 35, 0, 43, 0, 43, 0, 
 -	43, 139, 48, 9, 106, 11, 0, 134, 
 -	45, 45, 45, 3, 122, 33, 33, 33, 
 -	0, 122, 33, 33, 33, 0, 122, 33, 
 -	0, 33, 0, 102, 7, 7, 43, 54, 
 -	0, 0, 43, 114, 25, 0, 54, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 149, 126, 
 -	57, 110, 23, 0, 43, 43, 43, 43, 
 -	0, 27, 118, 27, 27, 51, 27, 0, 
 -	54, 0, 1, 0, 43, 0, 43, 0, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	144, 57, 54, 0, 54, 0, 81, 84, 
 -	81, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 21, 0, 130, 31, 60, 
 -	57, 31, 63, 57, 63, 63, 63, 63, 
 -	63, 63, 66, 31, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 144, 57, 54, 
 -	0, 54, 0, 72, 33, 84, 72, 84, 
 -	84, 84, 84, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 15, 0, 54, 
 -	15, 0, 54, 0, 0, 54, 15, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 0, 54, 0, 0, 54, 0, 
 -	54, 0, 0, 54, 0, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 15, 0, 54, 0, 
 -	0, 0, 54, 15, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 0, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 144, 
 -	57, 54, 0, 54, 0, 78, 33, 84, 
 -	78, 84, 84, 84, 84, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 19, 
 -	0, 54, 19, 0, 54, 0, 0, 54, 
 -	19, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 0, 54, 0, 0, 
 -	54, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 19, 
 -	0, 54, 19, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 0, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	144, 57, 54, 0, 54, 0, 75, 33, 
 -	84, 75, 84, 84, 84, 84, 84, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 17, 0, 54, 17, 0, 54, 0, 
 -	0, 54, 17, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 0, 54, 
 -	0, 0, 54, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 17, 0, 54, 0, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 0, 54, 17, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 0, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 144, 57, 54, 0, 54, 
 -	0, 69, 33, 69, 84, 84, 84, 84, 
 -	84, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 13, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 13, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 0, 0, 
 -	0, 43, 54, 37, 37, 87, 37, 37, 
 -	43, 0, 39, 0, 43, 0, 0, 54, 
 -	0, 0, 39, 0, 0, 54, 0, 93, 
 -	90, 41, 96, 90, 96, 96, 96, 96, 
 -	96, 96, 99, 0, 43, 0, 0
 -};
 -
 -static const unsigned char _lexer_eof_actions[] = {
 -	0, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43
 -};
 -
 -static const int lexer_start = 1;
 -static const int lexer_first_final = 312;
 -static const int lexer_error = 0;
 -
 -static const int lexer_en_main = 1;
 -
 -
 -#line 258 "ragel/i18n/eo.c.rl"
 -
 -static VALUE 
 -unindent(VALUE con, int start_col)
 -{
 -  VALUE re;
 -  /* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */
 -  char pat[32]; 
 -  snprintf(pat, 32, "^[\t ]{0,%d}", start_col); 
 -  re = rb_reg_regcomp(rb_str_new2(pat));
 -  rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2(""));
 -
 -  return Qnil;
 -
 -}
 -
 -static void 
 -store_kw_con(VALUE listener, const char * event_name, 
 -             const char * keyword_at, size_t keyword_length, 
 -             const char * at,         size_t length, 
 -             int current_line)
 -{
 -  VALUE con = Qnil, kw = Qnil;
 -  kw = ENCODED_STR_NEW(keyword_at, keyword_length);
 -  con = ENCODED_STR_NEW(at, length);
 -  rb_funcall(con, rb_intern("strip!"), 0);
 -  rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); 
 -}
 -
 -static void
 -store_multiline_kw_con(VALUE listener, const char * event_name,
 -                      const char * keyword_at, size_t keyword_length,
 -                      const char * at,         size_t length,
 -                      int current_line, int start_col)
 -{
 -  VALUE split;
 -  VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil;
 -
 -  kw = ENCODED_STR_NEW(keyword_at, keyword_length);
 -  con = ENCODED_STR_NEW(at, length);
 -
 -  unindent(con, start_col);
 -  
 -  split = rb_str_split(con, "\n");
 -
 -  name = rb_funcall(split, rb_intern("shift"), 0);
 -  desc = rb_ary_join(split, rb_str_new2( "\n" ));
 -
 -  if( name == Qnil ) 
 -  {
 -    name = rb_str_new2("");
 -  }
 -  if( rb_funcall(desc, rb_intern("size"), 0) == 0) 
 -  {
 -    desc = rb_str_new2("");
 -  }
 -  rb_funcall(name, rb_intern("strip!"), 0);
 -  rb_funcall(desc, rb_intern("rstrip!"), 0);
 -  rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); 
 -}
 -
 -static void 
 -store_attr(VALUE listener, const char * attr_type,
 -           const char * at, size_t length, 
 -           int line)
 -{
 -  VALUE val = ENCODED_STR_NEW(at, length);
 -  rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line));
 -}
 -static void 
 -store_docstring_content(VALUE listener, 
 -          int start_col, 
 -          const char *type_at, size_t type_length,
 -          const char *at, size_t length, 
 -          int current_line)
 -{
 -  VALUE re2;
 -  VALUE unescape_escaped_quotes;
 -  VALUE con = ENCODED_STR_NEW(at, length);
 -  VALUE con_type = ENCODED_STR_NEW(type_at, type_length);
 -
 -  unindent(con, start_col);
 -
 -  re2 = rb_reg_regcomp(rb_str_new2("\r\\Z"));
 -  unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\""));
 -  rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2(""));
 -  rb_funcall(con_type, rb_intern("strip!"), 0);
 -  rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\""));
 -  rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line));
 -}
 -static void 
 -raise_lexer_error(const char * at, int line)
 -{ 
 -  rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at);
 -}
 -
 -static void lexer_init(lexer_state *lexer) {
 -  lexer->content_start = 0;
 -  lexer->content_end = 0;
 -  lexer->content_len = 0;
 -  lexer->docstring_content_type_start = 0;
 -  lexer->docstring_content_type_end = 0;
 -  lexer->mark = 0;
 -  lexer->keyword_start = 0;
 -  lexer->keyword_end = 0;
 -  lexer->next_keyword_start = 0;
 -  lexer->line_number = 1;
 -  lexer->last_newline = 0;
 -  lexer->final_newline = 0;
 -  lexer->start_col = 0;
 -}
 -
 -static VALUE CLexer_alloc(VALUE klass)
 -{
 -  VALUE obj;
 -  lexer_state *lxr = ALLOC(lexer_state);
 -  lexer_init(lxr);
 -
 -  obj = Data_Wrap_Struct(klass, NULL, -1, lxr);
 -
 -  return obj;
 -}
 -
 -static VALUE CLexer_init(VALUE self, VALUE listener)
 -{
 -  lexer_state *lxr; 
 -  rb_iv_set(self, "@listener", listener);
 -  
 -  lxr = NULL;
 -  DATA_GET(self, lexer_state, lxr);
 -  lexer_init(lxr);
 -  
 -  return self;
 -}
 -
 -static VALUE CLexer_scan(VALUE self, VALUE input)
 -{
 -  VALUE input_copy;
 -  char *data;
 -  size_t len;
 -  VALUE listener = rb_iv_get(self, "@listener");
 -
 -  lexer_state *lexer;
 -  lexer = NULL;
 -  DATA_GET(self, lexer_state, lexer);
 -
 -  input_copy = rb_str_dup(input);
 -
 -  rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%"));
 -  data = RSTRING_PTR(input_copy);
 -  len = RSTRING_LEN(input_copy);
 -  
 -  if (len == 0) { 
 -    rb_raise(rb_eGherkinLexingError, "No content to lex.");
 -  } else {
 -
 -    const char *p, *pe, *eof;
 -    int cs = 0;
 -    
 -    VALUE current_row = Qnil;
 -
 -    p = data;
 -    pe = data + len;
 -    eof = pe;
 -    
 -    assert(*pe == '\0' && "pointer does not end on NULL");
 -    
 -    
 -#line 845 "ext/gherkin_lexer_eo/gherkin_lexer_eo.c"
 -	{
 -	cs = lexer_start;
 -	}
 -
 -#line 425 "ragel/i18n/eo.c.rl"
 -    
 -#line 852 "ext/gherkin_lexer_eo/gherkin_lexer_eo.c"
 -	{
 -	int _klen;
 -	unsigned int _trans;
 -	const char *_acts;
 -	unsigned int _nacts;
 -	const char *_keys;
 -
 -	if ( p == pe )
 -		goto _test_eof;
 -	if ( cs == 0 )
 -		goto _out;
 -_resume:
 -	_keys = _lexer_trans_keys + _lexer_key_offsets[cs];
 -	_trans = _lexer_index_offsets[cs];
 -
 -	_klen = _lexer_single_lengths[cs];
 -	if ( _klen > 0 ) {
 -		const char *_lower = _keys;
 -		const char *_mid;
 -		const char *_upper = _keys + _klen - 1;
 -		while (1) {
 -			if ( _upper < _lower )
 -				break;
 -
 -			_mid = _lower + ((_upper-_lower) >> 1);
 -			if ( (*p) < *_mid )
 -				_upper = _mid - 1;
 -			else if ( (*p) > *_mid )
 -				_lower = _mid + 1;
 -			else {
 -				_trans += (unsigned int)(_mid - _keys);
 -				goto _match;
 -			}
 -		}
 -		_keys += _klen;
 -		_trans += _klen;
 -	}
 -
 -	_klen = _lexer_range_lengths[cs];
 -	if ( _klen > 0 ) {
 -		const char *_lower = _keys;
 -		const char *_mid;
 -		const char *_upper = _keys + (_klen<<1) - 2;
 -		while (1) {
 -			if ( _upper < _lower )
 -				break;
 -
 -			_mid = _lower + (((_upper-_lower) >> 1) & ~1);
 -			if ( (*p) < _mid[0] )
 -				_upper = _mid - 2;
 -			else if ( (*p) > _mid[1] )
 -				_lower = _mid + 2;
 -			else {
 -				_trans += (unsigned int)((_mid - _keys)>>1);
 -				goto _match;
 -			}
 -		}
 -		_trans += _klen;
 -	}
 -
 -_match:
 -	cs = _lexer_trans_targs[_trans];
 -
 -	if ( _lexer_trans_actions[_trans] == 0 )
 -		goto _again;
 -
 -	_acts = _lexer_actions + _lexer_trans_actions[_trans];
 -	_nacts = (unsigned int) *_acts++;
 -	while ( _nacts-- > 0 )
 -	{
 -		switch ( *_acts++ )
 -		{
 -	case 0:
 -#line 83 "ragel/i18n/eo.c.rl"
 -	{
 -		MARK(content_start, p);
 -    lexer->current_line = lexer->line_number;
 -    lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2;
 -  }
 -	break;
 -	case 1:
 -#line 89 "ragel/i18n/eo.c.rl"
 -	{
 -    MARK(content_start, p);
 -  }
 -	break;
 -	case 2:
 -#line 93 "ragel/i18n/eo.c.rl"
 -	{
 -    lexer->current_line = lexer->line_number;
 -    lexer->start_col = p - data - lexer->last_newline;
 -  }
 -	break;
 -	case 3:
 -#line 98 "ragel/i18n/eo.c.rl"
 -	{
 -    int len = LEN(content_start, PTR_TO(final_newline));
 -    int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end));
 -
 -    if (len < 0) len = 0;
 -    if (type_len < 0) len = 0;
 -
 -    store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line);
 -  }
 -	break;
 -	case 4:
 -#line 108 "ragel/i18n/eo.c.rl"
 -	{ 
 -    MARK(docstring_content_type_start, p);
 -  }
 -	break;
 -	case 5:
 -#line 112 "ragel/i18n/eo.c.rl"
 -	{ 
 -    MARK(docstring_content_type_end, p);
 -  }
 -	break;
 -	case 6:
 -#line 116 "ragel/i18n/eo.c.rl"
 -	{
 -    STORE_KW_END_CON(feature);
 -  }
 -	break;
 -	case 7:
 -#line 120 "ragel/i18n/eo.c.rl"
 -	{
 -    STORE_KW_END_CON(background);
 -  }
 -	break;
 -	case 8:
 -#line 124 "ragel/i18n/eo.c.rl"
 -	{
 -    STORE_KW_END_CON(scenario);
 -  }
 -	break;
 -	case 9:
 -#line 128 "ragel/i18n/eo.c.rl"
 -	{
 -    STORE_KW_END_CON(scenario_outline);
 -  }
 -	break;
 -	case 10:
 -#line 132 "ragel/i18n/eo.c.rl"
 -	{
 -    STORE_KW_END_CON(examples);
 -  }
 -	break;
 -	case 11:
 -#line 136 "ragel/i18n/eo.c.rl"
 -	{
 -    store_kw_con(listener, "step",
 -      PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
 -      PTR_TO(content_start), LEN(content_start, p), 
 -      lexer->current_line);
 -  }
 -	break;
 -	case 12:
 -#line 143 "ragel/i18n/eo.c.rl"
 -	{
 -    STORE_ATTR(comment);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 13:
 -#line 148 "ragel/i18n/eo.c.rl"
 -	{
 -    STORE_ATTR(tag);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 14:
 -#line 153 "ragel/i18n/eo.c.rl"
 -	{
 -    lexer->line_number += 1;
 -    MARK(final_newline, p);
 -  }
 -	break;
 -	case 15:
 -#line 158 "ragel/i18n/eo.c.rl"
 -	{
 -    MARK(last_newline, p + 1);
 -  }
 -	break;
 -	case 16:
 -#line 162 "ragel/i18n/eo.c.rl"
 -	{
 -    if (lexer->mark == 0) {
 -      MARK(mark, p);
 -    }
 -  }
 -	break;
 -	case 17:
 -#line 168 "ragel/i18n/eo.c.rl"
 -	{
 -    MARK(keyword_end, p);
 -    MARK(keyword_start, PTR_TO(mark));
 -    MARK(content_start, p + 1);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 18:
 -#line 175 "ragel/i18n/eo.c.rl"
 -	{
 -    MARK(content_end, p);
 -  }
 -	break;
 -	case 19:
 -#line 179 "ragel/i18n/eo.c.rl"
 -	{
 -    p = p - 1;
 -    lexer->current_line = lexer->line_number;
 -    current_row = rb_ary_new();
 -  }
 -	break;
 -	case 20:
 -#line 185 "ragel/i18n/eo.c.rl"
 -	{
 -		MARK(content_start, p);
 -  }
 -	break;
 -	case 21:
 -#line 189 "ragel/i18n/eo.c.rl"
 -	{
 -    VALUE re_pipe, re_newline, re_backslash;
 -    VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
 -    rb_funcall(con, rb_intern("strip!"), 0);
 -    re_pipe      = rb_reg_regcomp(rb_str_new2("\\\\\\|"));
 -    re_newline   = rb_reg_regcomp(rb_str_new2("\\\\n"));
 -    re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_pipe,      rb_str_new2("|"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_newline,   rb_str_new2("\n"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\"));
 -
 -    rb_ary_push(current_row, con);
 -  }
 -	break;
 -	case 22:
 -#line 203 "ragel/i18n/eo.c.rl"
 -	{
 -    rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
 -  }
 -	break;
 -	case 23:
 -#line 207 "ragel/i18n/eo.c.rl"
 -	{
 -    int line;
 -    if (cs < lexer_first_final) {
 -      size_t count = 0;
 -      VALUE newstr_val;
 -      char *newstr;
 -      int newstr_count = 0;        
 -      size_t len;
 -      const char *buff;
 -      if (lexer->last_newline != 0) {
 -        len = LEN(last_newline, eof);
 -        buff = PTR_TO(last_newline);
 -      } else {
 -        len = strlen(data);
 -        buff = data;
 -      }
 -
 -      /* Allocate as a ruby string so that it gets cleaned up by GC */
 -      newstr_val = rb_str_new(buff, len);
 -      newstr = RSTRING_PTR(newstr_val);
 -
 -
 -      for (count = 0; count < len; count++) {
 -        if(buff[count] == 10) {
 -          newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
 -          break;
 -        } else {
 -          if (buff[count] == '%') {
 -            newstr[newstr_count++] = buff[count];
 -            newstr[newstr_count] = buff[count];
 -          } else {
 -            newstr[newstr_count] = buff[count];
 -          }
 -        }
 -        newstr_count++;
 -      }
 -
 -      line = lexer->line_number;
 -      lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
 -      raise_lexer_error(newstr, line);
 -    } else {
 -      rb_funcall(listener, rb_intern("eof"), 0);
 -    }
 -  }
 -	break;
 -#line 1142 "ext/gherkin_lexer_eo/gherkin_lexer_eo.c"
 -		}
 -	}
 -
 -_again:
 -	if ( cs == 0 )
 -		goto _out;
 -	if ( ++p != pe )
 -		goto _resume;
 -	_test_eof: {}
 -	if ( p == eof )
 -	{
 -	const char *__acts = _lexer_actions + _lexer_eof_actions[cs];
 -	unsigned int __nacts = (unsigned int) *__acts++;
 -	while ( __nacts-- > 0 ) {
 -		switch ( *__acts++ ) {
 -	case 23:
 -#line 207 "ragel/i18n/eo.c.rl"
 -	{
 -    int line;
 -    if (cs < lexer_first_final) {
 -      size_t count = 0;
 -      VALUE newstr_val;
 -      char *newstr;
 -      int newstr_count = 0;        
 -      size_t len;
 -      const char *buff;
 -      if (lexer->last_newline != 0) {
 -        len = LEN(last_newline, eof);
 -        buff = PTR_TO(last_newline);
 -      } else {
 -        len = strlen(data);
 -        buff = data;
 -      }
 -
 -      /* Allocate as a ruby string so that it gets cleaned up by GC */
 -      newstr_val = rb_str_new(buff, len);
 -      newstr = RSTRING_PTR(newstr_val);
 -
 -
 -      for (count = 0; count < len; count++) {
 -        if(buff[count] == 10) {
 -          newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
 -          break;
 -        } else {
 -          if (buff[count] == '%') {
 -            newstr[newstr_count++] = buff[count];
 -            newstr[newstr_count] = buff[count];
 -          } else {
 -            newstr[newstr_count] = buff[count];
 -          }
 -        }
 -        newstr_count++;
 -      }
 -
 -      line = lexer->line_number;
 -      lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
 -      raise_lexer_error(newstr, line);
 -    } else {
 -      rb_funcall(listener, rb_intern("eof"), 0);
 -    }
 -  }
 -	break;
 -#line 1205 "ext/gherkin_lexer_eo/gherkin_lexer_eo.c"
 -		}
 -	}
 -	}
 -
 -	_out: {}
 -	}
 -
 -#line 426 "ragel/i18n/eo.c.rl"
 -
 -    assert(p <= pe && "data overflow after parsing execute");
 -    assert(lexer->content_start <= len && "content starts after data end");
 -    assert(lexer->mark < len && "mark is after data end");
 -    
 -    /* Reset lexer by re-initializing the whole thing */
 -    lexer_init(lexer);
 -
 -    if (cs == lexer_error) {
 -      rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails.");
 -    } else {
 -      return Qtrue;
 -    }
 -  }
 -}
 -
 -void Init_gherkin_lexer_eo()
 -{
 -  mGherkin = rb_define_module("Gherkin");
 -  mGherkinLexer = rb_define_module_under(mGherkin, "Lexer");
 -  rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError"));
 -
 -  mCLexer = rb_define_module_under(mGherkin, "CLexer");
 -  cI18nLexer = rb_define_class_under(mCLexer, "Eo", rb_cObject);
 -  rb_define_alloc_func(cI18nLexer, CLexer_alloc);
 -  rb_define_method(cI18nLexer, "initialize", CLexer_init, 1);
 -  rb_define_method(cI18nLexer, "scan", CLexer_scan, 1);
 -}
 -
diff --cc ext/gherkin_lexer_es/extconf.rb
index 45da689,45da689..0000000
deleted file mode 100644,100644
--- a/ext/gherkin_lexer_es/extconf.rb
+++ /dev/null
@@@ -1,6 -1,6 +1,0 @@@
--require 'mkmf'
--CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags']
--$CFLAGS << ' -O0 -Wall' if CONFIG['CC'] =~ /gcc|clang/
--dir_config("gherkin_lexer_es")
--have_library("c", "main")
--create_makefile("gherkin_lexer_es")
diff --cc ext/gherkin_lexer_es/gherkin_lexer_es.c
index 1614e13,55c57a8..0000000
deleted file mode 100644,100644
--- a/ext/gherkin_lexer_es/gherkin_lexer_es.c
+++ /dev/null
@@@ -1,1399 -1,1399 +1,0 @@@
--
- #line 1 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/es.c.rl"
- #include <assert.h>
- #include <ruby.h>
- 
- #if defined(_WIN32)
- #include <stddef.h>
- #endif
- 
- #ifdef HAVE_RUBY_RE_H
- #include <ruby/re.h>
- #else
- #include <re.h>
- #endif
- 
- #ifdef HAVE_RUBY_ENCODING_H
- #include <ruby/encoding.h>
- #define ENCODED_STR_NEW(ptr, len) \
-     rb_enc_str_new(ptr, len, rb_utf8_encoding())
- #else
- #define ENCODED_STR_NEW(ptr, len) \
-     rb_str_new(ptr, len)
- #endif
- 
- #ifndef RSTRING_PTR
- #define RSTRING_PTR(s) (RSTRING(s)->ptr)
- #endif
- 
- #ifndef RSTRING_LEN
- #define RSTRING_LEN(s) (RSTRING(s)->len)
- #endif
- 
- #define DATA_GET(FROM, TYPE, NAME) \
-   Data_Get_Struct(FROM, TYPE, NAME); \
-   if (NAME == NULL) { \
-     rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \
-   }
-  
- typedef struct lexer_state {
-   int content_len;
-   int line_number;
-   int current_line;
-   int start_col;
-   size_t mark;
-   size_t keyword_start;
-   size_t keyword_end;
-   size_t next_keyword_start;
-   size_t content_start;
-   size_t content_end;
-   size_t docstring_content_type_start;
-   size_t docstring_content_type_end;
-   size_t query_start;
-   size_t last_newline;
-   size_t final_newline;
- } lexer_state;
- 
- static VALUE mGherkin;
- static VALUE mGherkinLexer;
- static VALUE mCLexer;
- static VALUE cI18nLexer;
- static VALUE rb_eGherkinLexingError;
- 
- #define LEN(AT, P) (P - data - lexer->AT)
- #define MARK(M, P) (lexer->M = (P) - data)
- #define PTR_TO(P) (data + lexer->P)
- 
- #define STORE_KW_END_CON(EVENT) \
-   store_multiline_kw_con(listener, # EVENT, \
-     PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \
-     PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \
-     lexer->current_line, lexer->start_col); \
-     if (lexer->content_end != 0) { \
-       p = PTR_TO(content_end - 1); \
-     } \
-     lexer->content_end = 0
- 
- #define STORE_ATTR(ATTR) \
-     store_attr(listener, # ATTR, \
-       PTR_TO(content_start), LEN(content_start, p), \
-       lexer->line_number)
- 
- 
- #line 254 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/es.c.rl"
- 
- 
- /** Data **/
- 
- #line 89 "ext/gherkin_lexer_es/gherkin_lexer_es.c"
- static const char _lexer_actions[] = {
- 	0, 1, 0, 1, 1, 1, 2, 1, 
- 	3, 1, 4, 1, 5, 1, 6, 1, 
- 	7, 1, 8, 1, 9, 1, 10, 1, 
- 	11, 1, 12, 1, 13, 1, 16, 1, 
- 	17, 1, 18, 1, 19, 1, 20, 1, 
- 	21, 1, 22, 1, 23, 2, 1, 18, 
- 	2, 4, 5, 2, 13, 0, 2, 14, 
- 	15, 2, 17, 0, 2, 17, 2, 2, 
- 	17, 16, 2, 17, 19, 2, 18, 6, 
- 	2, 18, 7, 2, 18, 8, 2, 18, 
- 	9, 2, 18, 10, 2, 18, 16, 2, 
- 	20, 21, 2, 22, 0, 2, 22, 2, 
- 	2, 22, 16, 2, 22, 19, 3, 3, 
- 	14, 15, 3, 5, 14, 15, 3, 11, 
- 	14, 15, 3, 12, 14, 15, 3, 13, 
- 	14, 15, 3, 14, 15, 18, 3, 17, 
- 	0, 11, 3, 17, 14, 15, 4, 1, 
- 	14, 15, 18, 4, 4, 5, 14, 15, 
- 	4, 17, 0, 14, 15, 5, 17, 0, 
- 	11, 14, 15
- };
- 
- static const short _lexer_key_offsets[] = {
- 	0, 0, 17, 18, 19, 35, 36, 37, 
- 	39, 41, 46, 51, 56, 61, 65, 69, 
- 	71, 72, 73, 74, 75, 76, 77, 78, 
- 	79, 80, 81, 82, 83, 84, 85, 86, 
- 	87, 89, 91, 96, 103, 108, 109, 110, 
- 	111, 112, 113, 114, 115, 116, 117, 118, 
- 	119, 120, 121, 122, 135, 137, 139, 141, 
- 	143, 145, 147, 149, 151, 153, 155, 157, 
- 	159, 161, 163, 165, 181, 183, 184, 185, 
- 	186, 187, 188, 189, 190, 191, 192, 193, 
- 	194, 195, 196, 197, 198, 199, 209, 211, 
- 	213, 215, 217, 219, 221, 223, 225, 227, 
- 	229, 231, 233, 235, 237, 239, 241, 243, 
- 	245, 247, 249, 251, 253, 255, 257, 259, 
- 	261, 263, 265, 267, 269, 271, 273, 275, 
- 	277, 279, 281, 283, 285, 287, 289, 292, 
- 	294, 296, 298, 300, 302, 305, 307, 309, 
- 	311, 313, 315, 317, 319, 321, 323, 325, 
- 	327, 329, 331, 333, 335, 337, 339, 341, 
- 	342, 343, 344, 345, 346, 347, 349, 351, 
- 	354, 355, 356, 357, 358, 359, 360, 361, 
- 	362, 363, 370, 372, 374, 376, 378, 380, 
- 	382, 384, 386, 388, 390, 392, 394, 396, 
- 	398, 400, 401, 402, 403, 404, 405, 406, 
- 	408, 409, 410, 411, 412, 413, 414, 415, 
- 	416, 417, 431, 433, 435, 437, 439, 441, 
- 	443, 445, 447, 449, 451, 453, 455, 457, 
- 	459, 461, 463, 465, 467, 469, 471, 473, 
- 	475, 477, 479, 481, 483, 485, 488, 490, 
- 	492, 494, 496, 498, 500, 502, 504, 506, 
- 	508, 510, 512, 514, 516, 518, 520, 522, 
- 	524, 526, 529, 532, 535, 537, 539, 541, 
- 	543, 545, 547, 550, 552, 554, 556, 558, 
- 	560, 562, 564, 566, 568, 570, 572, 574, 
- 	576, 578, 580, 582, 584, 586, 588, 590, 
- 	591, 592, 593, 594, 595, 596, 597, 598, 
- 	599, 600, 601, 602, 603, 604, 605, 606, 
- 	607, 608, 609, 610, 611, 624, 626, 628, 
- 	630, 632, 634, 636, 638, 640, 642, 644, 
- 	646, 648, 650, 652, 654, 657, 659, 661, 
- 	663, 665, 667, 669, 671, 673, 675, 677, 
- 	679, 681, 683, 685, 687, 689, 691, 693, 
- 	695, 697, 700, 703, 706, 708, 710, 712, 
- 	714, 716, 718, 720, 722, 724, 726, 728, 
- 	730, 732, 734, 736, 737, 738, 742, 748, 
- 	751, 753, 759, 775, 778, 780, 782, 784, 
- 	786, 788, 790, 792, 794, 796, 798, 800, 
- 	802, 804, 806, 808, 810, 812, 814, 816, 
- 	818, 821, 824, 827, 829, 831, 833, 835, 
- 	837, 839, 842, 844, 846, 848, 850, 852, 
- 	854, 856, 858, 860, 862, 864, 866, 868, 
- 	870, 872, 874, 876, 878, 880, 882
- };
- 
- static const char _lexer_trans_keys[] = {
- 	-17, 10, 32, 34, 35, 37, 42, 64, 
- 	65, 67, 68, 69, 80, 89, 124, 9, 
- 	13, -69, -65, 10, 32, 34, 35, 37, 
- 	42, 64, 65, 67, 68, 69, 80, 89, 
- 	124, 9, 13, 34, 34, 10, 13, 10, 
- 	13, 10, 32, 34, 9, 13, 10, 32, 
- 	34, 9, 13, 10, 32, 34, 9, 13, 
- 	10, 32, 34, 9, 13, 10, 32, 9, 
- 	13, 10, 32, 9, 13, 10, 13, 10, 
- 	95, 70, 69, 65, 84, 85, 82, 69, 
- 	95, 69, 78, 68, 95, 37, 32, 10, 
- 	13, 10, 13, 13, 32, 64, 9, 10, 
- 	9, 10, 13, 32, 64, 11, 12, 10, 
- 	32, 64, 9, 13, 110, 116, 101, 99, 
- 	101, 100, 101, 110, 116, 101, 115, 58, 
- 	10, 10, 10, 32, 35, 37, 42, 64, 
- 	67, 68, 69, 80, 89, 9, 13, 10, 
- 	95, 10, 70, 10, 69, 10, 65, 10, 
- 	84, 10, 85, 10, 82, 10, 69, 10, 
- 	95, 10, 69, 10, 78, 10, 68, 10, 
- 	95, 10, 37, 10, 32, 10, 32, 34, 
- 	35, 37, 42, 64, 65, 67, 68, 69, 
- 	80, 89, 124, 9, 13, 97, 117, 114, 
- 	97, 99, 116, 101, 114, -61, -83, 115, 
- 	116, 105, 99, 97, 58, 10, 10, 10, 
- 	32, 35, 37, 64, 65, 67, 69, 9, 
- 	13, 10, 95, 10, 70, 10, 69, 10, 
- 	65, 10, 84, 10, 85, 10, 82, 10, 
- 	69, 10, 95, 10, 69, 10, 78, 10, 
- 	68, 10, 95, 10, 37, 10, 110, 10, 
- 	116, 10, 101, 10, 99, 10, 101, 10, 
- 	100, 10, 101, 10, 110, 10, 116, 10, 
- 	101, 10, 115, 10, 58, 10, 97, 10, 
- 	114, 10, 97, 10, 99, 10, 116, 10, 
- 	101, 10, 114, -61, 10, -83, 10, 10, 
- 	115, 10, 116, 10, 105, 10, 99, 10, 
- 	97, 10, 106, 115, 10, 101, 10, 109, 
- 	10, 112, 10, 108, 10, 111, 10, 99, 
- 	113, 10, 101, 10, 110, 10, 97, 10, 
- 	114, 10, 105, 10, 111, 10, 117, 10, 
- 	101, 10, 109, 10, 97, 10, 32, 10, 
- 	100, 10, 101, 10, 108, 10, 32, 10, 
- 	101, 10, 115, 10, 99, 97, 110, 100, 
- 	111, 97, 100, 97, 111, 32, 115, 106, 
- 	110, 115, 101, 109, 112, 108, 111, 115, 
- 	58, 10, 10, 10, 32, 35, 67, 124, 
- 	9, 13, 10, 97, 10, 114, 10, 97, 
- 	10, 99, 10, 116, 10, 101, 10, 114, 
- 	-61, 10, -83, 10, 10, 115, 10, 116, 
- 	10, 105, 10, 99, 10, 97, 10, 58, 
- 	116, 111, 110, 99, 101, 115, 99, 113, 
- 	101, 110, 97, 114, 105, 111, 58, 10, 
- 	10, 10, 32, 35, 37, 42, 64, 65, 
- 	67, 68, 69, 80, 89, 9, 13, 10, 
- 	95, 10, 70, 10, 69, 10, 65, 10, 
- 	84, 10, 85, 10, 82, 10, 69, 10, 
- 	95, 10, 69, 10, 78, 10, 68, 10, 
- 	95, 10, 37, 10, 32, 10, 110, 10, 
- 	116, 10, 101, 10, 99, 10, 101, 10, 
- 	100, 10, 101, 10, 110, 10, 116, 10, 
- 	101, 10, 115, 10, 58, 10, 97, 117, 
- 	10, 114, 10, 97, 10, 99, 10, 116, 
- 	10, 101, 10, 114, -61, 10, -83, 10, 
- 	10, 115, 10, 116, 10, 105, 10, 99, 
- 	10, 97, 10, 97, 10, 110, 10, 100, 
- 	10, 111, 10, 97, 10, 100, 10, 97, 
- 	111, 10, 32, 115, 10, 110, 115, 10, 
- 	116, 10, 111, 10, 110, 10, 99, 10, 
- 	101, 10, 115, 10, 99, 113, 10, 101, 
- 	10, 110, 10, 97, 10, 114, 10, 105, 
- 	10, 111, 10, 117, 10, 101, 10, 109, 
- 	10, 97, 10, 32, 10, 100, 10, 101, 
- 	10, 108, 10, 32, 10, 101, 10, 115, 
- 	10, 99, 10, 101, 10, 114, 117, 101, 
- 	109, 97, 32, 100, 101, 108, 32, 101, 
- 	115, 99, 101, 110, 97, 114, 105, 111, 
- 	58, 10, 10, 10, 32, 35, 37, 42, 
- 	64, 67, 68, 69, 80, 89, 9, 13, 
- 	10, 95, 10, 70, 10, 69, 10, 65, 
- 	10, 84, 10, 85, 10, 82, 10, 69, 
- 	10, 95, 10, 69, 10, 78, 10, 68, 
- 	10, 95, 10, 37, 10, 32, 10, 97, 
- 	117, 10, 114, 10, 97, 10, 99, 10, 
- 	116, 10, 101, 10, 114, -61, 10, -83, 
- 	10, 10, 115, 10, 116, 10, 105, 10, 
- 	99, 10, 97, 10, 58, 10, 97, 10, 
- 	110, 10, 100, 10, 111, 10, 97, 10, 
- 	100, 10, 97, 111, 10, 32, 115, 10, 
- 	110, 115, 10, 116, 10, 111, 10, 110, 
- 	10, 99, 10, 101, 10, 115, 10, 99, 
- 	10, 101, 10, 110, 10, 97, 10, 114, 
- 	10, 105, 10, 111, 10, 101, 10, 114, 
- 	101, 114, 32, 124, 9, 13, 10, 32, 
- 	92, 124, 9, 13, 10, 92, 124, 10, 
- 	92, 10, 32, 92, 124, 9, 13, 10, 
- 	32, 34, 35, 37, 42, 64, 65, 67, 
- 	68, 69, 80, 89, 124, 9, 13, 10, 
- 	97, 117, 10, 114, 10, 97, 10, 99, 
- 	10, 116, 10, 101, 10, 114, -61, 10, 
- 	-83, 10, 10, 115, 10, 116, 10, 105, 
- 	10, 99, 10, 97, 10, 58, 10, 97, 
- 	10, 110, 10, 100, 10, 111, 10, 97, 
- 	10, 100, 10, 97, 111, 10, 32, 115, 
- 	10, 110, 115, 10, 116, 10, 111, 10, 
- 	110, 10, 99, 10, 101, 10, 115, 10, 
- 	99, 113, 10, 101, 10, 110, 10, 97, 
- 	10, 114, 10, 105, 10, 111, 10, 117, 
- 	10, 101, 10, 109, 10, 97, 10, 32, 
- 	10, 100, 10, 101, 10, 108, 10, 32, 
- 	10, 101, 10, 115, 10, 99, 10, 101, 
- 	10, 114, 0
- };
- 
- static const char _lexer_single_lengths[] = {
- 	0, 15, 1, 1, 14, 1, 1, 2, 
- 	2, 3, 3, 3, 3, 2, 2, 2, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	2, 2, 3, 5, 3, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 11, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 14, 2, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 8, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 3, 2, 
- 	2, 2, 2, 2, 3, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 1, 
- 	1, 1, 1, 1, 1, 2, 2, 3, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 5, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 1, 1, 1, 1, 1, 1, 2, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 12, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 3, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 3, 3, 3, 2, 2, 2, 2, 
- 	2, 2, 3, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 11, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 3, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 3, 3, 3, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 1, 1, 2, 4, 3, 
- 	2, 4, 14, 3, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	3, 3, 3, 2, 2, 2, 2, 2, 
- 	2, 3, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 0
- };
- 
- static const char _lexer_range_lengths[] = {
- 	0, 1, 0, 0, 1, 0, 0, 0, 
- 	0, 1, 1, 1, 1, 1, 1, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 1, 1, 1, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 1, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 1, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 1, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 1, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 1, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 1, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 1, 1, 0, 
- 	0, 1, 1, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0
- };
- 
- static const short _lexer_index_offsets[] = {
- 	0, 0, 17, 19, 21, 37, 39, 41, 
- 	44, 47, 52, 57, 62, 67, 71, 75, 
- 	78, 80, 82, 84, 86, 88, 90, 92, 
- 	94, 96, 98, 100, 102, 104, 106, 108, 
- 	110, 113, 116, 121, 128, 133, 135, 137, 
- 	139, 141, 143, 145, 147, 149, 151, 153, 
- 	155, 157, 159, 161, 174, 177, 180, 183, 
- 	186, 189, 192, 195, 198, 201, 204, 207, 
- 	210, 213, 216, 219, 235, 238, 240, 242, 
- 	244, 246, 248, 250, 252, 254, 256, 258, 
- 	260, 262, 264, 266, 268, 270, 280, 283, 
- 	286, 289, 292, 295, 298, 301, 304, 307, 
- 	310, 313, 316, 319, 322, 325, 328, 331, 
- 	334, 337, 340, 343, 346, 349, 352, 355, 
- 	358, 361, 364, 367, 370, 373, 376, 379, 
- 	382, 385, 388, 391, 394, 397, 400, 404, 
- 	407, 410, 413, 416, 419, 423, 426, 429, 
- 	432, 435, 438, 441, 444, 447, 450, 453, 
- 	456, 459, 462, 465, 468, 471, 474, 477, 
- 	479, 481, 483, 485, 487, 489, 492, 495, 
- 	499, 501, 503, 505, 507, 509, 511, 513, 
- 	515, 517, 524, 527, 530, 533, 536, 539, 
- 	542, 545, 548, 551, 554, 557, 560, 563, 
- 	566, 569, 571, 573, 575, 577, 579, 581, 
- 	584, 586, 588, 590, 592, 594, 596, 598, 
- 	600, 602, 616, 619, 622, 625, 628, 631, 
- 	634, 637, 640, 643, 646, 649, 652, 655, 
- 	658, 661, 664, 667, 670, 673, 676, 679, 
- 	682, 685, 688, 691, 694, 697, 701, 704, 
- 	707, 710, 713, 716, 719, 722, 725, 728, 
- 	731, 734, 737, 740, 743, 746, 749, 752, 
- 	755, 758, 762, 766, 770, 773, 776, 779, 
- 	782, 785, 788, 792, 795, 798, 801, 804, 
- 	807, 810, 813, 816, 819, 822, 825, 828, 
- 	831, 834, 837, 840, 843, 846, 849, 852, 
- 	854, 856, 858, 860, 862, 864, 866, 868, 
- 	870, 872, 874, 876, 878, 880, 882, 884, 
- 	886, 888, 890, 892, 894, 907, 910, 913, 
- 	916, 919, 922, 925, 928, 931, 934, 937, 
- 	940, 943, 946, 949, 952, 956, 959, 962, 
- 	965, 968, 971, 974, 977, 980, 983, 986, 
- 	989, 992, 995, 998, 1001, 1004, 1007, 1010, 
- 	1013, 1016, 1020, 1024, 1028, 1031, 1034, 1037, 
- 	1040, 1043, 1046, 1049, 1052, 1055, 1058, 1061, 
- 	1064, 1067, 1070, 1073, 1075, 1077, 1081, 1087, 
- 	1091, 1094, 1100, 1116, 1120, 1123, 1126, 1129, 
- 	1132, 1135, 1138, 1141, 1144, 1147, 1150, 1153, 
- 	1156, 1159, 1162, 1165, 1168, 1171, 1174, 1177, 
- 	1180, 1184, 1188, 1192, 1195, 1198, 1201, 1204, 
- 	1207, 1210, 1214, 1217, 1220, 1223, 1226, 1229, 
- 	1232, 1235, 1238, 1241, 1244, 1247, 1250, 1253, 
- 	1256, 1259, 1262, 1265, 1268, 1271, 1274
- };
- 
- static const short _lexer_trans_targs[] = {
- 	2, 4, 4, 5, 15, 17, 31, 34, 
- 	37, 68, 155, 159, 355, 31, 357, 4, 
- 	0, 3, 0, 4, 0, 4, 4, 5, 
- 	15, 17, 31, 34, 37, 68, 155, 159, 
- 	355, 31, 357, 4, 0, 6, 0, 7, 
- 	0, 9, 8, 8, 9, 8, 8, 10, 
- 	10, 11, 10, 10, 10, 10, 11, 10, 
- 	10, 10, 10, 12, 10, 10, 10, 10, 
- 	13, 10, 10, 4, 14, 14, 0, 4, 
- 	14, 14, 0, 4, 16, 15, 4, 0, 
- 	18, 0, 19, 0, 20, 0, 21, 0, 
- 	22, 0, 23, 0, 24, 0, 25, 0, 
- 	26, 0, 27, 0, 28, 0, 29, 0, 
- 	30, 0, 414, 0, 32, 0, 4, 16, 
- 	33, 4, 16, 33, 0, 0, 0, 0, 
- 	35, 36, 4, 36, 36, 34, 35, 35, 
- 	4, 36, 34, 36, 0, 38, 0, 39, 
- 	0, 40, 0, 41, 0, 42, 0, 43, 
- 	0, 44, 0, 45, 0, 46, 0, 47, 
- 	0, 48, 0, 49, 0, 51, 50, 51, 
- 	50, 51, 51, 4, 52, 66, 4, 363, 
- 	382, 386, 412, 66, 51, 50, 51, 53, 
- 	50, 51, 54, 50, 51, 55, 50, 51, 
- 	56, 50, 51, 57, 50, 51, 58, 50, 
- 	51, 59, 50, 51, 60, 50, 51, 61, 
- 	50, 51, 62, 50, 51, 63, 50, 51, 
- 	64, 50, 51, 65, 50, 51, 4, 50, 
- 	51, 67, 50, 4, 4, 5, 15, 17, 
- 	31, 34, 37, 68, 155, 159, 355, 31, 
- 	357, 4, 0, 69, 151, 0, 70, 0, 
- 	71, 0, 72, 0, 73, 0, 74, 0, 
- 	75, 0, 76, 0, 77, 0, 78, 0, 
- 	79, 0, 80, 0, 81, 0, 82, 0, 
- 	83, 0, 85, 84, 85, 84, 85, 85, 
- 	4, 86, 4, 100, 112, 126, 85, 84, 
- 	85, 87, 84, 85, 88, 84, 85, 89, 
- 	84, 85, 90, 84, 85, 91, 84, 85, 
- 	92, 84, 85, 93, 84, 85, 94, 84, 
- 	85, 95, 84, 85, 96, 84, 85, 97, 
- 	84, 85, 98, 84, 85, 99, 84, 85, 
- 	4, 84, 85, 101, 84, 85, 102, 84, 
- 	85, 103, 84, 85, 104, 84, 85, 105, 
- 	84, 85, 106, 84, 85, 107, 84, 85, 
- 	108, 84, 85, 109, 84, 85, 110, 84, 
- 	85, 111, 84, 85, 67, 84, 85, 113, 
- 	84, 85, 114, 84, 85, 115, 84, 85, 
- 	116, 84, 85, 117, 84, 85, 118, 84, 
- 	85, 119, 84, 120, 85, 84, 121, 85, 
- 	84, 85, 122, 84, 85, 123, 84, 85, 
- 	124, 84, 85, 125, 84, 85, 111, 84, 
- 	85, 127, 132, 84, 85, 128, 84, 85, 
- 	129, 84, 85, 130, 84, 85, 131, 84, 
- 	85, 110, 84, 85, 133, 139, 84, 85, 
- 	134, 84, 85, 135, 84, 85, 136, 84, 
- 	85, 137, 84, 85, 138, 84, 85, 111, 
- 	84, 85, 140, 84, 85, 141, 84, 85, 
- 	142, 84, 85, 143, 84, 85, 144, 84, 
- 	85, 145, 84, 85, 146, 84, 85, 147, 
- 	84, 85, 148, 84, 85, 149, 84, 85, 
- 	150, 84, 85, 133, 84, 152, 0, 153, 
- 	0, 154, 0, 31, 0, 156, 0, 157, 
- 	0, 158, 158, 0, 32, 31, 0, 160, 
- 	185, 191, 0, 161, 0, 162, 0, 163, 
- 	0, 164, 0, 165, 0, 166, 0, 167, 
- 	0, 169, 168, 169, 168, 169, 169, 4, 
- 	170, 4, 169, 168, 169, 171, 168, 169, 
- 	172, 168, 169, 173, 168, 169, 174, 168, 
- 	169, 175, 168, 169, 176, 168, 169, 177, 
- 	168, 178, 169, 168, 179, 169, 168, 169, 
- 	180, 168, 169, 181, 168, 169, 182, 168, 
- 	169, 183, 168, 169, 184, 168, 169, 67, 
- 	168, 186, 0, 187, 0, 188, 0, 189, 
- 	0, 190, 0, 31, 0, 192, 279, 0, 
- 	193, 0, 194, 0, 195, 0, 196, 0, 
- 	197, 0, 198, 0, 199, 0, 201, 200, 
- 	201, 200, 201, 201, 4, 202, 216, 4, 
- 	217, 229, 247, 251, 277, 216, 201, 200, 
- 	201, 203, 200, 201, 204, 200, 201, 205, 
- 	200, 201, 206, 200, 201, 207, 200, 201, 
- 	208, 200, 201, 209, 200, 201, 210, 200, 
- 	201, 211, 200, 201, 212, 200, 201, 213, 
- 	200, 201, 214, 200, 201, 215, 200, 201, 
- 	4, 200, 201, 67, 200, 201, 218, 200, 
- 	201, 219, 200, 201, 220, 200, 201, 221, 
- 	200, 201, 222, 200, 201, 223, 200, 201, 
- 	224, 200, 201, 225, 200, 201, 226, 200, 
- 	201, 227, 200, 201, 228, 200, 201, 67, 
- 	200, 201, 230, 243, 200, 201, 231, 200, 
- 	201, 232, 200, 201, 233, 200, 201, 234, 
- 	200, 201, 235, 200, 201, 236, 200, 237, 
- 	201, 200, 238, 201, 200, 201, 239, 200, 
- 	201, 240, 200, 201, 241, 200, 201, 242, 
- 	200, 201, 228, 200, 201, 244, 200, 201, 
- 	245, 200, 201, 246, 200, 201, 216, 200, 
- 	201, 248, 200, 201, 249, 200, 201, 250, 
- 	250, 200, 201, 67, 216, 200, 201, 252, 
- 	258, 200, 201, 253, 200, 201, 254, 200, 
- 	201, 255, 200, 201, 256, 200, 201, 257, 
- 	200, 201, 216, 200, 201, 259, 265, 200, 
- 	201, 260, 200, 201, 261, 200, 201, 262, 
- 	200, 201, 263, 200, 201, 264, 200, 201, 
- 	228, 200, 201, 266, 200, 201, 267, 200, 
- 	201, 268, 200, 201, 269, 200, 201, 270, 
- 	200, 201, 271, 200, 201, 272, 200, 201, 
- 	273, 200, 201, 274, 200, 201, 275, 200, 
- 	201, 276, 200, 201, 259, 200, 201, 278, 
- 	200, 201, 246, 200, 280, 0, 281, 0, 
- 	282, 0, 283, 0, 284, 0, 285, 0, 
- 	286, 0, 287, 0, 288, 0, 289, 0, 
- 	290, 0, 291, 0, 292, 0, 293, 0, 
- 	294, 0, 295, 0, 296, 0, 297, 0, 
- 	298, 0, 300, 299, 300, 299, 300, 300, 
- 	4, 301, 315, 4, 316, 335, 339, 353, 
- 	315, 300, 299, 300, 302, 299, 300, 303, 
- 	299, 300, 304, 299, 300, 305, 299, 300, 
- 	306, 299, 300, 307, 299, 300, 308, 299, 
- 	300, 309, 299, 300, 310, 299, 300, 311, 
- 	299, 300, 312, 299, 300, 313, 299, 300, 
- 	314, 299, 300, 4, 299, 300, 67, 299, 
- 	300, 317, 331, 299, 300, 318, 299, 300, 
- 	319, 299, 300, 320, 299, 300, 321, 299, 
- 	300, 322, 299, 300, 323, 299, 324, 300, 
- 	299, 325, 300, 299, 300, 326, 299, 300, 
- 	327, 299, 300, 328, 299, 300, 329, 299, 
- 	300, 330, 299, 300, 67, 299, 300, 332, 
- 	299, 300, 333, 299, 300, 334, 299, 300, 
- 	315, 299, 300, 336, 299, 300, 337, 299, 
- 	300, 338, 338, 299, 300, 67, 315, 299, 
- 	300, 340, 346, 299, 300, 341, 299, 300, 
- 	342, 299, 300, 343, 299, 300, 344, 299, 
- 	300, 345, 299, 300, 315, 299, 300, 347, 
- 	299, 300, 348, 299, 300, 349, 299, 300, 
- 	350, 299, 300, 351, 299, 300, 352, 299, 
- 	300, 330, 299, 300, 354, 299, 300, 334, 
- 	299, 356, 0, 154, 0, 357, 358, 357, 
- 	0, 362, 361, 360, 358, 361, 359, 0, 
- 	360, 358, 359, 0, 360, 359, 362, 361, 
- 	360, 358, 361, 359, 362, 362, 5, 15, 
- 	17, 31, 34, 37, 68, 155, 159, 355, 
- 	31, 357, 362, 0, 51, 364, 378, 50, 
- 	51, 365, 50, 51, 366, 50, 51, 367, 
- 	50, 51, 368, 50, 51, 369, 50, 51, 
- 	370, 50, 371, 51, 50, 372, 51, 50, 
- 	51, 373, 50, 51, 374, 50, 51, 375, 
- 	50, 51, 376, 50, 51, 377, 50, 51, 
- 	67, 50, 51, 379, 50, 51, 380, 50, 
- 	51, 381, 50, 51, 66, 50, 51, 383, 
- 	50, 51, 384, 50, 51, 385, 385, 50, 
- 	51, 67, 66, 50, 51, 387, 393, 50, 
- 	51, 388, 50, 51, 389, 50, 51, 390, 
- 	50, 51, 391, 50, 51, 392, 50, 51, 
- 	66, 50, 51, 394, 400, 50, 51, 395, 
- 	50, 51, 396, 50, 51, 397, 50, 51, 
- 	398, 50, 51, 399, 50, 51, 377, 50, 
- 	51, 401, 50, 51, 402, 50, 51, 403, 
- 	50, 51, 404, 50, 51, 405, 50, 51, 
- 	406, 50, 51, 407, 50, 51, 408, 50, 
- 	51, 409, 50, 51, 410, 50, 51, 411, 
- 	50, 51, 394, 50, 51, 413, 50, 51, 
- 	381, 50, 0, 0
- };
- 
- static const unsigned char _lexer_trans_actions[] = {
- 	0, 54, 0, 5, 1, 0, 29, 1, 
- 	29, 29, 29, 29, 29, 29, 35, 0, 
- 	43, 0, 43, 0, 43, 54, 0, 5, 
- 	1, 0, 29, 1, 29, 29, 29, 29, 
- 	29, 29, 35, 0, 43, 0, 43, 0, 
- 	43, 139, 48, 9, 106, 11, 0, 134, 
- 	45, 45, 45, 3, 122, 33, 33, 33, 
- 	0, 122, 33, 33, 33, 0, 122, 33, 
- 	0, 33, 0, 102, 7, 7, 43, 54, 
- 	0, 0, 43, 114, 25, 0, 54, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 149, 126, 
- 	57, 110, 23, 0, 43, 43, 43, 43, 
- 	0, 27, 118, 27, 27, 51, 27, 0, 
- 	54, 0, 1, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 144, 57, 54, 
- 	0, 54, 0, 72, 33, 84, 72, 84, 
- 	84, 84, 84, 84, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 15, 0, 
- 	54, 15, 0, 130, 31, 60, 57, 31, 
- 	63, 57, 63, 63, 63, 63, 63, 63, 
- 	66, 31, 43, 0, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 144, 57, 54, 0, 54, 0, 
- 	69, 33, 69, 84, 84, 84, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	13, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 13, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 0, 54, 0, 0, 54, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 0, 43, 0, 0, 43, 0, 
- 	0, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 144, 57, 54, 0, 54, 0, 81, 
- 	84, 81, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 0, 54, 0, 0, 54, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 21, 
- 	0, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 144, 57, 
- 	54, 0, 54, 0, 75, 33, 84, 75, 
- 	84, 84, 84, 84, 84, 84, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	17, 0, 54, 17, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 17, 
- 	0, 54, 0, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 0, 
- 	54, 0, 0, 54, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 0, 54, 17, 0, 0, 54, 0, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 144, 57, 54, 0, 54, 0, 
- 	78, 33, 84, 78, 84, 84, 84, 84, 
- 	84, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 19, 0, 54, 19, 0, 
- 	54, 0, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 0, 54, 
- 	0, 0, 54, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 19, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 0, 54, 19, 0, 0, 
- 	54, 0, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 0, 43, 0, 43, 0, 0, 0, 
- 	43, 54, 37, 37, 87, 37, 37, 43, 
- 	0, 39, 0, 43, 0, 0, 54, 0, 
- 	0, 39, 0, 0, 54, 0, 93, 90, 
- 	41, 96, 90, 96, 96, 96, 96, 96, 
- 	96, 99, 0, 43, 54, 0, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 0, 54, 0, 0, 54, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	15, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 0, 
- 	54, 15, 0, 0, 54, 0, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 0, 0
- };
- 
- static const unsigned char _lexer_eof_actions[] = {
- 	0, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43
- };
- 
- static const int lexer_start = 1;
- static const int lexer_first_final = 414;
- static const int lexer_error = 0;
- 
- static const int lexer_en_main = 1;
- 
- 
- #line 258 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/es.c.rl"
- 
- static VALUE 
- unindent(VALUE con, int start_col)
- {
-   VALUE re;
-   // Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters
-   char pat[32]; 
-   snprintf(pat, 32, "^[\t ]{0,%d}", start_col); 
-   re = rb_reg_regcomp(rb_str_new2(pat));
-   rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2(""));
- 
-   return Qnil;
- 
- }
- 
- static void 
- store_kw_con(VALUE listener, const char * event_name, 
-              const char * keyword_at, size_t keyword_length, 
-              const char * at,         size_t length, 
-              int current_line)
- {
-   VALUE con = Qnil, kw = Qnil;
-   kw = ENCODED_STR_NEW(keyword_at, keyword_length);
-   con = ENCODED_STR_NEW(at, length);
-   rb_funcall(con, rb_intern("strip!"), 0);
-   rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); 
- }
- 
- static void
- store_multiline_kw_con(VALUE listener, const char * event_name,
-                       const char * keyword_at, size_t keyword_length,
-                       const char * at,         size_t length,
-                       int current_line, int start_col)
- {
-   VALUE split;
-   VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil;
- 
-   kw = ENCODED_STR_NEW(keyword_at, keyword_length);
-   con = ENCODED_STR_NEW(at, length);
- 
-   unindent(con, start_col);
-   
-   split = rb_str_split(con, "\n");
- 
-   name = rb_funcall(split, rb_intern("shift"), 0);
-   desc = rb_ary_join(split, rb_str_new2( "\n" ));
- 
-   if( name == Qnil ) 
-   {
-     name = rb_str_new2("");
-   }
-   if( rb_funcall(desc, rb_intern("size"), 0) == 0) 
-   {
-     desc = rb_str_new2("");
-   }
-   rb_funcall(name, rb_intern("strip!"), 0);
-   rb_funcall(desc, rb_intern("rstrip!"), 0);
-   rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); 
- }
- 
- static void 
- store_attr(VALUE listener, const char * attr_type,
-            const char * at, size_t length, 
-            int line)
- {
-   VALUE val = ENCODED_STR_NEW(at, length);
-   rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line));
- }
- static void 
- store_docstring_content(VALUE listener, 
-           int start_col, 
-           const char *type_at, size_t type_length,
-           const char *at, size_t length, 
-           int current_line)
- {
-   VALUE re2;
-   VALUE unescape_escaped_quotes;
-   VALUE con = ENCODED_STR_NEW(at, length);
-   VALUE con_type = ENCODED_STR_NEW(type_at, type_length);
- 
-   unindent(con, start_col);
- 
-   re2 = rb_reg_regcomp(rb_str_new2("\r\\Z"));
-   unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\""));
-   rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2(""));
-   rb_funcall(con_type, rb_intern("strip!"), 0);
-   rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\""));
-   rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line));
- }
- static void 
- raise_lexer_error(const char * at, int line)
- { 
-   rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at);
- }
- 
- static void lexer_init(lexer_state *lexer) {
-   lexer->content_start = 0;
-   lexer->content_end = 0;
-   lexer->content_len = 0;
-   lexer->docstring_content_type_start = 0;
-   lexer->docstring_content_type_end = 0;
-   lexer->mark = 0;
-   lexer->keyword_start = 0;
-   lexer->keyword_end = 0;
-   lexer->next_keyword_start = 0;
-   lexer->line_number = 1;
-   lexer->last_newline = 0;
-   lexer->final_newline = 0;
-   lexer->start_col = 0;
- }
- 
- static VALUE CLexer_alloc(VALUE klass)
- {
-   VALUE obj;
-   lexer_state *lxr = ALLOC(lexer_state);
-   lexer_init(lxr);
- 
-   obj = Data_Wrap_Struct(klass, NULL, -1, lxr);
- 
-   return obj;
- }
- 
- static VALUE CLexer_init(VALUE self, VALUE listener)
- {
-   lexer_state *lxr; 
-   rb_iv_set(self, "@listener", listener);
-   
-   lxr = NULL;
-   DATA_GET(self, lexer_state, lxr);
-   lexer_init(lxr);
-   
-   return self;
- }
- 
- static VALUE CLexer_scan(VALUE self, VALUE input)
- {
-   VALUE input_copy;
-   char *data;
-   size_t len;
-   VALUE listener = rb_iv_get(self, "@listener");
- 
-   lexer_state *lexer;
-   lexer = NULL;
-   DATA_GET(self, lexer_state, lexer);
- 
-   input_copy = rb_str_dup(input);
- 
-   rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%"));
-   data = RSTRING_PTR(input_copy);
-   len = RSTRING_LEN(input_copy);
-   
-   if (len == 0) { 
-     rb_raise(rb_eGherkinLexingError, "No content to lex.");
-   } else {
- 
-     const char *p, *pe, *eof;
-     int cs = 0;
-     
-     VALUE current_row = Qnil;
- 
-     p = data;
-     pe = data + len;
-     eof = pe;
-     
-     assert(*pe == '\0' && "pointer does not end on NULL");
-     
-     
- #line 1003 "ext/gherkin_lexer_es/gherkin_lexer_es.c"
- 	{
- 	cs = lexer_start;
- 	}
- 
- #line 425 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/es.c.rl"
-     
- #line 1010 "ext/gherkin_lexer_es/gherkin_lexer_es.c"
- 	{
- 	int _klen;
- 	unsigned int _trans;
- 	const char *_acts;
- 	unsigned int _nacts;
- 	const char *_keys;
- 
- 	if ( p == pe )
- 		goto _test_eof;
- 	if ( cs == 0 )
- 		goto _out;
- _resume:
- 	_keys = _lexer_trans_keys + _lexer_key_offsets[cs];
- 	_trans = _lexer_index_offsets[cs];
- 
- 	_klen = _lexer_single_lengths[cs];
- 	if ( _klen > 0 ) {
- 		const char *_lower = _keys;
- 		const char *_mid;
- 		const char *_upper = _keys + _klen - 1;
- 		while (1) {
- 			if ( _upper < _lower )
- 				break;
- 
- 			_mid = _lower + ((_upper-_lower) >> 1);
- 			if ( (*p) < *_mid )
- 				_upper = _mid - 1;
- 			else if ( (*p) > *_mid )
- 				_lower = _mid + 1;
- 			else {
- 				_trans += (_mid - _keys);
- 				goto _match;
- 			}
- 		}
- 		_keys += _klen;
- 		_trans += _klen;
- 	}
- 
- 	_klen = _lexer_range_lengths[cs];
- 	if ( _klen > 0 ) {
- 		const char *_lower = _keys;
- 		const char *_mid;
- 		const char *_upper = _keys + (_klen<<1) - 2;
- 		while (1) {
- 			if ( _upper < _lower )
- 				break;
- 
- 			_mid = _lower + (((_upper-_lower) >> 1) & ~1);
- 			if ( (*p) < _mid[0] )
- 				_upper = _mid - 2;
- 			else if ( (*p) > _mid[1] )
- 				_lower = _mid + 2;
- 			else {
- 				_trans += ((_mid - _keys)>>1);
- 				goto _match;
- 			}
- 		}
- 		_trans += _klen;
- 	}
- 
- _match:
- 	cs = _lexer_trans_targs[_trans];
- 
- 	if ( _lexer_trans_actions[_trans] == 0 )
- 		goto _again;
- 
- 	_acts = _lexer_actions + _lexer_trans_actions[_trans];
- 	_nacts = (unsigned int) *_acts++;
- 	while ( _nacts-- > 0 )
- 	{
- 		switch ( *_acts++ )
- 		{
- 	case 0:
- #line 83 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/es.c.rl"
- 	{
- 		MARK(content_start, p);
-     lexer->current_line = lexer->line_number;
-     lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2;
-   }
- 	break;
- 	case 1:
- #line 89 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/es.c.rl"
- 	{
-     MARK(content_start, p);
-   }
- 	break;
- 	case 2:
- #line 93 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/es.c.rl"
- 	{
-     lexer->current_line = lexer->line_number;
-     lexer->start_col = p - data - lexer->last_newline;
-   }
- 	break;
- 	case 3:
- #line 98 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/es.c.rl"
- 	{
-     int len = LEN(content_start, PTR_TO(final_newline));
-     int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end));
- 
-     if (len < 0) len = 0;
-     if (type_len < 0) len = 0;
- 
-     store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line);
-   }
- 	break;
- 	case 4:
- #line 108 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/es.c.rl"
- 	{ 
-     MARK(docstring_content_type_start, p);
-   }
- 	break;
- 	case 5:
- #line 112 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/es.c.rl"
- 	{ 
-     MARK(docstring_content_type_end, p);
-   }
- 	break;
- 	case 6:
- #line 116 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/es.c.rl"
- 	{
-     STORE_KW_END_CON(feature);
-   }
- 	break;
- 	case 7:
- #line 120 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/es.c.rl"
- 	{
-     STORE_KW_END_CON(background);
-   }
- 	break;
- 	case 8:
- #line 124 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/es.c.rl"
- 	{
-     STORE_KW_END_CON(scenario);
-   }
- 	break;
- 	case 9:
- #line 128 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/es.c.rl"
- 	{
-     STORE_KW_END_CON(scenario_outline);
-   }
- 	break;
- 	case 10:
- #line 132 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/es.c.rl"
- 	{
-     STORE_KW_END_CON(examples);
-   }
- 	break;
- 	case 11:
- #line 136 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/es.c.rl"
- 	{
-     store_kw_con(listener, "step",
-       PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-       PTR_TO(content_start), LEN(content_start, p), 
-       lexer->current_line);
-   }
- 	break;
- 	case 12:
- #line 143 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/es.c.rl"
- 	{
-     STORE_ATTR(comment);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 13:
- #line 148 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/es.c.rl"
- 	{
-     STORE_ATTR(tag);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 14:
- #line 153 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/es.c.rl"
- 	{
-     lexer->line_number += 1;
-     MARK(final_newline, p);
-   }
- 	break;
- 	case 15:
- #line 158 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/es.c.rl"
- 	{
-     MARK(last_newline, p + 1);
-   }
- 	break;
- 	case 16:
- #line 162 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/es.c.rl"
- 	{
-     if (lexer->mark == 0) {
-       MARK(mark, p);
-     }
-   }
- 	break;
- 	case 17:
- #line 168 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/es.c.rl"
- 	{
-     MARK(keyword_end, p);
-     MARK(keyword_start, PTR_TO(mark));
-     MARK(content_start, p + 1);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 18:
- #line 175 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/es.c.rl"
- 	{
-     MARK(content_end, p);
-   }
- 	break;
- 	case 19:
- #line 179 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/es.c.rl"
- 	{
-     p = p - 1;
-     lexer->current_line = lexer->line_number;
-     current_row = rb_ary_new();
-   }
- 	break;
- 	case 20:
- #line 185 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/es.c.rl"
- 	{
- 		MARK(content_start, p);
-   }
- 	break;
- 	case 21:
- #line 189 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/es.c.rl"
- 	{
-     VALUE re_pipe, re_newline, re_backslash;
-     VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
-     rb_funcall(con, rb_intern("strip!"), 0);
-     re_pipe      = rb_reg_regcomp(rb_str_new2("\\\\\\|"));
-     re_newline   = rb_reg_regcomp(rb_str_new2("\\\\n"));
-     re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_pipe,      rb_str_new2("|"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_newline,   rb_str_new2("\n"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\"));
- 
-     rb_ary_push(current_row, con);
-   }
- 	break;
- 	case 22:
- #line 203 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/es.c.rl"
- 	{
-     rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
-   }
- 	break;
- 	case 23:
- #line 207 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/es.c.rl"
- 	{
-     int line;
-     if (cs < lexer_first_final) {
-       size_t count = 0;
-       VALUE newstr_val;
-       char *newstr;
-       int newstr_count = 0;        
-       size_t len;
-       const char *buff;
-       if (lexer->last_newline != 0) {
-         len = LEN(last_newline, eof);
-         buff = PTR_TO(last_newline);
-       } else {
-         len = strlen(data);
-         buff = data;
-       }
- 
-       // Allocate as a ruby string so that it gets cleaned up by GC
-       newstr_val = rb_str_new(buff, len);
-       newstr = RSTRING_PTR(newstr_val);
- 
- 
-       for (count = 0; count < len; count++) {
-         if(buff[count] == 10) {
-           newstr[newstr_count] = '\0'; // terminate new string at first newline found
-           break;
-         } else {
-           if (buff[count] == '%') {
-             newstr[newstr_count++] = buff[count];
-             newstr[newstr_count] = buff[count];
-           } else {
-             newstr[newstr_count] = buff[count];
-           }
-         }
-         newstr_count++;
-       }
- 
-       line = lexer->line_number;
-       lexer_init(lexer); // Re-initialize so we can scan again with the same lexer
-       raise_lexer_error(newstr, line);
-     } else {
-       rb_funcall(listener, rb_intern("eof"), 0);
-     }
-   }
- 	break;
- #line 1300 "ext/gherkin_lexer_es/gherkin_lexer_es.c"
- 		}
- 	}
- 
- _again:
- 	if ( cs == 0 )
- 		goto _out;
- 	if ( ++p != pe )
- 		goto _resume;
- 	_test_eof: {}
- 	if ( p == eof )
- 	{
- 	const char *__acts = _lexer_actions + _lexer_eof_actions[cs];
- 	unsigned int __nacts = (unsigned int) *__acts++;
- 	while ( __nacts-- > 0 ) {
- 		switch ( *__acts++ ) {
- 	case 23:
- #line 207 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/es.c.rl"
- 	{
-     int line;
-     if (cs < lexer_first_final) {
-       size_t count = 0;
-       VALUE newstr_val;
-       char *newstr;
-       int newstr_count = 0;        
-       size_t len;
-       const char *buff;
-       if (lexer->last_newline != 0) {
-         len = LEN(last_newline, eof);
-         buff = PTR_TO(last_newline);
-       } else {
-         len = strlen(data);
-         buff = data;
-       }
- 
-       // Allocate as a ruby string so that it gets cleaned up by GC
-       newstr_val = rb_str_new(buff, len);
-       newstr = RSTRING_PTR(newstr_val);
- 
- 
-       for (count = 0; count < len; count++) {
-         if(buff[count] == 10) {
-           newstr[newstr_count] = '\0'; // terminate new string at first newline found
-           break;
-         } else {
-           if (buff[count] == '%') {
-             newstr[newstr_count++] = buff[count];
-             newstr[newstr_count] = buff[count];
-           } else {
-             newstr[newstr_count] = buff[count];
-           }
-         }
-         newstr_count++;
-       }
- 
-       line = lexer->line_number;
-       lexer_init(lexer); // Re-initialize so we can scan again with the same lexer
-       raise_lexer_error(newstr, line);
-     } else {
-       rb_funcall(listener, rb_intern("eof"), 0);
-     }
-   }
- 	break;
- #line 1363 "ext/gherkin_lexer_es/gherkin_lexer_es.c"
- 		}
- 	}
- 	}
- 
- 	_out: {}
- 	}
- 
- #line 426 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/es.c.rl"
- 
-     assert(p <= pe && "data overflow after parsing execute");
-     assert(lexer->content_start <= len && "content starts after data end");
-     assert(lexer->mark < len && "mark is after data end");
-     
-     // Reset lexer by re-initializing the whole thing
-     lexer_init(lexer);
- 
-     if (cs == lexer_error) {
-       rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails.");
-     } else {
-       return Qtrue;
-     }
-   }
- }
- 
- void Init_gherkin_lexer_es()
- {
-   mGherkin = rb_define_module("Gherkin");
-   mGherkinLexer = rb_define_module_under(mGherkin, "Lexer");
-   rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError"));
- 
-   mCLexer = rb_define_module_under(mGherkin, "CLexer");
-   cI18nLexer = rb_define_class_under(mCLexer, "Es", rb_cObject);
-   rb_define_alloc_func(cI18nLexer, CLexer_alloc);
-   rb_define_method(cI18nLexer, "initialize", CLexer_init, 1);
-   rb_define_method(cI18nLexer, "scan", CLexer_scan, 1);
- }
- 
 -#line 1 "ragel/i18n/es.c.rl"
 -#include <assert.h>
 -#include <ruby.h>
 -
 -#if defined(_WIN32)
 -#include <stddef.h>
 -#endif
 -
 -#ifdef HAVE_RUBY_RE_H
 -#include <ruby/re.h>
 -#else
 -#include <re.h>
 -#endif
 -
 -#ifdef HAVE_RUBY_ENCODING_H
 -#include <ruby/encoding.h>
 -#define ENCODED_STR_NEW(ptr, len) \
 -    rb_enc_str_new(ptr, len, rb_utf8_encoding())
 -#else
 -#define ENCODED_STR_NEW(ptr, len) \
 -    rb_str_new(ptr, len)
 -#endif
 -
 -#ifndef RSTRING_PTR
 -#define RSTRING_PTR(s) (RSTRING(s)->ptr)
 -#endif
 -
 -#ifndef RSTRING_LEN
 -#define RSTRING_LEN(s) (RSTRING(s)->len)
 -#endif
 -
 -#define DATA_GET(FROM, TYPE, NAME) \
 -  Data_Get_Struct(FROM, TYPE, NAME); \
 -  if (NAME == NULL) { \
 -    rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \
 -  }
 - 
 -typedef struct lexer_state {
 -  int content_len;
 -  int line_number;
 -  int current_line;
 -  int start_col;
 -  size_t mark;
 -  size_t keyword_start;
 -  size_t keyword_end;
 -  size_t next_keyword_start;
 -  size_t content_start;
 -  size_t content_end;
 -  size_t docstring_content_type_start;
 -  size_t docstring_content_type_end;
 -  size_t query_start;
 -  size_t last_newline;
 -  size_t final_newline;
 -} lexer_state;
 -
 -static VALUE mGherkin;
 -static VALUE mGherkinLexer;
 -static VALUE mCLexer;
 -static VALUE cI18nLexer;
 -static VALUE rb_eGherkinLexingError;
 -
 -#define LEN(AT, P) (P - data - lexer->AT)
 -#define MARK(M, P) (lexer->M = (P) - data)
 -#define PTR_TO(P) (data + lexer->P)
 -
 -#define STORE_KW_END_CON(EVENT) \
 -  store_multiline_kw_con(listener, # EVENT, \
 -    PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \
 -    PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \
 -    lexer->current_line, lexer->start_col); \
 -    if (lexer->content_end != 0) { \
 -      p = PTR_TO(content_end - 1); \
 -    } \
 -    lexer->content_end = 0
 -
 -#define STORE_ATTR(ATTR) \
 -    store_attr(listener, # ATTR, \
 -      PTR_TO(content_start), LEN(content_start, p), \
 -      lexer->line_number)
 -
 -
 -#line 254 "ragel/i18n/es.c.rl"
 -
 -
 -/** Data **/
 -
 -#line 89 "ext/gherkin_lexer_es/gherkin_lexer_es.c"
 -static const char _lexer_actions[] = {
 -	0, 1, 0, 1, 1, 1, 2, 1, 
 -	3, 1, 4, 1, 5, 1, 6, 1, 
 -	7, 1, 8, 1, 9, 1, 10, 1, 
 -	11, 1, 12, 1, 13, 1, 16, 1, 
 -	17, 1, 18, 1, 19, 1, 20, 1, 
 -	21, 1, 22, 1, 23, 2, 1, 18, 
 -	2, 4, 5, 2, 13, 0, 2, 14, 
 -	15, 2, 17, 0, 2, 17, 2, 2, 
 -	17, 16, 2, 17, 19, 2, 18, 6, 
 -	2, 18, 7, 2, 18, 8, 2, 18, 
 -	9, 2, 18, 10, 2, 18, 16, 2, 
 -	20, 21, 2, 22, 0, 2, 22, 2, 
 -	2, 22, 16, 2, 22, 19, 3, 3, 
 -	14, 15, 3, 5, 14, 15, 3, 11, 
 -	14, 15, 3, 12, 14, 15, 3, 13, 
 -	14, 15, 3, 14, 15, 18, 3, 17, 
 -	0, 11, 3, 17, 14, 15, 4, 1, 
 -	14, 15, 18, 4, 4, 5, 14, 15, 
 -	4, 17, 0, 14, 15, 5, 17, 0, 
 -	11, 14, 15
 -};
 -
 -static const short _lexer_key_offsets[] = {
 -	0, 0, 17, 18, 19, 35, 36, 37, 
 -	39, 41, 46, 51, 56, 61, 65, 69, 
 -	71, 72, 73, 74, 75, 76, 77, 78, 
 -	79, 80, 81, 82, 83, 84, 85, 86, 
 -	87, 89, 91, 96, 103, 108, 109, 110, 
 -	111, 112, 113, 114, 115, 116, 117, 118, 
 -	119, 120, 121, 122, 135, 137, 139, 141, 
 -	143, 145, 147, 149, 151, 153, 155, 157, 
 -	159, 161, 163, 165, 181, 183, 184, 185, 
 -	186, 187, 188, 189, 190, 191, 192, 193, 
 -	194, 195, 196, 197, 198, 199, 209, 211, 
 -	213, 215, 217, 219, 221, 223, 225, 227, 
 -	229, 231, 233, 235, 237, 239, 241, 243, 
 -	245, 247, 249, 251, 253, 255, 257, 259, 
 -	261, 263, 265, 267, 269, 271, 273, 275, 
 -	277, 279, 281, 283, 285, 287, 289, 292, 
 -	294, 296, 298, 300, 302, 305, 307, 309, 
 -	311, 313, 315, 317, 319, 321, 323, 325, 
 -	327, 329, 331, 333, 335, 337, 339, 341, 
 -	342, 343, 344, 345, 346, 347, 349, 351, 
 -	354, 355, 356, 357, 358, 359, 360, 361, 
 -	362, 363, 370, 372, 374, 376, 378, 380, 
 -	382, 384, 386, 388, 390, 392, 394, 396, 
 -	398, 400, 401, 402, 403, 404, 405, 406, 
 -	408, 409, 410, 411, 412, 413, 414, 415, 
 -	416, 417, 431, 433, 435, 437, 439, 441, 
 -	443, 445, 447, 449, 451, 453, 455, 457, 
 -	459, 461, 463, 465, 467, 469, 471, 473, 
 -	475, 477, 479, 481, 483, 485, 488, 490, 
 -	492, 494, 496, 498, 500, 502, 504, 506, 
 -	508, 510, 512, 514, 516, 518, 520, 522, 
 -	524, 526, 529, 532, 535, 537, 539, 541, 
 -	543, 545, 547, 550, 552, 554, 556, 558, 
 -	560, 562, 564, 566, 568, 570, 572, 574, 
 -	576, 578, 580, 582, 584, 586, 588, 590, 
 -	591, 592, 593, 594, 595, 596, 597, 598, 
 -	599, 600, 601, 602, 603, 604, 605, 606, 
 -	607, 608, 609, 610, 611, 624, 626, 628, 
 -	630, 632, 634, 636, 638, 640, 642, 644, 
 -	646, 648, 650, 652, 654, 657, 659, 661, 
 -	663, 665, 667, 669, 671, 673, 675, 677, 
 -	679, 681, 683, 685, 687, 689, 691, 693, 
 -	695, 697, 700, 703, 706, 708, 710, 712, 
 -	714, 716, 718, 720, 722, 724, 726, 728, 
 -	730, 732, 734, 736, 737, 738, 742, 748, 
 -	751, 753, 759, 775, 778, 780, 782, 784, 
 -	786, 788, 790, 792, 794, 796, 798, 800, 
 -	802, 804, 806, 808, 810, 812, 814, 816, 
 -	818, 821, 824, 827, 829, 831, 833, 835, 
 -	837, 839, 842, 844, 846, 848, 850, 852, 
 -	854, 856, 858, 860, 862, 864, 866, 868, 
 -	870, 872, 874, 876, 878, 880, 882
 -};
 -
 -static const char _lexer_trans_keys[] = {
 -	-17, 10, 32, 34, 35, 37, 42, 64, 
 -	65, 67, 68, 69, 80, 89, 124, 9, 
 -	13, -69, -65, 10, 32, 34, 35, 37, 
 -	42, 64, 65, 67, 68, 69, 80, 89, 
 -	124, 9, 13, 34, 34, 10, 13, 10, 
 -	13, 10, 32, 34, 9, 13, 10, 32, 
 -	34, 9, 13, 10, 32, 34, 9, 13, 
 -	10, 32, 34, 9, 13, 10, 32, 9, 
 -	13, 10, 32, 9, 13, 10, 13, 10, 
 -	95, 70, 69, 65, 84, 85, 82, 69, 
 -	95, 69, 78, 68, 95, 37, 32, 10, 
 -	13, 10, 13, 13, 32, 64, 9, 10, 
 -	9, 10, 13, 32, 64, 11, 12, 10, 
 -	32, 64, 9, 13, 110, 116, 101, 99, 
 -	101, 100, 101, 110, 116, 101, 115, 58, 
 -	10, 10, 10, 32, 35, 37, 42, 64, 
 -	67, 68, 69, 80, 89, 9, 13, 10, 
 -	95, 10, 70, 10, 69, 10, 65, 10, 
 -	84, 10, 85, 10, 82, 10, 69, 10, 
 -	95, 10, 69, 10, 78, 10, 68, 10, 
 -	95, 10, 37, 10, 32, 10, 32, 34, 
 -	35, 37, 42, 64, 65, 67, 68, 69, 
 -	80, 89, 124, 9, 13, 97, 117, 114, 
 -	97, 99, 116, 101, 114, -61, -83, 115, 
 -	116, 105, 99, 97, 58, 10, 10, 10, 
 -	32, 35, 37, 64, 65, 67, 69, 9, 
 -	13, 10, 95, 10, 70, 10, 69, 10, 
 -	65, 10, 84, 10, 85, 10, 82, 10, 
 -	69, 10, 95, 10, 69, 10, 78, 10, 
 -	68, 10, 95, 10, 37, 10, 110, 10, 
 -	116, 10, 101, 10, 99, 10, 101, 10, 
 -	100, 10, 101, 10, 110, 10, 116, 10, 
 -	101, 10, 115, 10, 58, 10, 97, 10, 
 -	114, 10, 97, 10, 99, 10, 116, 10, 
 -	101, 10, 114, -61, 10, -83, 10, 10, 
 -	115, 10, 116, 10, 105, 10, 99, 10, 
 -	97, 10, 106, 115, 10, 101, 10, 109, 
 -	10, 112, 10, 108, 10, 111, 10, 99, 
 -	113, 10, 101, 10, 110, 10, 97, 10, 
 -	114, 10, 105, 10, 111, 10, 117, 10, 
 -	101, 10, 109, 10, 97, 10, 32, 10, 
 -	100, 10, 101, 10, 108, 10, 32, 10, 
 -	101, 10, 115, 10, 99, 97, 110, 100, 
 -	111, 97, 100, 97, 111, 32, 115, 106, 
 -	110, 115, 101, 109, 112, 108, 111, 115, 
 -	58, 10, 10, 10, 32, 35, 67, 124, 
 -	9, 13, 10, 97, 10, 114, 10, 97, 
 -	10, 99, 10, 116, 10, 101, 10, 114, 
 -	-61, 10, -83, 10, 10, 115, 10, 116, 
 -	10, 105, 10, 99, 10, 97, 10, 58, 
 -	116, 111, 110, 99, 101, 115, 99, 113, 
 -	101, 110, 97, 114, 105, 111, 58, 10, 
 -	10, 10, 32, 35, 37, 42, 64, 65, 
 -	67, 68, 69, 80, 89, 9, 13, 10, 
 -	95, 10, 70, 10, 69, 10, 65, 10, 
 -	84, 10, 85, 10, 82, 10, 69, 10, 
 -	95, 10, 69, 10, 78, 10, 68, 10, 
 -	95, 10, 37, 10, 32, 10, 110, 10, 
 -	116, 10, 101, 10, 99, 10, 101, 10, 
 -	100, 10, 101, 10, 110, 10, 116, 10, 
 -	101, 10, 115, 10, 58, 10, 97, 117, 
 -	10, 114, 10, 97, 10, 99, 10, 116, 
 -	10, 101, 10, 114, -61, 10, -83, 10, 
 -	10, 115, 10, 116, 10, 105, 10, 99, 
 -	10, 97, 10, 97, 10, 110, 10, 100, 
 -	10, 111, 10, 97, 10, 100, 10, 97, 
 -	111, 10, 32, 115, 10, 110, 115, 10, 
 -	116, 10, 111, 10, 110, 10, 99, 10, 
 -	101, 10, 115, 10, 99, 113, 10, 101, 
 -	10, 110, 10, 97, 10, 114, 10, 105, 
 -	10, 111, 10, 117, 10, 101, 10, 109, 
 -	10, 97, 10, 32, 10, 100, 10, 101, 
 -	10, 108, 10, 32, 10, 101, 10, 115, 
 -	10, 99, 10, 101, 10, 114, 117, 101, 
 -	109, 97, 32, 100, 101, 108, 32, 101, 
 -	115, 99, 101, 110, 97, 114, 105, 111, 
 -	58, 10, 10, 10, 32, 35, 37, 42, 
 -	64, 67, 68, 69, 80, 89, 9, 13, 
 -	10, 95, 10, 70, 10, 69, 10, 65, 
 -	10, 84, 10, 85, 10, 82, 10, 69, 
 -	10, 95, 10, 69, 10, 78, 10, 68, 
 -	10, 95, 10, 37, 10, 32, 10, 97, 
 -	117, 10, 114, 10, 97, 10, 99, 10, 
 -	116, 10, 101, 10, 114, -61, 10, -83, 
 -	10, 10, 115, 10, 116, 10, 105, 10, 
 -	99, 10, 97, 10, 58, 10, 97, 10, 
 -	110, 10, 100, 10, 111, 10, 97, 10, 
 -	100, 10, 97, 111, 10, 32, 115, 10, 
 -	110, 115, 10, 116, 10, 111, 10, 110, 
 -	10, 99, 10, 101, 10, 115, 10, 99, 
 -	10, 101, 10, 110, 10, 97, 10, 114, 
 -	10, 105, 10, 111, 10, 101, 10, 114, 
 -	101, 114, 32, 124, 9, 13, 10, 32, 
 -	92, 124, 9, 13, 10, 92, 124, 10, 
 -	92, 10, 32, 92, 124, 9, 13, 10, 
 -	32, 34, 35, 37, 42, 64, 65, 67, 
 -	68, 69, 80, 89, 124, 9, 13, 10, 
 -	97, 117, 10, 114, 10, 97, 10, 99, 
 -	10, 116, 10, 101, 10, 114, -61, 10, 
 -	-83, 10, 10, 115, 10, 116, 10, 105, 
 -	10, 99, 10, 97, 10, 58, 10, 97, 
 -	10, 110, 10, 100, 10, 111, 10, 97, 
 -	10, 100, 10, 97, 111, 10, 32, 115, 
 -	10, 110, 115, 10, 116, 10, 111, 10, 
 -	110, 10, 99, 10, 101, 10, 115, 10, 
 -	99, 113, 10, 101, 10, 110, 10, 97, 
 -	10, 114, 10, 105, 10, 111, 10, 117, 
 -	10, 101, 10, 109, 10, 97, 10, 32, 
 -	10, 100, 10, 101, 10, 108, 10, 32, 
 -	10, 101, 10, 115, 10, 99, 10, 101, 
 -	10, 114, 0
 -};
 -
 -static const char _lexer_single_lengths[] = {
 -	0, 15, 1, 1, 14, 1, 1, 2, 
 -	2, 3, 3, 3, 3, 2, 2, 2, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	2, 2, 3, 5, 3, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 11, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 14, 2, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 8, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 3, 2, 
 -	2, 2, 2, 2, 3, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 1, 
 -	1, 1, 1, 1, 1, 2, 2, 3, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 5, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 1, 1, 1, 1, 1, 1, 2, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 12, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 3, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 3, 3, 3, 2, 2, 2, 2, 
 -	2, 2, 3, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 11, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 3, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 3, 3, 3, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 1, 1, 2, 4, 3, 
 -	2, 4, 14, 3, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	3, 3, 3, 2, 2, 2, 2, 2, 
 -	2, 3, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 0
 -};
 -
 -static const char _lexer_range_lengths[] = {
 -	0, 1, 0, 0, 1, 0, 0, 0, 
 -	0, 1, 1, 1, 1, 1, 1, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 1, 1, 1, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 1, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 1, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 1, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 1, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 1, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 1, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 1, 1, 0, 
 -	0, 1, 1, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0
 -};
 -
 -static const short _lexer_index_offsets[] = {
 -	0, 0, 17, 19, 21, 37, 39, 41, 
 -	44, 47, 52, 57, 62, 67, 71, 75, 
 -	78, 80, 82, 84, 86, 88, 90, 92, 
 -	94, 96, 98, 100, 102, 104, 106, 108, 
 -	110, 113, 116, 121, 128, 133, 135, 137, 
 -	139, 141, 143, 145, 147, 149, 151, 153, 
 -	155, 157, 159, 161, 174, 177, 180, 183, 
 -	186, 189, 192, 195, 198, 201, 204, 207, 
 -	210, 213, 216, 219, 235, 238, 240, 242, 
 -	244, 246, 248, 250, 252, 254, 256, 258, 
 -	260, 262, 264, 266, 268, 270, 280, 283, 
 -	286, 289, 292, 295, 298, 301, 304, 307, 
 -	310, 313, 316, 319, 322, 325, 328, 331, 
 -	334, 337, 340, 343, 346, 349, 352, 355, 
 -	358, 361, 364, 367, 370, 373, 376, 379, 
 -	382, 385, 388, 391, 394, 397, 400, 404, 
 -	407, 410, 413, 416, 419, 423, 426, 429, 
 -	432, 435, 438, 441, 444, 447, 450, 453, 
 -	456, 459, 462, 465, 468, 471, 474, 477, 
 -	479, 481, 483, 485, 487, 489, 492, 495, 
 -	499, 501, 503, 505, 507, 509, 511, 513, 
 -	515, 517, 524, 527, 530, 533, 536, 539, 
 -	542, 545, 548, 551, 554, 557, 560, 563, 
 -	566, 569, 571, 573, 575, 577, 579, 581, 
 -	584, 586, 588, 590, 592, 594, 596, 598, 
 -	600, 602, 616, 619, 622, 625, 628, 631, 
 -	634, 637, 640, 643, 646, 649, 652, 655, 
 -	658, 661, 664, 667, 670, 673, 676, 679, 
 -	682, 685, 688, 691, 694, 697, 701, 704, 
 -	707, 710, 713, 716, 719, 722, 725, 728, 
 -	731, 734, 737, 740, 743, 746, 749, 752, 
 -	755, 758, 762, 766, 770, 773, 776, 779, 
 -	782, 785, 788, 792, 795, 798, 801, 804, 
 -	807, 810, 813, 816, 819, 822, 825, 828, 
 -	831, 834, 837, 840, 843, 846, 849, 852, 
 -	854, 856, 858, 860, 862, 864, 866, 868, 
 -	870, 872, 874, 876, 878, 880, 882, 884, 
 -	886, 888, 890, 892, 894, 907, 910, 913, 
 -	916, 919, 922, 925, 928, 931, 934, 937, 
 -	940, 943, 946, 949, 952, 956, 959, 962, 
 -	965, 968, 971, 974, 977, 980, 983, 986, 
 -	989, 992, 995, 998, 1001, 1004, 1007, 1010, 
 -	1013, 1016, 1020, 1024, 1028, 1031, 1034, 1037, 
 -	1040, 1043, 1046, 1049, 1052, 1055, 1058, 1061, 
 -	1064, 1067, 1070, 1073, 1075, 1077, 1081, 1087, 
 -	1091, 1094, 1100, 1116, 1120, 1123, 1126, 1129, 
 -	1132, 1135, 1138, 1141, 1144, 1147, 1150, 1153, 
 -	1156, 1159, 1162, 1165, 1168, 1171, 1174, 1177, 
 -	1180, 1184, 1188, 1192, 1195, 1198, 1201, 1204, 
 -	1207, 1210, 1214, 1217, 1220, 1223, 1226, 1229, 
 -	1232, 1235, 1238, 1241, 1244, 1247, 1250, 1253, 
 -	1256, 1259, 1262, 1265, 1268, 1271, 1274
 -};
 -
 -static const short _lexer_trans_targs[] = {
 -	2, 4, 4, 5, 15, 17, 31, 34, 
 -	37, 68, 155, 159, 355, 31, 357, 4, 
 -	0, 3, 0, 4, 0, 4, 4, 5, 
 -	15, 17, 31, 34, 37, 68, 155, 159, 
 -	355, 31, 357, 4, 0, 6, 0, 7, 
 -	0, 9, 8, 8, 9, 8, 8, 10, 
 -	10, 11, 10, 10, 10, 10, 11, 10, 
 -	10, 10, 10, 12, 10, 10, 10, 10, 
 -	13, 10, 10, 4, 14, 14, 0, 4, 
 -	14, 14, 0, 4, 16, 15, 4, 0, 
 -	18, 0, 19, 0, 20, 0, 21, 0, 
 -	22, 0, 23, 0, 24, 0, 25, 0, 
 -	26, 0, 27, 0, 28, 0, 29, 0, 
 -	30, 0, 414, 0, 32, 0, 4, 16, 
 -	33, 4, 16, 33, 0, 0, 0, 0, 
 -	35, 36, 4, 36, 36, 34, 35, 35, 
 -	4, 36, 34, 36, 0, 38, 0, 39, 
 -	0, 40, 0, 41, 0, 42, 0, 43, 
 -	0, 44, 0, 45, 0, 46, 0, 47, 
 -	0, 48, 0, 49, 0, 51, 50, 51, 
 -	50, 51, 51, 4, 52, 66, 4, 363, 
 -	382, 386, 412, 66, 51, 50, 51, 53, 
 -	50, 51, 54, 50, 51, 55, 50, 51, 
 -	56, 50, 51, 57, 50, 51, 58, 50, 
 -	51, 59, 50, 51, 60, 50, 51, 61, 
 -	50, 51, 62, 50, 51, 63, 50, 51, 
 -	64, 50, 51, 65, 50, 51, 4, 50, 
 -	51, 67, 50, 4, 4, 5, 15, 17, 
 -	31, 34, 37, 68, 155, 159, 355, 31, 
 -	357, 4, 0, 69, 151, 0, 70, 0, 
 -	71, 0, 72, 0, 73, 0, 74, 0, 
 -	75, 0, 76, 0, 77, 0, 78, 0, 
 -	79, 0, 80, 0, 81, 0, 82, 0, 
 -	83, 0, 85, 84, 85, 84, 85, 85, 
 -	4, 86, 4, 100, 112, 126, 85, 84, 
 -	85, 87, 84, 85, 88, 84, 85, 89, 
 -	84, 85, 90, 84, 85, 91, 84, 85, 
 -	92, 84, 85, 93, 84, 85, 94, 84, 
 -	85, 95, 84, 85, 96, 84, 85, 97, 
 -	84, 85, 98, 84, 85, 99, 84, 85, 
 -	4, 84, 85, 101, 84, 85, 102, 84, 
 -	85, 103, 84, 85, 104, 84, 85, 105, 
 -	84, 85, 106, 84, 85, 107, 84, 85, 
 -	108, 84, 85, 109, 84, 85, 110, 84, 
 -	85, 111, 84, 85, 67, 84, 85, 113, 
 -	84, 85, 114, 84, 85, 115, 84, 85, 
 -	116, 84, 85, 117, 84, 85, 118, 84, 
 -	85, 119, 84, 120, 85, 84, 121, 85, 
 -	84, 85, 122, 84, 85, 123, 84, 85, 
 -	124, 84, 85, 125, 84, 85, 111, 84, 
 -	85, 127, 132, 84, 85, 128, 84, 85, 
 -	129, 84, 85, 130, 84, 85, 131, 84, 
 -	85, 110, 84, 85, 133, 139, 84, 85, 
 -	134, 84, 85, 135, 84, 85, 136, 84, 
 -	85, 137, 84, 85, 138, 84, 85, 111, 
 -	84, 85, 140, 84, 85, 141, 84, 85, 
 -	142, 84, 85, 143, 84, 85, 144, 84, 
 -	85, 145, 84, 85, 146, 84, 85, 147, 
 -	84, 85, 148, 84, 85, 149, 84, 85, 
 -	150, 84, 85, 133, 84, 152, 0, 153, 
 -	0, 154, 0, 31, 0, 156, 0, 157, 
 -	0, 158, 158, 0, 32, 31, 0, 160, 
 -	185, 191, 0, 161, 0, 162, 0, 163, 
 -	0, 164, 0, 165, 0, 166, 0, 167, 
 -	0, 169, 168, 169, 168, 169, 169, 4, 
 -	170, 4, 169, 168, 169, 171, 168, 169, 
 -	172, 168, 169, 173, 168, 169, 174, 168, 
 -	169, 175, 168, 169, 176, 168, 169, 177, 
 -	168, 178, 169, 168, 179, 169, 168, 169, 
 -	180, 168, 169, 181, 168, 169, 182, 168, 
 -	169, 183, 168, 169, 184, 168, 169, 67, 
 -	168, 186, 0, 187, 0, 188, 0, 189, 
 -	0, 190, 0, 31, 0, 192, 279, 0, 
 -	193, 0, 194, 0, 195, 0, 196, 0, 
 -	197, 0, 198, 0, 199, 0, 201, 200, 
 -	201, 200, 201, 201, 4, 202, 216, 4, 
 -	217, 229, 247, 251, 277, 216, 201, 200, 
 -	201, 203, 200, 201, 204, 200, 201, 205, 
 -	200, 201, 206, 200, 201, 207, 200, 201, 
 -	208, 200, 201, 209, 200, 201, 210, 200, 
 -	201, 211, 200, 201, 212, 200, 201, 213, 
 -	200, 201, 214, 200, 201, 215, 200, 201, 
 -	4, 200, 201, 67, 200, 201, 218, 200, 
 -	201, 219, 200, 201, 220, 200, 201, 221, 
 -	200, 201, 222, 200, 201, 223, 200, 201, 
 -	224, 200, 201, 225, 200, 201, 226, 200, 
 -	201, 227, 200, 201, 228, 200, 201, 67, 
 -	200, 201, 230, 243, 200, 201, 231, 200, 
 -	201, 232, 200, 201, 233, 200, 201, 234, 
 -	200, 201, 235, 200, 201, 236, 200, 237, 
 -	201, 200, 238, 201, 200, 201, 239, 200, 
 -	201, 240, 200, 201, 241, 200, 201, 242, 
 -	200, 201, 228, 200, 201, 244, 200, 201, 
 -	245, 200, 201, 246, 200, 201, 216, 200, 
 -	201, 248, 200, 201, 249, 200, 201, 250, 
 -	250, 200, 201, 67, 216, 200, 201, 252, 
 -	258, 200, 201, 253, 200, 201, 254, 200, 
 -	201, 255, 200, 201, 256, 200, 201, 257, 
 -	200, 201, 216, 200, 201, 259, 265, 200, 
 -	201, 260, 200, 201, 261, 200, 201, 262, 
 -	200, 201, 263, 200, 201, 264, 200, 201, 
 -	228, 200, 201, 266, 200, 201, 267, 200, 
 -	201, 268, 200, 201, 269, 200, 201, 270, 
 -	200, 201, 271, 200, 201, 272, 200, 201, 
 -	273, 200, 201, 274, 200, 201, 275, 200, 
 -	201, 276, 200, 201, 259, 200, 201, 278, 
 -	200, 201, 246, 200, 280, 0, 281, 0, 
 -	282, 0, 283, 0, 284, 0, 285, 0, 
 -	286, 0, 287, 0, 288, 0, 289, 0, 
 -	290, 0, 291, 0, 292, 0, 293, 0, 
 -	294, 0, 295, 0, 296, 0, 297, 0, 
 -	298, 0, 300, 299, 300, 299, 300, 300, 
 -	4, 301, 315, 4, 316, 335, 339, 353, 
 -	315, 300, 299, 300, 302, 299, 300, 303, 
 -	299, 300, 304, 299, 300, 305, 299, 300, 
 -	306, 299, 300, 307, 299, 300, 308, 299, 
 -	300, 309, 299, 300, 310, 299, 300, 311, 
 -	299, 300, 312, 299, 300, 313, 299, 300, 
 -	314, 299, 300, 4, 299, 300, 67, 299, 
 -	300, 317, 331, 299, 300, 318, 299, 300, 
 -	319, 299, 300, 320, 299, 300, 321, 299, 
 -	300, 322, 299, 300, 323, 299, 324, 300, 
 -	299, 325, 300, 299, 300, 326, 299, 300, 
 -	327, 299, 300, 328, 299, 300, 329, 299, 
 -	300, 330, 299, 300, 67, 299, 300, 332, 
 -	299, 300, 333, 299, 300, 334, 299, 300, 
 -	315, 299, 300, 336, 299, 300, 337, 299, 
 -	300, 338, 338, 299, 300, 67, 315, 299, 
 -	300, 340, 346, 299, 300, 341, 299, 300, 
 -	342, 299, 300, 343, 299, 300, 344, 299, 
 -	300, 345, 299, 300, 315, 299, 300, 347, 
 -	299, 300, 348, 299, 300, 349, 299, 300, 
 -	350, 299, 300, 351, 299, 300, 352, 299, 
 -	300, 330, 299, 300, 354, 299, 300, 334, 
 -	299, 356, 0, 154, 0, 357, 358, 357, 
 -	0, 362, 361, 360, 358, 361, 359, 0, 
 -	360, 358, 359, 0, 360, 359, 362, 361, 
 -	360, 358, 361, 359, 362, 362, 5, 15, 
 -	17, 31, 34, 37, 68, 155, 159, 355, 
 -	31, 357, 362, 0, 51, 364, 378, 50, 
 -	51, 365, 50, 51, 366, 50, 51, 367, 
 -	50, 51, 368, 50, 51, 369, 50, 51, 
 -	370, 50, 371, 51, 50, 372, 51, 50, 
 -	51, 373, 50, 51, 374, 50, 51, 375, 
 -	50, 51, 376, 50, 51, 377, 50, 51, 
 -	67, 50, 51, 379, 50, 51, 380, 50, 
 -	51, 381, 50, 51, 66, 50, 51, 383, 
 -	50, 51, 384, 50, 51, 385, 385, 50, 
 -	51, 67, 66, 50, 51, 387, 393, 50, 
 -	51, 388, 50, 51, 389, 50, 51, 390, 
 -	50, 51, 391, 50, 51, 392, 50, 51, 
 -	66, 50, 51, 394, 400, 50, 51, 395, 
 -	50, 51, 396, 50, 51, 397, 50, 51, 
 -	398, 50, 51, 399, 50, 51, 377, 50, 
 -	51, 401, 50, 51, 402, 50, 51, 403, 
 -	50, 51, 404, 50, 51, 405, 50, 51, 
 -	406, 50, 51, 407, 50, 51, 408, 50, 
 -	51, 409, 50, 51, 410, 50, 51, 411, 
 -	50, 51, 394, 50, 51, 413, 50, 51, 
 -	381, 50, 0, 0
 -};
 -
 -static const unsigned char _lexer_trans_actions[] = {
 -	0, 54, 0, 5, 1, 0, 29, 1, 
 -	29, 29, 29, 29, 29, 29, 35, 0, 
 -	43, 0, 43, 0, 43, 54, 0, 5, 
 -	1, 0, 29, 1, 29, 29, 29, 29, 
 -	29, 29, 35, 0, 43, 0, 43, 0, 
 -	43, 139, 48, 9, 106, 11, 0, 134, 
 -	45, 45, 45, 3, 122, 33, 33, 33, 
 -	0, 122, 33, 33, 33, 0, 122, 33, 
 -	0, 33, 0, 102, 7, 7, 43, 54, 
 -	0, 0, 43, 114, 25, 0, 54, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 149, 126, 
 -	57, 110, 23, 0, 43, 43, 43, 43, 
 -	0, 27, 118, 27, 27, 51, 27, 0, 
 -	54, 0, 1, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 144, 57, 54, 
 -	0, 54, 0, 72, 33, 84, 72, 84, 
 -	84, 84, 84, 84, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 15, 0, 
 -	54, 15, 0, 130, 31, 60, 57, 31, 
 -	63, 57, 63, 63, 63, 63, 63, 63, 
 -	66, 31, 43, 0, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 144, 57, 54, 0, 54, 0, 
 -	69, 33, 69, 84, 84, 84, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	13, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 13, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 0, 54, 0, 0, 54, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 0, 43, 0, 0, 43, 0, 
 -	0, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 144, 57, 54, 0, 54, 0, 81, 
 -	84, 81, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 0, 54, 0, 0, 54, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 21, 
 -	0, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 144, 57, 
 -	54, 0, 54, 0, 75, 33, 84, 75, 
 -	84, 84, 84, 84, 84, 84, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	17, 0, 54, 17, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 17, 
 -	0, 54, 0, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 0, 
 -	54, 0, 0, 54, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 0, 54, 17, 0, 0, 54, 0, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 144, 57, 54, 0, 54, 0, 
 -	78, 33, 84, 78, 84, 84, 84, 84, 
 -	84, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 19, 0, 54, 19, 0, 
 -	54, 0, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 0, 54, 
 -	0, 0, 54, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 19, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 0, 54, 19, 0, 0, 
 -	54, 0, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 0, 43, 0, 43, 0, 0, 0, 
 -	43, 54, 37, 37, 87, 37, 37, 43, 
 -	0, 39, 0, 43, 0, 0, 54, 0, 
 -	0, 39, 0, 0, 54, 0, 93, 90, 
 -	41, 96, 90, 96, 96, 96, 96, 96, 
 -	96, 99, 0, 43, 54, 0, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 0, 54, 0, 0, 54, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	15, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 0, 
 -	54, 15, 0, 0, 54, 0, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 0, 0
 -};
 -
 -static const unsigned char _lexer_eof_actions[] = {
 -	0, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43
 -};
 -
 -static const int lexer_start = 1;
 -static const int lexer_first_final = 414;
 -static const int lexer_error = 0;
 -
 -static const int lexer_en_main = 1;
 -
 -
 -#line 258 "ragel/i18n/es.c.rl"
 -
 -static VALUE 
 -unindent(VALUE con, int start_col)
 -{
 -  VALUE re;
 -  /* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */
 -  char pat[32]; 
 -  snprintf(pat, 32, "^[\t ]{0,%d}", start_col); 
 -  re = rb_reg_regcomp(rb_str_new2(pat));
 -  rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2(""));
 -
 -  return Qnil;
 -
 -}
 -
 -static void 
 -store_kw_con(VALUE listener, const char * event_name, 
 -             const char * keyword_at, size_t keyword_length, 
 -             const char * at,         size_t length, 
 -             int current_line)
 -{
 -  VALUE con = Qnil, kw = Qnil;
 -  kw = ENCODED_STR_NEW(keyword_at, keyword_length);
 -  con = ENCODED_STR_NEW(at, length);
 -  rb_funcall(con, rb_intern("strip!"), 0);
 -  rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); 
 -}
 -
 -static void
 -store_multiline_kw_con(VALUE listener, const char * event_name,
 -                      const char * keyword_at, size_t keyword_length,
 -                      const char * at,         size_t length,
 -                      int current_line, int start_col)
 -{
 -  VALUE split;
 -  VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil;
 -
 -  kw = ENCODED_STR_NEW(keyword_at, keyword_length);
 -  con = ENCODED_STR_NEW(at, length);
 -
 -  unindent(con, start_col);
 -  
 -  split = rb_str_split(con, "\n");
 -
 -  name = rb_funcall(split, rb_intern("shift"), 0);
 -  desc = rb_ary_join(split, rb_str_new2( "\n" ));
 -
 -  if( name == Qnil ) 
 -  {
 -    name = rb_str_new2("");
 -  }
 -  if( rb_funcall(desc, rb_intern("size"), 0) == 0) 
 -  {
 -    desc = rb_str_new2("");
 -  }
 -  rb_funcall(name, rb_intern("strip!"), 0);
 -  rb_funcall(desc, rb_intern("rstrip!"), 0);
 -  rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); 
 -}
 -
 -static void 
 -store_attr(VALUE listener, const char * attr_type,
 -           const char * at, size_t length, 
 -           int line)
 -{
 -  VALUE val = ENCODED_STR_NEW(at, length);
 -  rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line));
 -}
 -static void 
 -store_docstring_content(VALUE listener, 
 -          int start_col, 
 -          const char *type_at, size_t type_length,
 -          const char *at, size_t length, 
 -          int current_line)
 -{
 -  VALUE re2;
 -  VALUE unescape_escaped_quotes;
 -  VALUE con = ENCODED_STR_NEW(at, length);
 -  VALUE con_type = ENCODED_STR_NEW(type_at, type_length);
 -
 -  unindent(con, start_col);
 -
 -  re2 = rb_reg_regcomp(rb_str_new2("\r\\Z"));
 -  unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\""));
 -  rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2(""));
 -  rb_funcall(con_type, rb_intern("strip!"), 0);
 -  rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\""));
 -  rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line));
 -}
 -static void 
 -raise_lexer_error(const char * at, int line)
 -{ 
 -  rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at);
 -}
 -
 -static void lexer_init(lexer_state *lexer) {
 -  lexer->content_start = 0;
 -  lexer->content_end = 0;
 -  lexer->content_len = 0;
 -  lexer->docstring_content_type_start = 0;
 -  lexer->docstring_content_type_end = 0;
 -  lexer->mark = 0;
 -  lexer->keyword_start = 0;
 -  lexer->keyword_end = 0;
 -  lexer->next_keyword_start = 0;
 -  lexer->line_number = 1;
 -  lexer->last_newline = 0;
 -  lexer->final_newline = 0;
 -  lexer->start_col = 0;
 -}
 -
 -static VALUE CLexer_alloc(VALUE klass)
 -{
 -  VALUE obj;
 -  lexer_state *lxr = ALLOC(lexer_state);
 -  lexer_init(lxr);
 -
 -  obj = Data_Wrap_Struct(klass, NULL, -1, lxr);
 -
 -  return obj;
 -}
 -
 -static VALUE CLexer_init(VALUE self, VALUE listener)
 -{
 -  lexer_state *lxr; 
 -  rb_iv_set(self, "@listener", listener);
 -  
 -  lxr = NULL;
 -  DATA_GET(self, lexer_state, lxr);
 -  lexer_init(lxr);
 -  
 -  return self;
 -}
 -
 -static VALUE CLexer_scan(VALUE self, VALUE input)
 -{
 -  VALUE input_copy;
 -  char *data;
 -  size_t len;
 -  VALUE listener = rb_iv_get(self, "@listener");
 -
 -  lexer_state *lexer;
 -  lexer = NULL;
 -  DATA_GET(self, lexer_state, lexer);
 -
 -  input_copy = rb_str_dup(input);
 -
 -  rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%"));
 -  data = RSTRING_PTR(input_copy);
 -  len = RSTRING_LEN(input_copy);
 -  
 -  if (len == 0) { 
 -    rb_raise(rb_eGherkinLexingError, "No content to lex.");
 -  } else {
 -
 -    const char *p, *pe, *eof;
 -    int cs = 0;
 -    
 -    VALUE current_row = Qnil;
 -
 -    p = data;
 -    pe = data + len;
 -    eof = pe;
 -    
 -    assert(*pe == '\0' && "pointer does not end on NULL");
 -    
 -    
 -#line 1003 "ext/gherkin_lexer_es/gherkin_lexer_es.c"
 -	{
 -	cs = lexer_start;
 -	}
 -
 -#line 425 "ragel/i18n/es.c.rl"
 -    
 -#line 1010 "ext/gherkin_lexer_es/gherkin_lexer_es.c"
 -	{
 -	int _klen;
 -	unsigned int _trans;
 -	const char *_acts;
 -	unsigned int _nacts;
 -	const char *_keys;
 -
 -	if ( p == pe )
 -		goto _test_eof;
 -	if ( cs == 0 )
 -		goto _out;
 -_resume:
 -	_keys = _lexer_trans_keys + _lexer_key_offsets[cs];
 -	_trans = _lexer_index_offsets[cs];
 -
 -	_klen = _lexer_single_lengths[cs];
 -	if ( _klen > 0 ) {
 -		const char *_lower = _keys;
 -		const char *_mid;
 -		const char *_upper = _keys + _klen - 1;
 -		while (1) {
 -			if ( _upper < _lower )
 -				break;
 -
 -			_mid = _lower + ((_upper-_lower) >> 1);
 -			if ( (*p) < *_mid )
 -				_upper = _mid - 1;
 -			else if ( (*p) > *_mid )
 -				_lower = _mid + 1;
 -			else {
 -				_trans += (unsigned int)(_mid - _keys);
 -				goto _match;
 -			}
 -		}
 -		_keys += _klen;
 -		_trans += _klen;
 -	}
 -
 -	_klen = _lexer_range_lengths[cs];
 -	if ( _klen > 0 ) {
 -		const char *_lower = _keys;
 -		const char *_mid;
 -		const char *_upper = _keys + (_klen<<1) - 2;
 -		while (1) {
 -			if ( _upper < _lower )
 -				break;
 -
 -			_mid = _lower + (((_upper-_lower) >> 1) & ~1);
 -			if ( (*p) < _mid[0] )
 -				_upper = _mid - 2;
 -			else if ( (*p) > _mid[1] )
 -				_lower = _mid + 2;
 -			else {
 -				_trans += (unsigned int)((_mid - _keys)>>1);
 -				goto _match;
 -			}
 -		}
 -		_trans += _klen;
 -	}
 -
 -_match:
 -	cs = _lexer_trans_targs[_trans];
 -
 -	if ( _lexer_trans_actions[_trans] == 0 )
 -		goto _again;
 -
 -	_acts = _lexer_actions + _lexer_trans_actions[_trans];
 -	_nacts = (unsigned int) *_acts++;
 -	while ( _nacts-- > 0 )
 -	{
 -		switch ( *_acts++ )
 -		{
 -	case 0:
 -#line 83 "ragel/i18n/es.c.rl"
 -	{
 -		MARK(content_start, p);
 -    lexer->current_line = lexer->line_number;
 -    lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2;
 -  }
 -	break;
 -	case 1:
 -#line 89 "ragel/i18n/es.c.rl"
 -	{
 -    MARK(content_start, p);
 -  }
 -	break;
 -	case 2:
 -#line 93 "ragel/i18n/es.c.rl"
 -	{
 -    lexer->current_line = lexer->line_number;
 -    lexer->start_col = p - data - lexer->last_newline;
 -  }
 -	break;
 -	case 3:
 -#line 98 "ragel/i18n/es.c.rl"
 -	{
 -    int len = LEN(content_start, PTR_TO(final_newline));
 -    int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end));
 -
 -    if (len < 0) len = 0;
 -    if (type_len < 0) len = 0;
 -
 -    store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line);
 -  }
 -	break;
 -	case 4:
 -#line 108 "ragel/i18n/es.c.rl"
 -	{ 
 -    MARK(docstring_content_type_start, p);
 -  }
 -	break;
 -	case 5:
 -#line 112 "ragel/i18n/es.c.rl"
 -	{ 
 -    MARK(docstring_content_type_end, p);
 -  }
 -	break;
 -	case 6:
 -#line 116 "ragel/i18n/es.c.rl"
 -	{
 -    STORE_KW_END_CON(feature);
 -  }
 -	break;
 -	case 7:
 -#line 120 "ragel/i18n/es.c.rl"
 -	{
 -    STORE_KW_END_CON(background);
 -  }
 -	break;
 -	case 8:
 -#line 124 "ragel/i18n/es.c.rl"
 -	{
 -    STORE_KW_END_CON(scenario);
 -  }
 -	break;
 -	case 9:
 -#line 128 "ragel/i18n/es.c.rl"
 -	{
 -    STORE_KW_END_CON(scenario_outline);
 -  }
 -	break;
 -	case 10:
 -#line 132 "ragel/i18n/es.c.rl"
 -	{
 -    STORE_KW_END_CON(examples);
 -  }
 -	break;
 -	case 11:
 -#line 136 "ragel/i18n/es.c.rl"
 -	{
 -    store_kw_con(listener, "step",
 -      PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
 -      PTR_TO(content_start), LEN(content_start, p), 
 -      lexer->current_line);
 -  }
 -	break;
 -	case 12:
 -#line 143 "ragel/i18n/es.c.rl"
 -	{
 -    STORE_ATTR(comment);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 13:
 -#line 148 "ragel/i18n/es.c.rl"
 -	{
 -    STORE_ATTR(tag);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 14:
 -#line 153 "ragel/i18n/es.c.rl"
 -	{
 -    lexer->line_number += 1;
 -    MARK(final_newline, p);
 -  }
 -	break;
 -	case 15:
 -#line 158 "ragel/i18n/es.c.rl"
 -	{
 -    MARK(last_newline, p + 1);
 -  }
 -	break;
 -	case 16:
 -#line 162 "ragel/i18n/es.c.rl"
 -	{
 -    if (lexer->mark == 0) {
 -      MARK(mark, p);
 -    }
 -  }
 -	break;
 -	case 17:
 -#line 168 "ragel/i18n/es.c.rl"
 -	{
 -    MARK(keyword_end, p);
 -    MARK(keyword_start, PTR_TO(mark));
 -    MARK(content_start, p + 1);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 18:
 -#line 175 "ragel/i18n/es.c.rl"
 -	{
 -    MARK(content_end, p);
 -  }
 -	break;
 -	case 19:
 -#line 179 "ragel/i18n/es.c.rl"
 -	{
 -    p = p - 1;
 -    lexer->current_line = lexer->line_number;
 -    current_row = rb_ary_new();
 -  }
 -	break;
 -	case 20:
 -#line 185 "ragel/i18n/es.c.rl"
 -	{
 -		MARK(content_start, p);
 -  }
 -	break;
 -	case 21:
 -#line 189 "ragel/i18n/es.c.rl"
 -	{
 -    VALUE re_pipe, re_newline, re_backslash;
 -    VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
 -    rb_funcall(con, rb_intern("strip!"), 0);
 -    re_pipe      = rb_reg_regcomp(rb_str_new2("\\\\\\|"));
 -    re_newline   = rb_reg_regcomp(rb_str_new2("\\\\n"));
 -    re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_pipe,      rb_str_new2("|"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_newline,   rb_str_new2("\n"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\"));
 -
 -    rb_ary_push(current_row, con);
 -  }
 -	break;
 -	case 22:
 -#line 203 "ragel/i18n/es.c.rl"
 -	{
 -    rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
 -  }
 -	break;
 -	case 23:
 -#line 207 "ragel/i18n/es.c.rl"
 -	{
 -    int line;
 -    if (cs < lexer_first_final) {
 -      size_t count = 0;
 -      VALUE newstr_val;
 -      char *newstr;
 -      int newstr_count = 0;        
 -      size_t len;
 -      const char *buff;
 -      if (lexer->last_newline != 0) {
 -        len = LEN(last_newline, eof);
 -        buff = PTR_TO(last_newline);
 -      } else {
 -        len = strlen(data);
 -        buff = data;
 -      }
 -
 -      /* Allocate as a ruby string so that it gets cleaned up by GC */
 -      newstr_val = rb_str_new(buff, len);
 -      newstr = RSTRING_PTR(newstr_val);
 -
 -
 -      for (count = 0; count < len; count++) {
 -        if(buff[count] == 10) {
 -          newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
 -          break;
 -        } else {
 -          if (buff[count] == '%') {
 -            newstr[newstr_count++] = buff[count];
 -            newstr[newstr_count] = buff[count];
 -          } else {
 -            newstr[newstr_count] = buff[count];
 -          }
 -        }
 -        newstr_count++;
 -      }
 -
 -      line = lexer->line_number;
 -      lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
 -      raise_lexer_error(newstr, line);
 -    } else {
 -      rb_funcall(listener, rb_intern("eof"), 0);
 -    }
 -  }
 -	break;
 -#line 1300 "ext/gherkin_lexer_es/gherkin_lexer_es.c"
 -		}
 -	}
 -
 -_again:
 -	if ( cs == 0 )
 -		goto _out;
 -	if ( ++p != pe )
 -		goto _resume;
 -	_test_eof: {}
 -	if ( p == eof )
 -	{
 -	const char *__acts = _lexer_actions + _lexer_eof_actions[cs];
 -	unsigned int __nacts = (unsigned int) *__acts++;
 -	while ( __nacts-- > 0 ) {
 -		switch ( *__acts++ ) {
 -	case 23:
 -#line 207 "ragel/i18n/es.c.rl"
 -	{
 -    int line;
 -    if (cs < lexer_first_final) {
 -      size_t count = 0;
 -      VALUE newstr_val;
 -      char *newstr;
 -      int newstr_count = 0;        
 -      size_t len;
 -      const char *buff;
 -      if (lexer->last_newline != 0) {
 -        len = LEN(last_newline, eof);
 -        buff = PTR_TO(last_newline);
 -      } else {
 -        len = strlen(data);
 -        buff = data;
 -      }
 -
 -      /* Allocate as a ruby string so that it gets cleaned up by GC */
 -      newstr_val = rb_str_new(buff, len);
 -      newstr = RSTRING_PTR(newstr_val);
 -
 -
 -      for (count = 0; count < len; count++) {
 -        if(buff[count] == 10) {
 -          newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
 -          break;
 -        } else {
 -          if (buff[count] == '%') {
 -            newstr[newstr_count++] = buff[count];
 -            newstr[newstr_count] = buff[count];
 -          } else {
 -            newstr[newstr_count] = buff[count];
 -          }
 -        }
 -        newstr_count++;
 -      }
 -
 -      line = lexer->line_number;
 -      lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
 -      raise_lexer_error(newstr, line);
 -    } else {
 -      rb_funcall(listener, rb_intern("eof"), 0);
 -    }
 -  }
 -	break;
 -#line 1363 "ext/gherkin_lexer_es/gherkin_lexer_es.c"
 -		}
 -	}
 -	}
 -
 -	_out: {}
 -	}
 -
 -#line 426 "ragel/i18n/es.c.rl"
 -
 -    assert(p <= pe && "data overflow after parsing execute");
 -    assert(lexer->content_start <= len && "content starts after data end");
 -    assert(lexer->mark < len && "mark is after data end");
 -    
 -    /* Reset lexer by re-initializing the whole thing */
 -    lexer_init(lexer);
 -
 -    if (cs == lexer_error) {
 -      rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails.");
 -    } else {
 -      return Qtrue;
 -    }
 -  }
 -}
 -
 -void Init_gherkin_lexer_es()
 -{
 -  mGherkin = rb_define_module("Gherkin");
 -  mGherkinLexer = rb_define_module_under(mGherkin, "Lexer");
 -  rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError"));
 -
 -  mCLexer = rb_define_module_under(mGherkin, "CLexer");
 -  cI18nLexer = rb_define_class_under(mCLexer, "Es", rb_cObject);
 -  rb_define_alloc_func(cI18nLexer, CLexer_alloc);
 -  rb_define_method(cI18nLexer, "initialize", CLexer_init, 1);
 -  rb_define_method(cI18nLexer, "scan", CLexer_scan, 1);
 -}
 -
diff --cc ext/gherkin_lexer_et/extconf.rb
index ed77120,ed77120..0000000
deleted file mode 100644,100644
--- a/ext/gherkin_lexer_et/extconf.rb
+++ /dev/null
@@@ -1,6 -1,6 +1,0 @@@
--require 'mkmf'
--CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags']
--$CFLAGS << ' -O0 -Wall' if CONFIG['CC'] =~ /gcc|clang/
--dir_config("gherkin_lexer_et")
--have_library("c", "main")
--create_makefile("gherkin_lexer_et")
diff --cc ext/gherkin_lexer_et/gherkin_lexer_et.c
index 6c3e3d4,f4d04bb..0000000
deleted file mode 100644,100644
--- a/ext/gherkin_lexer_et/gherkin_lexer_et.c
+++ /dev/null
@@@ -1,1236 -1,1236 +1,0 @@@
--
- #line 1 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/et.c.rl"
- #include <assert.h>
- #include <ruby.h>
- 
- #if defined(_WIN32)
- #include <stddef.h>
- #endif
- 
- #ifdef HAVE_RUBY_RE_H
- #include <ruby/re.h>
- #else
- #include <re.h>
- #endif
- 
- #ifdef HAVE_RUBY_ENCODING_H
- #include <ruby/encoding.h>
- #define ENCODED_STR_NEW(ptr, len) \
-     rb_enc_str_new(ptr, len, rb_utf8_encoding())
- #else
- #define ENCODED_STR_NEW(ptr, len) \
-     rb_str_new(ptr, len)
- #endif
- 
- #ifndef RSTRING_PTR
- #define RSTRING_PTR(s) (RSTRING(s)->ptr)
- #endif
- 
- #ifndef RSTRING_LEN
- #define RSTRING_LEN(s) (RSTRING(s)->len)
- #endif
- 
- #define DATA_GET(FROM, TYPE, NAME) \
-   Data_Get_Struct(FROM, TYPE, NAME); \
-   if (NAME == NULL) { \
-     rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \
-   }
-  
- typedef struct lexer_state {
-   int content_len;
-   int line_number;
-   int current_line;
-   int start_col;
-   size_t mark;
-   size_t keyword_start;
-   size_t keyword_end;
-   size_t next_keyword_start;
-   size_t content_start;
-   size_t content_end;
-   size_t docstring_content_type_start;
-   size_t docstring_content_type_end;
-   size_t query_start;
-   size_t last_newline;
-   size_t final_newline;
- } lexer_state;
- 
- static VALUE mGherkin;
- static VALUE mGherkinLexer;
- static VALUE mCLexer;
- static VALUE cI18nLexer;
- static VALUE rb_eGherkinLexingError;
- 
- #define LEN(AT, P) (P - data - lexer->AT)
- #define MARK(M, P) (lexer->M = (P) - data)
- #define PTR_TO(P) (data + lexer->P)
- 
- #define STORE_KW_END_CON(EVENT) \
-   store_multiline_kw_con(listener, # EVENT, \
-     PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \
-     PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \
-     lexer->current_line, lexer->start_col); \
-     if (lexer->content_end != 0) { \
-       p = PTR_TO(content_end - 1); \
-     } \
-     lexer->content_end = 0
- 
- #define STORE_ATTR(ATTR) \
-     store_attr(listener, # ATTR, \
-       PTR_TO(content_start), LEN(content_start, p), \
-       lexer->line_number)
- 
- 
- #line 254 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/et.c.rl"
- 
- 
- /** Data **/
- 
- #line 89 "ext/gherkin_lexer_et/gherkin_lexer_et.c"
- static const char _lexer_actions[] = {
- 	0, 1, 0, 1, 1, 1, 2, 1, 
- 	3, 1, 4, 1, 5, 1, 6, 1, 
- 	7, 1, 8, 1, 9, 1, 10, 1, 
- 	11, 1, 12, 1, 13, 1, 16, 1, 
- 	17, 1, 18, 1, 19, 1, 20, 1, 
- 	21, 1, 22, 1, 23, 2, 1, 18, 
- 	2, 4, 5, 2, 13, 0, 2, 14, 
- 	15, 2, 17, 0, 2, 17, 2, 2, 
- 	17, 16, 2, 17, 19, 2, 18, 6, 
- 	2, 18, 7, 2, 18, 8, 2, 18, 
- 	9, 2, 18, 10, 2, 18, 16, 2, 
- 	20, 21, 2, 22, 0, 2, 22, 2, 
- 	2, 22, 16, 2, 22, 19, 3, 3, 
- 	14, 15, 3, 5, 14, 15, 3, 11, 
- 	14, 15, 3, 12, 14, 15, 3, 13, 
- 	14, 15, 3, 14, 15, 18, 3, 17, 
- 	0, 11, 3, 17, 14, 15, 4, 1, 
- 	14, 15, 18, 4, 4, 5, 14, 15, 
- 	4, 17, 0, 14, 15, 5, 17, 0, 
- 	11, 14, 15
- };
- 
- static const short _lexer_key_offsets[] = {
- 	0, 0, 18, 19, 20, 37, 38, 39, 
- 	41, 43, 48, 53, 58, 63, 67, 71, 
- 	73, 74, 75, 76, 77, 78, 79, 80, 
- 	81, 82, 83, 84, 85, 86, 87, 88, 
- 	89, 91, 93, 98, 105, 110, 111, 112, 
- 	113, 114, 115, 116, 117, 119, 120, 121, 
- 	122, 123, 124, 125, 126, 127, 128, 135, 
- 	137, 139, 141, 143, 145, 147, 164, 165, 
- 	166, 168, 169, 170, 171, 172, 173, 174, 
- 	175, 176, 188, 190, 192, 194, 196, 198, 
- 	200, 202, 204, 206, 208, 210, 212, 214, 
- 	216, 218, 220, 222, 224, 226, 228, 230, 
- 	232, 234, 236, 238, 240, 242, 244, 246, 
- 	248, 250, 252, 254, 256, 258, 260, 262, 
- 	264, 266, 268, 270, 272, 274, 276, 278, 
- 	279, 280, 281, 282, 283, 284, 285, 286, 
- 	287, 288, 289, 290, 291, 292, 293, 294, 
- 	295, 308, 310, 312, 314, 316, 318, 320, 
- 	322, 324, 326, 328, 330, 332, 334, 336, 
- 	338, 340, 342, 344, 346, 348, 350, 352, 
- 	354, 356, 358, 361, 363, 365, 367, 369, 
- 	371, 373, 376, 378, 380, 382, 384, 386, 
- 	388, 390, 392, 394, 396, 398, 399, 400, 
- 	401, 402, 403, 404, 405, 406, 407, 408, 
- 	409, 410, 411, 426, 428, 430, 432, 434, 
- 	436, 438, 440, 442, 444, 446, 448, 450, 
- 	452, 454, 456, 458, 460, 462, 464, 466, 
- 	468, 470, 472, 474, 476, 479, 481, 483, 
- 	485, 487, 489, 491, 493, 495, 497, 499, 
- 	501, 503, 505, 507, 509, 511, 513, 515, 
- 	517, 519, 522, 524, 526, 528, 530, 532, 
- 	533, 534, 535, 536, 537, 538, 539, 553, 
- 	555, 557, 559, 561, 563, 565, 567, 569, 
- 	571, 573, 575, 577, 579, 581, 583, 585, 
- 	587, 589, 591, 593, 595, 597, 599, 601, 
- 	603, 606, 608, 610, 612, 614, 616, 618, 
- 	620, 622, 624, 626, 628, 630, 632, 634, 
- 	636, 638, 640, 642, 644, 646, 649, 651, 
- 	655, 661, 664, 666, 672, 689
- };
- 
- static const char _lexer_trans_keys[] = {
- 	-17, 10, 32, 34, 35, 37, 42, 64, 
- 	69, 74, 75, 79, 82, 83, 84, 124, 
- 	9, 13, -69, -65, 10, 32, 34, 35, 
- 	37, 42, 64, 69, 74, 75, 79, 82, 
- 	83, 84, 124, 9, 13, 34, 34, 10, 
- 	13, 10, 13, 10, 32, 34, 9, 13, 
- 	10, 32, 34, 9, 13, 10, 32, 34, 
- 	9, 13, 10, 32, 34, 9, 13, 10, 
- 	32, 9, 13, 10, 32, 9, 13, 10, 
- 	13, 10, 95, 70, 69, 65, 84, 85, 
- 	82, 69, 95, 69, 78, 68, 95, 37, 
- 	32, 10, 13, 10, 13, 13, 32, 64, 
- 	9, 10, 9, 10, 13, 32, 64, 11, 
- 	12, 10, 32, 64, 9, 13, 101, 108, 
- 	100, 97, 100, 101, 115, 97, 117, 104, 
- 	116, 117, 109, 105, 100, 58, 10, 10, 
- 	10, 32, 35, 79, 124, 9, 13, 10, 
- 	109, 10, 97, 10, 100, 10, 117, 10, 
- 	115, 10, 58, 10, 32, 34, 35, 37, 
- 	42, 64, 69, 74, 75, 79, 82, 83, 
- 	84, 124, 9, 13, 117, 105, 32, 100, 
- 	109, 97, 100, 117, 115, 58, 10, 10, 
- 	10, 32, 35, 37, 64, 74, 79, 82, 
- 	83, 84, 9, 13, 10, 95, 10, 70, 
- 	10, 69, 10, 65, 10, 84, 10, 85, 
- 	10, 82, 10, 69, 10, 95, 10, 69, 
- 	10, 78, 10, 68, 10, 95, 10, 37, 
- 	10, 117, 10, 104, 10, 116, 10, 117, 
- 	10, 109, 10, 105, 10, 100, 10, 58, 
- 	10, 109, 10, 97, 10, 100, 10, 117, 
- 	10, 115, 10, 97, 10, 97, 10, 109, 
- 	10, 115, 10, 116, 10, 115, 10, 101, 
- 	10, 110, 10, 97, 10, 97, 10, 114, 
- 	10, 105, 10, 117, 10, 109, 10, 97, 
- 	10, 117, 10, 115, 10, 116, 97, 97, 
- 	109, 115, 116, 115, 101, 110, 97, 97, 
- 	114, 105, 117, 109, 58, 10, 10, 10, 
- 	32, 35, 37, 42, 64, 69, 74, 75, 
- 	79, 83, 9, 13, 10, 95, 10, 70, 
- 	10, 69, 10, 65, 10, 84, 10, 85, 
- 	10, 82, 10, 69, 10, 95, 10, 69, 
- 	10, 78, 10, 68, 10, 95, 10, 37, 
- 	10, 32, 10, 101, 10, 108, 10, 100, 
- 	10, 97, 10, 100, 10, 101, 10, 115, 
- 	10, 97, 10, 117, 10, 105, 10, 32, 
- 	100, 10, 109, 10, 97, 10, 100, 10, 
- 	117, 10, 115, 10, 58, 10, 105, 116, 
- 	10, 105, 10, 115, 10, 101, 10, 110, 
- 	10, 97, 10, 97, 10, 114, 10, 105, 
- 	10, 117, 10, 109, 105, 116, 105, 115, 
- 	101, 110, 97, 97, 114, 105, 117, 109, 
- 	58, 10, 10, 10, 32, 35, 37, 42, 
- 	64, 69, 74, 75, 79, 82, 83, 84, 
- 	9, 13, 10, 95, 10, 70, 10, 69, 
- 	10, 65, 10, 84, 10, 85, 10, 82, 
- 	10, 69, 10, 95, 10, 69, 10, 78, 
- 	10, 68, 10, 95, 10, 37, 10, 32, 
- 	10, 101, 10, 108, 10, 100, 10, 97, 
- 	10, 100, 10, 101, 10, 115, 10, 97, 
- 	10, 117, 10, 105, 10, 32, 100, 10, 
- 	109, 10, 97, 10, 100, 10, 117, 10, 
- 	115, 10, 58, 10, 97, 10, 97, 10, 
- 	109, 10, 115, 10, 116, 10, 115, 10, 
- 	101, 10, 110, 10, 97, 10, 97, 10, 
- 	114, 10, 105, 10, 117, 10, 109, 10, 
- 	105, 116, 10, 105, 10, 97, 10, 117, 
- 	10, 115, 10, 116, 97, 117, 115, 116, 
- 	58, 10, 10, 10, 32, 35, 37, 42, 
- 	64, 69, 74, 75, 79, 82, 83, 9, 
- 	13, 10, 95, 10, 70, 10, 69, 10, 
- 	65, 10, 84, 10, 85, 10, 82, 10, 
- 	69, 10, 95, 10, 69, 10, 78, 10, 
- 	68, 10, 95, 10, 37, 10, 32, 10, 
- 	101, 10, 108, 10, 100, 10, 97, 10, 
- 	100, 10, 101, 10, 115, 10, 97, 10, 
- 	117, 10, 105, 10, 32, 100, 10, 109, 
- 	10, 97, 10, 100, 10, 117, 10, 115, 
- 	10, 58, 10, 97, 10, 97, 10, 109, 
- 	10, 115, 10, 116, 10, 115, 10, 101, 
- 	10, 110, 10, 97, 10, 97, 10, 114, 
- 	10, 105, 10, 117, 10, 109, 10, 105, 
- 	116, 10, 105, 32, 124, 9, 13, 10, 
- 	32, 92, 124, 9, 13, 10, 92, 124, 
- 	10, 92, 10, 32, 92, 124, 9, 13, 
- 	10, 32, 34, 35, 37, 42, 64, 69, 
- 	74, 75, 79, 82, 83, 84, 124, 9, 
- 	13, 0
- };
- 
- static const char _lexer_single_lengths[] = {
- 	0, 16, 1, 1, 15, 1, 1, 2, 
- 	2, 3, 3, 3, 3, 2, 2, 2, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	2, 2, 3, 5, 3, 1, 1, 1, 
- 	1, 1, 1, 1, 2, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 5, 2, 
- 	2, 2, 2, 2, 2, 15, 1, 1, 
- 	2, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 10, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	11, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 3, 2, 2, 2, 2, 2, 
- 	2, 3, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 13, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 3, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 3, 2, 2, 2, 2, 2, 1, 
- 	1, 1, 1, 1, 1, 1, 12, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	3, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 3, 2, 2, 
- 	4, 3, 2, 4, 15, 0
- };
- 
- static const char _lexer_range_lengths[] = {
- 	0, 1, 0, 0, 1, 0, 0, 0, 
- 	0, 1, 1, 1, 1, 1, 1, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 1, 1, 1, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 1, 0, 
- 	0, 0, 0, 0, 0, 1, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 1, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	1, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 1, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 1, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 1, 
- 	1, 0, 0, 1, 1, 0
- };
- 
- static const short _lexer_index_offsets[] = {
- 	0, 0, 18, 20, 22, 39, 41, 43, 
- 	46, 49, 54, 59, 64, 69, 73, 77, 
- 	80, 82, 84, 86, 88, 90, 92, 94, 
- 	96, 98, 100, 102, 104, 106, 108, 110, 
- 	112, 115, 118, 123, 130, 135, 137, 139, 
- 	141, 143, 145, 147, 149, 152, 154, 156, 
- 	158, 160, 162, 164, 166, 168, 170, 177, 
- 	180, 183, 186, 189, 192, 195, 212, 214, 
- 	216, 219, 221, 223, 225, 227, 229, 231, 
- 	233, 235, 247, 250, 253, 256, 259, 262, 
- 	265, 268, 271, 274, 277, 280, 283, 286, 
- 	289, 292, 295, 298, 301, 304, 307, 310, 
- 	313, 316, 319, 322, 325, 328, 331, 334, 
- 	337, 340, 343, 346, 349, 352, 355, 358, 
- 	361, 364, 367, 370, 373, 376, 379, 382, 
- 	384, 386, 388, 390, 392, 394, 396, 398, 
- 	400, 402, 404, 406, 408, 410, 412, 414, 
- 	416, 429, 432, 435, 438, 441, 444, 447, 
- 	450, 453, 456, 459, 462, 465, 468, 471, 
- 	474, 477, 480, 483, 486, 489, 492, 495, 
- 	498, 501, 504, 508, 511, 514, 517, 520, 
- 	523, 526, 530, 533, 536, 539, 542, 545, 
- 	548, 551, 554, 557, 560, 563, 565, 567, 
- 	569, 571, 573, 575, 577, 579, 581, 583, 
- 	585, 587, 589, 604, 607, 610, 613, 616, 
- 	619, 622, 625, 628, 631, 634, 637, 640, 
- 	643, 646, 649, 652, 655, 658, 661, 664, 
- 	667, 670, 673, 676, 679, 683, 686, 689, 
- 	692, 695, 698, 701, 704, 707, 710, 713, 
- 	716, 719, 722, 725, 728, 731, 734, 737, 
- 	740, 743, 747, 750, 753, 756, 759, 762, 
- 	764, 766, 768, 770, 772, 774, 776, 790, 
- 	793, 796, 799, 802, 805, 808, 811, 814, 
- 	817, 820, 823, 826, 829, 832, 835, 838, 
- 	841, 844, 847, 850, 853, 856, 859, 862, 
- 	865, 869, 872, 875, 878, 881, 884, 887, 
- 	890, 893, 896, 899, 902, 905, 908, 911, 
- 	914, 917, 920, 923, 926, 929, 933, 936, 
- 	940, 946, 950, 953, 959, 976
- };
- 
- static const short _lexer_trans_targs[] = {
- 	2, 4, 4, 5, 15, 17, 31, 34, 
- 	37, 44, 62, 65, 119, 180, 247, 303, 
- 	4, 0, 3, 0, 4, 0, 4, 4, 
- 	5, 15, 17, 31, 34, 37, 44, 62, 
- 	65, 119, 180, 247, 303, 4, 0, 6, 
- 	0, 7, 0, 9, 8, 8, 9, 8, 
- 	8, 10, 10, 11, 10, 10, 10, 10, 
- 	11, 10, 10, 10, 10, 12, 10, 10, 
- 	10, 10, 13, 10, 10, 4, 14, 14, 
- 	0, 4, 14, 14, 0, 4, 16, 15, 
- 	4, 0, 18, 0, 19, 0, 20, 0, 
- 	21, 0, 22, 0, 23, 0, 24, 0, 
- 	25, 0, 26, 0, 27, 0, 28, 0, 
- 	29, 0, 30, 0, 309, 0, 32, 0, 
- 	4, 16, 33, 4, 16, 33, 0, 0, 
- 	0, 0, 35, 36, 4, 36, 36, 34, 
- 	35, 35, 4, 36, 34, 36, 0, 38, 
- 	0, 39, 0, 40, 0, 41, 0, 42, 
- 	0, 43, 0, 31, 0, 31, 45, 0, 
- 	46, 0, 47, 0, 48, 0, 49, 0, 
- 	50, 0, 51, 0, 52, 0, 54, 53, 
- 	54, 53, 54, 54, 4, 55, 4, 54, 
- 	53, 54, 56, 53, 54, 57, 53, 54, 
- 	58, 53, 54, 59, 53, 54, 60, 53, 
- 	54, 61, 53, 4, 4, 5, 15, 17, 
- 	31, 34, 37, 44, 62, 65, 119, 180, 
- 	247, 303, 4, 0, 63, 0, 64, 0, 
- 	32, 31, 0, 66, 0, 67, 0, 68, 
- 	0, 69, 0, 70, 0, 71, 0, 73, 
- 	72, 73, 72, 73, 73, 4, 74, 4, 
- 	88, 96, 101, 105, 115, 73, 72, 73, 
- 	75, 72, 73, 76, 72, 73, 77, 72, 
- 	73, 78, 72, 73, 79, 72, 73, 80, 
- 	72, 73, 81, 72, 73, 82, 72, 73, 
- 	83, 72, 73, 84, 72, 73, 85, 72, 
- 	73, 86, 72, 73, 87, 72, 73, 4, 
- 	72, 73, 89, 72, 73, 90, 72, 73, 
- 	91, 72, 73, 92, 72, 73, 93, 72, 
- 	73, 94, 72, 73, 95, 72, 73, 61, 
- 	72, 73, 97, 72, 73, 98, 72, 73, 
- 	99, 72, 73, 100, 72, 73, 95, 72, 
- 	73, 102, 72, 73, 103, 72, 73, 104, 
- 	72, 73, 105, 72, 73, 106, 72, 73, 
- 	107, 72, 73, 108, 72, 73, 109, 72, 
- 	73, 110, 72, 73, 111, 72, 73, 112, 
- 	72, 73, 113, 72, 73, 114, 72, 73, 
- 	95, 72, 73, 116, 72, 73, 117, 72, 
- 	73, 118, 72, 73, 95, 72, 120, 0, 
- 	121, 0, 122, 0, 123, 0, 124, 0, 
- 	125, 0, 126, 0, 127, 0, 128, 0, 
- 	129, 0, 130, 0, 131, 0, 132, 0, 
- 	133, 0, 134, 0, 136, 135, 136, 135, 
- 	136, 136, 4, 137, 151, 4, 152, 159, 
- 	160, 163, 169, 136, 135, 136, 138, 135, 
- 	136, 139, 135, 136, 140, 135, 136, 141, 
- 	135, 136, 142, 135, 136, 143, 135, 136, 
- 	144, 135, 136, 145, 135, 136, 146, 135, 
- 	136, 147, 135, 136, 148, 135, 136, 149, 
- 	135, 136, 150, 135, 136, 4, 135, 136, 
- 	61, 135, 136, 153, 135, 136, 154, 135, 
- 	136, 155, 135, 136, 156, 135, 136, 157, 
- 	135, 136, 158, 135, 136, 151, 135, 136, 
- 	151, 135, 136, 161, 135, 136, 162, 135, 
- 	136, 61, 151, 135, 136, 164, 135, 136, 
- 	165, 135, 136, 166, 135, 136, 167, 135, 
- 	136, 168, 135, 136, 61, 135, 136, 170, 
- 	171, 135, 136, 158, 135, 136, 172, 135, 
- 	136, 173, 135, 136, 174, 135, 136, 175, 
- 	135, 136, 176, 135, 136, 177, 135, 136, 
- 	178, 135, 136, 179, 135, 136, 168, 135, 
- 	181, 182, 0, 43, 0, 183, 0, 184, 
- 	0, 185, 0, 186, 0, 187, 0, 188, 
- 	0, 189, 0, 190, 0, 191, 0, 192, 
- 	0, 194, 193, 194, 193, 194, 194, 4, 
- 	195, 209, 4, 210, 217, 218, 221, 227, 
- 	241, 243, 194, 193, 194, 196, 193, 194, 
- 	197, 193, 194, 198, 193, 194, 199, 193, 
- 	194, 200, 193, 194, 201, 193, 194, 202, 
- 	193, 194, 203, 193, 194, 204, 193, 194, 
- 	205, 193, 194, 206, 193, 194, 207, 193, 
- 	194, 208, 193, 194, 4, 193, 194, 61, 
- 	193, 194, 211, 193, 194, 212, 193, 194, 
- 	213, 193, 194, 214, 193, 194, 215, 193, 
- 	194, 216, 193, 194, 209, 193, 194, 209, 
- 	193, 194, 219, 193, 194, 220, 193, 194, 
- 	61, 209, 193, 194, 222, 193, 194, 223, 
- 	193, 194, 224, 193, 194, 225, 193, 194, 
- 	226, 193, 194, 61, 193, 194, 228, 193, 
- 	194, 229, 193, 194, 230, 193, 194, 231, 
- 	193, 194, 232, 193, 194, 233, 193, 194, 
- 	234, 193, 194, 235, 193, 194, 236, 193, 
- 	194, 237, 193, 194, 238, 193, 194, 239, 
- 	193, 194, 240, 193, 194, 226, 193, 194, 
- 	242, 232, 193, 194, 216, 193, 194, 244, 
- 	193, 194, 245, 193, 194, 246, 193, 194, 
- 	226, 193, 248, 0, 249, 0, 250, 0, 
- 	251, 0, 252, 0, 254, 253, 254, 253, 
- 	254, 254, 4, 255, 269, 4, 270, 277, 
- 	278, 281, 287, 301, 254, 253, 254, 256, 
- 	253, 254, 257, 253, 254, 258, 253, 254, 
- 	259, 253, 254, 260, 253, 254, 261, 253, 
- 	254, 262, 253, 254, 263, 253, 254, 264, 
- 	253, 254, 265, 253, 254, 266, 253, 254, 
- 	267, 253, 254, 268, 253, 254, 4, 253, 
- 	254, 61, 253, 254, 271, 253, 254, 272, 
- 	253, 254, 273, 253, 254, 274, 253, 254, 
- 	275, 253, 254, 276, 253, 254, 269, 253, 
- 	254, 269, 253, 254, 279, 253, 254, 280, 
- 	253, 254, 61, 269, 253, 254, 282, 253, 
- 	254, 283, 253, 254, 284, 253, 254, 285, 
- 	253, 254, 286, 253, 254, 61, 253, 254, 
- 	288, 253, 254, 289, 253, 254, 290, 253, 
- 	254, 291, 253, 254, 292, 253, 254, 293, 
- 	253, 254, 294, 253, 254, 295, 253, 254, 
- 	296, 253, 254, 297, 253, 254, 298, 253, 
- 	254, 299, 253, 254, 300, 253, 254, 286, 
- 	253, 254, 302, 292, 253, 254, 276, 253, 
- 	303, 304, 303, 0, 308, 307, 306, 304, 
- 	307, 305, 0, 306, 304, 305, 0, 306, 
- 	305, 308, 307, 306, 304, 307, 305, 308, 
- 	308, 5, 15, 17, 31, 34, 37, 44, 
- 	62, 65, 119, 180, 247, 303, 308, 0, 
- 	0, 0
- };
- 
- static const unsigned char _lexer_trans_actions[] = {
- 	0, 54, 0, 5, 1, 0, 29, 1, 
- 	29, 29, 29, 29, 29, 29, 29, 35, 
- 	0, 43, 0, 43, 0, 43, 54, 0, 
- 	5, 1, 0, 29, 1, 29, 29, 29, 
- 	29, 29, 29, 29, 35, 0, 43, 0, 
- 	43, 0, 43, 139, 48, 9, 106, 11, 
- 	0, 134, 45, 45, 45, 3, 122, 33, 
- 	33, 33, 0, 122, 33, 33, 33, 0, 
- 	122, 33, 0, 33, 0, 102, 7, 7, 
- 	43, 54, 0, 0, 43, 114, 25, 0, 
- 	54, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	149, 126, 57, 110, 23, 0, 43, 43, 
- 	43, 43, 0, 27, 118, 27, 27, 51, 
- 	27, 0, 54, 0, 1, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 144, 57, 
- 	54, 0, 54, 0, 81, 84, 81, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 21, 0, 130, 31, 60, 57, 31, 
- 	63, 57, 63, 63, 63, 63, 63, 63, 
- 	63, 66, 31, 43, 0, 43, 0, 43, 
- 	0, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 144, 
- 	57, 54, 0, 54, 0, 69, 33, 69, 
- 	84, 84, 84, 84, 84, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 13, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 13, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 144, 57, 54, 0, 
- 	54, 0, 78, 33, 84, 78, 84, 84, 
- 	84, 84, 84, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 19, 0, 54, 
- 	19, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 19, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 19, 0, 54, 0, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	0, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 144, 57, 54, 0, 54, 0, 75, 
- 	33, 84, 75, 84, 84, 84, 84, 84, 
- 	84, 84, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 17, 0, 54, 17, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	17, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 17, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 144, 57, 54, 0, 
- 	54, 0, 72, 33, 84, 72, 84, 84, 
- 	84, 84, 84, 84, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 15, 0, 
- 	54, 15, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 15, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 15, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 0, 54, 0, 0, 
- 	0, 0, 0, 43, 54, 37, 37, 87, 
- 	37, 37, 43, 0, 39, 0, 43, 0, 
- 	0, 54, 0, 0, 39, 0, 0, 54, 
- 	0, 93, 90, 41, 96, 90, 96, 96, 
- 	96, 96, 96, 96, 96, 99, 0, 43, 
- 	0, 0
- };
- 
- static const unsigned char _lexer_eof_actions[] = {
- 	0, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43
- };
- 
- static const int lexer_start = 1;
- static const int lexer_first_final = 309;
- static const int lexer_error = 0;
- 
- static const int lexer_en_main = 1;
- 
- 
- #line 258 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/et.c.rl"
- 
- static VALUE 
- unindent(VALUE con, int start_col)
- {
-   VALUE re;
-   // Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters
-   char pat[32]; 
-   snprintf(pat, 32, "^[\t ]{0,%d}", start_col); 
-   re = rb_reg_regcomp(rb_str_new2(pat));
-   rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2(""));
- 
-   return Qnil;
- 
- }
- 
- static void 
- store_kw_con(VALUE listener, const char * event_name, 
-              const char * keyword_at, size_t keyword_length, 
-              const char * at,         size_t length, 
-              int current_line)
- {
-   VALUE con = Qnil, kw = Qnil;
-   kw = ENCODED_STR_NEW(keyword_at, keyword_length);
-   con = ENCODED_STR_NEW(at, length);
-   rb_funcall(con, rb_intern("strip!"), 0);
-   rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); 
- }
- 
- static void
- store_multiline_kw_con(VALUE listener, const char * event_name,
-                       const char * keyword_at, size_t keyword_length,
-                       const char * at,         size_t length,
-                       int current_line, int start_col)
- {
-   VALUE split;
-   VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil;
- 
-   kw = ENCODED_STR_NEW(keyword_at, keyword_length);
-   con = ENCODED_STR_NEW(at, length);
- 
-   unindent(con, start_col);
-   
-   split = rb_str_split(con, "\n");
- 
-   name = rb_funcall(split, rb_intern("shift"), 0);
-   desc = rb_ary_join(split, rb_str_new2( "\n" ));
- 
-   if( name == Qnil ) 
-   {
-     name = rb_str_new2("");
-   }
-   if( rb_funcall(desc, rb_intern("size"), 0) == 0) 
-   {
-     desc = rb_str_new2("");
-   }
-   rb_funcall(name, rb_intern("strip!"), 0);
-   rb_funcall(desc, rb_intern("rstrip!"), 0);
-   rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); 
- }
- 
- static void 
- store_attr(VALUE listener, const char * attr_type,
-            const char * at, size_t length, 
-            int line)
- {
-   VALUE val = ENCODED_STR_NEW(at, length);
-   rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line));
- }
- static void 
- store_docstring_content(VALUE listener, 
-           int start_col, 
-           const char *type_at, size_t type_length,
-           const char *at, size_t length, 
-           int current_line)
- {
-   VALUE re2;
-   VALUE unescape_escaped_quotes;
-   VALUE con = ENCODED_STR_NEW(at, length);
-   VALUE con_type = ENCODED_STR_NEW(type_at, type_length);
- 
-   unindent(con, start_col);
- 
-   re2 = rb_reg_regcomp(rb_str_new2("\r\\Z"));
-   unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\""));
-   rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2(""));
-   rb_funcall(con_type, rb_intern("strip!"), 0);
-   rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\""));
-   rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line));
- }
- static void 
- raise_lexer_error(const char * at, int line)
- { 
-   rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at);
- }
- 
- static void lexer_init(lexer_state *lexer) {
-   lexer->content_start = 0;
-   lexer->content_end = 0;
-   lexer->content_len = 0;
-   lexer->docstring_content_type_start = 0;
-   lexer->docstring_content_type_end = 0;
-   lexer->mark = 0;
-   lexer->keyword_start = 0;
-   lexer->keyword_end = 0;
-   lexer->next_keyword_start = 0;
-   lexer->line_number = 1;
-   lexer->last_newline = 0;
-   lexer->final_newline = 0;
-   lexer->start_col = 0;
- }
- 
- static VALUE CLexer_alloc(VALUE klass)
- {
-   VALUE obj;
-   lexer_state *lxr = ALLOC(lexer_state);
-   lexer_init(lxr);
- 
-   obj = Data_Wrap_Struct(klass, NULL, -1, lxr);
- 
-   return obj;
- }
- 
- static VALUE CLexer_init(VALUE self, VALUE listener)
- {
-   lexer_state *lxr; 
-   rb_iv_set(self, "@listener", listener);
-   
-   lxr = NULL;
-   DATA_GET(self, lexer_state, lxr);
-   lexer_init(lxr);
-   
-   return self;
- }
- 
- static VALUE CLexer_scan(VALUE self, VALUE input)
- {
-   VALUE input_copy;
-   char *data;
-   size_t len;
-   VALUE listener = rb_iv_get(self, "@listener");
- 
-   lexer_state *lexer;
-   lexer = NULL;
-   DATA_GET(self, lexer_state, lexer);
- 
-   input_copy = rb_str_dup(input);
- 
-   rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%"));
-   data = RSTRING_PTR(input_copy);
-   len = RSTRING_LEN(input_copy);
-   
-   if (len == 0) { 
-     rb_raise(rb_eGherkinLexingError, "No content to lex.");
-   } else {
- 
-     const char *p, *pe, *eof;
-     int cs = 0;
-     
-     VALUE current_row = Qnil;
- 
-     p = data;
-     pe = data + len;
-     eof = pe;
-     
-     assert(*pe == '\0' && "pointer does not end on NULL");
-     
-     
- #line 840 "ext/gherkin_lexer_et/gherkin_lexer_et.c"
- 	{
- 	cs = lexer_start;
- 	}
- 
- #line 425 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/et.c.rl"
-     
- #line 847 "ext/gherkin_lexer_et/gherkin_lexer_et.c"
- 	{
- 	int _klen;
- 	unsigned int _trans;
- 	const char *_acts;
- 	unsigned int _nacts;
- 	const char *_keys;
- 
- 	if ( p == pe )
- 		goto _test_eof;
- 	if ( cs == 0 )
- 		goto _out;
- _resume:
- 	_keys = _lexer_trans_keys + _lexer_key_offsets[cs];
- 	_trans = _lexer_index_offsets[cs];
- 
- 	_klen = _lexer_single_lengths[cs];
- 	if ( _klen > 0 ) {
- 		const char *_lower = _keys;
- 		const char *_mid;
- 		const char *_upper = _keys + _klen - 1;
- 		while (1) {
- 			if ( _upper < _lower )
- 				break;
- 
- 			_mid = _lower + ((_upper-_lower) >> 1);
- 			if ( (*p) < *_mid )
- 				_upper = _mid - 1;
- 			else if ( (*p) > *_mid )
- 				_lower = _mid + 1;
- 			else {
- 				_trans += (_mid - _keys);
- 				goto _match;
- 			}
- 		}
- 		_keys += _klen;
- 		_trans += _klen;
- 	}
- 
- 	_klen = _lexer_range_lengths[cs];
- 	if ( _klen > 0 ) {
- 		const char *_lower = _keys;
- 		const char *_mid;
- 		const char *_upper = _keys + (_klen<<1) - 2;
- 		while (1) {
- 			if ( _upper < _lower )
- 				break;
- 
- 			_mid = _lower + (((_upper-_lower) >> 1) & ~1);
- 			if ( (*p) < _mid[0] )
- 				_upper = _mid - 2;
- 			else if ( (*p) > _mid[1] )
- 				_lower = _mid + 2;
- 			else {
- 				_trans += ((_mid - _keys)>>1);
- 				goto _match;
- 			}
- 		}
- 		_trans += _klen;
- 	}
- 
- _match:
- 	cs = _lexer_trans_targs[_trans];
- 
- 	if ( _lexer_trans_actions[_trans] == 0 )
- 		goto _again;
- 
- 	_acts = _lexer_actions + _lexer_trans_actions[_trans];
- 	_nacts = (unsigned int) *_acts++;
- 	while ( _nacts-- > 0 )
- 	{
- 		switch ( *_acts++ )
- 		{
- 	case 0:
- #line 83 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/et.c.rl"
- 	{
- 		MARK(content_start, p);
-     lexer->current_line = lexer->line_number;
-     lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2;
-   }
- 	break;
- 	case 1:
- #line 89 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/et.c.rl"
- 	{
-     MARK(content_start, p);
-   }
- 	break;
- 	case 2:
- #line 93 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/et.c.rl"
- 	{
-     lexer->current_line = lexer->line_number;
-     lexer->start_col = p - data - lexer->last_newline;
-   }
- 	break;
- 	case 3:
- #line 98 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/et.c.rl"
- 	{
-     int len = LEN(content_start, PTR_TO(final_newline));
-     int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end));
- 
-     if (len < 0) len = 0;
-     if (type_len < 0) len = 0;
- 
-     store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line);
-   }
- 	break;
- 	case 4:
- #line 108 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/et.c.rl"
- 	{ 
-     MARK(docstring_content_type_start, p);
-   }
- 	break;
- 	case 5:
- #line 112 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/et.c.rl"
- 	{ 
-     MARK(docstring_content_type_end, p);
-   }
- 	break;
- 	case 6:
- #line 116 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/et.c.rl"
- 	{
-     STORE_KW_END_CON(feature);
-   }
- 	break;
- 	case 7:
- #line 120 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/et.c.rl"
- 	{
-     STORE_KW_END_CON(background);
-   }
- 	break;
- 	case 8:
- #line 124 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/et.c.rl"
- 	{
-     STORE_KW_END_CON(scenario);
-   }
- 	break;
- 	case 9:
- #line 128 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/et.c.rl"
- 	{
-     STORE_KW_END_CON(scenario_outline);
-   }
- 	break;
- 	case 10:
- #line 132 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/et.c.rl"
- 	{
-     STORE_KW_END_CON(examples);
-   }
- 	break;
- 	case 11:
- #line 136 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/et.c.rl"
- 	{
-     store_kw_con(listener, "step",
-       PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-       PTR_TO(content_start), LEN(content_start, p), 
-       lexer->current_line);
-   }
- 	break;
- 	case 12:
- #line 143 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/et.c.rl"
- 	{
-     STORE_ATTR(comment);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 13:
- #line 148 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/et.c.rl"
- 	{
-     STORE_ATTR(tag);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 14:
- #line 153 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/et.c.rl"
- 	{
-     lexer->line_number += 1;
-     MARK(final_newline, p);
-   }
- 	break;
- 	case 15:
- #line 158 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/et.c.rl"
- 	{
-     MARK(last_newline, p + 1);
-   }
- 	break;
- 	case 16:
- #line 162 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/et.c.rl"
- 	{
-     if (lexer->mark == 0) {
-       MARK(mark, p);
-     }
-   }
- 	break;
- 	case 17:
- #line 168 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/et.c.rl"
- 	{
-     MARK(keyword_end, p);
-     MARK(keyword_start, PTR_TO(mark));
-     MARK(content_start, p + 1);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 18:
- #line 175 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/et.c.rl"
- 	{
-     MARK(content_end, p);
-   }
- 	break;
- 	case 19:
- #line 179 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/et.c.rl"
- 	{
-     p = p - 1;
-     lexer->current_line = lexer->line_number;
-     current_row = rb_ary_new();
-   }
- 	break;
- 	case 20:
- #line 185 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/et.c.rl"
- 	{
- 		MARK(content_start, p);
-   }
- 	break;
- 	case 21:
- #line 189 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/et.c.rl"
- 	{
-     VALUE re_pipe, re_newline, re_backslash;
-     VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
-     rb_funcall(con, rb_intern("strip!"), 0);
-     re_pipe      = rb_reg_regcomp(rb_str_new2("\\\\\\|"));
-     re_newline   = rb_reg_regcomp(rb_str_new2("\\\\n"));
-     re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_pipe,      rb_str_new2("|"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_newline,   rb_str_new2("\n"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\"));
- 
-     rb_ary_push(current_row, con);
-   }
- 	break;
- 	case 22:
- #line 203 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/et.c.rl"
- 	{
-     rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
-   }
- 	break;
- 	case 23:
- #line 207 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/et.c.rl"
- 	{
-     int line;
-     if (cs < lexer_first_final) {
-       size_t count = 0;
-       VALUE newstr_val;
-       char *newstr;
-       int newstr_count = 0;        
-       size_t len;
-       const char *buff;
-       if (lexer->last_newline != 0) {
-         len = LEN(last_newline, eof);
-         buff = PTR_TO(last_newline);
-       } else {
-         len = strlen(data);
-         buff = data;
-       }
- 
-       // Allocate as a ruby string so that it gets cleaned up by GC
-       newstr_val = rb_str_new(buff, len);
-       newstr = RSTRING_PTR(newstr_val);
- 
- 
-       for (count = 0; count < len; count++) {
-         if(buff[count] == 10) {
-           newstr[newstr_count] = '\0'; // terminate new string at first newline found
-           break;
-         } else {
-           if (buff[count] == '%') {
-             newstr[newstr_count++] = buff[count];
-             newstr[newstr_count] = buff[count];
-           } else {
-             newstr[newstr_count] = buff[count];
-           }
-         }
-         newstr_count++;
-       }
- 
-       line = lexer->line_number;
-       lexer_init(lexer); // Re-initialize so we can scan again with the same lexer
-       raise_lexer_error(newstr, line);
-     } else {
-       rb_funcall(listener, rb_intern("eof"), 0);
-     }
-   }
- 	break;
- #line 1137 "ext/gherkin_lexer_et/gherkin_lexer_et.c"
- 		}
- 	}
- 
- _again:
- 	if ( cs == 0 )
- 		goto _out;
- 	if ( ++p != pe )
- 		goto _resume;
- 	_test_eof: {}
- 	if ( p == eof )
- 	{
- 	const char *__acts = _lexer_actions + _lexer_eof_actions[cs];
- 	unsigned int __nacts = (unsigned int) *__acts++;
- 	while ( __nacts-- > 0 ) {
- 		switch ( *__acts++ ) {
- 	case 23:
- #line 207 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/et.c.rl"
- 	{
-     int line;
-     if (cs < lexer_first_final) {
-       size_t count = 0;
-       VALUE newstr_val;
-       char *newstr;
-       int newstr_count = 0;        
-       size_t len;
-       const char *buff;
-       if (lexer->last_newline != 0) {
-         len = LEN(last_newline, eof);
-         buff = PTR_TO(last_newline);
-       } else {
-         len = strlen(data);
-         buff = data;
-       }
- 
-       // Allocate as a ruby string so that it gets cleaned up by GC
-       newstr_val = rb_str_new(buff, len);
-       newstr = RSTRING_PTR(newstr_val);
- 
- 
-       for (count = 0; count < len; count++) {
-         if(buff[count] == 10) {
-           newstr[newstr_count] = '\0'; // terminate new string at first newline found
-           break;
-         } else {
-           if (buff[count] == '%') {
-             newstr[newstr_count++] = buff[count];
-             newstr[newstr_count] = buff[count];
-           } else {
-             newstr[newstr_count] = buff[count];
-           }
-         }
-         newstr_count++;
-       }
- 
-       line = lexer->line_number;
-       lexer_init(lexer); // Re-initialize so we can scan again with the same lexer
-       raise_lexer_error(newstr, line);
-     } else {
-       rb_funcall(listener, rb_intern("eof"), 0);
-     }
-   }
- 	break;
- #line 1200 "ext/gherkin_lexer_et/gherkin_lexer_et.c"
- 		}
- 	}
- 	}
- 
- 	_out: {}
- 	}
- 
- #line 426 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/et.c.rl"
- 
-     assert(p <= pe && "data overflow after parsing execute");
-     assert(lexer->content_start <= len && "content starts after data end");
-     assert(lexer->mark < len && "mark is after data end");
-     
-     // Reset lexer by re-initializing the whole thing
-     lexer_init(lexer);
- 
-     if (cs == lexer_error) {
-       rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails.");
-     } else {
-       return Qtrue;
-     }
-   }
- }
- 
- void Init_gherkin_lexer_et()
- {
-   mGherkin = rb_define_module("Gherkin");
-   mGherkinLexer = rb_define_module_under(mGherkin, "Lexer");
-   rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError"));
- 
-   mCLexer = rb_define_module_under(mGherkin, "CLexer");
-   cI18nLexer = rb_define_class_under(mCLexer, "Et", rb_cObject);
-   rb_define_alloc_func(cI18nLexer, CLexer_alloc);
-   rb_define_method(cI18nLexer, "initialize", CLexer_init, 1);
-   rb_define_method(cI18nLexer, "scan", CLexer_scan, 1);
- }
- 
 -#line 1 "ragel/i18n/et.c.rl"
 -#include <assert.h>
 -#include <ruby.h>
 -
 -#if defined(_WIN32)
 -#include <stddef.h>
 -#endif
 -
 -#ifdef HAVE_RUBY_RE_H
 -#include <ruby/re.h>
 -#else
 -#include <re.h>
 -#endif
 -
 -#ifdef HAVE_RUBY_ENCODING_H
 -#include <ruby/encoding.h>
 -#define ENCODED_STR_NEW(ptr, len) \
 -    rb_enc_str_new(ptr, len, rb_utf8_encoding())
 -#else
 -#define ENCODED_STR_NEW(ptr, len) \
 -    rb_str_new(ptr, len)
 -#endif
 -
 -#ifndef RSTRING_PTR
 -#define RSTRING_PTR(s) (RSTRING(s)->ptr)
 -#endif
 -
 -#ifndef RSTRING_LEN
 -#define RSTRING_LEN(s) (RSTRING(s)->len)
 -#endif
 -
 -#define DATA_GET(FROM, TYPE, NAME) \
 -  Data_Get_Struct(FROM, TYPE, NAME); \
 -  if (NAME == NULL) { \
 -    rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \
 -  }
 - 
 -typedef struct lexer_state {
 -  int content_len;
 -  int line_number;
 -  int current_line;
 -  int start_col;
 -  size_t mark;
 -  size_t keyword_start;
 -  size_t keyword_end;
 -  size_t next_keyword_start;
 -  size_t content_start;
 -  size_t content_end;
 -  size_t docstring_content_type_start;
 -  size_t docstring_content_type_end;
 -  size_t query_start;
 -  size_t last_newline;
 -  size_t final_newline;
 -} lexer_state;
 -
 -static VALUE mGherkin;
 -static VALUE mGherkinLexer;
 -static VALUE mCLexer;
 -static VALUE cI18nLexer;
 -static VALUE rb_eGherkinLexingError;
 -
 -#define LEN(AT, P) (P - data - lexer->AT)
 -#define MARK(M, P) (lexer->M = (P) - data)
 -#define PTR_TO(P) (data + lexer->P)
 -
 -#define STORE_KW_END_CON(EVENT) \
 -  store_multiline_kw_con(listener, # EVENT, \
 -    PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \
 -    PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \
 -    lexer->current_line, lexer->start_col); \
 -    if (lexer->content_end != 0) { \
 -      p = PTR_TO(content_end - 1); \
 -    } \
 -    lexer->content_end = 0
 -
 -#define STORE_ATTR(ATTR) \
 -    store_attr(listener, # ATTR, \
 -      PTR_TO(content_start), LEN(content_start, p), \
 -      lexer->line_number)
 -
 -
 -#line 254 "ragel/i18n/et.c.rl"
 -
 -
 -/** Data **/
 -
 -#line 89 "ext/gherkin_lexer_et/gherkin_lexer_et.c"
 -static const char _lexer_actions[] = {
 -	0, 1, 0, 1, 1, 1, 2, 1, 
 -	3, 1, 4, 1, 5, 1, 6, 1, 
 -	7, 1, 8, 1, 9, 1, 10, 1, 
 -	11, 1, 12, 1, 13, 1, 16, 1, 
 -	17, 1, 18, 1, 19, 1, 20, 1, 
 -	21, 1, 22, 1, 23, 2, 1, 18, 
 -	2, 4, 5, 2, 13, 0, 2, 14, 
 -	15, 2, 17, 0, 2, 17, 2, 2, 
 -	17, 16, 2, 17, 19, 2, 18, 6, 
 -	2, 18, 7, 2, 18, 8, 2, 18, 
 -	9, 2, 18, 10, 2, 18, 16, 2, 
 -	20, 21, 2, 22, 0, 2, 22, 2, 
 -	2, 22, 16, 2, 22, 19, 3, 3, 
 -	14, 15, 3, 5, 14, 15, 3, 11, 
 -	14, 15, 3, 12, 14, 15, 3, 13, 
 -	14, 15, 3, 14, 15, 18, 3, 17, 
 -	0, 11, 3, 17, 14, 15, 4, 1, 
 -	14, 15, 18, 4, 4, 5, 14, 15, 
 -	4, 17, 0, 14, 15, 5, 17, 0, 
 -	11, 14, 15
 -};
 -
 -static const short _lexer_key_offsets[] = {
 -	0, 0, 18, 19, 20, 37, 38, 39, 
 -	41, 43, 48, 53, 58, 63, 67, 71, 
 -	73, 74, 75, 76, 77, 78, 79, 80, 
 -	81, 82, 83, 84, 85, 86, 87, 88, 
 -	89, 91, 93, 98, 105, 110, 111, 112, 
 -	113, 114, 115, 116, 117, 119, 120, 121, 
 -	122, 123, 124, 125, 126, 127, 128, 135, 
 -	137, 139, 141, 143, 145, 147, 164, 165, 
 -	166, 168, 169, 170, 171, 172, 173, 174, 
 -	175, 176, 188, 190, 192, 194, 196, 198, 
 -	200, 202, 204, 206, 208, 210, 212, 214, 
 -	216, 218, 220, 222, 224, 226, 228, 230, 
 -	232, 234, 236, 238, 240, 242, 244, 246, 
 -	248, 250, 252, 254, 256, 258, 260, 262, 
 -	264, 266, 268, 270, 272, 274, 276, 278, 
 -	279, 280, 281, 282, 283, 284, 285, 286, 
 -	287, 288, 289, 290, 291, 292, 293, 294, 
 -	295, 308, 310, 312, 314, 316, 318, 320, 
 -	322, 324, 326, 328, 330, 332, 334, 336, 
 -	338, 340, 342, 344, 346, 348, 350, 352, 
 -	354, 356, 358, 361, 363, 365, 367, 369, 
 -	371, 373, 376, 378, 380, 382, 384, 386, 
 -	388, 390, 392, 394, 396, 398, 399, 400, 
 -	401, 402, 403, 404, 405, 406, 407, 408, 
 -	409, 410, 411, 426, 428, 430, 432, 434, 
 -	436, 438, 440, 442, 444, 446, 448, 450, 
 -	452, 454, 456, 458, 460, 462, 464, 466, 
 -	468, 470, 472, 474, 476, 479, 481, 483, 
 -	485, 487, 489, 491, 493, 495, 497, 499, 
 -	501, 503, 505, 507, 509, 511, 513, 515, 
 -	517, 519, 522, 524, 526, 528, 530, 532, 
 -	533, 534, 535, 536, 537, 538, 539, 553, 
 -	555, 557, 559, 561, 563, 565, 567, 569, 
 -	571, 573, 575, 577, 579, 581, 583, 585, 
 -	587, 589, 591, 593, 595, 597, 599, 601, 
 -	603, 606, 608, 610, 612, 614, 616, 618, 
 -	620, 622, 624, 626, 628, 630, 632, 634, 
 -	636, 638, 640, 642, 644, 646, 649, 651, 
 -	655, 661, 664, 666, 672, 689
 -};
 -
 -static const char _lexer_trans_keys[] = {
 -	-17, 10, 32, 34, 35, 37, 42, 64, 
 -	69, 74, 75, 79, 82, 83, 84, 124, 
 -	9, 13, -69, -65, 10, 32, 34, 35, 
 -	37, 42, 64, 69, 74, 75, 79, 82, 
 -	83, 84, 124, 9, 13, 34, 34, 10, 
 -	13, 10, 13, 10, 32, 34, 9, 13, 
 -	10, 32, 34, 9, 13, 10, 32, 34, 
 -	9, 13, 10, 32, 34, 9, 13, 10, 
 -	32, 9, 13, 10, 32, 9, 13, 10, 
 -	13, 10, 95, 70, 69, 65, 84, 85, 
 -	82, 69, 95, 69, 78, 68, 95, 37, 
 -	32, 10, 13, 10, 13, 13, 32, 64, 
 -	9, 10, 9, 10, 13, 32, 64, 11, 
 -	12, 10, 32, 64, 9, 13, 101, 108, 
 -	100, 97, 100, 101, 115, 97, 117, 104, 
 -	116, 117, 109, 105, 100, 58, 10, 10, 
 -	10, 32, 35, 79, 124, 9, 13, 10, 
 -	109, 10, 97, 10, 100, 10, 117, 10, 
 -	115, 10, 58, 10, 32, 34, 35, 37, 
 -	42, 64, 69, 74, 75, 79, 82, 83, 
 -	84, 124, 9, 13, 117, 105, 32, 100, 
 -	109, 97, 100, 117, 115, 58, 10, 10, 
 -	10, 32, 35, 37, 64, 74, 79, 82, 
 -	83, 84, 9, 13, 10, 95, 10, 70, 
 -	10, 69, 10, 65, 10, 84, 10, 85, 
 -	10, 82, 10, 69, 10, 95, 10, 69, 
 -	10, 78, 10, 68, 10, 95, 10, 37, 
 -	10, 117, 10, 104, 10, 116, 10, 117, 
 -	10, 109, 10, 105, 10, 100, 10, 58, 
 -	10, 109, 10, 97, 10, 100, 10, 117, 
 -	10, 115, 10, 97, 10, 97, 10, 109, 
 -	10, 115, 10, 116, 10, 115, 10, 101, 
 -	10, 110, 10, 97, 10, 97, 10, 114, 
 -	10, 105, 10, 117, 10, 109, 10, 97, 
 -	10, 117, 10, 115, 10, 116, 97, 97, 
 -	109, 115, 116, 115, 101, 110, 97, 97, 
 -	114, 105, 117, 109, 58, 10, 10, 10, 
 -	32, 35, 37, 42, 64, 69, 74, 75, 
 -	79, 83, 9, 13, 10, 95, 10, 70, 
 -	10, 69, 10, 65, 10, 84, 10, 85, 
 -	10, 82, 10, 69, 10, 95, 10, 69, 
 -	10, 78, 10, 68, 10, 95, 10, 37, 
 -	10, 32, 10, 101, 10, 108, 10, 100, 
 -	10, 97, 10, 100, 10, 101, 10, 115, 
 -	10, 97, 10, 117, 10, 105, 10, 32, 
 -	100, 10, 109, 10, 97, 10, 100, 10, 
 -	117, 10, 115, 10, 58, 10, 105, 116, 
 -	10, 105, 10, 115, 10, 101, 10, 110, 
 -	10, 97, 10, 97, 10, 114, 10, 105, 
 -	10, 117, 10, 109, 105, 116, 105, 115, 
 -	101, 110, 97, 97, 114, 105, 117, 109, 
 -	58, 10, 10, 10, 32, 35, 37, 42, 
 -	64, 69, 74, 75, 79, 82, 83, 84, 
 -	9, 13, 10, 95, 10, 70, 10, 69, 
 -	10, 65, 10, 84, 10, 85, 10, 82, 
 -	10, 69, 10, 95, 10, 69, 10, 78, 
 -	10, 68, 10, 95, 10, 37, 10, 32, 
 -	10, 101, 10, 108, 10, 100, 10, 97, 
 -	10, 100, 10, 101, 10, 115, 10, 97, 
 -	10, 117, 10, 105, 10, 32, 100, 10, 
 -	109, 10, 97, 10, 100, 10, 117, 10, 
 -	115, 10, 58, 10, 97, 10, 97, 10, 
 -	109, 10, 115, 10, 116, 10, 115, 10, 
 -	101, 10, 110, 10, 97, 10, 97, 10, 
 -	114, 10, 105, 10, 117, 10, 109, 10, 
 -	105, 116, 10, 105, 10, 97, 10, 117, 
 -	10, 115, 10, 116, 97, 117, 115, 116, 
 -	58, 10, 10, 10, 32, 35, 37, 42, 
 -	64, 69, 74, 75, 79, 82, 83, 9, 
 -	13, 10, 95, 10, 70, 10, 69, 10, 
 -	65, 10, 84, 10, 85, 10, 82, 10, 
 -	69, 10, 95, 10, 69, 10, 78, 10, 
 -	68, 10, 95, 10, 37, 10, 32, 10, 
 -	101, 10, 108, 10, 100, 10, 97, 10, 
 -	100, 10, 101, 10, 115, 10, 97, 10, 
 -	117, 10, 105, 10, 32, 100, 10, 109, 
 -	10, 97, 10, 100, 10, 117, 10, 115, 
 -	10, 58, 10, 97, 10, 97, 10, 109, 
 -	10, 115, 10, 116, 10, 115, 10, 101, 
 -	10, 110, 10, 97, 10, 97, 10, 114, 
 -	10, 105, 10, 117, 10, 109, 10, 105, 
 -	116, 10, 105, 32, 124, 9, 13, 10, 
 -	32, 92, 124, 9, 13, 10, 92, 124, 
 -	10, 92, 10, 32, 92, 124, 9, 13, 
 -	10, 32, 34, 35, 37, 42, 64, 69, 
 -	74, 75, 79, 82, 83, 84, 124, 9, 
 -	13, 0
 -};
 -
 -static const char _lexer_single_lengths[] = {
 -	0, 16, 1, 1, 15, 1, 1, 2, 
 -	2, 3, 3, 3, 3, 2, 2, 2, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	2, 2, 3, 5, 3, 1, 1, 1, 
 -	1, 1, 1, 1, 2, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 5, 2, 
 -	2, 2, 2, 2, 2, 15, 1, 1, 
 -	2, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 10, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	11, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 3, 2, 2, 2, 2, 2, 
 -	2, 3, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 13, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 3, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 3, 2, 2, 2, 2, 2, 1, 
 -	1, 1, 1, 1, 1, 1, 12, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	3, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 3, 2, 2, 
 -	4, 3, 2, 4, 15, 0
 -};
 -
 -static const char _lexer_range_lengths[] = {
 -	0, 1, 0, 0, 1, 0, 0, 0, 
 -	0, 1, 1, 1, 1, 1, 1, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 1, 1, 1, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 1, 0, 
 -	0, 0, 0, 0, 0, 1, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 1, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	1, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 1, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 1, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 1, 
 -	1, 0, 0, 1, 1, 0
 -};
 -
 -static const short _lexer_index_offsets[] = {
 -	0, 0, 18, 20, 22, 39, 41, 43, 
 -	46, 49, 54, 59, 64, 69, 73, 77, 
 -	80, 82, 84, 86, 88, 90, 92, 94, 
 -	96, 98, 100, 102, 104, 106, 108, 110, 
 -	112, 115, 118, 123, 130, 135, 137, 139, 
 -	141, 143, 145, 147, 149, 152, 154, 156, 
 -	158, 160, 162, 164, 166, 168, 170, 177, 
 -	180, 183, 186, 189, 192, 195, 212, 214, 
 -	216, 219, 221, 223, 225, 227, 229, 231, 
 -	233, 235, 247, 250, 253, 256, 259, 262, 
 -	265, 268, 271, 274, 277, 280, 283, 286, 
 -	289, 292, 295, 298, 301, 304, 307, 310, 
 -	313, 316, 319, 322, 325, 328, 331, 334, 
 -	337, 340, 343, 346, 349, 352, 355, 358, 
 -	361, 364, 367, 370, 373, 376, 379, 382, 
 -	384, 386, 388, 390, 392, 394, 396, 398, 
 -	400, 402, 404, 406, 408, 410, 412, 414, 
 -	416, 429, 432, 435, 438, 441, 444, 447, 
 -	450, 453, 456, 459, 462, 465, 468, 471, 
 -	474, 477, 480, 483, 486, 489, 492, 495, 
 -	498, 501, 504, 508, 511, 514, 517, 520, 
 -	523, 526, 530, 533, 536, 539, 542, 545, 
 -	548, 551, 554, 557, 560, 563, 565, 567, 
 -	569, 571, 573, 575, 577, 579, 581, 583, 
 -	585, 587, 589, 604, 607, 610, 613, 616, 
 -	619, 622, 625, 628, 631, 634, 637, 640, 
 -	643, 646, 649, 652, 655, 658, 661, 664, 
 -	667, 670, 673, 676, 679, 683, 686, 689, 
 -	692, 695, 698, 701, 704, 707, 710, 713, 
 -	716, 719, 722, 725, 728, 731, 734, 737, 
 -	740, 743, 747, 750, 753, 756, 759, 762, 
 -	764, 766, 768, 770, 772, 774, 776, 790, 
 -	793, 796, 799, 802, 805, 808, 811, 814, 
 -	817, 820, 823, 826, 829, 832, 835, 838, 
 -	841, 844, 847, 850, 853, 856, 859, 862, 
 -	865, 869, 872, 875, 878, 881, 884, 887, 
 -	890, 893, 896, 899, 902, 905, 908, 911, 
 -	914, 917, 920, 923, 926, 929, 933, 936, 
 -	940, 946, 950, 953, 959, 976
 -};
 -
 -static const short _lexer_trans_targs[] = {
 -	2, 4, 4, 5, 15, 17, 31, 34, 
 -	37, 44, 62, 65, 119, 180, 247, 303, 
 -	4, 0, 3, 0, 4, 0, 4, 4, 
 -	5, 15, 17, 31, 34, 37, 44, 62, 
 -	65, 119, 180, 247, 303, 4, 0, 6, 
 -	0, 7, 0, 9, 8, 8, 9, 8, 
 -	8, 10, 10, 11, 10, 10, 10, 10, 
 -	11, 10, 10, 10, 10, 12, 10, 10, 
 -	10, 10, 13, 10, 10, 4, 14, 14, 
 -	0, 4, 14, 14, 0, 4, 16, 15, 
 -	4, 0, 18, 0, 19, 0, 20, 0, 
 -	21, 0, 22, 0, 23, 0, 24, 0, 
 -	25, 0, 26, 0, 27, 0, 28, 0, 
 -	29, 0, 30, 0, 309, 0, 32, 0, 
 -	4, 16, 33, 4, 16, 33, 0, 0, 
 -	0, 0, 35, 36, 4, 36, 36, 34, 
 -	35, 35, 4, 36, 34, 36, 0, 38, 
 -	0, 39, 0, 40, 0, 41, 0, 42, 
 -	0, 43, 0, 31, 0, 31, 45, 0, 
 -	46, 0, 47, 0, 48, 0, 49, 0, 
 -	50, 0, 51, 0, 52, 0, 54, 53, 
 -	54, 53, 54, 54, 4, 55, 4, 54, 
 -	53, 54, 56, 53, 54, 57, 53, 54, 
 -	58, 53, 54, 59, 53, 54, 60, 53, 
 -	54, 61, 53, 4, 4, 5, 15, 17, 
 -	31, 34, 37, 44, 62, 65, 119, 180, 
 -	247, 303, 4, 0, 63, 0, 64, 0, 
 -	32, 31, 0, 66, 0, 67, 0, 68, 
 -	0, 69, 0, 70, 0, 71, 0, 73, 
 -	72, 73, 72, 73, 73, 4, 74, 4, 
 -	88, 96, 101, 105, 115, 73, 72, 73, 
 -	75, 72, 73, 76, 72, 73, 77, 72, 
 -	73, 78, 72, 73, 79, 72, 73, 80, 
 -	72, 73, 81, 72, 73, 82, 72, 73, 
 -	83, 72, 73, 84, 72, 73, 85, 72, 
 -	73, 86, 72, 73, 87, 72, 73, 4, 
 -	72, 73, 89, 72, 73, 90, 72, 73, 
 -	91, 72, 73, 92, 72, 73, 93, 72, 
 -	73, 94, 72, 73, 95, 72, 73, 61, 
 -	72, 73, 97, 72, 73, 98, 72, 73, 
 -	99, 72, 73, 100, 72, 73, 95, 72, 
 -	73, 102, 72, 73, 103, 72, 73, 104, 
 -	72, 73, 105, 72, 73, 106, 72, 73, 
 -	107, 72, 73, 108, 72, 73, 109, 72, 
 -	73, 110, 72, 73, 111, 72, 73, 112, 
 -	72, 73, 113, 72, 73, 114, 72, 73, 
 -	95, 72, 73, 116, 72, 73, 117, 72, 
 -	73, 118, 72, 73, 95, 72, 120, 0, 
 -	121, 0, 122, 0, 123, 0, 124, 0, 
 -	125, 0, 126, 0, 127, 0, 128, 0, 
 -	129, 0, 130, 0, 131, 0, 132, 0, 
 -	133, 0, 134, 0, 136, 135, 136, 135, 
 -	136, 136, 4, 137, 151, 4, 152, 159, 
 -	160, 163, 169, 136, 135, 136, 138, 135, 
 -	136, 139, 135, 136, 140, 135, 136, 141, 
 -	135, 136, 142, 135, 136, 143, 135, 136, 
 -	144, 135, 136, 145, 135, 136, 146, 135, 
 -	136, 147, 135, 136, 148, 135, 136, 149, 
 -	135, 136, 150, 135, 136, 4, 135, 136, 
 -	61, 135, 136, 153, 135, 136, 154, 135, 
 -	136, 155, 135, 136, 156, 135, 136, 157, 
 -	135, 136, 158, 135, 136, 151, 135, 136, 
 -	151, 135, 136, 161, 135, 136, 162, 135, 
 -	136, 61, 151, 135, 136, 164, 135, 136, 
 -	165, 135, 136, 166, 135, 136, 167, 135, 
 -	136, 168, 135, 136, 61, 135, 136, 170, 
 -	171, 135, 136, 158, 135, 136, 172, 135, 
 -	136, 173, 135, 136, 174, 135, 136, 175, 
 -	135, 136, 176, 135, 136, 177, 135, 136, 
 -	178, 135, 136, 179, 135, 136, 168, 135, 
 -	181, 182, 0, 43, 0, 183, 0, 184, 
 -	0, 185, 0, 186, 0, 187, 0, 188, 
 -	0, 189, 0, 190, 0, 191, 0, 192, 
 -	0, 194, 193, 194, 193, 194, 194, 4, 
 -	195, 209, 4, 210, 217, 218, 221, 227, 
 -	241, 243, 194, 193, 194, 196, 193, 194, 
 -	197, 193, 194, 198, 193, 194, 199, 193, 
 -	194, 200, 193, 194, 201, 193, 194, 202, 
 -	193, 194, 203, 193, 194, 204, 193, 194, 
 -	205, 193, 194, 206, 193, 194, 207, 193, 
 -	194, 208, 193, 194, 4, 193, 194, 61, 
 -	193, 194, 211, 193, 194, 212, 193, 194, 
 -	213, 193, 194, 214, 193, 194, 215, 193, 
 -	194, 216, 193, 194, 209, 193, 194, 209, 
 -	193, 194, 219, 193, 194, 220, 193, 194, 
 -	61, 209, 193, 194, 222, 193, 194, 223, 
 -	193, 194, 224, 193, 194, 225, 193, 194, 
 -	226, 193, 194, 61, 193, 194, 228, 193, 
 -	194, 229, 193, 194, 230, 193, 194, 231, 
 -	193, 194, 232, 193, 194, 233, 193, 194, 
 -	234, 193, 194, 235, 193, 194, 236, 193, 
 -	194, 237, 193, 194, 238, 193, 194, 239, 
 -	193, 194, 240, 193, 194, 226, 193, 194, 
 -	242, 232, 193, 194, 216, 193, 194, 244, 
 -	193, 194, 245, 193, 194, 246, 193, 194, 
 -	226, 193, 248, 0, 249, 0, 250, 0, 
 -	251, 0, 252, 0, 254, 253, 254, 253, 
 -	254, 254, 4, 255, 269, 4, 270, 277, 
 -	278, 281, 287, 301, 254, 253, 254, 256, 
 -	253, 254, 257, 253, 254, 258, 253, 254, 
 -	259, 253, 254, 260, 253, 254, 261, 253, 
 -	254, 262, 253, 254, 263, 253, 254, 264, 
 -	253, 254, 265, 253, 254, 266, 253, 254, 
 -	267, 253, 254, 268, 253, 254, 4, 253, 
 -	254, 61, 253, 254, 271, 253, 254, 272, 
 -	253, 254, 273, 253, 254, 274, 253, 254, 
 -	275, 253, 254, 276, 253, 254, 269, 253, 
 -	254, 269, 253, 254, 279, 253, 254, 280, 
 -	253, 254, 61, 269, 253, 254, 282, 253, 
 -	254, 283, 253, 254, 284, 253, 254, 285, 
 -	253, 254, 286, 253, 254, 61, 253, 254, 
 -	288, 253, 254, 289, 253, 254, 290, 253, 
 -	254, 291, 253, 254, 292, 253, 254, 293, 
 -	253, 254, 294, 253, 254, 295, 253, 254, 
 -	296, 253, 254, 297, 253, 254, 298, 253, 
 -	254, 299, 253, 254, 300, 253, 254, 286, 
 -	253, 254, 302, 292, 253, 254, 276, 253, 
 -	303, 304, 303, 0, 308, 307, 306, 304, 
 -	307, 305, 0, 306, 304, 305, 0, 306, 
 -	305, 308, 307, 306, 304, 307, 305, 308, 
 -	308, 5, 15, 17, 31, 34, 37, 44, 
 -	62, 65, 119, 180, 247, 303, 308, 0, 
 -	0, 0
 -};
 -
 -static const unsigned char _lexer_trans_actions[] = {
 -	0, 54, 0, 5, 1, 0, 29, 1, 
 -	29, 29, 29, 29, 29, 29, 29, 35, 
 -	0, 43, 0, 43, 0, 43, 54, 0, 
 -	5, 1, 0, 29, 1, 29, 29, 29, 
 -	29, 29, 29, 29, 35, 0, 43, 0, 
 -	43, 0, 43, 139, 48, 9, 106, 11, 
 -	0, 134, 45, 45, 45, 3, 122, 33, 
 -	33, 33, 0, 122, 33, 33, 33, 0, 
 -	122, 33, 0, 33, 0, 102, 7, 7, 
 -	43, 54, 0, 0, 43, 114, 25, 0, 
 -	54, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	149, 126, 57, 110, 23, 0, 43, 43, 
 -	43, 43, 0, 27, 118, 27, 27, 51, 
 -	27, 0, 54, 0, 1, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 144, 57, 
 -	54, 0, 54, 0, 81, 84, 81, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 21, 0, 130, 31, 60, 57, 31, 
 -	63, 57, 63, 63, 63, 63, 63, 63, 
 -	63, 66, 31, 43, 0, 43, 0, 43, 
 -	0, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 144, 
 -	57, 54, 0, 54, 0, 69, 33, 69, 
 -	84, 84, 84, 84, 84, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 13, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 13, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 144, 57, 54, 0, 
 -	54, 0, 78, 33, 84, 78, 84, 84, 
 -	84, 84, 84, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 19, 0, 54, 
 -	19, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 19, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 19, 0, 54, 0, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	0, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 144, 57, 54, 0, 54, 0, 75, 
 -	33, 84, 75, 84, 84, 84, 84, 84, 
 -	84, 84, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 17, 0, 54, 17, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	17, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 17, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 144, 57, 54, 0, 
 -	54, 0, 72, 33, 84, 72, 84, 84, 
 -	84, 84, 84, 84, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 15, 0, 
 -	54, 15, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 15, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 15, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 0, 54, 0, 0, 
 -	0, 0, 0, 43, 54, 37, 37, 87, 
 -	37, 37, 43, 0, 39, 0, 43, 0, 
 -	0, 54, 0, 0, 39, 0, 0, 54, 
 -	0, 93, 90, 41, 96, 90, 96, 96, 
 -	96, 96, 96, 96, 96, 99, 0, 43, 
 -	0, 0
 -};
 -
 -static const unsigned char _lexer_eof_actions[] = {
 -	0, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43
 -};
 -
 -static const int lexer_start = 1;
 -static const int lexer_first_final = 309;
 -static const int lexer_error = 0;
 -
 -static const int lexer_en_main = 1;
 -
 -
 -#line 258 "ragel/i18n/et.c.rl"
 -
 -static VALUE 
 -unindent(VALUE con, int start_col)
 -{
 -  VALUE re;
 -  /* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */
 -  char pat[32]; 
 -  snprintf(pat, 32, "^[\t ]{0,%d}", start_col); 
 -  re = rb_reg_regcomp(rb_str_new2(pat));
 -  rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2(""));
 -
 -  return Qnil;
 -
 -}
 -
 -static void 
 -store_kw_con(VALUE listener, const char * event_name, 
 -             const char * keyword_at, size_t keyword_length, 
 -             const char * at,         size_t length, 
 -             int current_line)
 -{
 -  VALUE con = Qnil, kw = Qnil;
 -  kw = ENCODED_STR_NEW(keyword_at, keyword_length);
 -  con = ENCODED_STR_NEW(at, length);
 -  rb_funcall(con, rb_intern("strip!"), 0);
 -  rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); 
 -}
 -
 -static void
 -store_multiline_kw_con(VALUE listener, const char * event_name,
 -                      const char * keyword_at, size_t keyword_length,
 -                      const char * at,         size_t length,
 -                      int current_line, int start_col)
 -{
 -  VALUE split;
 -  VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil;
 -
 -  kw = ENCODED_STR_NEW(keyword_at, keyword_length);
 -  con = ENCODED_STR_NEW(at, length);
 -
 -  unindent(con, start_col);
 -  
 -  split = rb_str_split(con, "\n");
 -
 -  name = rb_funcall(split, rb_intern("shift"), 0);
 -  desc = rb_ary_join(split, rb_str_new2( "\n" ));
 -
 -  if( name == Qnil ) 
 -  {
 -    name = rb_str_new2("");
 -  }
 -  if( rb_funcall(desc, rb_intern("size"), 0) == 0) 
 -  {
 -    desc = rb_str_new2("");
 -  }
 -  rb_funcall(name, rb_intern("strip!"), 0);
 -  rb_funcall(desc, rb_intern("rstrip!"), 0);
 -  rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); 
 -}
 -
 -static void 
 -store_attr(VALUE listener, const char * attr_type,
 -           const char * at, size_t length, 
 -           int line)
 -{
 -  VALUE val = ENCODED_STR_NEW(at, length);
 -  rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line));
 -}
 -static void 
 -store_docstring_content(VALUE listener, 
 -          int start_col, 
 -          const char *type_at, size_t type_length,
 -          const char *at, size_t length, 
 -          int current_line)
 -{
 -  VALUE re2;
 -  VALUE unescape_escaped_quotes;
 -  VALUE con = ENCODED_STR_NEW(at, length);
 -  VALUE con_type = ENCODED_STR_NEW(type_at, type_length);
 -
 -  unindent(con, start_col);
 -
 -  re2 = rb_reg_regcomp(rb_str_new2("\r\\Z"));
 -  unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\""));
 -  rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2(""));
 -  rb_funcall(con_type, rb_intern("strip!"), 0);
 -  rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\""));
 -  rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line));
 -}
 -static void 
 -raise_lexer_error(const char * at, int line)
 -{ 
 -  rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at);
 -}
 -
 -static void lexer_init(lexer_state *lexer) {
 -  lexer->content_start = 0;
 -  lexer->content_end = 0;
 -  lexer->content_len = 0;
 -  lexer->docstring_content_type_start = 0;
 -  lexer->docstring_content_type_end = 0;
 -  lexer->mark = 0;
 -  lexer->keyword_start = 0;
 -  lexer->keyword_end = 0;
 -  lexer->next_keyword_start = 0;
 -  lexer->line_number = 1;
 -  lexer->last_newline = 0;
 -  lexer->final_newline = 0;
 -  lexer->start_col = 0;
 -}
 -
 -static VALUE CLexer_alloc(VALUE klass)
 -{
 -  VALUE obj;
 -  lexer_state *lxr = ALLOC(lexer_state);
 -  lexer_init(lxr);
 -
 -  obj = Data_Wrap_Struct(klass, NULL, -1, lxr);
 -
 -  return obj;
 -}
 -
 -static VALUE CLexer_init(VALUE self, VALUE listener)
 -{
 -  lexer_state *lxr; 
 -  rb_iv_set(self, "@listener", listener);
 -  
 -  lxr = NULL;
 -  DATA_GET(self, lexer_state, lxr);
 -  lexer_init(lxr);
 -  
 -  return self;
 -}
 -
 -static VALUE CLexer_scan(VALUE self, VALUE input)
 -{
 -  VALUE input_copy;
 -  char *data;
 -  size_t len;
 -  VALUE listener = rb_iv_get(self, "@listener");
 -
 -  lexer_state *lexer;
 -  lexer = NULL;
 -  DATA_GET(self, lexer_state, lexer);
 -
 -  input_copy = rb_str_dup(input);
 -
 -  rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%"));
 -  data = RSTRING_PTR(input_copy);
 -  len = RSTRING_LEN(input_copy);
 -  
 -  if (len == 0) { 
 -    rb_raise(rb_eGherkinLexingError, "No content to lex.");
 -  } else {
 -
 -    const char *p, *pe, *eof;
 -    int cs = 0;
 -    
 -    VALUE current_row = Qnil;
 -
 -    p = data;
 -    pe = data + len;
 -    eof = pe;
 -    
 -    assert(*pe == '\0' && "pointer does not end on NULL");
 -    
 -    
 -#line 840 "ext/gherkin_lexer_et/gherkin_lexer_et.c"
 -	{
 -	cs = lexer_start;
 -	}
 -
 -#line 425 "ragel/i18n/et.c.rl"
 -    
 -#line 847 "ext/gherkin_lexer_et/gherkin_lexer_et.c"
 -	{
 -	int _klen;
 -	unsigned int _trans;
 -	const char *_acts;
 -	unsigned int _nacts;
 -	const char *_keys;
 -
 -	if ( p == pe )
 -		goto _test_eof;
 -	if ( cs == 0 )
 -		goto _out;
 -_resume:
 -	_keys = _lexer_trans_keys + _lexer_key_offsets[cs];
 -	_trans = _lexer_index_offsets[cs];
 -
 -	_klen = _lexer_single_lengths[cs];
 -	if ( _klen > 0 ) {
 -		const char *_lower = _keys;
 -		const char *_mid;
 -		const char *_upper = _keys + _klen - 1;
 -		while (1) {
 -			if ( _upper < _lower )
 -				break;
 -
 -			_mid = _lower + ((_upper-_lower) >> 1);
 -			if ( (*p) < *_mid )
 -				_upper = _mid - 1;
 -			else if ( (*p) > *_mid )
 -				_lower = _mid + 1;
 -			else {
 -				_trans += (unsigned int)(_mid - _keys);
 -				goto _match;
 -			}
 -		}
 -		_keys += _klen;
 -		_trans += _klen;
 -	}
 -
 -	_klen = _lexer_range_lengths[cs];
 -	if ( _klen > 0 ) {
 -		const char *_lower = _keys;
 -		const char *_mid;
 -		const char *_upper = _keys + (_klen<<1) - 2;
 -		while (1) {
 -			if ( _upper < _lower )
 -				break;
 -
 -			_mid = _lower + (((_upper-_lower) >> 1) & ~1);
 -			if ( (*p) < _mid[0] )
 -				_upper = _mid - 2;
 -			else if ( (*p) > _mid[1] )
 -				_lower = _mid + 2;
 -			else {
 -				_trans += (unsigned int)((_mid - _keys)>>1);
 -				goto _match;
 -			}
 -		}
 -		_trans += _klen;
 -	}
 -
 -_match:
 -	cs = _lexer_trans_targs[_trans];
 -
 -	if ( _lexer_trans_actions[_trans] == 0 )
 -		goto _again;
 -
 -	_acts = _lexer_actions + _lexer_trans_actions[_trans];
 -	_nacts = (unsigned int) *_acts++;
 -	while ( _nacts-- > 0 )
 -	{
 -		switch ( *_acts++ )
 -		{
 -	case 0:
 -#line 83 "ragel/i18n/et.c.rl"
 -	{
 -		MARK(content_start, p);
 -    lexer->current_line = lexer->line_number;
 -    lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2;
 -  }
 -	break;
 -	case 1:
 -#line 89 "ragel/i18n/et.c.rl"
 -	{
 -    MARK(content_start, p);
 -  }
 -	break;
 -	case 2:
 -#line 93 "ragel/i18n/et.c.rl"
 -	{
 -    lexer->current_line = lexer->line_number;
 -    lexer->start_col = p - data - lexer->last_newline;
 -  }
 -	break;
 -	case 3:
 -#line 98 "ragel/i18n/et.c.rl"
 -	{
 -    int len = LEN(content_start, PTR_TO(final_newline));
 -    int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end));
 -
 -    if (len < 0) len = 0;
 -    if (type_len < 0) len = 0;
 -
 -    store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line);
 -  }
 -	break;
 -	case 4:
 -#line 108 "ragel/i18n/et.c.rl"
 -	{ 
 -    MARK(docstring_content_type_start, p);
 -  }
 -	break;
 -	case 5:
 -#line 112 "ragel/i18n/et.c.rl"
 -	{ 
 -    MARK(docstring_content_type_end, p);
 -  }
 -	break;
 -	case 6:
 -#line 116 "ragel/i18n/et.c.rl"
 -	{
 -    STORE_KW_END_CON(feature);
 -  }
 -	break;
 -	case 7:
 -#line 120 "ragel/i18n/et.c.rl"
 -	{
 -    STORE_KW_END_CON(background);
 -  }
 -	break;
 -	case 8:
 -#line 124 "ragel/i18n/et.c.rl"
 -	{
 -    STORE_KW_END_CON(scenario);
 -  }
 -	break;
 -	case 9:
 -#line 128 "ragel/i18n/et.c.rl"
 -	{
 -    STORE_KW_END_CON(scenario_outline);
 -  }
 -	break;
 -	case 10:
 -#line 132 "ragel/i18n/et.c.rl"
 -	{
 -    STORE_KW_END_CON(examples);
 -  }
 -	break;
 -	case 11:
 -#line 136 "ragel/i18n/et.c.rl"
 -	{
 -    store_kw_con(listener, "step",
 -      PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
 -      PTR_TO(content_start), LEN(content_start, p), 
 -      lexer->current_line);
 -  }
 -	break;
 -	case 12:
 -#line 143 "ragel/i18n/et.c.rl"
 -	{
 -    STORE_ATTR(comment);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 13:
 -#line 148 "ragel/i18n/et.c.rl"
 -	{
 -    STORE_ATTR(tag);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 14:
 -#line 153 "ragel/i18n/et.c.rl"
 -	{
 -    lexer->line_number += 1;
 -    MARK(final_newline, p);
 -  }
 -	break;
 -	case 15:
 -#line 158 "ragel/i18n/et.c.rl"
 -	{
 -    MARK(last_newline, p + 1);
 -  }
 -	break;
 -	case 16:
 -#line 162 "ragel/i18n/et.c.rl"
 -	{
 -    if (lexer->mark == 0) {
 -      MARK(mark, p);
 -    }
 -  }
 -	break;
 -	case 17:
 -#line 168 "ragel/i18n/et.c.rl"
 -	{
 -    MARK(keyword_end, p);
 -    MARK(keyword_start, PTR_TO(mark));
 -    MARK(content_start, p + 1);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 18:
 -#line 175 "ragel/i18n/et.c.rl"
 -	{
 -    MARK(content_end, p);
 -  }
 -	break;
 -	case 19:
 -#line 179 "ragel/i18n/et.c.rl"
 -	{
 -    p = p - 1;
 -    lexer->current_line = lexer->line_number;
 -    current_row = rb_ary_new();
 -  }
 -	break;
 -	case 20:
 -#line 185 "ragel/i18n/et.c.rl"
 -	{
 -		MARK(content_start, p);
 -  }
 -	break;
 -	case 21:
 -#line 189 "ragel/i18n/et.c.rl"
 -	{
 -    VALUE re_pipe, re_newline, re_backslash;
 -    VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
 -    rb_funcall(con, rb_intern("strip!"), 0);
 -    re_pipe      = rb_reg_regcomp(rb_str_new2("\\\\\\|"));
 -    re_newline   = rb_reg_regcomp(rb_str_new2("\\\\n"));
 -    re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_pipe,      rb_str_new2("|"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_newline,   rb_str_new2("\n"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\"));
 -
 -    rb_ary_push(current_row, con);
 -  }
 -	break;
 -	case 22:
 -#line 203 "ragel/i18n/et.c.rl"
 -	{
 -    rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
 -  }
 -	break;
 -	case 23:
 -#line 207 "ragel/i18n/et.c.rl"
 -	{
 -    int line;
 -    if (cs < lexer_first_final) {
 -      size_t count = 0;
 -      VALUE newstr_val;
 -      char *newstr;
 -      int newstr_count = 0;        
 -      size_t len;
 -      const char *buff;
 -      if (lexer->last_newline != 0) {
 -        len = LEN(last_newline, eof);
 -        buff = PTR_TO(last_newline);
 -      } else {
 -        len = strlen(data);
 -        buff = data;
 -      }
 -
 -      /* Allocate as a ruby string so that it gets cleaned up by GC */
 -      newstr_val = rb_str_new(buff, len);
 -      newstr = RSTRING_PTR(newstr_val);
 -
 -
 -      for (count = 0; count < len; count++) {
 -        if(buff[count] == 10) {
 -          newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
 -          break;
 -        } else {
 -          if (buff[count] == '%') {
 -            newstr[newstr_count++] = buff[count];
 -            newstr[newstr_count] = buff[count];
 -          } else {
 -            newstr[newstr_count] = buff[count];
 -          }
 -        }
 -        newstr_count++;
 -      }
 -
 -      line = lexer->line_number;
 -      lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
 -      raise_lexer_error(newstr, line);
 -    } else {
 -      rb_funcall(listener, rb_intern("eof"), 0);
 -    }
 -  }
 -	break;
 -#line 1137 "ext/gherkin_lexer_et/gherkin_lexer_et.c"
 -		}
 -	}
 -
 -_again:
 -	if ( cs == 0 )
 -		goto _out;
 -	if ( ++p != pe )
 -		goto _resume;
 -	_test_eof: {}
 -	if ( p == eof )
 -	{
 -	const char *__acts = _lexer_actions + _lexer_eof_actions[cs];
 -	unsigned int __nacts = (unsigned int) *__acts++;
 -	while ( __nacts-- > 0 ) {
 -		switch ( *__acts++ ) {
 -	case 23:
 -#line 207 "ragel/i18n/et.c.rl"
 -	{
 -    int line;
 -    if (cs < lexer_first_final) {
 -      size_t count = 0;
 -      VALUE newstr_val;
 -      char *newstr;
 -      int newstr_count = 0;        
 -      size_t len;
 -      const char *buff;
 -      if (lexer->last_newline != 0) {
 -        len = LEN(last_newline, eof);
 -        buff = PTR_TO(last_newline);
 -      } else {
 -        len = strlen(data);
 -        buff = data;
 -      }
 -
 -      /* Allocate as a ruby string so that it gets cleaned up by GC */
 -      newstr_val = rb_str_new(buff, len);
 -      newstr = RSTRING_PTR(newstr_val);
 -
 -
 -      for (count = 0; count < len; count++) {
 -        if(buff[count] == 10) {
 -          newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
 -          break;
 -        } else {
 -          if (buff[count] == '%') {
 -            newstr[newstr_count++] = buff[count];
 -            newstr[newstr_count] = buff[count];
 -          } else {
 -            newstr[newstr_count] = buff[count];
 -          }
 -        }
 -        newstr_count++;
 -      }
 -
 -      line = lexer->line_number;
 -      lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
 -      raise_lexer_error(newstr, line);
 -    } else {
 -      rb_funcall(listener, rb_intern("eof"), 0);
 -    }
 -  }
 -	break;
 -#line 1200 "ext/gherkin_lexer_et/gherkin_lexer_et.c"
 -		}
 -	}
 -	}
 -
 -	_out: {}
 -	}
 -
 -#line 426 "ragel/i18n/et.c.rl"
 -
 -    assert(p <= pe && "data overflow after parsing execute");
 -    assert(lexer->content_start <= len && "content starts after data end");
 -    assert(lexer->mark < len && "mark is after data end");
 -    
 -    /* Reset lexer by re-initializing the whole thing */
 -    lexer_init(lexer);
 -
 -    if (cs == lexer_error) {
 -      rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails.");
 -    } else {
 -      return Qtrue;
 -    }
 -  }
 -}
 -
 -void Init_gherkin_lexer_et()
 -{
 -  mGherkin = rb_define_module("Gherkin");
 -  mGherkinLexer = rb_define_module_under(mGherkin, "Lexer");
 -  rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError"));
 -
 -  mCLexer = rb_define_module_under(mGherkin, "CLexer");
 -  cI18nLexer = rb_define_class_under(mCLexer, "Et", rb_cObject);
 -  rb_define_alloc_func(cI18nLexer, CLexer_alloc);
 -  rb_define_method(cI18nLexer, "initialize", CLexer_init, 1);
 -  rb_define_method(cI18nLexer, "scan", CLexer_scan, 1);
 -}
 -
diff --cc ext/gherkin_lexer_fi/extconf.rb
index ad4d534,ad4d534..0000000
deleted file mode 100644,100644
--- a/ext/gherkin_lexer_fi/extconf.rb
+++ /dev/null
@@@ -1,6 -1,6 +1,0 @@@
--require 'mkmf'
--CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags']
--$CFLAGS << ' -O0 -Wall' if CONFIG['CC'] =~ /gcc|clang/
--dir_config("gherkin_lexer_fi")
--have_library("c", "main")
--create_makefile("gherkin_lexer_fi")
diff --cc ext/gherkin_lexer_fi/gherkin_lexer_fi.c
index 867abec,73708c7..0000000
deleted file mode 100644,100644
--- a/ext/gherkin_lexer_fi/gherkin_lexer_fi.c
+++ /dev/null
@@@ -1,1215 -1,1215 +1,0 @@@
--
- #line 1 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/fi.c.rl"
- #include <assert.h>
- #include <ruby.h>
- 
- #if defined(_WIN32)
- #include <stddef.h>
- #endif
- 
- #ifdef HAVE_RUBY_RE_H
- #include <ruby/re.h>
- #else
- #include <re.h>
- #endif
- 
- #ifdef HAVE_RUBY_ENCODING_H
- #include <ruby/encoding.h>
- #define ENCODED_STR_NEW(ptr, len) \
-     rb_enc_str_new(ptr, len, rb_utf8_encoding())
- #else
- #define ENCODED_STR_NEW(ptr, len) \
-     rb_str_new(ptr, len)
- #endif
- 
- #ifndef RSTRING_PTR
- #define RSTRING_PTR(s) (RSTRING(s)->ptr)
- #endif
- 
- #ifndef RSTRING_LEN
- #define RSTRING_LEN(s) (RSTRING(s)->len)
- #endif
- 
- #define DATA_GET(FROM, TYPE, NAME) \
-   Data_Get_Struct(FROM, TYPE, NAME); \
-   if (NAME == NULL) { \
-     rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \
-   }
-  
- typedef struct lexer_state {
-   int content_len;
-   int line_number;
-   int current_line;
-   int start_col;
-   size_t mark;
-   size_t keyword_start;
-   size_t keyword_end;
-   size_t next_keyword_start;
-   size_t content_start;
-   size_t content_end;
-   size_t docstring_content_type_start;
-   size_t docstring_content_type_end;
-   size_t query_start;
-   size_t last_newline;
-   size_t final_newline;
- } lexer_state;
- 
- static VALUE mGherkin;
- static VALUE mGherkinLexer;
- static VALUE mCLexer;
- static VALUE cI18nLexer;
- static VALUE rb_eGherkinLexingError;
- 
- #define LEN(AT, P) (P - data - lexer->AT)
- #define MARK(M, P) (lexer->M = (P) - data)
- #define PTR_TO(P) (data + lexer->P)
- 
- #define STORE_KW_END_CON(EVENT) \
-   store_multiline_kw_con(listener, # EVENT, \
-     PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \
-     PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \
-     lexer->current_line, lexer->start_col); \
-     if (lexer->content_end != 0) { \
-       p = PTR_TO(content_end - 1); \
-     } \
-     lexer->content_end = 0
- 
- #define STORE_ATTR(ATTR) \
-     store_attr(listener, # ATTR, \
-       PTR_TO(content_start), LEN(content_start, p), \
-       lexer->line_number)
- 
- 
- #line 254 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/fi.c.rl"
- 
- 
- /** Data **/
- 
- #line 89 "ext/gherkin_lexer_fi/gherkin_lexer_fi.c"
- static const char _lexer_actions[] = {
- 	0, 1, 0, 1, 1, 1, 2, 1, 
- 	3, 1, 4, 1, 5, 1, 6, 1, 
- 	7, 1, 8, 1, 9, 1, 10, 1, 
- 	11, 1, 12, 1, 13, 1, 16, 1, 
- 	17, 1, 18, 1, 19, 1, 20, 1, 
- 	21, 1, 22, 1, 23, 2, 1, 18, 
- 	2, 4, 5, 2, 13, 0, 2, 14, 
- 	15, 2, 17, 0, 2, 17, 2, 2, 
- 	17, 16, 2, 17, 19, 2, 18, 6, 
- 	2, 18, 7, 2, 18, 8, 2, 18, 
- 	9, 2, 18, 10, 2, 18, 16, 2, 
- 	20, 21, 2, 22, 0, 2, 22, 2, 
- 	2, 22, 16, 2, 22, 19, 3, 3, 
- 	14, 15, 3, 5, 14, 15, 3, 11, 
- 	14, 15, 3, 12, 14, 15, 3, 13, 
- 	14, 15, 3, 14, 15, 18, 3, 17, 
- 	0, 11, 3, 17, 14, 15, 4, 1, 
- 	14, 15, 18, 4, 4, 5, 14, 15, 
- 	4, 17, 0, 14, 15, 5, 17, 0, 
- 	11, 14, 15
- };
- 
- static const short _lexer_key_offsets[] = {
- 	0, 0, 17, 18, 19, 35, 36, 37, 
- 	39, 41, 46, 51, 56, 61, 65, 69, 
- 	71, 72, 73, 74, 75, 76, 77, 78, 
- 	79, 80, 81, 82, 83, 84, 85, 86, 
- 	87, 89, 91, 96, 103, 108, 109, 110, 
- 	111, 112, 113, 114, 115, 116, 118, 119, 
- 	120, 121, 122, 123, 124, 125, 126, 127, 
- 	128, 129, 130, 131, 132, 133, 134, 135, 
- 	144, 146, 148, 150, 152, 154, 156, 158, 
- 	160, 162, 164, 166, 168, 170, 172, 174, 
- 	176, 178, 180, 182, 184, 186, 188, 190, 
- 	192, 208, 209, 211, 212, 213, 215, 216, 
- 	217, 218, 219, 220, 221, 228, 230, 232, 
- 	234, 236, 238, 240, 242, 244, 246, 248, 
- 	250, 251, 252, 266, 268, 270, 272, 274, 
- 	276, 278, 280, 282, 284, 286, 288, 290, 
- 	292, 294, 296, 298, 300, 302, 304, 306, 
- 	308, 310, 312, 315, 317, 319, 321, 323, 
- 	325, 327, 329, 331, 333, 335, 337, 339, 
- 	341, 343, 345, 347, 350, 352, 354, 356, 
- 	359, 361, 363, 365, 367, 369, 371, 373, 
- 	374, 375, 376, 377, 378, 379, 380, 394, 
- 	396, 398, 400, 402, 404, 406, 408, 410, 
- 	412, 414, 416, 418, 420, 422, 424, 426, 
- 	428, 430, 432, 434, 436, 438, 440, 443, 
- 	445, 447, 449, 451, 453, 455, 457, 459, 
- 	461, 463, 465, 467, 469, 471, 473, 475, 
- 	477, 479, 480, 481, 482, 483, 484, 485, 
- 	499, 501, 503, 505, 507, 509, 511, 513, 
- 	515, 517, 519, 521, 523, 525, 527, 529, 
- 	531, 533, 535, 537, 539, 541, 543, 545, 
- 	548, 550, 552, 554, 556, 558, 560, 562, 
- 	564, 566, 568, 570, 572, 574, 576, 578, 
- 	580, 582, 584, 586, 588, 591, 593, 595, 
- 	597, 599, 603, 609, 612, 614, 620, 636, 
- 	638, 641, 643, 645, 648, 650, 652, 654, 
- 	657, 659, 661, 663, 665, 667, 669, 671
- };
- 
- static const char _lexer_trans_keys[] = {
- 	-17, 10, 32, 34, 35, 37, 42, 64, 
- 	74, 75, 77, 78, 79, 84, 124, 9, 
- 	13, -69, -65, 10, 32, 34, 35, 37, 
- 	42, 64, 74, 75, 77, 78, 79, 84, 
- 	124, 9, 13, 34, 34, 10, 13, 10, 
- 	13, 10, 32, 34, 9, 13, 10, 32, 
- 	34, 9, 13, 10, 32, 34, 9, 13, 
- 	10, 32, 34, 9, 13, 10, 32, 9, 
- 	13, 10, 32, 9, 13, 10, 13, 10, 
- 	95, 70, 69, 65, 84, 85, 82, 69, 
- 	95, 69, 78, 68, 95, 37, 32, 10, 
- 	13, 10, 13, 13, 32, 64, 9, 10, 
- 	9, 10, 13, 32, 64, 11, 12, 10, 
- 	32, 64, 9, 13, 97, 117, 110, 117, 
- 	116, 116, 105, 105, 108, 109, 101, 116, 
- 	101, 116, 97, 97, 105, 110, 97, 105, 
- 	115, 117, 117, 115, 58, 10, 10, 10, 
- 	32, 35, 37, 64, 79, 84, 9, 13, 
- 	10, 95, 10, 70, 10, 69, 10, 65, 
- 	10, 84, 10, 85, 10, 82, 10, 69, 
- 	10, 95, 10, 69, 10, 78, 10, 68, 
- 	10, 95, 10, 37, 10, 109, 10, 105, 
- 	10, 110, 10, 97, 10, 105, 10, 115, 
- 	10, 117, 10, 117, 10, 115, 10, 58, 
- 	10, 32, 34, 35, 37, 42, 64, 74, 
- 	75, 77, 78, 79, 84, 124, 9, 13, 
- 	97, 112, 117, 97, 117, 107, 115, 115, 
- 	101, 116, 58, 10, 10, 10, 32, 35, 
- 	79, 124, 9, 13, 10, 109, 10, 105, 
- 	10, 110, 10, 97, 10, 105, 10, 115, 
- 	10, 117, 10, 117, 10, 115, 10, 58, 
- 	58, 97, 10, 10, 10, 32, 35, 37, 
- 	42, 64, 74, 75, 77, 78, 79, 84, 
- 	9, 13, 10, 95, 10, 70, 10, 69, 
- 	10, 65, 10, 84, 10, 85, 10, 82, 
- 	10, 69, 10, 95, 10, 69, 10, 78, 
- 	10, 68, 10, 95, 10, 37, 10, 32, 
- 	10, 97, 10, 117, 10, 110, 10, 117, 
- 	10, 116, 10, 116, 10, 105, 10, 105, 
- 	10, 108, 109, 10, 101, 10, 116, 10, 
- 	101, 10, 116, 10, 97, 10, 97, 10, 
- 	105, 10, 110, 10, 97, 10, 105, 10, 
- 	115, 10, 117, 10, 117, 10, 115, 10, 
- 	58, 10, 97, 10, 112, 117, 10, 97, 
- 	10, 117, 10, 115, 10, 58, 97, 10, 
- 	105, 10, 104, 10, 105, 10, 111, 10, 
- 	115, 10, 116, 10, 97, 105, 104, 105, 
- 	111, 58, 10, 10, 10, 32, 35, 37, 
- 	42, 64, 74, 75, 77, 78, 79, 84, 
- 	9, 13, 10, 95, 10, 70, 10, 69, 
- 	10, 65, 10, 84, 10, 85, 10, 82, 
- 	10, 69, 10, 95, 10, 69, 10, 78, 
- 	10, 68, 10, 95, 10, 37, 10, 32, 
- 	10, 97, 10, 117, 10, 110, 10, 117, 
- 	10, 116, 10, 116, 10, 105, 10, 105, 
- 	10, 108, 109, 10, 101, 10, 116, 10, 
- 	101, 10, 116, 10, 97, 10, 97, 10, 
- 	105, 10, 110, 10, 97, 10, 105, 10, 
- 	115, 10, 117, 10, 117, 10, 115, 10, 
- 	58, 10, 97, 10, 112, 10, 97, 115, 
- 	116, 97, 58, 10, 10, 10, 32, 35, 
- 	37, 42, 64, 74, 75, 77, 78, 79, 
- 	84, 9, 13, 10, 95, 10, 70, 10, 
- 	69, 10, 65, 10, 84, 10, 85, 10, 
- 	82, 10, 69, 10, 95, 10, 69, 10, 
- 	78, 10, 68, 10, 95, 10, 37, 10, 
- 	32, 10, 97, 10, 117, 10, 110, 10, 
- 	117, 10, 116, 10, 116, 10, 105, 10, 
- 	105, 10, 108, 109, 10, 101, 10, 116, 
- 	10, 101, 10, 116, 10, 97, 10, 97, 
- 	10, 105, 10, 110, 10, 97, 10, 105, 
- 	10, 115, 10, 117, 10, 117, 10, 115, 
- 	10, 58, 10, 97, 10, 112, 10, 97, 
- 	10, 117, 10, 115, 10, 58, 97, 10, 
- 	105, 10, 104, 10, 105, 10, 111, 32, 
- 	124, 9, 13, 10, 32, 92, 124, 9, 
- 	13, 10, 92, 124, 10, 92, 10, 32, 
- 	92, 124, 9, 13, 10, 32, 34, 35, 
- 	37, 42, 64, 74, 75, 77, 78, 79, 
- 	84, 124, 9, 13, 10, 97, 10, 112, 
- 	117, 10, 97, 10, 117, 10, 107, 115, 
- 	10, 115, 10, 101, 10, 116, 10, 58, 
- 	97, 10, 105, 10, 104, 10, 105, 10, 
- 	111, 10, 115, 10, 116, 10, 97, 0
- };
- 
- static const char _lexer_single_lengths[] = {
- 	0, 15, 1, 1, 14, 1, 1, 2, 
- 	2, 3, 3, 3, 3, 2, 2, 2, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	2, 2, 3, 5, 3, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 2, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 7, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	14, 1, 2, 1, 1, 2, 1, 1, 
- 	1, 1, 1, 1, 5, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	1, 1, 12, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 3, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 3, 2, 2, 2, 3, 
- 	2, 2, 2, 2, 2, 2, 2, 1, 
- 	1, 1, 1, 1, 1, 1, 12, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 3, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 1, 1, 1, 1, 1, 1, 12, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 3, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 3, 2, 2, 2, 
- 	2, 2, 4, 3, 2, 4, 14, 2, 
- 	3, 2, 2, 3, 2, 2, 2, 3, 
- 	2, 2, 2, 2, 2, 2, 2, 0
- };
- 
- static const char _lexer_range_lengths[] = {
- 	0, 1, 0, 0, 1, 0, 0, 0, 
- 	0, 1, 1, 1, 1, 1, 1, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 1, 1, 1, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 1, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	1, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 1, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 1, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 1, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 1, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 1, 1, 0, 0, 1, 1, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0
- };
- 
- static const short _lexer_index_offsets[] = {
- 	0, 0, 17, 19, 21, 37, 39, 41, 
- 	44, 47, 52, 57, 62, 67, 71, 75, 
- 	78, 80, 82, 84, 86, 88, 90, 92, 
- 	94, 96, 98, 100, 102, 104, 106, 108, 
- 	110, 113, 116, 121, 128, 133, 135, 137, 
- 	139, 141, 143, 145, 147, 149, 152, 154, 
- 	156, 158, 160, 162, 164, 166, 168, 170, 
- 	172, 174, 176, 178, 180, 182, 184, 186, 
- 	195, 198, 201, 204, 207, 210, 213, 216, 
- 	219, 222, 225, 228, 231, 234, 237, 240, 
- 	243, 246, 249, 252, 255, 258, 261, 264, 
- 	267, 283, 285, 288, 290, 292, 295, 297, 
- 	299, 301, 303, 305, 307, 314, 317, 320, 
- 	323, 326, 329, 332, 335, 338, 341, 344, 
- 	347, 349, 351, 365, 368, 371, 374, 377, 
- 	380, 383, 386, 389, 392, 395, 398, 401, 
- 	404, 407, 410, 413, 416, 419, 422, 425, 
- 	428, 431, 434, 438, 441, 444, 447, 450, 
- 	453, 456, 459, 462, 465, 468, 471, 474, 
- 	477, 480, 483, 486, 490, 493, 496, 499, 
- 	503, 506, 509, 512, 515, 518, 521, 524, 
- 	526, 528, 530, 532, 534, 536, 538, 552, 
- 	555, 558, 561, 564, 567, 570, 573, 576, 
- 	579, 582, 585, 588, 591, 594, 597, 600, 
- 	603, 606, 609, 612, 615, 618, 621, 625, 
- 	628, 631, 634, 637, 640, 643, 646, 649, 
- 	652, 655, 658, 661, 664, 667, 670, 673, 
- 	676, 679, 681, 683, 685, 687, 689, 691, 
- 	705, 708, 711, 714, 717, 720, 723, 726, 
- 	729, 732, 735, 738, 741, 744, 747, 750, 
- 	753, 756, 759, 762, 765, 768, 771, 774, 
- 	778, 781, 784, 787, 790, 793, 796, 799, 
- 	802, 805, 808, 811, 814, 817, 820, 823, 
- 	826, 829, 832, 835, 838, 842, 845, 848, 
- 	851, 854, 858, 864, 868, 871, 877, 893, 
- 	896, 900, 903, 906, 910, 913, 916, 919, 
- 	923, 926, 929, 932, 935, 938, 941, 944
- };
- 
- static const short _lexer_trans_targs[] = {
- 	2, 4, 4, 5, 15, 17, 31, 34, 
- 	37, 38, 40, 43, 45, 89, 273, 4, 
- 	0, 3, 0, 4, 0, 4, 4, 5, 
- 	15, 17, 31, 34, 37, 38, 40, 43, 
- 	45, 89, 273, 4, 0, 6, 0, 7, 
- 	0, 9, 8, 8, 9, 8, 8, 10, 
- 	10, 11, 10, 10, 10, 10, 11, 10, 
- 	10, 10, 10, 12, 10, 10, 10, 10, 
- 	13, 10, 10, 4, 14, 14, 0, 4, 
- 	14, 14, 0, 4, 16, 15, 4, 0, 
- 	18, 0, 19, 0, 20, 0, 21, 0, 
- 	22, 0, 23, 0, 24, 0, 25, 0, 
- 	26, 0, 27, 0, 28, 0, 29, 0, 
- 	30, 0, 295, 0, 32, 0, 4, 16, 
- 	33, 4, 16, 33, 0, 0, 0, 0, 
- 	35, 36, 4, 36, 36, 34, 35, 35, 
- 	4, 36, 34, 36, 0, 31, 0, 39, 
- 	0, 31, 0, 41, 0, 42, 0, 37, 
- 	0, 44, 0, 39, 0, 46, 52, 0, 
- 	47, 0, 48, 0, 49, 0, 50, 0, 
- 	51, 0, 39, 0, 53, 0, 54, 0, 
- 	55, 0, 56, 0, 57, 0, 58, 0, 
- 	59, 0, 60, 0, 61, 0, 63, 62, 
- 	63, 62, 63, 63, 4, 64, 4, 78, 
- 	279, 63, 62, 63, 65, 62, 63, 66, 
- 	62, 63, 67, 62, 63, 68, 62, 63, 
- 	69, 62, 63, 70, 62, 63, 71, 62, 
- 	63, 72, 62, 63, 73, 62, 63, 74, 
- 	62, 63, 75, 62, 63, 76, 62, 63, 
- 	77, 62, 63, 4, 62, 63, 79, 62, 
- 	63, 80, 62, 63, 81, 62, 63, 82, 
- 	62, 63, 83, 62, 63, 84, 62, 63, 
- 	85, 62, 63, 86, 62, 63, 87, 62, 
- 	63, 88, 62, 4, 4, 5, 15, 17, 
- 	31, 34, 37, 38, 40, 43, 45, 89, 
- 	273, 4, 0, 90, 0, 91, 217, 0, 
- 	92, 0, 93, 0, 94, 111, 0, 95, 
- 	0, 96, 0, 97, 0, 98, 0, 100, 
- 	99, 100, 99, 100, 100, 4, 101, 4, 
- 	100, 99, 100, 102, 99, 100, 103, 99, 
- 	100, 104, 99, 100, 105, 99, 100, 106, 
- 	99, 100, 107, 99, 100, 108, 99, 100, 
- 	109, 99, 100, 110, 99, 100, 88, 99, 
- 	112, 167, 0, 114, 113, 114, 113, 114, 
- 	114, 4, 115, 129, 4, 130, 131, 133, 
- 	136, 138, 154, 114, 113, 114, 116, 113, 
- 	114, 117, 113, 114, 118, 113, 114, 119, 
- 	113, 114, 120, 113, 114, 121, 113, 114, 
- 	122, 113, 114, 123, 113, 114, 124, 113, 
- 	114, 125, 113, 114, 126, 113, 114, 127, 
- 	113, 114, 128, 113, 114, 4, 113, 114, 
- 	88, 113, 114, 129, 113, 114, 132, 113, 
- 	114, 129, 113, 114, 134, 113, 114, 135, 
- 	113, 114, 130, 113, 114, 137, 113, 114, 
- 	132, 113, 114, 139, 145, 113, 114, 140, 
- 	113, 114, 141, 113, 114, 142, 113, 114, 
- 	143, 113, 114, 144, 113, 114, 132, 113, 
- 	114, 146, 113, 114, 147, 113, 114, 148, 
- 	113, 114, 149, 113, 114, 150, 113, 114, 
- 	151, 113, 114, 152, 113, 114, 153, 113, 
- 	114, 88, 113, 114, 155, 113, 114, 156, 
- 	164, 113, 114, 157, 113, 114, 158, 113, 
- 	114, 159, 113, 114, 88, 160, 113, 114, 
- 	161, 113, 114, 162, 113, 114, 163, 113, 
- 	114, 153, 113, 114, 165, 113, 114, 166, 
- 	113, 114, 153, 113, 168, 0, 169, 0, 
- 	170, 0, 171, 0, 172, 0, 174, 173, 
- 	174, 173, 174, 174, 4, 175, 189, 4, 
- 	190, 191, 193, 196, 198, 214, 174, 173, 
- 	174, 176, 173, 174, 177, 173, 174, 178, 
- 	173, 174, 179, 173, 174, 180, 173, 174, 
- 	181, 173, 174, 182, 173, 174, 183, 173, 
- 	174, 184, 173, 174, 185, 173, 174, 186, 
- 	173, 174, 187, 173, 174, 188, 173, 174, 
- 	4, 173, 174, 88, 173, 174, 189, 173, 
- 	174, 192, 173, 174, 189, 173, 174, 194, 
- 	173, 174, 195, 173, 174, 190, 173, 174, 
- 	197, 173, 174, 192, 173, 174, 199, 205, 
- 	173, 174, 200, 173, 174, 201, 173, 174, 
- 	202, 173, 174, 203, 173, 174, 204, 173, 
- 	174, 192, 173, 174, 206, 173, 174, 207, 
- 	173, 174, 208, 173, 174, 209, 173, 174, 
- 	210, 173, 174, 211, 173, 174, 212, 173, 
- 	174, 213, 173, 174, 88, 173, 174, 215, 
- 	173, 174, 216, 173, 174, 211, 173, 218, 
- 	0, 219, 0, 220, 0, 221, 0, 223, 
- 	222, 223, 222, 223, 223, 4, 224, 238, 
- 	4, 239, 240, 242, 245, 247, 263, 223, 
- 	222, 223, 225, 222, 223, 226, 222, 223, 
- 	227, 222, 223, 228, 222, 223, 229, 222, 
- 	223, 230, 222, 223, 231, 222, 223, 232, 
- 	222, 223, 233, 222, 223, 234, 222, 223, 
- 	235, 222, 223, 236, 222, 223, 237, 222, 
- 	223, 4, 222, 223, 88, 222, 223, 238, 
- 	222, 223, 241, 222, 223, 238, 222, 223, 
- 	243, 222, 223, 244, 222, 223, 239, 222, 
- 	223, 246, 222, 223, 241, 222, 223, 248, 
- 	254, 222, 223, 249, 222, 223, 250, 222, 
- 	223, 251, 222, 223, 252, 222, 223, 253, 
- 	222, 223, 241, 222, 223, 255, 222, 223, 
- 	256, 222, 223, 257, 222, 223, 258, 222, 
- 	223, 259, 222, 223, 260, 222, 223, 261, 
- 	222, 223, 262, 222, 223, 88, 222, 223, 
- 	264, 222, 223, 265, 222, 223, 266, 222, 
- 	223, 267, 222, 223, 268, 222, 223, 88, 
- 	269, 222, 223, 270, 222, 223, 271, 222, 
- 	223, 272, 222, 223, 262, 222, 273, 274, 
- 	273, 0, 278, 277, 276, 274, 277, 275, 
- 	0, 276, 274, 275, 0, 276, 275, 278, 
- 	277, 276, 274, 277, 275, 278, 278, 5, 
- 	15, 17, 31, 34, 37, 38, 40, 43, 
- 	45, 89, 273, 278, 0, 63, 280, 62, 
- 	63, 281, 292, 62, 63, 282, 62, 63, 
- 	283, 62, 63, 284, 287, 62, 63, 285, 
- 	62, 63, 286, 62, 63, 87, 62, 63, 
- 	88, 288, 62, 63, 289, 62, 63, 290, 
- 	62, 63, 291, 62, 63, 87, 62, 63, 
- 	293, 62, 63, 294, 62, 63, 87, 62, 
- 	0, 0
- };
- 
- static const unsigned char _lexer_trans_actions[] = {
- 	0, 54, 0, 5, 1, 0, 29, 1, 
- 	29, 29, 29, 29, 29, 29, 35, 0, 
- 	43, 0, 43, 0, 43, 54, 0, 5, 
- 	1, 0, 29, 1, 29, 29, 29, 29, 
- 	29, 29, 35, 0, 43, 0, 43, 0, 
- 	43, 139, 48, 9, 106, 11, 0, 134, 
- 	45, 45, 45, 3, 122, 33, 33, 33, 
- 	0, 122, 33, 33, 33, 0, 122, 33, 
- 	0, 33, 0, 102, 7, 7, 43, 54, 
- 	0, 0, 43, 114, 25, 0, 54, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 149, 126, 
- 	57, 110, 23, 0, 43, 43, 43, 43, 
- 	0, 27, 118, 27, 27, 51, 27, 0, 
- 	54, 0, 1, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 144, 57, 
- 	54, 0, 54, 0, 69, 33, 69, 84, 
- 	84, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 13, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 13, 0, 130, 31, 60, 57, 31, 
- 	63, 57, 63, 63, 63, 63, 63, 63, 
- 	66, 31, 43, 0, 43, 0, 0, 43, 
- 	0, 43, 0, 43, 0, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 144, 
- 	57, 54, 0, 54, 0, 81, 84, 81, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 21, 0, 
- 	0, 0, 43, 144, 57, 54, 0, 54, 
- 	0, 75, 33, 84, 75, 84, 84, 84, 
- 	84, 84, 84, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 17, 0, 54, 
- 	17, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 17, 0, 54, 0, 0, 54, 0, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 17, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 144, 57, 
- 	54, 0, 54, 0, 78, 33, 84, 78, 
- 	84, 84, 84, 84, 84, 84, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	19, 0, 54, 19, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 19, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 144, 
- 	57, 54, 0, 54, 0, 72, 33, 84, 
- 	72, 84, 84, 84, 84, 84, 84, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 15, 0, 54, 15, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 15, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 15, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 0, 0, 
- 	0, 43, 54, 37, 37, 87, 37, 37, 
- 	43, 0, 39, 0, 43, 0, 0, 54, 
- 	0, 0, 39, 0, 0, 54, 0, 93, 
- 	90, 41, 96, 90, 96, 96, 96, 96, 
- 	96, 96, 99, 0, 43, 54, 0, 0, 
- 	54, 0, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	13, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	0, 0
- };
- 
- static const unsigned char _lexer_eof_actions[] = {
- 	0, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43
- };
- 
- static const int lexer_start = 1;
- static const int lexer_first_final = 295;
- static const int lexer_error = 0;
- 
- static const int lexer_en_main = 1;
- 
- 
- #line 258 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/fi.c.rl"
- 
- static VALUE 
- unindent(VALUE con, int start_col)
- {
-   VALUE re;
-   // Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters
-   char pat[32]; 
-   snprintf(pat, 32, "^[\t ]{0,%d}", start_col); 
-   re = rb_reg_regcomp(rb_str_new2(pat));
-   rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2(""));
- 
-   return Qnil;
- 
- }
- 
- static void 
- store_kw_con(VALUE listener, const char * event_name, 
-              const char * keyword_at, size_t keyword_length, 
-              const char * at,         size_t length, 
-              int current_line)
- {
-   VALUE con = Qnil, kw = Qnil;
-   kw = ENCODED_STR_NEW(keyword_at, keyword_length);
-   con = ENCODED_STR_NEW(at, length);
-   rb_funcall(con, rb_intern("strip!"), 0);
-   rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); 
- }
- 
- static void
- store_multiline_kw_con(VALUE listener, const char * event_name,
-                       const char * keyword_at, size_t keyword_length,
-                       const char * at,         size_t length,
-                       int current_line, int start_col)
- {
-   VALUE split;
-   VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil;
- 
-   kw = ENCODED_STR_NEW(keyword_at, keyword_length);
-   con = ENCODED_STR_NEW(at, length);
- 
-   unindent(con, start_col);
-   
-   split = rb_str_split(con, "\n");
- 
-   name = rb_funcall(split, rb_intern("shift"), 0);
-   desc = rb_ary_join(split, rb_str_new2( "\n" ));
- 
-   if( name == Qnil ) 
-   {
-     name = rb_str_new2("");
-   }
-   if( rb_funcall(desc, rb_intern("size"), 0) == 0) 
-   {
-     desc = rb_str_new2("");
-   }
-   rb_funcall(name, rb_intern("strip!"), 0);
-   rb_funcall(desc, rb_intern("rstrip!"), 0);
-   rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); 
- }
- 
- static void 
- store_attr(VALUE listener, const char * attr_type,
-            const char * at, size_t length, 
-            int line)
- {
-   VALUE val = ENCODED_STR_NEW(at, length);
-   rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line));
- }
- static void 
- store_docstring_content(VALUE listener, 
-           int start_col, 
-           const char *type_at, size_t type_length,
-           const char *at, size_t length, 
-           int current_line)
- {
-   VALUE re2;
-   VALUE unescape_escaped_quotes;
-   VALUE con = ENCODED_STR_NEW(at, length);
-   VALUE con_type = ENCODED_STR_NEW(type_at, type_length);
- 
-   unindent(con, start_col);
- 
-   re2 = rb_reg_regcomp(rb_str_new2("\r\\Z"));
-   unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\""));
-   rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2(""));
-   rb_funcall(con_type, rb_intern("strip!"), 0);
-   rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\""));
-   rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line));
- }
- static void 
- raise_lexer_error(const char * at, int line)
- { 
-   rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at);
- }
- 
- static void lexer_init(lexer_state *lexer) {
-   lexer->content_start = 0;
-   lexer->content_end = 0;
-   lexer->content_len = 0;
-   lexer->docstring_content_type_start = 0;
-   lexer->docstring_content_type_end = 0;
-   lexer->mark = 0;
-   lexer->keyword_start = 0;
-   lexer->keyword_end = 0;
-   lexer->next_keyword_start = 0;
-   lexer->line_number = 1;
-   lexer->last_newline = 0;
-   lexer->final_newline = 0;
-   lexer->start_col = 0;
- }
- 
- static VALUE CLexer_alloc(VALUE klass)
- {
-   VALUE obj;
-   lexer_state *lxr = ALLOC(lexer_state);
-   lexer_init(lxr);
- 
-   obj = Data_Wrap_Struct(klass, NULL, -1, lxr);
- 
-   return obj;
- }
- 
- static VALUE CLexer_init(VALUE self, VALUE listener)
- {
-   lexer_state *lxr; 
-   rb_iv_set(self, "@listener", listener);
-   
-   lxr = NULL;
-   DATA_GET(self, lexer_state, lxr);
-   lexer_init(lxr);
-   
-   return self;
- }
- 
- static VALUE CLexer_scan(VALUE self, VALUE input)
- {
-   VALUE input_copy;
-   char *data;
-   size_t len;
-   VALUE listener = rb_iv_get(self, "@listener");
- 
-   lexer_state *lexer;
-   lexer = NULL;
-   DATA_GET(self, lexer_state, lexer);
- 
-   input_copy = rb_str_dup(input);
- 
-   rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%"));
-   data = RSTRING_PTR(input_copy);
-   len = RSTRING_LEN(input_copy);
-   
-   if (len == 0) { 
-     rb_raise(rb_eGherkinLexingError, "No content to lex.");
-   } else {
- 
-     const char *p, *pe, *eof;
-     int cs = 0;
-     
-     VALUE current_row = Qnil;
- 
-     p = data;
-     pe = data + len;
-     eof = pe;
-     
-     assert(*pe == '\0' && "pointer does not end on NULL");
-     
-     
- #line 819 "ext/gherkin_lexer_fi/gherkin_lexer_fi.c"
- 	{
- 	cs = lexer_start;
- 	}
- 
- #line 425 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/fi.c.rl"
-     
- #line 826 "ext/gherkin_lexer_fi/gherkin_lexer_fi.c"
- 	{
- 	int _klen;
- 	unsigned int _trans;
- 	const char *_acts;
- 	unsigned int _nacts;
- 	const char *_keys;
- 
- 	if ( p == pe )
- 		goto _test_eof;
- 	if ( cs == 0 )
- 		goto _out;
- _resume:
- 	_keys = _lexer_trans_keys + _lexer_key_offsets[cs];
- 	_trans = _lexer_index_offsets[cs];
- 
- 	_klen = _lexer_single_lengths[cs];
- 	if ( _klen > 0 ) {
- 		const char *_lower = _keys;
- 		const char *_mid;
- 		const char *_upper = _keys + _klen - 1;
- 		while (1) {
- 			if ( _upper < _lower )
- 				break;
- 
- 			_mid = _lower + ((_upper-_lower) >> 1);
- 			if ( (*p) < *_mid )
- 				_upper = _mid - 1;
- 			else if ( (*p) > *_mid )
- 				_lower = _mid + 1;
- 			else {
- 				_trans += (_mid - _keys);
- 				goto _match;
- 			}
- 		}
- 		_keys += _klen;
- 		_trans += _klen;
- 	}
- 
- 	_klen = _lexer_range_lengths[cs];
- 	if ( _klen > 0 ) {
- 		const char *_lower = _keys;
- 		const char *_mid;
- 		const char *_upper = _keys + (_klen<<1) - 2;
- 		while (1) {
- 			if ( _upper < _lower )
- 				break;
- 
- 			_mid = _lower + (((_upper-_lower) >> 1) & ~1);
- 			if ( (*p) < _mid[0] )
- 				_upper = _mid - 2;
- 			else if ( (*p) > _mid[1] )
- 				_lower = _mid + 2;
- 			else {
- 				_trans += ((_mid - _keys)>>1);
- 				goto _match;
- 			}
- 		}
- 		_trans += _klen;
- 	}
- 
- _match:
- 	cs = _lexer_trans_targs[_trans];
- 
- 	if ( _lexer_trans_actions[_trans] == 0 )
- 		goto _again;
- 
- 	_acts = _lexer_actions + _lexer_trans_actions[_trans];
- 	_nacts = (unsigned int) *_acts++;
- 	while ( _nacts-- > 0 )
- 	{
- 		switch ( *_acts++ )
- 		{
- 	case 0:
- #line 83 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/fi.c.rl"
- 	{
- 		MARK(content_start, p);
-     lexer->current_line = lexer->line_number;
-     lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2;
-   }
- 	break;
- 	case 1:
- #line 89 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/fi.c.rl"
- 	{
-     MARK(content_start, p);
-   }
- 	break;
- 	case 2:
- #line 93 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/fi.c.rl"
- 	{
-     lexer->current_line = lexer->line_number;
-     lexer->start_col = p - data - lexer->last_newline;
-   }
- 	break;
- 	case 3:
- #line 98 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/fi.c.rl"
- 	{
-     int len = LEN(content_start, PTR_TO(final_newline));
-     int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end));
- 
-     if (len < 0) len = 0;
-     if (type_len < 0) len = 0;
- 
-     store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line);
-   }
- 	break;
- 	case 4:
- #line 108 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/fi.c.rl"
- 	{ 
-     MARK(docstring_content_type_start, p);
-   }
- 	break;
- 	case 5:
- #line 112 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/fi.c.rl"
- 	{ 
-     MARK(docstring_content_type_end, p);
-   }
- 	break;
- 	case 6:
- #line 116 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/fi.c.rl"
- 	{
-     STORE_KW_END_CON(feature);
-   }
- 	break;
- 	case 7:
- #line 120 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/fi.c.rl"
- 	{
-     STORE_KW_END_CON(background);
-   }
- 	break;
- 	case 8:
- #line 124 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/fi.c.rl"
- 	{
-     STORE_KW_END_CON(scenario);
-   }
- 	break;
- 	case 9:
- #line 128 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/fi.c.rl"
- 	{
-     STORE_KW_END_CON(scenario_outline);
-   }
- 	break;
- 	case 10:
- #line 132 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/fi.c.rl"
- 	{
-     STORE_KW_END_CON(examples);
-   }
- 	break;
- 	case 11:
- #line 136 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/fi.c.rl"
- 	{
-     store_kw_con(listener, "step",
-       PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-       PTR_TO(content_start), LEN(content_start, p), 
-       lexer->current_line);
-   }
- 	break;
- 	case 12:
- #line 143 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/fi.c.rl"
- 	{
-     STORE_ATTR(comment);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 13:
- #line 148 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/fi.c.rl"
- 	{
-     STORE_ATTR(tag);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 14:
- #line 153 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/fi.c.rl"
- 	{
-     lexer->line_number += 1;
-     MARK(final_newline, p);
-   }
- 	break;
- 	case 15:
- #line 158 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/fi.c.rl"
- 	{
-     MARK(last_newline, p + 1);
-   }
- 	break;
- 	case 16:
- #line 162 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/fi.c.rl"
- 	{
-     if (lexer->mark == 0) {
-       MARK(mark, p);
-     }
-   }
- 	break;
- 	case 17:
- #line 168 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/fi.c.rl"
- 	{
-     MARK(keyword_end, p);
-     MARK(keyword_start, PTR_TO(mark));
-     MARK(content_start, p + 1);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 18:
- #line 175 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/fi.c.rl"
- 	{
-     MARK(content_end, p);
-   }
- 	break;
- 	case 19:
- #line 179 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/fi.c.rl"
- 	{
-     p = p - 1;
-     lexer->current_line = lexer->line_number;
-     current_row = rb_ary_new();
-   }
- 	break;
- 	case 20:
- #line 185 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/fi.c.rl"
- 	{
- 		MARK(content_start, p);
-   }
- 	break;
- 	case 21:
- #line 189 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/fi.c.rl"
- 	{
-     VALUE re_pipe, re_newline, re_backslash;
-     VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
-     rb_funcall(con, rb_intern("strip!"), 0);
-     re_pipe      = rb_reg_regcomp(rb_str_new2("\\\\\\|"));
-     re_newline   = rb_reg_regcomp(rb_str_new2("\\\\n"));
-     re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_pipe,      rb_str_new2("|"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_newline,   rb_str_new2("\n"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\"));
- 
-     rb_ary_push(current_row, con);
-   }
- 	break;
- 	case 22:
- #line 203 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/fi.c.rl"
- 	{
-     rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
-   }
- 	break;
- 	case 23:
- #line 207 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/fi.c.rl"
- 	{
-     int line;
-     if (cs < lexer_first_final) {
-       size_t count = 0;
-       VALUE newstr_val;
-       char *newstr;
-       int newstr_count = 0;        
-       size_t len;
-       const char *buff;
-       if (lexer->last_newline != 0) {
-         len = LEN(last_newline, eof);
-         buff = PTR_TO(last_newline);
-       } else {
-         len = strlen(data);
-         buff = data;
-       }
- 
-       // Allocate as a ruby string so that it gets cleaned up by GC
-       newstr_val = rb_str_new(buff, len);
-       newstr = RSTRING_PTR(newstr_val);
- 
- 
-       for (count = 0; count < len; count++) {
-         if(buff[count] == 10) {
-           newstr[newstr_count] = '\0'; // terminate new string at first newline found
-           break;
-         } else {
-           if (buff[count] == '%') {
-             newstr[newstr_count++] = buff[count];
-             newstr[newstr_count] = buff[count];
-           } else {
-             newstr[newstr_count] = buff[count];
-           }
-         }
-         newstr_count++;
-       }
- 
-       line = lexer->line_number;
-       lexer_init(lexer); // Re-initialize so we can scan again with the same lexer
-       raise_lexer_error(newstr, line);
-     } else {
-       rb_funcall(listener, rb_intern("eof"), 0);
-     }
-   }
- 	break;
- #line 1116 "ext/gherkin_lexer_fi/gherkin_lexer_fi.c"
- 		}
- 	}
- 
- _again:
- 	if ( cs == 0 )
- 		goto _out;
- 	if ( ++p != pe )
- 		goto _resume;
- 	_test_eof: {}
- 	if ( p == eof )
- 	{
- 	const char *__acts = _lexer_actions + _lexer_eof_actions[cs];
- 	unsigned int __nacts = (unsigned int) *__acts++;
- 	while ( __nacts-- > 0 ) {
- 		switch ( *__acts++ ) {
- 	case 23:
- #line 207 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/fi.c.rl"
- 	{
-     int line;
-     if (cs < lexer_first_final) {
-       size_t count = 0;
-       VALUE newstr_val;
-       char *newstr;
-       int newstr_count = 0;        
-       size_t len;
-       const char *buff;
-       if (lexer->last_newline != 0) {
-         len = LEN(last_newline, eof);
-         buff = PTR_TO(last_newline);
-       } else {
-         len = strlen(data);
-         buff = data;
-       }
- 
-       // Allocate as a ruby string so that it gets cleaned up by GC
-       newstr_val = rb_str_new(buff, len);
-       newstr = RSTRING_PTR(newstr_val);
- 
- 
-       for (count = 0; count < len; count++) {
-         if(buff[count] == 10) {
-           newstr[newstr_count] = '\0'; // terminate new string at first newline found
-           break;
-         } else {
-           if (buff[count] == '%') {
-             newstr[newstr_count++] = buff[count];
-             newstr[newstr_count] = buff[count];
-           } else {
-             newstr[newstr_count] = buff[count];
-           }
-         }
-         newstr_count++;
-       }
- 
-       line = lexer->line_number;
-       lexer_init(lexer); // Re-initialize so we can scan again with the same lexer
-       raise_lexer_error(newstr, line);
-     } else {
-       rb_funcall(listener, rb_intern("eof"), 0);
-     }
-   }
- 	break;
- #line 1179 "ext/gherkin_lexer_fi/gherkin_lexer_fi.c"
- 		}
- 	}
- 	}
- 
- 	_out: {}
- 	}
- 
- #line 426 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/fi.c.rl"
- 
-     assert(p <= pe && "data overflow after parsing execute");
-     assert(lexer->content_start <= len && "content starts after data end");
-     assert(lexer->mark < len && "mark is after data end");
-     
-     // Reset lexer by re-initializing the whole thing
-     lexer_init(lexer);
- 
-     if (cs == lexer_error) {
-       rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails.");
-     } else {
-       return Qtrue;
-     }
-   }
- }
- 
- void Init_gherkin_lexer_fi()
- {
-   mGherkin = rb_define_module("Gherkin");
-   mGherkinLexer = rb_define_module_under(mGherkin, "Lexer");
-   rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError"));
- 
-   mCLexer = rb_define_module_under(mGherkin, "CLexer");
-   cI18nLexer = rb_define_class_under(mCLexer, "Fi", rb_cObject);
-   rb_define_alloc_func(cI18nLexer, CLexer_alloc);
-   rb_define_method(cI18nLexer, "initialize", CLexer_init, 1);
-   rb_define_method(cI18nLexer, "scan", CLexer_scan, 1);
- }
- 
 -#line 1 "ragel/i18n/fi.c.rl"
 -#include <assert.h>
 -#include <ruby.h>
 -
 -#if defined(_WIN32)
 -#include <stddef.h>
 -#endif
 -
 -#ifdef HAVE_RUBY_RE_H
 -#include <ruby/re.h>
 -#else
 -#include <re.h>
 -#endif
 -
 -#ifdef HAVE_RUBY_ENCODING_H
 -#include <ruby/encoding.h>
 -#define ENCODED_STR_NEW(ptr, len) \
 -    rb_enc_str_new(ptr, len, rb_utf8_encoding())
 -#else
 -#define ENCODED_STR_NEW(ptr, len) \
 -    rb_str_new(ptr, len)
 -#endif
 -
 -#ifndef RSTRING_PTR
 -#define RSTRING_PTR(s) (RSTRING(s)->ptr)
 -#endif
 -
 -#ifndef RSTRING_LEN
 -#define RSTRING_LEN(s) (RSTRING(s)->len)
 -#endif
 -
 -#define DATA_GET(FROM, TYPE, NAME) \
 -  Data_Get_Struct(FROM, TYPE, NAME); \
 -  if (NAME == NULL) { \
 -    rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \
 -  }
 - 
 -typedef struct lexer_state {
 -  int content_len;
 -  int line_number;
 -  int current_line;
 -  int start_col;
 -  size_t mark;
 -  size_t keyword_start;
 -  size_t keyword_end;
 -  size_t next_keyword_start;
 -  size_t content_start;
 -  size_t content_end;
 -  size_t docstring_content_type_start;
 -  size_t docstring_content_type_end;
 -  size_t query_start;
 -  size_t last_newline;
 -  size_t final_newline;
 -} lexer_state;
 -
 -static VALUE mGherkin;
 -static VALUE mGherkinLexer;
 -static VALUE mCLexer;
 -static VALUE cI18nLexer;
 -static VALUE rb_eGherkinLexingError;
 -
 -#define LEN(AT, P) (P - data - lexer->AT)
 -#define MARK(M, P) (lexer->M = (P) - data)
 -#define PTR_TO(P) (data + lexer->P)
 -
 -#define STORE_KW_END_CON(EVENT) \
 -  store_multiline_kw_con(listener, # EVENT, \
 -    PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \
 -    PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \
 -    lexer->current_line, lexer->start_col); \
 -    if (lexer->content_end != 0) { \
 -      p = PTR_TO(content_end - 1); \
 -    } \
 -    lexer->content_end = 0
 -
 -#define STORE_ATTR(ATTR) \
 -    store_attr(listener, # ATTR, \
 -      PTR_TO(content_start), LEN(content_start, p), \
 -      lexer->line_number)
 -
 -
 -#line 254 "ragel/i18n/fi.c.rl"
 -
 -
 -/** Data **/
 -
 -#line 89 "ext/gherkin_lexer_fi/gherkin_lexer_fi.c"
 -static const char _lexer_actions[] = {
 -	0, 1, 0, 1, 1, 1, 2, 1, 
 -	3, 1, 4, 1, 5, 1, 6, 1, 
 -	7, 1, 8, 1, 9, 1, 10, 1, 
 -	11, 1, 12, 1, 13, 1, 16, 1, 
 -	17, 1, 18, 1, 19, 1, 20, 1, 
 -	21, 1, 22, 1, 23, 2, 1, 18, 
 -	2, 4, 5, 2, 13, 0, 2, 14, 
 -	15, 2, 17, 0, 2, 17, 2, 2, 
 -	17, 16, 2, 17, 19, 2, 18, 6, 
 -	2, 18, 7, 2, 18, 8, 2, 18, 
 -	9, 2, 18, 10, 2, 18, 16, 2, 
 -	20, 21, 2, 22, 0, 2, 22, 2, 
 -	2, 22, 16, 2, 22, 19, 3, 3, 
 -	14, 15, 3, 5, 14, 15, 3, 11, 
 -	14, 15, 3, 12, 14, 15, 3, 13, 
 -	14, 15, 3, 14, 15, 18, 3, 17, 
 -	0, 11, 3, 17, 14, 15, 4, 1, 
 -	14, 15, 18, 4, 4, 5, 14, 15, 
 -	4, 17, 0, 14, 15, 5, 17, 0, 
 -	11, 14, 15
 -};
 -
 -static const short _lexer_key_offsets[] = {
 -	0, 0, 17, 18, 19, 35, 36, 37, 
 -	39, 41, 46, 51, 56, 61, 65, 69, 
 -	71, 72, 73, 74, 75, 76, 77, 78, 
 -	79, 80, 81, 82, 83, 84, 85, 86, 
 -	87, 89, 91, 96, 103, 108, 109, 110, 
 -	111, 112, 113, 114, 115, 116, 118, 119, 
 -	120, 121, 122, 123, 124, 125, 126, 127, 
 -	128, 129, 130, 131, 132, 133, 134, 135, 
 -	144, 146, 148, 150, 152, 154, 156, 158, 
 -	160, 162, 164, 166, 168, 170, 172, 174, 
 -	176, 178, 180, 182, 184, 186, 188, 190, 
 -	192, 208, 209, 211, 212, 213, 215, 216, 
 -	217, 218, 219, 220, 221, 228, 230, 232, 
 -	234, 236, 238, 240, 242, 244, 246, 248, 
 -	250, 251, 252, 266, 268, 270, 272, 274, 
 -	276, 278, 280, 282, 284, 286, 288, 290, 
 -	292, 294, 296, 298, 300, 302, 304, 306, 
 -	308, 310, 312, 315, 317, 319, 321, 323, 
 -	325, 327, 329, 331, 333, 335, 337, 339, 
 -	341, 343, 345, 347, 350, 352, 354, 356, 
 -	359, 361, 363, 365, 367, 369, 371, 373, 
 -	374, 375, 376, 377, 378, 379, 380, 394, 
 -	396, 398, 400, 402, 404, 406, 408, 410, 
 -	412, 414, 416, 418, 420, 422, 424, 426, 
 -	428, 430, 432, 434, 436, 438, 440, 443, 
 -	445, 447, 449, 451, 453, 455, 457, 459, 
 -	461, 463, 465, 467, 469, 471, 473, 475, 
 -	477, 479, 480, 481, 482, 483, 484, 485, 
 -	499, 501, 503, 505, 507, 509, 511, 513, 
 -	515, 517, 519, 521, 523, 525, 527, 529, 
 -	531, 533, 535, 537, 539, 541, 543, 545, 
 -	548, 550, 552, 554, 556, 558, 560, 562, 
 -	564, 566, 568, 570, 572, 574, 576, 578, 
 -	580, 582, 584, 586, 588, 591, 593, 595, 
 -	597, 599, 603, 609, 612, 614, 620, 636, 
 -	638, 641, 643, 645, 648, 650, 652, 654, 
 -	657, 659, 661, 663, 665, 667, 669, 671
 -};
 -
 -static const char _lexer_trans_keys[] = {
 -	-17, 10, 32, 34, 35, 37, 42, 64, 
 -	74, 75, 77, 78, 79, 84, 124, 9, 
 -	13, -69, -65, 10, 32, 34, 35, 37, 
 -	42, 64, 74, 75, 77, 78, 79, 84, 
 -	124, 9, 13, 34, 34, 10, 13, 10, 
 -	13, 10, 32, 34, 9, 13, 10, 32, 
 -	34, 9, 13, 10, 32, 34, 9, 13, 
 -	10, 32, 34, 9, 13, 10, 32, 9, 
 -	13, 10, 32, 9, 13, 10, 13, 10, 
 -	95, 70, 69, 65, 84, 85, 82, 69, 
 -	95, 69, 78, 68, 95, 37, 32, 10, 
 -	13, 10, 13, 13, 32, 64, 9, 10, 
 -	9, 10, 13, 32, 64, 11, 12, 10, 
 -	32, 64, 9, 13, 97, 117, 110, 117, 
 -	116, 116, 105, 105, 108, 109, 101, 116, 
 -	101, 116, 97, 97, 105, 110, 97, 105, 
 -	115, 117, 117, 115, 58, 10, 10, 10, 
 -	32, 35, 37, 64, 79, 84, 9, 13, 
 -	10, 95, 10, 70, 10, 69, 10, 65, 
 -	10, 84, 10, 85, 10, 82, 10, 69, 
 -	10, 95, 10, 69, 10, 78, 10, 68, 
 -	10, 95, 10, 37, 10, 109, 10, 105, 
 -	10, 110, 10, 97, 10, 105, 10, 115, 
 -	10, 117, 10, 117, 10, 115, 10, 58, 
 -	10, 32, 34, 35, 37, 42, 64, 74, 
 -	75, 77, 78, 79, 84, 124, 9, 13, 
 -	97, 112, 117, 97, 117, 107, 115, 115, 
 -	101, 116, 58, 10, 10, 10, 32, 35, 
 -	79, 124, 9, 13, 10, 109, 10, 105, 
 -	10, 110, 10, 97, 10, 105, 10, 115, 
 -	10, 117, 10, 117, 10, 115, 10, 58, 
 -	58, 97, 10, 10, 10, 32, 35, 37, 
 -	42, 64, 74, 75, 77, 78, 79, 84, 
 -	9, 13, 10, 95, 10, 70, 10, 69, 
 -	10, 65, 10, 84, 10, 85, 10, 82, 
 -	10, 69, 10, 95, 10, 69, 10, 78, 
 -	10, 68, 10, 95, 10, 37, 10, 32, 
 -	10, 97, 10, 117, 10, 110, 10, 117, 
 -	10, 116, 10, 116, 10, 105, 10, 105, 
 -	10, 108, 109, 10, 101, 10, 116, 10, 
 -	101, 10, 116, 10, 97, 10, 97, 10, 
 -	105, 10, 110, 10, 97, 10, 105, 10, 
 -	115, 10, 117, 10, 117, 10, 115, 10, 
 -	58, 10, 97, 10, 112, 117, 10, 97, 
 -	10, 117, 10, 115, 10, 58, 97, 10, 
 -	105, 10, 104, 10, 105, 10, 111, 10, 
 -	115, 10, 116, 10, 97, 105, 104, 105, 
 -	111, 58, 10, 10, 10, 32, 35, 37, 
 -	42, 64, 74, 75, 77, 78, 79, 84, 
 -	9, 13, 10, 95, 10, 70, 10, 69, 
 -	10, 65, 10, 84, 10, 85, 10, 82, 
 -	10, 69, 10, 95, 10, 69, 10, 78, 
 -	10, 68, 10, 95, 10, 37, 10, 32, 
 -	10, 97, 10, 117, 10, 110, 10, 117, 
 -	10, 116, 10, 116, 10, 105, 10, 105, 
 -	10, 108, 109, 10, 101, 10, 116, 10, 
 -	101, 10, 116, 10, 97, 10, 97, 10, 
 -	105, 10, 110, 10, 97, 10, 105, 10, 
 -	115, 10, 117, 10, 117, 10, 115, 10, 
 -	58, 10, 97, 10, 112, 10, 97, 115, 
 -	116, 97, 58, 10, 10, 10, 32, 35, 
 -	37, 42, 64, 74, 75, 77, 78, 79, 
 -	84, 9, 13, 10, 95, 10, 70, 10, 
 -	69, 10, 65, 10, 84, 10, 85, 10, 
 -	82, 10, 69, 10, 95, 10, 69, 10, 
 -	78, 10, 68, 10, 95, 10, 37, 10, 
 -	32, 10, 97, 10, 117, 10, 110, 10, 
 -	117, 10, 116, 10, 116, 10, 105, 10, 
 -	105, 10, 108, 109, 10, 101, 10, 116, 
 -	10, 101, 10, 116, 10, 97, 10, 97, 
 -	10, 105, 10, 110, 10, 97, 10, 105, 
 -	10, 115, 10, 117, 10, 117, 10, 115, 
 -	10, 58, 10, 97, 10, 112, 10, 97, 
 -	10, 117, 10, 115, 10, 58, 97, 10, 
 -	105, 10, 104, 10, 105, 10, 111, 32, 
 -	124, 9, 13, 10, 32, 92, 124, 9, 
 -	13, 10, 92, 124, 10, 92, 10, 32, 
 -	92, 124, 9, 13, 10, 32, 34, 35, 
 -	37, 42, 64, 74, 75, 77, 78, 79, 
 -	84, 124, 9, 13, 10, 97, 10, 112, 
 -	117, 10, 97, 10, 117, 10, 107, 115, 
 -	10, 115, 10, 101, 10, 116, 10, 58, 
 -	97, 10, 105, 10, 104, 10, 105, 10, 
 -	111, 10, 115, 10, 116, 10, 97, 0
 -};
 -
 -static const char _lexer_single_lengths[] = {
 -	0, 15, 1, 1, 14, 1, 1, 2, 
 -	2, 3, 3, 3, 3, 2, 2, 2, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	2, 2, 3, 5, 3, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 2, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 7, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	14, 1, 2, 1, 1, 2, 1, 1, 
 -	1, 1, 1, 1, 5, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	1, 1, 12, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 3, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 3, 2, 2, 2, 3, 
 -	2, 2, 2, 2, 2, 2, 2, 1, 
 -	1, 1, 1, 1, 1, 1, 12, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 3, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 1, 1, 1, 1, 1, 1, 12, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 3, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 3, 2, 2, 2, 
 -	2, 2, 4, 3, 2, 4, 14, 2, 
 -	3, 2, 2, 3, 2, 2, 2, 3, 
 -	2, 2, 2, 2, 2, 2, 2, 0
 -};
 -
 -static const char _lexer_range_lengths[] = {
 -	0, 1, 0, 0, 1, 0, 0, 0, 
 -	0, 1, 1, 1, 1, 1, 1, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 1, 1, 1, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 1, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	1, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 1, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 1, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 1, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 1, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 1, 1, 0, 0, 1, 1, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0
 -};
 -
 -static const short _lexer_index_offsets[] = {
 -	0, 0, 17, 19, 21, 37, 39, 41, 
 -	44, 47, 52, 57, 62, 67, 71, 75, 
 -	78, 80, 82, 84, 86, 88, 90, 92, 
 -	94, 96, 98, 100, 102, 104, 106, 108, 
 -	110, 113, 116, 121, 128, 133, 135, 137, 
 -	139, 141, 143, 145, 147, 149, 152, 154, 
 -	156, 158, 160, 162, 164, 166, 168, 170, 
 -	172, 174, 176, 178, 180, 182, 184, 186, 
 -	195, 198, 201, 204, 207, 210, 213, 216, 
 -	219, 222, 225, 228, 231, 234, 237, 240, 
 -	243, 246, 249, 252, 255, 258, 261, 264, 
 -	267, 283, 285, 288, 290, 292, 295, 297, 
 -	299, 301, 303, 305, 307, 314, 317, 320, 
 -	323, 326, 329, 332, 335, 338, 341, 344, 
 -	347, 349, 351, 365, 368, 371, 374, 377, 
 -	380, 383, 386, 389, 392, 395, 398, 401, 
 -	404, 407, 410, 413, 416, 419, 422, 425, 
 -	428, 431, 434, 438, 441, 444, 447, 450, 
 -	453, 456, 459, 462, 465, 468, 471, 474, 
 -	477, 480, 483, 486, 490, 493, 496, 499, 
 -	503, 506, 509, 512, 515, 518, 521, 524, 
 -	526, 528, 530, 532, 534, 536, 538, 552, 
 -	555, 558, 561, 564, 567, 570, 573, 576, 
 -	579, 582, 585, 588, 591, 594, 597, 600, 
 -	603, 606, 609, 612, 615, 618, 621, 625, 
 -	628, 631, 634, 637, 640, 643, 646, 649, 
 -	652, 655, 658, 661, 664, 667, 670, 673, 
 -	676, 679, 681, 683, 685, 687, 689, 691, 
 -	705, 708, 711, 714, 717, 720, 723, 726, 
 -	729, 732, 735, 738, 741, 744, 747, 750, 
 -	753, 756, 759, 762, 765, 768, 771, 774, 
 -	778, 781, 784, 787, 790, 793, 796, 799, 
 -	802, 805, 808, 811, 814, 817, 820, 823, 
 -	826, 829, 832, 835, 838, 842, 845, 848, 
 -	851, 854, 858, 864, 868, 871, 877, 893, 
 -	896, 900, 903, 906, 910, 913, 916, 919, 
 -	923, 926, 929, 932, 935, 938, 941, 944
 -};
 -
 -static const short _lexer_trans_targs[] = {
 -	2, 4, 4, 5, 15, 17, 31, 34, 
 -	37, 38, 40, 43, 45, 89, 273, 4, 
 -	0, 3, 0, 4, 0, 4, 4, 5, 
 -	15, 17, 31, 34, 37, 38, 40, 43, 
 -	45, 89, 273, 4, 0, 6, 0, 7, 
 -	0, 9, 8, 8, 9, 8, 8, 10, 
 -	10, 11, 10, 10, 10, 10, 11, 10, 
 -	10, 10, 10, 12, 10, 10, 10, 10, 
 -	13, 10, 10, 4, 14, 14, 0, 4, 
 -	14, 14, 0, 4, 16, 15, 4, 0, 
 -	18, 0, 19, 0, 20, 0, 21, 0, 
 -	22, 0, 23, 0, 24, 0, 25, 0, 
 -	26, 0, 27, 0, 28, 0, 29, 0, 
 -	30, 0, 295, 0, 32, 0, 4, 16, 
 -	33, 4, 16, 33, 0, 0, 0, 0, 
 -	35, 36, 4, 36, 36, 34, 35, 35, 
 -	4, 36, 34, 36, 0, 31, 0, 39, 
 -	0, 31, 0, 41, 0, 42, 0, 37, 
 -	0, 44, 0, 39, 0, 46, 52, 0, 
 -	47, 0, 48, 0, 49, 0, 50, 0, 
 -	51, 0, 39, 0, 53, 0, 54, 0, 
 -	55, 0, 56, 0, 57, 0, 58, 0, 
 -	59, 0, 60, 0, 61, 0, 63, 62, 
 -	63, 62, 63, 63, 4, 64, 4, 78, 
 -	279, 63, 62, 63, 65, 62, 63, 66, 
 -	62, 63, 67, 62, 63, 68, 62, 63, 
 -	69, 62, 63, 70, 62, 63, 71, 62, 
 -	63, 72, 62, 63, 73, 62, 63, 74, 
 -	62, 63, 75, 62, 63, 76, 62, 63, 
 -	77, 62, 63, 4, 62, 63, 79, 62, 
 -	63, 80, 62, 63, 81, 62, 63, 82, 
 -	62, 63, 83, 62, 63, 84, 62, 63, 
 -	85, 62, 63, 86, 62, 63, 87, 62, 
 -	63, 88, 62, 4, 4, 5, 15, 17, 
 -	31, 34, 37, 38, 40, 43, 45, 89, 
 -	273, 4, 0, 90, 0, 91, 217, 0, 
 -	92, 0, 93, 0, 94, 111, 0, 95, 
 -	0, 96, 0, 97, 0, 98, 0, 100, 
 -	99, 100, 99, 100, 100, 4, 101, 4, 
 -	100, 99, 100, 102, 99, 100, 103, 99, 
 -	100, 104, 99, 100, 105, 99, 100, 106, 
 -	99, 100, 107, 99, 100, 108, 99, 100, 
 -	109, 99, 100, 110, 99, 100, 88, 99, 
 -	112, 167, 0, 114, 113, 114, 113, 114, 
 -	114, 4, 115, 129, 4, 130, 131, 133, 
 -	136, 138, 154, 114, 113, 114, 116, 113, 
 -	114, 117, 113, 114, 118, 113, 114, 119, 
 -	113, 114, 120, 113, 114, 121, 113, 114, 
 -	122, 113, 114, 123, 113, 114, 124, 113, 
 -	114, 125, 113, 114, 126, 113, 114, 127, 
 -	113, 114, 128, 113, 114, 4, 113, 114, 
 -	88, 113, 114, 129, 113, 114, 132, 113, 
 -	114, 129, 113, 114, 134, 113, 114, 135, 
 -	113, 114, 130, 113, 114, 137, 113, 114, 
 -	132, 113, 114, 139, 145, 113, 114, 140, 
 -	113, 114, 141, 113, 114, 142, 113, 114, 
 -	143, 113, 114, 144, 113, 114, 132, 113, 
 -	114, 146, 113, 114, 147, 113, 114, 148, 
 -	113, 114, 149, 113, 114, 150, 113, 114, 
 -	151, 113, 114, 152, 113, 114, 153, 113, 
 -	114, 88, 113, 114, 155, 113, 114, 156, 
 -	164, 113, 114, 157, 113, 114, 158, 113, 
 -	114, 159, 113, 114, 88, 160, 113, 114, 
 -	161, 113, 114, 162, 113, 114, 163, 113, 
 -	114, 153, 113, 114, 165, 113, 114, 166, 
 -	113, 114, 153, 113, 168, 0, 169, 0, 
 -	170, 0, 171, 0, 172, 0, 174, 173, 
 -	174, 173, 174, 174, 4, 175, 189, 4, 
 -	190, 191, 193, 196, 198, 214, 174, 173, 
 -	174, 176, 173, 174, 177, 173, 174, 178, 
 -	173, 174, 179, 173, 174, 180, 173, 174, 
 -	181, 173, 174, 182, 173, 174, 183, 173, 
 -	174, 184, 173, 174, 185, 173, 174, 186, 
 -	173, 174, 187, 173, 174, 188, 173, 174, 
 -	4, 173, 174, 88, 173, 174, 189, 173, 
 -	174, 192, 173, 174, 189, 173, 174, 194, 
 -	173, 174, 195, 173, 174, 190, 173, 174, 
 -	197, 173, 174, 192, 173, 174, 199, 205, 
 -	173, 174, 200, 173, 174, 201, 173, 174, 
 -	202, 173, 174, 203, 173, 174, 204, 173, 
 -	174, 192, 173, 174, 206, 173, 174, 207, 
 -	173, 174, 208, 173, 174, 209, 173, 174, 
 -	210, 173, 174, 211, 173, 174, 212, 173, 
 -	174, 213, 173, 174, 88, 173, 174, 215, 
 -	173, 174, 216, 173, 174, 211, 173, 218, 
 -	0, 219, 0, 220, 0, 221, 0, 223, 
 -	222, 223, 222, 223, 223, 4, 224, 238, 
 -	4, 239, 240, 242, 245, 247, 263, 223, 
 -	222, 223, 225, 222, 223, 226, 222, 223, 
 -	227, 222, 223, 228, 222, 223, 229, 222, 
 -	223, 230, 222, 223, 231, 222, 223, 232, 
 -	222, 223, 233, 222, 223, 234, 222, 223, 
 -	235, 222, 223, 236, 222, 223, 237, 222, 
 -	223, 4, 222, 223, 88, 222, 223, 238, 
 -	222, 223, 241, 222, 223, 238, 222, 223, 
 -	243, 222, 223, 244, 222, 223, 239, 222, 
 -	223, 246, 222, 223, 241, 222, 223, 248, 
 -	254, 222, 223, 249, 222, 223, 250, 222, 
 -	223, 251, 222, 223, 252, 222, 223, 253, 
 -	222, 223, 241, 222, 223, 255, 222, 223, 
 -	256, 222, 223, 257, 222, 223, 258, 222, 
 -	223, 259, 222, 223, 260, 222, 223, 261, 
 -	222, 223, 262, 222, 223, 88, 222, 223, 
 -	264, 222, 223, 265, 222, 223, 266, 222, 
 -	223, 267, 222, 223, 268, 222, 223, 88, 
 -	269, 222, 223, 270, 222, 223, 271, 222, 
 -	223, 272, 222, 223, 262, 222, 273, 274, 
 -	273, 0, 278, 277, 276, 274, 277, 275, 
 -	0, 276, 274, 275, 0, 276, 275, 278, 
 -	277, 276, 274, 277, 275, 278, 278, 5, 
 -	15, 17, 31, 34, 37, 38, 40, 43, 
 -	45, 89, 273, 278, 0, 63, 280, 62, 
 -	63, 281, 292, 62, 63, 282, 62, 63, 
 -	283, 62, 63, 284, 287, 62, 63, 285, 
 -	62, 63, 286, 62, 63, 87, 62, 63, 
 -	88, 288, 62, 63, 289, 62, 63, 290, 
 -	62, 63, 291, 62, 63, 87, 62, 63, 
 -	293, 62, 63, 294, 62, 63, 87, 62, 
 -	0, 0
 -};
 -
 -static const unsigned char _lexer_trans_actions[] = {
 -	0, 54, 0, 5, 1, 0, 29, 1, 
 -	29, 29, 29, 29, 29, 29, 35, 0, 
 -	43, 0, 43, 0, 43, 54, 0, 5, 
 -	1, 0, 29, 1, 29, 29, 29, 29, 
 -	29, 29, 35, 0, 43, 0, 43, 0, 
 -	43, 139, 48, 9, 106, 11, 0, 134, 
 -	45, 45, 45, 3, 122, 33, 33, 33, 
 -	0, 122, 33, 33, 33, 0, 122, 33, 
 -	0, 33, 0, 102, 7, 7, 43, 54, 
 -	0, 0, 43, 114, 25, 0, 54, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 149, 126, 
 -	57, 110, 23, 0, 43, 43, 43, 43, 
 -	0, 27, 118, 27, 27, 51, 27, 0, 
 -	54, 0, 1, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 144, 57, 
 -	54, 0, 54, 0, 69, 33, 69, 84, 
 -	84, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 13, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 13, 0, 130, 31, 60, 57, 31, 
 -	63, 57, 63, 63, 63, 63, 63, 63, 
 -	66, 31, 43, 0, 43, 0, 0, 43, 
 -	0, 43, 0, 43, 0, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 144, 
 -	57, 54, 0, 54, 0, 81, 84, 81, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 21, 0, 
 -	0, 0, 43, 144, 57, 54, 0, 54, 
 -	0, 75, 33, 84, 75, 84, 84, 84, 
 -	84, 84, 84, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 17, 0, 54, 
 -	17, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 17, 0, 54, 0, 0, 54, 0, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 17, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 144, 57, 
 -	54, 0, 54, 0, 78, 33, 84, 78, 
 -	84, 84, 84, 84, 84, 84, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	19, 0, 54, 19, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 19, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 144, 
 -	57, 54, 0, 54, 0, 72, 33, 84, 
 -	72, 84, 84, 84, 84, 84, 84, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 15, 0, 54, 15, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 15, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 15, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 0, 0, 
 -	0, 43, 54, 37, 37, 87, 37, 37, 
 -	43, 0, 39, 0, 43, 0, 0, 54, 
 -	0, 0, 39, 0, 0, 54, 0, 93, 
 -	90, 41, 96, 90, 96, 96, 96, 96, 
 -	96, 96, 99, 0, 43, 54, 0, 0, 
 -	54, 0, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	13, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	0, 0
 -};
 -
 -static const unsigned char _lexer_eof_actions[] = {
 -	0, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43
 -};
 -
 -static const int lexer_start = 1;
 -static const int lexer_first_final = 295;
 -static const int lexer_error = 0;
 -
 -static const int lexer_en_main = 1;
 -
 -
 -#line 258 "ragel/i18n/fi.c.rl"
 -
 -static VALUE 
 -unindent(VALUE con, int start_col)
 -{
 -  VALUE re;
 -  /* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */
 -  char pat[32]; 
 -  snprintf(pat, 32, "^[\t ]{0,%d}", start_col); 
 -  re = rb_reg_regcomp(rb_str_new2(pat));
 -  rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2(""));
 -
 -  return Qnil;
 -
 -}
 -
 -static void 
 -store_kw_con(VALUE listener, const char * event_name, 
 -             const char * keyword_at, size_t keyword_length, 
 -             const char * at,         size_t length, 
 -             int current_line)
 -{
 -  VALUE con = Qnil, kw = Qnil;
 -  kw = ENCODED_STR_NEW(keyword_at, keyword_length);
 -  con = ENCODED_STR_NEW(at, length);
 -  rb_funcall(con, rb_intern("strip!"), 0);
 -  rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); 
 -}
 -
 -static void
 -store_multiline_kw_con(VALUE listener, const char * event_name,
 -                      const char * keyword_at, size_t keyword_length,
 -                      const char * at,         size_t length,
 -                      int current_line, int start_col)
 -{
 -  VALUE split;
 -  VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil;
 -
 -  kw = ENCODED_STR_NEW(keyword_at, keyword_length);
 -  con = ENCODED_STR_NEW(at, length);
 -
 -  unindent(con, start_col);
 -  
 -  split = rb_str_split(con, "\n");
 -
 -  name = rb_funcall(split, rb_intern("shift"), 0);
 -  desc = rb_ary_join(split, rb_str_new2( "\n" ));
 -
 -  if( name == Qnil ) 
 -  {
 -    name = rb_str_new2("");
 -  }
 -  if( rb_funcall(desc, rb_intern("size"), 0) == 0) 
 -  {
 -    desc = rb_str_new2("");
 -  }
 -  rb_funcall(name, rb_intern("strip!"), 0);
 -  rb_funcall(desc, rb_intern("rstrip!"), 0);
 -  rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); 
 -}
 -
 -static void 
 -store_attr(VALUE listener, const char * attr_type,
 -           const char * at, size_t length, 
 -           int line)
 -{
 -  VALUE val = ENCODED_STR_NEW(at, length);
 -  rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line));
 -}
 -static void 
 -store_docstring_content(VALUE listener, 
 -          int start_col, 
 -          const char *type_at, size_t type_length,
 -          const char *at, size_t length, 
 -          int current_line)
 -{
 -  VALUE re2;
 -  VALUE unescape_escaped_quotes;
 -  VALUE con = ENCODED_STR_NEW(at, length);
 -  VALUE con_type = ENCODED_STR_NEW(type_at, type_length);
 -
 -  unindent(con, start_col);
 -
 -  re2 = rb_reg_regcomp(rb_str_new2("\r\\Z"));
 -  unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\""));
 -  rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2(""));
 -  rb_funcall(con_type, rb_intern("strip!"), 0);
 -  rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\""));
 -  rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line));
 -}
 -static void 
 -raise_lexer_error(const char * at, int line)
 -{ 
 -  rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at);
 -}
 -
 -static void lexer_init(lexer_state *lexer) {
 -  lexer->content_start = 0;
 -  lexer->content_end = 0;
 -  lexer->content_len = 0;
 -  lexer->docstring_content_type_start = 0;
 -  lexer->docstring_content_type_end = 0;
 -  lexer->mark = 0;
 -  lexer->keyword_start = 0;
 -  lexer->keyword_end = 0;
 -  lexer->next_keyword_start = 0;
 -  lexer->line_number = 1;
 -  lexer->last_newline = 0;
 -  lexer->final_newline = 0;
 -  lexer->start_col = 0;
 -}
 -
 -static VALUE CLexer_alloc(VALUE klass)
 -{
 -  VALUE obj;
 -  lexer_state *lxr = ALLOC(lexer_state);
 -  lexer_init(lxr);
 -
 -  obj = Data_Wrap_Struct(klass, NULL, -1, lxr);
 -
 -  return obj;
 -}
 -
 -static VALUE CLexer_init(VALUE self, VALUE listener)
 -{
 -  lexer_state *lxr; 
 -  rb_iv_set(self, "@listener", listener);
 -  
 -  lxr = NULL;
 -  DATA_GET(self, lexer_state, lxr);
 -  lexer_init(lxr);
 -  
 -  return self;
 -}
 -
 -static VALUE CLexer_scan(VALUE self, VALUE input)
 -{
 -  VALUE input_copy;
 -  char *data;
 -  size_t len;
 -  VALUE listener = rb_iv_get(self, "@listener");
 -
 -  lexer_state *lexer;
 -  lexer = NULL;
 -  DATA_GET(self, lexer_state, lexer);
 -
 -  input_copy = rb_str_dup(input);
 -
 -  rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%"));
 -  data = RSTRING_PTR(input_copy);
 -  len = RSTRING_LEN(input_copy);
 -  
 -  if (len == 0) { 
 -    rb_raise(rb_eGherkinLexingError, "No content to lex.");
 -  } else {
 -
 -    const char *p, *pe, *eof;
 -    int cs = 0;
 -    
 -    VALUE current_row = Qnil;
 -
 -    p = data;
 -    pe = data + len;
 -    eof = pe;
 -    
 -    assert(*pe == '\0' && "pointer does not end on NULL");
 -    
 -    
 -#line 819 "ext/gherkin_lexer_fi/gherkin_lexer_fi.c"
 -	{
 -	cs = lexer_start;
 -	}
 -
 -#line 425 "ragel/i18n/fi.c.rl"
 -    
 -#line 826 "ext/gherkin_lexer_fi/gherkin_lexer_fi.c"
 -	{
 -	int _klen;
 -	unsigned int _trans;
 -	const char *_acts;
 -	unsigned int _nacts;
 -	const char *_keys;
 -
 -	if ( p == pe )
 -		goto _test_eof;
 -	if ( cs == 0 )
 -		goto _out;
 -_resume:
 -	_keys = _lexer_trans_keys + _lexer_key_offsets[cs];
 -	_trans = _lexer_index_offsets[cs];
 -
 -	_klen = _lexer_single_lengths[cs];
 -	if ( _klen > 0 ) {
 -		const char *_lower = _keys;
 -		const char *_mid;
 -		const char *_upper = _keys + _klen - 1;
 -		while (1) {
 -			if ( _upper < _lower )
 -				break;
 -
 -			_mid = _lower + ((_upper-_lower) >> 1);
 -			if ( (*p) < *_mid )
 -				_upper = _mid - 1;
 -			else if ( (*p) > *_mid )
 -				_lower = _mid + 1;
 -			else {
 -				_trans += (unsigned int)(_mid - _keys);
 -				goto _match;
 -			}
 -		}
 -		_keys += _klen;
 -		_trans += _klen;
 -	}
 -
 -	_klen = _lexer_range_lengths[cs];
 -	if ( _klen > 0 ) {
 -		const char *_lower = _keys;
 -		const char *_mid;
 -		const char *_upper = _keys + (_klen<<1) - 2;
 -		while (1) {
 -			if ( _upper < _lower )
 -				break;
 -
 -			_mid = _lower + (((_upper-_lower) >> 1) & ~1);
 -			if ( (*p) < _mid[0] )
 -				_upper = _mid - 2;
 -			else if ( (*p) > _mid[1] )
 -				_lower = _mid + 2;
 -			else {
 -				_trans += (unsigned int)((_mid - _keys)>>1);
 -				goto _match;
 -			}
 -		}
 -		_trans += _klen;
 -	}
 -
 -_match:
 -	cs = _lexer_trans_targs[_trans];
 -
 -	if ( _lexer_trans_actions[_trans] == 0 )
 -		goto _again;
 -
 -	_acts = _lexer_actions + _lexer_trans_actions[_trans];
 -	_nacts = (unsigned int) *_acts++;
 -	while ( _nacts-- > 0 )
 -	{
 -		switch ( *_acts++ )
 -		{
 -	case 0:
 -#line 83 "ragel/i18n/fi.c.rl"
 -	{
 -		MARK(content_start, p);
 -    lexer->current_line = lexer->line_number;
 -    lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2;
 -  }
 -	break;
 -	case 1:
 -#line 89 "ragel/i18n/fi.c.rl"
 -	{
 -    MARK(content_start, p);
 -  }
 -	break;
 -	case 2:
 -#line 93 "ragel/i18n/fi.c.rl"
 -	{
 -    lexer->current_line = lexer->line_number;
 -    lexer->start_col = p - data - lexer->last_newline;
 -  }
 -	break;
 -	case 3:
 -#line 98 "ragel/i18n/fi.c.rl"
 -	{
 -    int len = LEN(content_start, PTR_TO(final_newline));
 -    int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end));
 -
 -    if (len < 0) len = 0;
 -    if (type_len < 0) len = 0;
 -
 -    store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line);
 -  }
 -	break;
 -	case 4:
 -#line 108 "ragel/i18n/fi.c.rl"
 -	{ 
 -    MARK(docstring_content_type_start, p);
 -  }
 -	break;
 -	case 5:
 -#line 112 "ragel/i18n/fi.c.rl"
 -	{ 
 -    MARK(docstring_content_type_end, p);
 -  }
 -	break;
 -	case 6:
 -#line 116 "ragel/i18n/fi.c.rl"
 -	{
 -    STORE_KW_END_CON(feature);
 -  }
 -	break;
 -	case 7:
 -#line 120 "ragel/i18n/fi.c.rl"
 -	{
 -    STORE_KW_END_CON(background);
 -  }
 -	break;
 -	case 8:
 -#line 124 "ragel/i18n/fi.c.rl"
 -	{
 -    STORE_KW_END_CON(scenario);
 -  }
 -	break;
 -	case 9:
 -#line 128 "ragel/i18n/fi.c.rl"
 -	{
 -    STORE_KW_END_CON(scenario_outline);
 -  }
 -	break;
 -	case 10:
 -#line 132 "ragel/i18n/fi.c.rl"
 -	{
 -    STORE_KW_END_CON(examples);
 -  }
 -	break;
 -	case 11:
 -#line 136 "ragel/i18n/fi.c.rl"
 -	{
 -    store_kw_con(listener, "step",
 -      PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
 -      PTR_TO(content_start), LEN(content_start, p), 
 -      lexer->current_line);
 -  }
 -	break;
 -	case 12:
 -#line 143 "ragel/i18n/fi.c.rl"
 -	{
 -    STORE_ATTR(comment);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 13:
 -#line 148 "ragel/i18n/fi.c.rl"
 -	{
 -    STORE_ATTR(tag);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 14:
 -#line 153 "ragel/i18n/fi.c.rl"
 -	{
 -    lexer->line_number += 1;
 -    MARK(final_newline, p);
 -  }
 -	break;
 -	case 15:
 -#line 158 "ragel/i18n/fi.c.rl"
 -	{
 -    MARK(last_newline, p + 1);
 -  }
 -	break;
 -	case 16:
 -#line 162 "ragel/i18n/fi.c.rl"
 -	{
 -    if (lexer->mark == 0) {
 -      MARK(mark, p);
 -    }
 -  }
 -	break;
 -	case 17:
 -#line 168 "ragel/i18n/fi.c.rl"
 -	{
 -    MARK(keyword_end, p);
 -    MARK(keyword_start, PTR_TO(mark));
 -    MARK(content_start, p + 1);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 18:
 -#line 175 "ragel/i18n/fi.c.rl"
 -	{
 -    MARK(content_end, p);
 -  }
 -	break;
 -	case 19:
 -#line 179 "ragel/i18n/fi.c.rl"
 -	{
 -    p = p - 1;
 -    lexer->current_line = lexer->line_number;
 -    current_row = rb_ary_new();
 -  }
 -	break;
 -	case 20:
 -#line 185 "ragel/i18n/fi.c.rl"
 -	{
 -		MARK(content_start, p);
 -  }
 -	break;
 -	case 21:
 -#line 189 "ragel/i18n/fi.c.rl"
 -	{
 -    VALUE re_pipe, re_newline, re_backslash;
 -    VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
 -    rb_funcall(con, rb_intern("strip!"), 0);
 -    re_pipe      = rb_reg_regcomp(rb_str_new2("\\\\\\|"));
 -    re_newline   = rb_reg_regcomp(rb_str_new2("\\\\n"));
 -    re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_pipe,      rb_str_new2("|"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_newline,   rb_str_new2("\n"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\"));
 -
 -    rb_ary_push(current_row, con);
 -  }
 -	break;
 -	case 22:
 -#line 203 "ragel/i18n/fi.c.rl"
 -	{
 -    rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
 -  }
 -	break;
 -	case 23:
 -#line 207 "ragel/i18n/fi.c.rl"
 -	{
 -    int line;
 -    if (cs < lexer_first_final) {
 -      size_t count = 0;
 -      VALUE newstr_val;
 -      char *newstr;
 -      int newstr_count = 0;        
 -      size_t len;
 -      const char *buff;
 -      if (lexer->last_newline != 0) {
 -        len = LEN(last_newline, eof);
 -        buff = PTR_TO(last_newline);
 -      } else {
 -        len = strlen(data);
 -        buff = data;
 -      }
 -
 -      /* Allocate as a ruby string so that it gets cleaned up by GC */
 -      newstr_val = rb_str_new(buff, len);
 -      newstr = RSTRING_PTR(newstr_val);
 -
 -
 -      for (count = 0; count < len; count++) {
 -        if(buff[count] == 10) {
 -          newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
 -          break;
 -        } else {
 -          if (buff[count] == '%') {
 -            newstr[newstr_count++] = buff[count];
 -            newstr[newstr_count] = buff[count];
 -          } else {
 -            newstr[newstr_count] = buff[count];
 -          }
 -        }
 -        newstr_count++;
 -      }
 -
 -      line = lexer->line_number;
 -      lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
 -      raise_lexer_error(newstr, line);
 -    } else {
 -      rb_funcall(listener, rb_intern("eof"), 0);
 -    }
 -  }
 -	break;
 -#line 1116 "ext/gherkin_lexer_fi/gherkin_lexer_fi.c"
 -		}
 -	}
 -
 -_again:
 -	if ( cs == 0 )
 -		goto _out;
 -	if ( ++p != pe )
 -		goto _resume;
 -	_test_eof: {}
 -	if ( p == eof )
 -	{
 -	const char *__acts = _lexer_actions + _lexer_eof_actions[cs];
 -	unsigned int __nacts = (unsigned int) *__acts++;
 -	while ( __nacts-- > 0 ) {
 -		switch ( *__acts++ ) {
 -	case 23:
 -#line 207 "ragel/i18n/fi.c.rl"
 -	{
 -    int line;
 -    if (cs < lexer_first_final) {
 -      size_t count = 0;
 -      VALUE newstr_val;
 -      char *newstr;
 -      int newstr_count = 0;        
 -      size_t len;
 -      const char *buff;
 -      if (lexer->last_newline != 0) {
 -        len = LEN(last_newline, eof);
 -        buff = PTR_TO(last_newline);
 -      } else {
 -        len = strlen(data);
 -        buff = data;
 -      }
 -
 -      /* Allocate as a ruby string so that it gets cleaned up by GC */
 -      newstr_val = rb_str_new(buff, len);
 -      newstr = RSTRING_PTR(newstr_val);
 -
 -
 -      for (count = 0; count < len; count++) {
 -        if(buff[count] == 10) {
 -          newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
 -          break;
 -        } else {
 -          if (buff[count] == '%') {
 -            newstr[newstr_count++] = buff[count];
 -            newstr[newstr_count] = buff[count];
 -          } else {
 -            newstr[newstr_count] = buff[count];
 -          }
 -        }
 -        newstr_count++;
 -      }
 -
 -      line = lexer->line_number;
 -      lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
 -      raise_lexer_error(newstr, line);
 -    } else {
 -      rb_funcall(listener, rb_intern("eof"), 0);
 -    }
 -  }
 -	break;
 -#line 1179 "ext/gherkin_lexer_fi/gherkin_lexer_fi.c"
 -		}
 -	}
 -	}
 -
 -	_out: {}
 -	}
 -
 -#line 426 "ragel/i18n/fi.c.rl"
 -
 -    assert(p <= pe && "data overflow after parsing execute");
 -    assert(lexer->content_start <= len && "content starts after data end");
 -    assert(lexer->mark < len && "mark is after data end");
 -    
 -    /* Reset lexer by re-initializing the whole thing */
 -    lexer_init(lexer);
 -
 -    if (cs == lexer_error) {
 -      rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails.");
 -    } else {
 -      return Qtrue;
 -    }
 -  }
 -}
 -
 -void Init_gherkin_lexer_fi()
 -{
 -  mGherkin = rb_define_module("Gherkin");
 -  mGherkinLexer = rb_define_module_under(mGherkin, "Lexer");
 -  rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError"));
 -
 -  mCLexer = rb_define_module_under(mGherkin, "CLexer");
 -  cI18nLexer = rb_define_class_under(mCLexer, "Fi", rb_cObject);
 -  rb_define_alloc_func(cI18nLexer, CLexer_alloc);
 -  rb_define_method(cI18nLexer, "initialize", CLexer_init, 1);
 -  rb_define_method(cI18nLexer, "scan", CLexer_scan, 1);
 -}
 -
diff --cc ext/gherkin_lexer_fr/extconf.rb
index 669706c,669706c..0000000
deleted file mode 100644,100644
--- a/ext/gherkin_lexer_fr/extconf.rb
+++ /dev/null
@@@ -1,6 -1,6 +1,0 @@@
--require 'mkmf'
--CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags']
--$CFLAGS << ' -O0 -Wall' if CONFIG['CC'] =~ /gcc|clang/
--dir_config("gherkin_lexer_fr")
--have_library("c", "main")
--create_makefile("gherkin_lexer_fr")
diff --cc ext/gherkin_lexer_fr/gherkin_lexer_fr.c
index 6c44466,6bf4a3d..0000000
deleted file mode 100644,100644
--- a/ext/gherkin_lexer_fr/gherkin_lexer_fr.c
+++ /dev/null
@@@ -1,1493 -1,1493 +1,0 @@@
--
- #line 1 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/fr.c.rl"
- #include <assert.h>
- #include <ruby.h>
- 
- #if defined(_WIN32)
- #include <stddef.h>
- #endif
- 
- #ifdef HAVE_RUBY_RE_H
- #include <ruby/re.h>
- #else
- #include <re.h>
- #endif
- 
- #ifdef HAVE_RUBY_ENCODING_H
- #include <ruby/encoding.h>
- #define ENCODED_STR_NEW(ptr, len) \
-     rb_enc_str_new(ptr, len, rb_utf8_encoding())
- #else
- #define ENCODED_STR_NEW(ptr, len) \
-     rb_str_new(ptr, len)
- #endif
- 
- #ifndef RSTRING_PTR
- #define RSTRING_PTR(s) (RSTRING(s)->ptr)
- #endif
- 
- #ifndef RSTRING_LEN
- #define RSTRING_LEN(s) (RSTRING(s)->len)
- #endif
- 
- #define DATA_GET(FROM, TYPE, NAME) \
-   Data_Get_Struct(FROM, TYPE, NAME); \
-   if (NAME == NULL) { \
-     rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \
-   }
-  
- typedef struct lexer_state {
-   int content_len;
-   int line_number;
-   int current_line;
-   int start_col;
-   size_t mark;
-   size_t keyword_start;
-   size_t keyword_end;
-   size_t next_keyword_start;
-   size_t content_start;
-   size_t content_end;
-   size_t docstring_content_type_start;
-   size_t docstring_content_type_end;
-   size_t query_start;
-   size_t last_newline;
-   size_t final_newline;
- } lexer_state;
- 
- static VALUE mGherkin;
- static VALUE mGherkinLexer;
- static VALUE mCLexer;
- static VALUE cI18nLexer;
- static VALUE rb_eGherkinLexingError;
- 
- #define LEN(AT, P) (P - data - lexer->AT)
- #define MARK(M, P) (lexer->M = (P) - data)
- #define PTR_TO(P) (data + lexer->P)
- 
- #define STORE_KW_END_CON(EVENT) \
-   store_multiline_kw_con(listener, # EVENT, \
-     PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \
-     PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \
-     lexer->current_line, lexer->start_col); \
-     if (lexer->content_end != 0) { \
-       p = PTR_TO(content_end - 1); \
-     } \
-     lexer->content_end = 0
- 
- #define STORE_ATTR(ATTR) \
-     store_attr(listener, # ATTR, \
-       PTR_TO(content_start), LEN(content_start, p), \
-       lexer->line_number)
- 
- 
- #line 254 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/fr.c.rl"
- 
- 
- /** Data **/
- 
- #line 89 "ext/gherkin_lexer_fr/gherkin_lexer_fr.c"
- static const char _lexer_actions[] = {
- 	0, 1, 0, 1, 1, 1, 2, 1, 
- 	3, 1, 4, 1, 5, 1, 6, 1, 
- 	7, 1, 8, 1, 9, 1, 10, 1, 
- 	11, 1, 12, 1, 13, 1, 16, 1, 
- 	17, 1, 18, 1, 19, 1, 20, 1, 
- 	21, 1, 22, 1, 23, 2, 1, 18, 
- 	2, 4, 5, 2, 13, 0, 2, 14, 
- 	15, 2, 17, 0, 2, 17, 2, 2, 
- 	17, 16, 2, 17, 19, 2, 18, 6, 
- 	2, 18, 7, 2, 18, 8, 2, 18, 
- 	9, 2, 18, 10, 2, 18, 16, 2, 
- 	20, 21, 2, 22, 0, 2, 22, 2, 
- 	2, 22, 16, 2, 22, 19, 3, 3, 
- 	14, 15, 3, 5, 14, 15, 3, 11, 
- 	14, 15, 3, 12, 14, 15, 3, 13, 
- 	14, 15, 3, 14, 15, 18, 3, 17, 
- 	0, 11, 3, 17, 14, 15, 4, 1, 
- 	14, 15, 18, 4, 4, 5, 14, 15, 
- 	4, 17, 0, 14, 15, 5, 17, 0, 
- 	11, 14, 15
- };
- 
- static const short _lexer_key_offsets[] = {
- 	0, 0, 21, 22, 23, 24, 25, 26, 
- 	27, 28, 29, 30, 31, 32, 33, 36, 
- 	38, 40, 60, 61, 62, 64, 66, 71, 
- 	76, 81, 86, 90, 94, 96, 97, 98, 
- 	99, 100, 101, 102, 103, 104, 105, 106, 
- 	107, 108, 109, 110, 111, 112, 117, 124, 
- 	129, 130, 131, 132, 133, 134, 135, 136, 
- 	137, 138, 139, 140, 141, 142, 143, 160, 
- 	162, 164, 166, 168, 170, 172, 174, 176, 
- 	178, 180, 182, 184, 188, 208, 210, 212, 
- 	213, 214, 215, 216, 217, 218, 219, 220, 
- 	221, 228, 230, 232, 234, 236, 238, 240, 
- 	242, 244, 246, 248, 250, 252, 254, 256, 
- 	258, 259, 260, 261, 262, 263, 264, 265, 
- 	266, 267, 268, 269, 270, 271, 272, 273, 
- 	274, 275, 287, 289, 291, 293, 295, 297, 
- 	299, 301, 303, 305, 307, 309, 311, 313, 
- 	315, 317, 319, 321, 323, 325, 327, 329, 
- 	331, 333, 335, 337, 339, 341, 343, 345, 
- 	347, 349, 351, 353, 355, 357, 359, 361, 
- 	363, 365, 367, 369, 371, 373, 375, 377, 
- 	379, 381, 383, 385, 387, 390, 392, 394, 
- 	396, 398, 400, 402, 404, 406, 407, 408, 
- 	409, 410, 411, 413, 414, 415, 416, 417, 
- 	418, 419, 420, 421, 422, 424, 425, 426, 
- 	427, 428, 429, 430, 431, 432, 433, 434, 
- 	435, 451, 453, 455, 457, 459, 461, 463, 
- 	465, 467, 469, 471, 473, 475, 479, 482, 
- 	484, 486, 488, 490, 492, 494, 496, 498, 
- 	500, 502, 504, 506, 508, 510, 512, 514, 
- 	516, 518, 520, 522, 525, 527, 529, 531, 
- 	533, 535, 537, 539, 541, 543, 545, 547, 
- 	549, 551, 553, 555, 557, 559, 561, 563, 
- 	565, 568, 570, 572, 574, 576, 578, 580, 
- 	583, 585, 587, 589, 591, 593, 595, 597, 
- 	599, 601, 602, 603, 604, 605, 607, 608, 
- 	609, 610, 611, 612, 613, 614, 615, 616, 
- 	617, 635, 637, 639, 641, 643, 645, 647, 
- 	649, 651, 653, 655, 657, 659, 663, 666, 
- 	668, 670, 672, 674, 676, 678, 680, 682, 
- 	684, 686, 688, 690, 692, 694, 696, 698, 
- 	700, 702, 704, 706, 708, 710, 712, 714, 
- 	716, 718, 720, 722, 725, 727, 729, 731, 
- 	733, 735, 737, 739, 741, 743, 745, 747, 
- 	749, 751, 753, 755, 757, 759, 761, 763, 
- 	766, 768, 770, 772, 774, 776, 778, 780, 
- 	782, 784, 787, 789, 791, 793, 795, 797, 
- 	799, 801, 803, 805, 807, 809, 811, 814, 
- 	816, 818, 819, 820, 824, 830, 833, 835, 
- 	841, 861, 864, 866, 868, 870, 872, 874, 
- 	876, 878, 880, 882, 884, 886, 888, 890, 
- 	892, 894, 896, 898, 900, 902, 904, 907, 
- 	909, 911, 913, 915, 917, 919, 921, 923, 
- 	925, 927, 929, 931, 933, 935, 937, 939, 
- 	941, 943, 945, 947, 950, 952, 954, 956, 
- 	958, 960, 962, 964, 966, 968, 971, 973, 
- 	975, 977, 979, 981, 983, 985, 987, 989, 
- 	991, 993, 995, 998, 1000, 1002, 1004, 1005, 
- 	1006
- };
- 
- static const char _lexer_trans_keys[] = {
- 	-61, -17, 10, 32, 34, 35, 37, 42, 
- 	64, 65, 67, 69, 70, 76, 77, 80, 
- 	81, 83, 124, 9, 13, -119, 116, 97, 
- 	110, 116, 32, 100, 111, 110, 110, -61, 
- 	-87, 32, 101, 115, 10, 13, 10, 13, 
- 	-61, 10, 32, 34, 35, 37, 42, 64, 
- 	65, 67, 69, 70, 76, 77, 80, 81, 
- 	83, 124, 9, 13, 34, 34, 10, 13, 
- 	10, 13, 10, 32, 34, 9, 13, 10, 
- 	32, 34, 9, 13, 10, 32, 34, 9, 
- 	13, 10, 32, 34, 9, 13, 10, 32, 
- 	9, 13, 10, 32, 9, 13, 10, 13, 
- 	10, 95, 70, 69, 65, 84, 85, 82, 
- 	69, 95, 69, 78, 68, 95, 37, 32, 
- 	13, 32, 64, 9, 10, 9, 10, 13, 
- 	32, 64, 11, 12, 10, 32, 64, 9, 
- 	13, 108, 111, 114, 115, 111, 110, 116, 
- 	101, 120, 116, 101, 58, 10, 10, -61, 
- 	10, 32, 35, 37, 42, 64, 65, 69, 
- 	70, 76, 77, 80, 81, 83, 9, 13, 
- 	-119, 10, 10, 116, 10, 97, 10, 110, 
- 	10, 116, 10, 32, 10, 100, 10, 111, 
- 	10, 110, 10, 110, -61, 10, -87, 10, 
- 	10, 32, 101, 115, -61, 10, 32, 34, 
- 	35, 37, 42, 64, 65, 67, 69, 70, 
- 	76, 77, 80, 81, 83, 124, 9, 13, 
- 	116, 120, 32, 97, 101, 109, 112, 108, 
- 	101, 115, 58, 10, 10, 10, 32, 35, 
- 	70, 124, 9, 13, 10, 111, 10, 110, 
- 	10, 99, 10, 116, 10, 105, 10, 111, 
- 	10, 110, 10, 110, 10, 97, 10, 108, 
- 	10, 105, 10, 116, -61, 10, -87, 10, 
- 	10, 58, 111, 110, 99, 116, 105, 111, 
- 	110, 110, 97, 108, 105, 116, -61, -87, 
- 	58, 10, 10, 10, 32, 35, 37, 64, 
- 	67, 69, 70, 80, 83, 9, 13, 10, 
- 	95, 10, 70, 10, 69, 10, 65, 10, 
- 	84, 10, 85, 10, 82, 10, 69, 10, 
- 	95, 10, 69, 10, 78, 10, 68, 10, 
- 	95, 10, 37, 10, 111, 10, 110, 10, 
- 	116, 10, 101, 10, 120, 10, 116, 10, 
- 	101, 10, 58, 10, 120, 10, 101, 10, 
- 	109, 10, 112, 10, 108, 10, 101, 10, 
- 	115, 10, 111, 10, 110, 10, 99, 10, 
- 	116, 10, 105, 10, 111, 10, 110, 10, 
- 	110, 10, 97, 10, 108, 10, 105, 10, 
- 	116, -61, 10, -87, 10, 10, 108, 10, 
- 	97, 10, 110, 10, 32, 10, 100, 10, 
- 	117, 10, 32, 10, 83, 115, 10, 99, 
- 	-61, 10, -87, 10, 10, 110, 10, 97, 
- 	10, 114, 10, 105, 10, 111, 111, 114, 
- 	115, 113, 117, 39, 101, 97, 105, 108, 
- 	97, 110, 32, 100, 117, 32, 83, 115, 
- 	99, -61, -87, 110, 97, 114, 105, 111, 
- 	58, 10, 10, -61, 10, 32, 35, 37, 
- 	42, 64, 65, 69, 70, 76, 77, 81, 
- 	83, 9, 13, -119, 10, 10, 116, 10, 
- 	97, 10, 110, 10, 116, 10, 32, 10, 
- 	100, 10, 111, 10, 110, 10, 110, -61, 
- 	10, -87, 10, 10, 32, 101, 115, 10, 
- 	32, 115, 10, 32, 10, 95, 10, 70, 
- 	10, 69, 10, 65, 10, 84, 10, 85, 
- 	10, 82, 10, 69, 10, 95, 10, 69, 
- 	10, 78, 10, 68, 10, 95, 10, 37, 
- 	10, 108, 10, 111, 10, 114, 10, 115, 
- 	10, 116, 10, 32, 97, 10, 111, 10, 
- 	110, 10, 99, 10, 116, 10, 105, 10, 
- 	111, 10, 110, 10, 110, 10, 97, 10, 
- 	108, 10, 105, 10, 116, -61, 10, -87, 
- 	10, 10, 58, 10, 111, 10, 114, 10, 
- 	115, 10, 113, 10, 117, 10, 39, 101, 
- 	10, 97, 10, 105, 10, 117, 10, 97, 
- 	10, 110, 10, 100, 10, 99, 111, -61, 
- 	10, -87, 10, 10, 110, 10, 97, 10, 
- 	114, 10, 105, 10, 111, 10, 105, 10, 
- 	116, 117, 97, 110, 100, 99, 111, -61, 
- 	-87, 110, 97, 114, 105, 111, 58, 10, 
- 	10, -61, 10, 32, 35, 37, 42, 64, 
- 	65, 67, 69, 70, 76, 77, 80, 81, 
- 	83, 9, 13, -119, 10, 10, 116, 10, 
- 	97, 10, 110, 10, 116, 10, 32, 10, 
- 	100, 10, 111, 10, 110, 10, 110, -61, 
- 	10, -87, 10, 10, 32, 101, 115, 10, 
- 	32, 115, 10, 32, 10, 95, 10, 70, 
- 	10, 69, 10, 65, 10, 84, 10, 85, 
- 	10, 82, 10, 69, 10, 95, 10, 69, 
- 	10, 78, 10, 68, 10, 95, 10, 37, 
- 	10, 108, 10, 111, 10, 114, 10, 115, 
- 	10, 111, 10, 110, 10, 116, 10, 101, 
- 	10, 120, 10, 116, 10, 101, 10, 58, 
- 	10, 116, 10, 32, 97, 10, 111, 10, 
- 	110, 10, 99, 10, 116, 10, 105, 10, 
- 	111, 10, 110, 10, 110, 10, 97, 10, 
- 	108, 10, 105, 10, 116, -61, 10, -87, 
- 	10, 10, 111, 10, 114, 10, 115, 10, 
- 	113, 10, 117, 10, 39, 101, 10, 97, 
- 	10, 105, 10, 108, 10, 97, 10, 110, 
- 	10, 32, 10, 100, 10, 117, 10, 32, 
- 	10, 83, 115, 10, 99, -61, 10, -87, 
- 	10, 10, 110, 10, 97, 10, 114, 10, 
- 	105, 10, 111, 10, 117, 10, 97, 10, 
- 	110, 10, 100, 10, 99, 111, 10, 105, 
- 	10, 116, 105, 116, 32, 124, 9, 13, 
- 	10, 32, 92, 124, 9, 13, 10, 92, 
- 	124, 10, 92, 10, 32, 92, 124, 9, 
- 	13, -61, 10, 32, 34, 35, 37, 42, 
- 	64, 65, 67, 69, 70, 76, 77, 80, 
- 	81, 83, 124, 9, 13, 10, 32, 115, 
- 	10, 32, 10, 95, 10, 70, 10, 69, 
- 	10, 65, 10, 84, 10, 85, 10, 82, 
- 	10, 69, 10, 95, 10, 69, 10, 78, 
- 	10, 68, 10, 95, 10, 37, 10, 108, 
- 	10, 111, 10, 114, 10, 115, 10, 116, 
- 	10, 32, 97, 10, 111, 10, 110, 10, 
- 	99, 10, 116, 10, 105, 10, 111, 10, 
- 	110, 10, 110, 10, 97, 10, 108, 10, 
- 	105, 10, 116, -61, 10, -87, 10, 10, 
- 	58, 10, 111, 10, 114, 10, 115, 10, 
- 	113, 10, 117, 10, 39, 101, 10, 97, 
- 	10, 105, 10, 108, 10, 97, 10, 110, 
- 	10, 32, 10, 100, 10, 117, 10, 32, 
- 	10, 83, 115, 10, 99, -61, 10, -87, 
- 	10, 10, 110, 10, 97, 10, 114, 10, 
- 	105, 10, 111, 10, 117, 10, 97, 10, 
- 	110, 10, 100, 10, 99, 111, 10, 105, 
- 	10, 116, 32, 115, -69, -65, 0
- };
- 
- static const char _lexer_single_lengths[] = {
- 	0, 19, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 3, 2, 
- 	2, 18, 1, 1, 2, 2, 3, 3, 
- 	3, 3, 2, 2, 2, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 3, 5, 3, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 15, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 4, 18, 2, 2, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	5, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 10, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 3, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 1, 1, 1, 
- 	1, 1, 2, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 2, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	14, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 4, 3, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 3, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	3, 2, 2, 2, 2, 2, 2, 3, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 1, 1, 1, 1, 2, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	16, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 4, 3, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 3, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 3, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 3, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 3, 2, 
- 	2, 1, 1, 2, 4, 3, 2, 4, 
- 	18, 3, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 3, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 3, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 3, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 3, 2, 2, 2, 1, 1, 
- 	0
- };
- 
- static const char _lexer_range_lengths[] = {
- 	0, 1, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 1, 0, 0, 0, 0, 1, 1, 
- 	1, 1, 1, 1, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 1, 1, 1, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 1, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 1, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	1, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 1, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	1, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	1, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 1, 1, 0, 0, 1, 
- 	1, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0
- };
- 
- static const short _lexer_index_offsets[] = {
- 	0, 0, 21, 23, 25, 27, 29, 31, 
- 	33, 35, 37, 39, 41, 43, 45, 49, 
- 	52, 55, 75, 77, 79, 82, 85, 90, 
- 	95, 100, 105, 109, 113, 116, 118, 120, 
- 	122, 124, 126, 128, 130, 132, 134, 136, 
- 	138, 140, 142, 144, 146, 148, 153, 160, 
- 	165, 167, 169, 171, 173, 175, 177, 179, 
- 	181, 183, 185, 187, 189, 191, 193, 210, 
- 	213, 216, 219, 222, 225, 228, 231, 234, 
- 	237, 240, 243, 246, 251, 271, 274, 277, 
- 	279, 281, 283, 285, 287, 289, 291, 293, 
- 	295, 302, 305, 308, 311, 314, 317, 320, 
- 	323, 326, 329, 332, 335, 338, 341, 344, 
- 	347, 349, 351, 353, 355, 357, 359, 361, 
- 	363, 365, 367, 369, 371, 373, 375, 377, 
- 	379, 381, 393, 396, 399, 402, 405, 408, 
- 	411, 414, 417, 420, 423, 426, 429, 432, 
- 	435, 438, 441, 444, 447, 450, 453, 456, 
- 	459, 462, 465, 468, 471, 474, 477, 480, 
- 	483, 486, 489, 492, 495, 498, 501, 504, 
- 	507, 510, 513, 516, 519, 522, 525, 528, 
- 	531, 534, 537, 540, 543, 547, 550, 553, 
- 	556, 559, 562, 565, 568, 571, 573, 575, 
- 	577, 579, 581, 584, 586, 588, 590, 592, 
- 	594, 596, 598, 600, 602, 605, 607, 609, 
- 	611, 613, 615, 617, 619, 621, 623, 625, 
- 	627, 643, 646, 649, 652, 655, 658, 661, 
- 	664, 667, 670, 673, 676, 679, 684, 688, 
- 	691, 694, 697, 700, 703, 706, 709, 712, 
- 	715, 718, 721, 724, 727, 730, 733, 736, 
- 	739, 742, 745, 748, 752, 755, 758, 761, 
- 	764, 767, 770, 773, 776, 779, 782, 785, 
- 	788, 791, 794, 797, 800, 803, 806, 809, 
- 	812, 816, 819, 822, 825, 828, 831, 834, 
- 	838, 841, 844, 847, 850, 853, 856, 859, 
- 	862, 865, 867, 869, 871, 873, 876, 878, 
- 	880, 882, 884, 886, 888, 890, 892, 894, 
- 	896, 914, 917, 920, 923, 926, 929, 932, 
- 	935, 938, 941, 944, 947, 950, 955, 959, 
- 	962, 965, 968, 971, 974, 977, 980, 983, 
- 	986, 989, 992, 995, 998, 1001, 1004, 1007, 
- 	1010, 1013, 1016, 1019, 1022, 1025, 1028, 1031, 
- 	1034, 1037, 1040, 1043, 1047, 1050, 1053, 1056, 
- 	1059, 1062, 1065, 1068, 1071, 1074, 1077, 1080, 
- 	1083, 1086, 1089, 1092, 1095, 1098, 1101, 1104, 
- 	1108, 1111, 1114, 1117, 1120, 1123, 1126, 1129, 
- 	1132, 1135, 1139, 1142, 1145, 1148, 1151, 1154, 
- 	1157, 1160, 1163, 1166, 1169, 1172, 1175, 1179, 
- 	1182, 1185, 1187, 1189, 1193, 1199, 1203, 1206, 
- 	1212, 1232, 1236, 1239, 1242, 1245, 1248, 1251, 
- 	1254, 1257, 1260, 1263, 1266, 1269, 1272, 1275, 
- 	1278, 1281, 1284, 1287, 1290, 1293, 1296, 1300, 
- 	1303, 1306, 1309, 1312, 1315, 1318, 1321, 1324, 
- 	1327, 1330, 1333, 1336, 1339, 1342, 1345, 1348, 
- 	1351, 1354, 1357, 1360, 1364, 1367, 1370, 1373, 
- 	1376, 1379, 1382, 1385, 1388, 1391, 1395, 1398, 
- 	1401, 1404, 1407, 1410, 1413, 1416, 1419, 1422, 
- 	1425, 1428, 1431, 1435, 1438, 1441, 1444, 1446, 
- 	1448
- };
- 
- static const short _lexer_trans_targs[] = {
- 	2, 462, 17, 17, 18, 28, 30, 44, 
- 	45, 48, 52, 77, 104, 181, 187, 189, 
- 	281, 285, 387, 17, 0, 3, 0, 4, 
- 	0, 5, 0, 6, 0, 7, 0, 8, 
- 	0, 9, 0, 10, 0, 11, 0, 12, 
- 	0, 13, 0, 14, 0, 15, 461, 44, 
- 	0, 17, 29, 16, 17, 29, 16, 2, 
- 	17, 17, 18, 28, 30, 44, 45, 48, 
- 	52, 77, 104, 181, 187, 189, 281, 285, 
- 	387, 17, 0, 19, 0, 20, 0, 22, 
- 	21, 21, 22, 21, 21, 23, 23, 24, 
- 	23, 23, 23, 23, 24, 23, 23, 23, 
- 	23, 25, 23, 23, 23, 23, 26, 23, 
- 	23, 17, 27, 27, 0, 17, 27, 27, 
- 	0, 17, 29, 28, 17, 0, 31, 0, 
- 	32, 0, 33, 0, 34, 0, 35, 0, 
- 	36, 0, 37, 0, 38, 0, 39, 0, 
- 	40, 0, 41, 0, 42, 0, 43, 0, 
- 	464, 0, 15, 0, 0, 0, 0, 0, 
- 	46, 47, 17, 47, 47, 45, 46, 46, 
- 	17, 47, 45, 47, 0, 49, 0, 50, 
- 	0, 51, 0, 44, 0, 53, 0, 54, 
- 	0, 55, 0, 56, 0, 57, 0, 58, 
- 	0, 59, 0, 60, 0, 62, 61, 62, 
- 	61, 63, 62, 62, 17, 395, 394, 17, 
- 	409, 413, 415, 430, 436, 438, 454, 458, 
- 	62, 61, 64, 62, 61, 62, 65, 61, 
- 	62, 66, 61, 62, 67, 61, 62, 68, 
- 	61, 62, 69, 61, 62, 70, 61, 62, 
- 	71, 61, 62, 72, 61, 62, 73, 61, 
- 	74, 62, 61, 75, 62, 61, 62, 76, 
- 	393, 394, 61, 2, 17, 17, 18, 28, 
- 	30, 44, 45, 48, 52, 77, 104, 181, 
- 	187, 189, 281, 285, 387, 17, 0, 78, 
- 	79, 0, 15, 5, 0, 80, 0, 81, 
- 	0, 82, 0, 83, 0, 84, 0, 85, 
- 	0, 86, 0, 88, 87, 88, 87, 88, 
- 	88, 17, 89, 17, 88, 87, 88, 90, 
- 	87, 88, 91, 87, 88, 92, 87, 88, 
- 	93, 87, 88, 94, 87, 88, 95, 87, 
- 	88, 96, 87, 88, 97, 87, 88, 98, 
- 	87, 88, 99, 87, 88, 100, 87, 88, 
- 	101, 87, 102, 88, 87, 103, 88, 87, 
- 	88, 76, 87, 105, 0, 106, 0, 107, 
- 	0, 108, 0, 109, 0, 110, 0, 111, 
- 	0, 112, 0, 113, 0, 114, 0, 115, 
- 	0, 116, 0, 117, 0, 118, 0, 119, 
- 	0, 121, 120, 121, 120, 121, 121, 17, 
- 	122, 17, 136, 144, 151, 165, 173, 121, 
- 	120, 121, 123, 120, 121, 124, 120, 121, 
- 	125, 120, 121, 126, 120, 121, 127, 120, 
- 	121, 128, 120, 121, 129, 120, 121, 130, 
- 	120, 121, 131, 120, 121, 132, 120, 121, 
- 	133, 120, 121, 134, 120, 121, 135, 120, 
- 	121, 17, 120, 121, 137, 120, 121, 138, 
- 	120, 121, 139, 120, 121, 140, 120, 121, 
- 	141, 120, 121, 142, 120, 121, 143, 120, 
- 	121, 76, 120, 121, 145, 120, 121, 146, 
- 	120, 121, 147, 120, 121, 148, 120, 121, 
- 	149, 120, 121, 150, 120, 121, 143, 120, 
- 	121, 152, 120, 121, 153, 120, 121, 154, 
- 	120, 121, 155, 120, 121, 156, 120, 121, 
- 	157, 120, 121, 158, 120, 121, 159, 120, 
- 	121, 160, 120, 121, 161, 120, 121, 162, 
- 	120, 121, 163, 120, 164, 121, 120, 143, 
- 	121, 120, 121, 166, 120, 121, 167, 120, 
- 	121, 168, 120, 121, 169, 120, 121, 170, 
- 	120, 121, 171, 120, 121, 172, 120, 121, 
- 	173, 173, 120, 121, 174, 120, 175, 121, 
- 	120, 176, 121, 120, 121, 177, 120, 121, 
- 	178, 120, 121, 179, 120, 121, 180, 120, 
- 	121, 143, 120, 182, 0, 183, 0, 184, 
- 	0, 185, 0, 186, 0, 15, 44, 0, 
- 	188, 0, 51, 0, 190, 0, 191, 0, 
- 	192, 0, 193, 0, 194, 0, 195, 0, 
- 	196, 0, 197, 197, 0, 198, 0, 199, 
- 	0, 200, 0, 201, 0, 202, 0, 203, 
- 	0, 204, 0, 205, 0, 206, 0, 208, 
- 	207, 208, 207, 209, 208, 208, 17, 224, 
- 	223, 17, 238, 242, 244, 259, 265, 267, 
- 	271, 208, 207, 210, 208, 207, 208, 211, 
- 	207, 208, 212, 207, 208, 213, 207, 208, 
- 	214, 207, 208, 215, 207, 208, 216, 207, 
- 	208, 217, 207, 208, 218, 207, 208, 219, 
- 	207, 220, 208, 207, 221, 208, 207, 208, 
- 	76, 222, 223, 207, 208, 76, 223, 207, 
- 	208, 76, 207, 208, 225, 207, 208, 226, 
- 	207, 208, 227, 207, 208, 228, 207, 208, 
- 	229, 207, 208, 230, 207, 208, 231, 207, 
- 	208, 232, 207, 208, 233, 207, 208, 234, 
- 	207, 208, 235, 207, 208, 236, 207, 208, 
- 	237, 207, 208, 17, 207, 208, 239, 207, 
- 	208, 240, 207, 208, 241, 207, 208, 223, 
- 	207, 208, 243, 207, 208, 76, 212, 207, 
- 	208, 245, 207, 208, 246, 207, 208, 247, 
- 	207, 208, 248, 207, 208, 249, 207, 208, 
- 	250, 207, 208, 251, 207, 208, 252, 207, 
- 	208, 253, 207, 208, 254, 207, 208, 255, 
- 	207, 208, 256, 207, 257, 208, 207, 258, 
- 	208, 207, 208, 76, 207, 208, 260, 207, 
- 	208, 261, 207, 208, 262, 207, 208, 263, 
- 	207, 208, 264, 207, 208, 76, 223, 207, 
- 	208, 266, 207, 208, 241, 207, 208, 268, 
- 	207, 208, 269, 207, 208, 270, 207, 208, 
- 	223, 207, 208, 272, 279, 207, 273, 208, 
- 	207, 274, 208, 207, 208, 275, 207, 208, 
- 	276, 207, 208, 277, 207, 208, 278, 207, 
- 	208, 258, 207, 208, 280, 207, 208, 223, 
- 	207, 282, 0, 283, 0, 284, 0, 44, 
- 	0, 286, 385, 0, 287, 0, 288, 0, 
- 	289, 0, 290, 0, 291, 0, 292, 0, 
- 	293, 0, 294, 0, 296, 295, 296, 295, 
- 	297, 296, 296, 17, 312, 311, 17, 326, 
- 	330, 338, 340, 354, 360, 362, 378, 382, 
- 	296, 295, 298, 296, 295, 296, 299, 295, 
- 	296, 300, 295, 296, 301, 295, 296, 302, 
- 	295, 296, 303, 295, 296, 304, 295, 296, 
- 	305, 295, 296, 306, 295, 296, 307, 295, 
- 	308, 296, 295, 309, 296, 295, 296, 76, 
- 	310, 311, 295, 296, 76, 311, 295, 296, 
- 	76, 295, 296, 313, 295, 296, 314, 295, 
- 	296, 315, 295, 296, 316, 295, 296, 317, 
- 	295, 296, 318, 295, 296, 319, 295, 296, 
- 	320, 295, 296, 321, 295, 296, 322, 295, 
- 	296, 323, 295, 296, 324, 295, 296, 325, 
- 	295, 296, 17, 295, 296, 327, 295, 296, 
- 	328, 295, 296, 329, 295, 296, 311, 295, 
- 	296, 331, 295, 296, 332, 295, 296, 333, 
- 	295, 296, 334, 295, 296, 335, 295, 296, 
- 	336, 295, 296, 337, 295, 296, 76, 295, 
- 	296, 339, 295, 296, 76, 300, 295, 296, 
- 	341, 295, 296, 342, 295, 296, 343, 295, 
- 	296, 344, 295, 296, 345, 295, 296, 346, 
- 	295, 296, 347, 295, 296, 348, 295, 296, 
- 	349, 295, 296, 350, 295, 296, 351, 295, 
- 	296, 352, 295, 353, 296, 295, 337, 296, 
- 	295, 296, 355, 295, 296, 356, 295, 296, 
- 	357, 295, 296, 358, 295, 296, 359, 295, 
- 	296, 76, 311, 295, 296, 361, 295, 296, 
- 	329, 295, 296, 363, 295, 296, 364, 295, 
- 	296, 365, 295, 296, 366, 295, 296, 367, 
- 	295, 296, 368, 295, 296, 369, 295, 296, 
- 	370, 370, 295, 296, 371, 295, 372, 296, 
- 	295, 373, 296, 295, 296, 374, 295, 296, 
- 	375, 295, 296, 376, 295, 296, 377, 295, 
- 	296, 337, 295, 296, 379, 295, 296, 380, 
- 	295, 296, 381, 295, 296, 311, 295, 296, 
- 	371, 383, 295, 296, 384, 295, 296, 311, 
- 	295, 386, 0, 44, 0, 387, 388, 387, 
- 	0, 392, 391, 390, 388, 391, 389, 0, 
- 	390, 388, 389, 0, 390, 389, 392, 391, 
- 	390, 388, 391, 389, 2, 392, 392, 18, 
- 	28, 30, 44, 45, 48, 52, 77, 104, 
- 	181, 187, 189, 281, 285, 387, 392, 0, 
- 	62, 76, 394, 61, 62, 76, 61, 62, 
- 	396, 61, 62, 397, 61, 62, 398, 61, 
- 	62, 399, 61, 62, 400, 61, 62, 401, 
- 	61, 62, 402, 61, 62, 403, 61, 62, 
- 	404, 61, 62, 405, 61, 62, 406, 61, 
- 	62, 407, 61, 62, 408, 61, 62, 17, 
- 	61, 62, 410, 61, 62, 411, 61, 62, 
- 	412, 61, 62, 394, 61, 62, 414, 61, 
- 	62, 76, 66, 61, 62, 416, 61, 62, 
- 	417, 61, 62, 418, 61, 62, 419, 61, 
- 	62, 420, 61, 62, 421, 61, 62, 422, 
- 	61, 62, 423, 61, 62, 424, 61, 62, 
- 	425, 61, 62, 426, 61, 62, 427, 61, 
- 	428, 62, 61, 429, 62, 61, 62, 76, 
- 	61, 62, 431, 61, 62, 432, 61, 62, 
- 	433, 61, 62, 434, 61, 62, 435, 61, 
- 	62, 76, 394, 61, 62, 437, 61, 62, 
- 	412, 61, 62, 439, 61, 62, 440, 61, 
- 	62, 441, 61, 62, 442, 61, 62, 443, 
- 	61, 62, 444, 61, 62, 445, 61, 62, 
- 	446, 446, 61, 62, 447, 61, 448, 62, 
- 	61, 449, 62, 61, 62, 450, 61, 62, 
- 	451, 61, 62, 452, 61, 62, 453, 61, 
- 	62, 429, 61, 62, 455, 61, 62, 456, 
- 	61, 62, 457, 61, 62, 394, 61, 62, 
- 	447, 459, 61, 62, 460, 61, 62, 394, 
- 	61, 15, 44, 0, 463, 0, 17, 0, 
- 	0, 0
- };
- 
- static const unsigned char _lexer_trans_actions[] = {
- 	29, 0, 54, 0, 5, 1, 0, 29, 
- 	1, 29, 29, 29, 29, 29, 29, 29, 
- 	29, 29, 35, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 0, 0, 
- 	43, 149, 126, 57, 110, 23, 0, 29, 
- 	54, 0, 5, 1, 0, 29, 1, 29, 
- 	29, 29, 29, 29, 29, 29, 29, 29, 
- 	35, 0, 43, 0, 43, 0, 43, 139, 
- 	48, 9, 106, 11, 0, 134, 45, 45, 
- 	45, 3, 122, 33, 33, 33, 0, 122, 
- 	33, 33, 33, 0, 122, 33, 0, 33, 
- 	0, 102, 7, 7, 43, 54, 0, 0, 
- 	43, 114, 25, 0, 54, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 43, 43, 43, 43, 
- 	0, 27, 118, 27, 27, 51, 27, 0, 
- 	54, 0, 1, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 144, 57, 54, 
- 	0, 84, 54, 0, 72, 33, 84, 72, 
- 	84, 84, 84, 84, 84, 84, 84, 84, 
- 	0, 0, 0, 54, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	0, 54, 0, 0, 54, 0, 54, 15, 
- 	0, 0, 0, 63, 130, 31, 60, 57, 
- 	31, 63, 57, 63, 63, 63, 63, 63, 
- 	63, 63, 63, 63, 66, 31, 43, 0, 
- 	0, 43, 0, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 144, 57, 54, 0, 54, 
- 	0, 81, 84, 81, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 0, 54, 0, 0, 54, 0, 
- 	54, 21, 0, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 144, 57, 54, 0, 54, 0, 69, 
- 	33, 69, 84, 84, 84, 84, 84, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 13, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 13, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 0, 54, 0, 0, 
- 	54, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 0, 54, 0, 0, 0, 54, 
- 	0, 0, 54, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 144, 
- 	57, 54, 0, 84, 54, 0, 78, 33, 
- 	84, 78, 84, 84, 84, 84, 84, 84, 
- 	84, 0, 0, 0, 54, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 0, 54, 0, 0, 54, 0, 54, 
- 	19, 0, 0, 0, 54, 19, 0, 0, 
- 	54, 19, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 19, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 19, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 0, 54, 0, 0, 
- 	54, 0, 54, 19, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 19, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 0, 0, 54, 
- 	0, 0, 54, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 144, 57, 54, 0, 
- 	84, 54, 0, 75, 33, 84, 75, 84, 
- 	84, 84, 84, 84, 84, 84, 84, 84, 
- 	0, 0, 0, 54, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	0, 54, 0, 0, 54, 0, 54, 17, 
- 	0, 0, 0, 54, 17, 0, 0, 54, 
- 	17, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 17, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 17, 0, 
- 	54, 0, 0, 54, 17, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 0, 54, 0, 0, 54, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 17, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 0, 54, 0, 0, 0, 54, 
- 	0, 0, 54, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 0, 43, 0, 43, 0, 0, 0, 
- 	43, 54, 37, 37, 87, 37, 37, 43, 
- 	0, 39, 0, 43, 0, 0, 54, 0, 
- 	0, 39, 0, 0, 96, 54, 0, 93, 
- 	90, 41, 96, 90, 96, 96, 96, 96, 
- 	96, 96, 96, 96, 96, 99, 0, 43, 
- 	54, 15, 0, 0, 54, 15, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 15, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 15, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	0, 54, 0, 0, 54, 0, 54, 15, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 15, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 0, 54, 0, 0, 0, 54, 
- 	0, 0, 54, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 0, 0, 43, 0, 43, 0, 43, 
- 	0, 0
- };
- 
- static const unsigned char _lexer_eof_actions[] = {
- 	0, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43
- };
- 
- static const int lexer_start = 1;
- static const int lexer_first_final = 464;
- static const int lexer_error = 0;
- 
- static const int lexer_en_main = 1;
- 
- 
- #line 258 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/fr.c.rl"
- 
- static VALUE 
- unindent(VALUE con, int start_col)
- {
-   VALUE re;
-   // Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters
-   char pat[32]; 
-   snprintf(pat, 32, "^[\t ]{0,%d}", start_col); 
-   re = rb_reg_regcomp(rb_str_new2(pat));
-   rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2(""));
- 
-   return Qnil;
- 
- }
- 
- static void 
- store_kw_con(VALUE listener, const char * event_name, 
-              const char * keyword_at, size_t keyword_length, 
-              const char * at,         size_t length, 
-              int current_line)
- {
-   VALUE con = Qnil, kw = Qnil;
-   kw = ENCODED_STR_NEW(keyword_at, keyword_length);
-   con = ENCODED_STR_NEW(at, length);
-   rb_funcall(con, rb_intern("strip!"), 0);
-   rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); 
- }
- 
- static void
- store_multiline_kw_con(VALUE listener, const char * event_name,
-                       const char * keyword_at, size_t keyword_length,
-                       const char * at,         size_t length,
-                       int current_line, int start_col)
- {
-   VALUE split;
-   VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil;
- 
-   kw = ENCODED_STR_NEW(keyword_at, keyword_length);
-   con = ENCODED_STR_NEW(at, length);
- 
-   unindent(con, start_col);
-   
-   split = rb_str_split(con, "\n");
- 
-   name = rb_funcall(split, rb_intern("shift"), 0);
-   desc = rb_ary_join(split, rb_str_new2( "\n" ));
- 
-   if( name == Qnil ) 
-   {
-     name = rb_str_new2("");
-   }
-   if( rb_funcall(desc, rb_intern("size"), 0) == 0) 
-   {
-     desc = rb_str_new2("");
-   }
-   rb_funcall(name, rb_intern("strip!"), 0);
-   rb_funcall(desc, rb_intern("rstrip!"), 0);
-   rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); 
- }
- 
- static void 
- store_attr(VALUE listener, const char * attr_type,
-            const char * at, size_t length, 
-            int line)
- {
-   VALUE val = ENCODED_STR_NEW(at, length);
-   rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line));
- }
- static void 
- store_docstring_content(VALUE listener, 
-           int start_col, 
-           const char *type_at, size_t type_length,
-           const char *at, size_t length, 
-           int current_line)
- {
-   VALUE re2;
-   VALUE unescape_escaped_quotes;
-   VALUE con = ENCODED_STR_NEW(at, length);
-   VALUE con_type = ENCODED_STR_NEW(type_at, type_length);
- 
-   unindent(con, start_col);
- 
-   re2 = rb_reg_regcomp(rb_str_new2("\r\\Z"));
-   unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\""));
-   rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2(""));
-   rb_funcall(con_type, rb_intern("strip!"), 0);
-   rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\""));
-   rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line));
- }
- static void 
- raise_lexer_error(const char * at, int line)
- { 
-   rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at);
- }
- 
- static void lexer_init(lexer_state *lexer) {
-   lexer->content_start = 0;
-   lexer->content_end = 0;
-   lexer->content_len = 0;
-   lexer->docstring_content_type_start = 0;
-   lexer->docstring_content_type_end = 0;
-   lexer->mark = 0;
-   lexer->keyword_start = 0;
-   lexer->keyword_end = 0;
-   lexer->next_keyword_start = 0;
-   lexer->line_number = 1;
-   lexer->last_newline = 0;
-   lexer->final_newline = 0;
-   lexer->start_col = 0;
- }
- 
- static VALUE CLexer_alloc(VALUE klass)
- {
-   VALUE obj;
-   lexer_state *lxr = ALLOC(lexer_state);
-   lexer_init(lxr);
- 
-   obj = Data_Wrap_Struct(klass, NULL, -1, lxr);
- 
-   return obj;
- }
- 
- static VALUE CLexer_init(VALUE self, VALUE listener)
- {
-   lexer_state *lxr; 
-   rb_iv_set(self, "@listener", listener);
-   
-   lxr = NULL;
-   DATA_GET(self, lexer_state, lxr);
-   lexer_init(lxr);
-   
-   return self;
- }
- 
- static VALUE CLexer_scan(VALUE self, VALUE input)
- {
-   VALUE input_copy;
-   char *data;
-   size_t len;
-   VALUE listener = rb_iv_get(self, "@listener");
- 
-   lexer_state *lexer;
-   lexer = NULL;
-   DATA_GET(self, lexer_state, lexer);
- 
-   input_copy = rb_str_dup(input);
- 
-   rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%"));
-   data = RSTRING_PTR(input_copy);
-   len = RSTRING_LEN(input_copy);
-   
-   if (len == 0) { 
-     rb_raise(rb_eGherkinLexingError, "No content to lex.");
-   } else {
- 
-     const char *p, *pe, *eof;
-     int cs = 0;
-     
-     VALUE current_row = Qnil;
- 
-     p = data;
-     pe = data + len;
-     eof = pe;
-     
-     assert(*pe == '\0' && "pointer does not end on NULL");
-     
-     
- #line 1097 "ext/gherkin_lexer_fr/gherkin_lexer_fr.c"
- 	{
- 	cs = lexer_start;
- 	}
- 
- #line 425 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/fr.c.rl"
-     
- #line 1104 "ext/gherkin_lexer_fr/gherkin_lexer_fr.c"
- 	{
- 	int _klen;
- 	unsigned int _trans;
- 	const char *_acts;
- 	unsigned int _nacts;
- 	const char *_keys;
- 
- 	if ( p == pe )
- 		goto _test_eof;
- 	if ( cs == 0 )
- 		goto _out;
- _resume:
- 	_keys = _lexer_trans_keys + _lexer_key_offsets[cs];
- 	_trans = _lexer_index_offsets[cs];
- 
- 	_klen = _lexer_single_lengths[cs];
- 	if ( _klen > 0 ) {
- 		const char *_lower = _keys;
- 		const char *_mid;
- 		const char *_upper = _keys + _klen - 1;
- 		while (1) {
- 			if ( _upper < _lower )
- 				break;
- 
- 			_mid = _lower + ((_upper-_lower) >> 1);
- 			if ( (*p) < *_mid )
- 				_upper = _mid - 1;
- 			else if ( (*p) > *_mid )
- 				_lower = _mid + 1;
- 			else {
- 				_trans += (_mid - _keys);
- 				goto _match;
- 			}
- 		}
- 		_keys += _klen;
- 		_trans += _klen;
- 	}
- 
- 	_klen = _lexer_range_lengths[cs];
- 	if ( _klen > 0 ) {
- 		const char *_lower = _keys;
- 		const char *_mid;
- 		const char *_upper = _keys + (_klen<<1) - 2;
- 		while (1) {
- 			if ( _upper < _lower )
- 				break;
- 
- 			_mid = _lower + (((_upper-_lower) >> 1) & ~1);
- 			if ( (*p) < _mid[0] )
- 				_upper = _mid - 2;
- 			else if ( (*p) > _mid[1] )
- 				_lower = _mid + 2;
- 			else {
- 				_trans += ((_mid - _keys)>>1);
- 				goto _match;
- 			}
- 		}
- 		_trans += _klen;
- 	}
- 
- _match:
- 	cs = _lexer_trans_targs[_trans];
- 
- 	if ( _lexer_trans_actions[_trans] == 0 )
- 		goto _again;
- 
- 	_acts = _lexer_actions + _lexer_trans_actions[_trans];
- 	_nacts = (unsigned int) *_acts++;
- 	while ( _nacts-- > 0 )
- 	{
- 		switch ( *_acts++ )
- 		{
- 	case 0:
- #line 83 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/fr.c.rl"
- 	{
- 		MARK(content_start, p);
-     lexer->current_line = lexer->line_number;
-     lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2;
-   }
- 	break;
- 	case 1:
- #line 89 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/fr.c.rl"
- 	{
-     MARK(content_start, p);
-   }
- 	break;
- 	case 2:
- #line 93 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/fr.c.rl"
- 	{
-     lexer->current_line = lexer->line_number;
-     lexer->start_col = p - data - lexer->last_newline;
-   }
- 	break;
- 	case 3:
- #line 98 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/fr.c.rl"
- 	{
-     int len = LEN(content_start, PTR_TO(final_newline));
-     int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end));
- 
-     if (len < 0) len = 0;
-     if (type_len < 0) len = 0;
- 
-     store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line);
-   }
- 	break;
- 	case 4:
- #line 108 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/fr.c.rl"
- 	{ 
-     MARK(docstring_content_type_start, p);
-   }
- 	break;
- 	case 5:
- #line 112 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/fr.c.rl"
- 	{ 
-     MARK(docstring_content_type_end, p);
-   }
- 	break;
- 	case 6:
- #line 116 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/fr.c.rl"
- 	{
-     STORE_KW_END_CON(feature);
-   }
- 	break;
- 	case 7:
- #line 120 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/fr.c.rl"
- 	{
-     STORE_KW_END_CON(background);
-   }
- 	break;
- 	case 8:
- #line 124 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/fr.c.rl"
- 	{
-     STORE_KW_END_CON(scenario);
-   }
- 	break;
- 	case 9:
- #line 128 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/fr.c.rl"
- 	{
-     STORE_KW_END_CON(scenario_outline);
-   }
- 	break;
- 	case 10:
- #line 132 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/fr.c.rl"
- 	{
-     STORE_KW_END_CON(examples);
-   }
- 	break;
- 	case 11:
- #line 136 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/fr.c.rl"
- 	{
-     store_kw_con(listener, "step",
-       PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-       PTR_TO(content_start), LEN(content_start, p), 
-       lexer->current_line);
-   }
- 	break;
- 	case 12:
- #line 143 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/fr.c.rl"
- 	{
-     STORE_ATTR(comment);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 13:
- #line 148 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/fr.c.rl"
- 	{
-     STORE_ATTR(tag);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 14:
- #line 153 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/fr.c.rl"
- 	{
-     lexer->line_number += 1;
-     MARK(final_newline, p);
-   }
- 	break;
- 	case 15:
- #line 158 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/fr.c.rl"
- 	{
-     MARK(last_newline, p + 1);
-   }
- 	break;
- 	case 16:
- #line 162 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/fr.c.rl"
- 	{
-     if (lexer->mark == 0) {
-       MARK(mark, p);
-     }
-   }
- 	break;
- 	case 17:
- #line 168 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/fr.c.rl"
- 	{
-     MARK(keyword_end, p);
-     MARK(keyword_start, PTR_TO(mark));
-     MARK(content_start, p + 1);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 18:
- #line 175 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/fr.c.rl"
- 	{
-     MARK(content_end, p);
-   }
- 	break;
- 	case 19:
- #line 179 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/fr.c.rl"
- 	{
-     p = p - 1;
-     lexer->current_line = lexer->line_number;
-     current_row = rb_ary_new();
-   }
- 	break;
- 	case 20:
- #line 185 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/fr.c.rl"
- 	{
- 		MARK(content_start, p);
-   }
- 	break;
- 	case 21:
- #line 189 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/fr.c.rl"
- 	{
-     VALUE re_pipe, re_newline, re_backslash;
-     VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
-     rb_funcall(con, rb_intern("strip!"), 0);
-     re_pipe      = rb_reg_regcomp(rb_str_new2("\\\\\\|"));
-     re_newline   = rb_reg_regcomp(rb_str_new2("\\\\n"));
-     re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_pipe,      rb_str_new2("|"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_newline,   rb_str_new2("\n"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\"));
- 
-     rb_ary_push(current_row, con);
-   }
- 	break;
- 	case 22:
- #line 203 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/fr.c.rl"
- 	{
-     rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
-   }
- 	break;
- 	case 23:
- #line 207 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/fr.c.rl"
- 	{
-     int line;
-     if (cs < lexer_first_final) {
-       size_t count = 0;
-       VALUE newstr_val;
-       char *newstr;
-       int newstr_count = 0;        
-       size_t len;
-       const char *buff;
-       if (lexer->last_newline != 0) {
-         len = LEN(last_newline, eof);
-         buff = PTR_TO(last_newline);
-       } else {
-         len = strlen(data);
-         buff = data;
-       }
- 
-       // Allocate as a ruby string so that it gets cleaned up by GC
-       newstr_val = rb_str_new(buff, len);
-       newstr = RSTRING_PTR(newstr_val);
- 
- 
-       for (count = 0; count < len; count++) {
-         if(buff[count] == 10) {
-           newstr[newstr_count] = '\0'; // terminate new string at first newline found
-           break;
-         } else {
-           if (buff[count] == '%') {
-             newstr[newstr_count++] = buff[count];
-             newstr[newstr_count] = buff[count];
-           } else {
-             newstr[newstr_count] = buff[count];
-           }
-         }
-         newstr_count++;
-       }
- 
-       line = lexer->line_number;
-       lexer_init(lexer); // Re-initialize so we can scan again with the same lexer
-       raise_lexer_error(newstr, line);
-     } else {
-       rb_funcall(listener, rb_intern("eof"), 0);
-     }
-   }
- 	break;
- #line 1394 "ext/gherkin_lexer_fr/gherkin_lexer_fr.c"
- 		}
- 	}
- 
- _again:
- 	if ( cs == 0 )
- 		goto _out;
- 	if ( ++p != pe )
- 		goto _resume;
- 	_test_eof: {}
- 	if ( p == eof )
- 	{
- 	const char *__acts = _lexer_actions + _lexer_eof_actions[cs];
- 	unsigned int __nacts = (unsigned int) *__acts++;
- 	while ( __nacts-- > 0 ) {
- 		switch ( *__acts++ ) {
- 	case 23:
- #line 207 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/fr.c.rl"
- 	{
-     int line;
-     if (cs < lexer_first_final) {
-       size_t count = 0;
-       VALUE newstr_val;
-       char *newstr;
-       int newstr_count = 0;        
-       size_t len;
-       const char *buff;
-       if (lexer->last_newline != 0) {
-         len = LEN(last_newline, eof);
-         buff = PTR_TO(last_newline);
-       } else {
-         len = strlen(data);
-         buff = data;
-       }
- 
-       // Allocate as a ruby string so that it gets cleaned up by GC
-       newstr_val = rb_str_new(buff, len);
-       newstr = RSTRING_PTR(newstr_val);
- 
- 
-       for (count = 0; count < len; count++) {
-         if(buff[count] == 10) {
-           newstr[newstr_count] = '\0'; // terminate new string at first newline found
-           break;
-         } else {
-           if (buff[count] == '%') {
-             newstr[newstr_count++] = buff[count];
-             newstr[newstr_count] = buff[count];
-           } else {
-             newstr[newstr_count] = buff[count];
-           }
-         }
-         newstr_count++;
-       }
- 
-       line = lexer->line_number;
-       lexer_init(lexer); // Re-initialize so we can scan again with the same lexer
-       raise_lexer_error(newstr, line);
-     } else {
-       rb_funcall(listener, rb_intern("eof"), 0);
-     }
-   }
- 	break;
- #line 1457 "ext/gherkin_lexer_fr/gherkin_lexer_fr.c"
- 		}
- 	}
- 	}
- 
- 	_out: {}
- 	}
- 
- #line 426 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/fr.c.rl"
- 
-     assert(p <= pe && "data overflow after parsing execute");
-     assert(lexer->content_start <= len && "content starts after data end");
-     assert(lexer->mark < len && "mark is after data end");
-     
-     // Reset lexer by re-initializing the whole thing
-     lexer_init(lexer);
- 
-     if (cs == lexer_error) {
-       rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails.");
-     } else {
-       return Qtrue;
-     }
-   }
- }
- 
- void Init_gherkin_lexer_fr()
- {
-   mGherkin = rb_define_module("Gherkin");
-   mGherkinLexer = rb_define_module_under(mGherkin, "Lexer");
-   rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError"));
- 
-   mCLexer = rb_define_module_under(mGherkin, "CLexer");
-   cI18nLexer = rb_define_class_under(mCLexer, "Fr", rb_cObject);
-   rb_define_alloc_func(cI18nLexer, CLexer_alloc);
-   rb_define_method(cI18nLexer, "initialize", CLexer_init, 1);
-   rb_define_method(cI18nLexer, "scan", CLexer_scan, 1);
- }
- 
 -#line 1 "ragel/i18n/fr.c.rl"
 -#include <assert.h>
 -#include <ruby.h>
 -
 -#if defined(_WIN32)
 -#include <stddef.h>
 -#endif
 -
 -#ifdef HAVE_RUBY_RE_H
 -#include <ruby/re.h>
 -#else
 -#include <re.h>
 -#endif
 -
 -#ifdef HAVE_RUBY_ENCODING_H
 -#include <ruby/encoding.h>
 -#define ENCODED_STR_NEW(ptr, len) \
 -    rb_enc_str_new(ptr, len, rb_utf8_encoding())
 -#else
 -#define ENCODED_STR_NEW(ptr, len) \
 -    rb_str_new(ptr, len)
 -#endif
 -
 -#ifndef RSTRING_PTR
 -#define RSTRING_PTR(s) (RSTRING(s)->ptr)
 -#endif
 -
 -#ifndef RSTRING_LEN
 -#define RSTRING_LEN(s) (RSTRING(s)->len)
 -#endif
 -
 -#define DATA_GET(FROM, TYPE, NAME) \
 -  Data_Get_Struct(FROM, TYPE, NAME); \
 -  if (NAME == NULL) { \
 -    rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \
 -  }
 - 
 -typedef struct lexer_state {
 -  int content_len;
 -  int line_number;
 -  int current_line;
 -  int start_col;
 -  size_t mark;
 -  size_t keyword_start;
 -  size_t keyword_end;
 -  size_t next_keyword_start;
 -  size_t content_start;
 -  size_t content_end;
 -  size_t docstring_content_type_start;
 -  size_t docstring_content_type_end;
 -  size_t query_start;
 -  size_t last_newline;
 -  size_t final_newline;
 -} lexer_state;
 -
 -static VALUE mGherkin;
 -static VALUE mGherkinLexer;
 -static VALUE mCLexer;
 -static VALUE cI18nLexer;
 -static VALUE rb_eGherkinLexingError;
 -
 -#define LEN(AT, P) (P - data - lexer->AT)
 -#define MARK(M, P) (lexer->M = (P) - data)
 -#define PTR_TO(P) (data + lexer->P)
 -
 -#define STORE_KW_END_CON(EVENT) \
 -  store_multiline_kw_con(listener, # EVENT, \
 -    PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \
 -    PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \
 -    lexer->current_line, lexer->start_col); \
 -    if (lexer->content_end != 0) { \
 -      p = PTR_TO(content_end - 1); \
 -    } \
 -    lexer->content_end = 0
 -
 -#define STORE_ATTR(ATTR) \
 -    store_attr(listener, # ATTR, \
 -      PTR_TO(content_start), LEN(content_start, p), \
 -      lexer->line_number)
 -
 -
 -#line 254 "ragel/i18n/fr.c.rl"
 -
 -
 -/** Data **/
 -
 -#line 89 "ext/gherkin_lexer_fr/gherkin_lexer_fr.c"
 -static const char _lexer_actions[] = {
 -	0, 1, 0, 1, 1, 1, 2, 1, 
 -	3, 1, 4, 1, 5, 1, 6, 1, 
 -	7, 1, 8, 1, 9, 1, 10, 1, 
 -	11, 1, 12, 1, 13, 1, 16, 1, 
 -	17, 1, 18, 1, 19, 1, 20, 1, 
 -	21, 1, 22, 1, 23, 2, 1, 18, 
 -	2, 4, 5, 2, 13, 0, 2, 14, 
 -	15, 2, 17, 0, 2, 17, 2, 2, 
 -	17, 16, 2, 17, 19, 2, 18, 6, 
 -	2, 18, 7, 2, 18, 8, 2, 18, 
 -	9, 2, 18, 10, 2, 18, 16, 2, 
 -	20, 21, 2, 22, 0, 2, 22, 2, 
 -	2, 22, 16, 2, 22, 19, 3, 3, 
 -	14, 15, 3, 5, 14, 15, 3, 11, 
 -	14, 15, 3, 12, 14, 15, 3, 13, 
 -	14, 15, 3, 14, 15, 18, 3, 17, 
 -	0, 11, 3, 17, 14, 15, 4, 1, 
 -	14, 15, 18, 4, 4, 5, 14, 15, 
 -	4, 17, 0, 14, 15, 5, 17, 0, 
 -	11, 14, 15
 -};
 -
 -static const short _lexer_key_offsets[] = {
 -	0, 0, 21, 22, 23, 24, 25, 26, 
 -	27, 28, 29, 30, 31, 32, 33, 36, 
 -	38, 40, 60, 61, 62, 64, 66, 71, 
 -	76, 81, 86, 90, 94, 96, 97, 98, 
 -	99, 100, 101, 102, 103, 104, 105, 106, 
 -	107, 108, 109, 110, 111, 112, 117, 124, 
 -	129, 130, 131, 132, 133, 134, 135, 136, 
 -	137, 138, 139, 140, 141, 142, 143, 160, 
 -	162, 164, 166, 168, 170, 172, 174, 176, 
 -	178, 180, 182, 184, 188, 208, 210, 212, 
 -	213, 214, 215, 216, 217, 218, 219, 220, 
 -	221, 228, 230, 232, 234, 236, 238, 240, 
 -	242, 244, 246, 248, 250, 252, 254, 256, 
 -	258, 259, 260, 261, 262, 263, 264, 265, 
 -	266, 267, 268, 269, 270, 271, 272, 273, 
 -	274, 275, 287, 289, 291, 293, 295, 297, 
 -	299, 301, 303, 305, 307, 309, 311, 313, 
 -	315, 317, 319, 321, 323, 325, 327, 329, 
 -	331, 333, 335, 337, 339, 341, 343, 345, 
 -	347, 349, 351, 353, 355, 357, 359, 361, 
 -	363, 365, 367, 369, 371, 373, 375, 377, 
 -	379, 381, 383, 385, 387, 390, 392, 394, 
 -	396, 398, 400, 402, 404, 406, 407, 408, 
 -	409, 410, 411, 413, 414, 415, 416, 417, 
 -	418, 419, 420, 421, 422, 424, 425, 426, 
 -	427, 428, 429, 430, 431, 432, 433, 434, 
 -	435, 451, 453, 455, 457, 459, 461, 463, 
 -	465, 467, 469, 471, 473, 475, 479, 482, 
 -	484, 486, 488, 490, 492, 494, 496, 498, 
 -	500, 502, 504, 506, 508, 510, 512, 514, 
 -	516, 518, 520, 522, 525, 527, 529, 531, 
 -	533, 535, 537, 539, 541, 543, 545, 547, 
 -	549, 551, 553, 555, 557, 559, 561, 563, 
 -	565, 568, 570, 572, 574, 576, 578, 580, 
 -	583, 585, 587, 589, 591, 593, 595, 597, 
 -	599, 601, 602, 603, 604, 605, 607, 608, 
 -	609, 610, 611, 612, 613, 614, 615, 616, 
 -	617, 635, 637, 639, 641, 643, 645, 647, 
 -	649, 651, 653, 655, 657, 659, 663, 666, 
 -	668, 670, 672, 674, 676, 678, 680, 682, 
 -	684, 686, 688, 690, 692, 694, 696, 698, 
 -	700, 702, 704, 706, 708, 710, 712, 714, 
 -	716, 718, 720, 722, 725, 727, 729, 731, 
 -	733, 735, 737, 739, 741, 743, 745, 747, 
 -	749, 751, 753, 755, 757, 759, 761, 763, 
 -	766, 768, 770, 772, 774, 776, 778, 780, 
 -	782, 784, 787, 789, 791, 793, 795, 797, 
 -	799, 801, 803, 805, 807, 809, 811, 814, 
 -	816, 818, 819, 820, 824, 830, 833, 835, 
 -	841, 861, 864, 866, 868, 870, 872, 874, 
 -	876, 878, 880, 882, 884, 886, 888, 890, 
 -	892, 894, 896, 898, 900, 902, 904, 907, 
 -	909, 911, 913, 915, 917, 919, 921, 923, 
 -	925, 927, 929, 931, 933, 935, 937, 939, 
 -	941, 943, 945, 947, 950, 952, 954, 956, 
 -	958, 960, 962, 964, 966, 968, 971, 973, 
 -	975, 977, 979, 981, 983, 985, 987, 989, 
 -	991, 993, 995, 998, 1000, 1002, 1004, 1005, 
 -	1006
 -};
 -
 -static const char _lexer_trans_keys[] = {
 -	-61, -17, 10, 32, 34, 35, 37, 42, 
 -	64, 65, 67, 69, 70, 76, 77, 80, 
 -	81, 83, 124, 9, 13, -119, 116, 97, 
 -	110, 116, 32, 100, 111, 110, 110, -61, 
 -	-87, 32, 101, 115, 10, 13, 10, 13, 
 -	-61, 10, 32, 34, 35, 37, 42, 64, 
 -	65, 67, 69, 70, 76, 77, 80, 81, 
 -	83, 124, 9, 13, 34, 34, 10, 13, 
 -	10, 13, 10, 32, 34, 9, 13, 10, 
 -	32, 34, 9, 13, 10, 32, 34, 9, 
 -	13, 10, 32, 34, 9, 13, 10, 32, 
 -	9, 13, 10, 32, 9, 13, 10, 13, 
 -	10, 95, 70, 69, 65, 84, 85, 82, 
 -	69, 95, 69, 78, 68, 95, 37, 32, 
 -	13, 32, 64, 9, 10, 9, 10, 13, 
 -	32, 64, 11, 12, 10, 32, 64, 9, 
 -	13, 108, 111, 114, 115, 111, 110, 116, 
 -	101, 120, 116, 101, 58, 10, 10, -61, 
 -	10, 32, 35, 37, 42, 64, 65, 69, 
 -	70, 76, 77, 80, 81, 83, 9, 13, 
 -	-119, 10, 10, 116, 10, 97, 10, 110, 
 -	10, 116, 10, 32, 10, 100, 10, 111, 
 -	10, 110, 10, 110, -61, 10, -87, 10, 
 -	10, 32, 101, 115, -61, 10, 32, 34, 
 -	35, 37, 42, 64, 65, 67, 69, 70, 
 -	76, 77, 80, 81, 83, 124, 9, 13, 
 -	116, 120, 32, 97, 101, 109, 112, 108, 
 -	101, 115, 58, 10, 10, 10, 32, 35, 
 -	70, 124, 9, 13, 10, 111, 10, 110, 
 -	10, 99, 10, 116, 10, 105, 10, 111, 
 -	10, 110, 10, 110, 10, 97, 10, 108, 
 -	10, 105, 10, 116, -61, 10, -87, 10, 
 -	10, 58, 111, 110, 99, 116, 105, 111, 
 -	110, 110, 97, 108, 105, 116, -61, -87, 
 -	58, 10, 10, 10, 32, 35, 37, 64, 
 -	67, 69, 70, 80, 83, 9, 13, 10, 
 -	95, 10, 70, 10, 69, 10, 65, 10, 
 -	84, 10, 85, 10, 82, 10, 69, 10, 
 -	95, 10, 69, 10, 78, 10, 68, 10, 
 -	95, 10, 37, 10, 111, 10, 110, 10, 
 -	116, 10, 101, 10, 120, 10, 116, 10, 
 -	101, 10, 58, 10, 120, 10, 101, 10, 
 -	109, 10, 112, 10, 108, 10, 101, 10, 
 -	115, 10, 111, 10, 110, 10, 99, 10, 
 -	116, 10, 105, 10, 111, 10, 110, 10, 
 -	110, 10, 97, 10, 108, 10, 105, 10, 
 -	116, -61, 10, -87, 10, 10, 108, 10, 
 -	97, 10, 110, 10, 32, 10, 100, 10, 
 -	117, 10, 32, 10, 83, 115, 10, 99, 
 -	-61, 10, -87, 10, 10, 110, 10, 97, 
 -	10, 114, 10, 105, 10, 111, 111, 114, 
 -	115, 113, 117, 39, 101, 97, 105, 108, 
 -	97, 110, 32, 100, 117, 32, 83, 115, 
 -	99, -61, -87, 110, 97, 114, 105, 111, 
 -	58, 10, 10, -61, 10, 32, 35, 37, 
 -	42, 64, 65, 69, 70, 76, 77, 81, 
 -	83, 9, 13, -119, 10, 10, 116, 10, 
 -	97, 10, 110, 10, 116, 10, 32, 10, 
 -	100, 10, 111, 10, 110, 10, 110, -61, 
 -	10, -87, 10, 10, 32, 101, 115, 10, 
 -	32, 115, 10, 32, 10, 95, 10, 70, 
 -	10, 69, 10, 65, 10, 84, 10, 85, 
 -	10, 82, 10, 69, 10, 95, 10, 69, 
 -	10, 78, 10, 68, 10, 95, 10, 37, 
 -	10, 108, 10, 111, 10, 114, 10, 115, 
 -	10, 116, 10, 32, 97, 10, 111, 10, 
 -	110, 10, 99, 10, 116, 10, 105, 10, 
 -	111, 10, 110, 10, 110, 10, 97, 10, 
 -	108, 10, 105, 10, 116, -61, 10, -87, 
 -	10, 10, 58, 10, 111, 10, 114, 10, 
 -	115, 10, 113, 10, 117, 10, 39, 101, 
 -	10, 97, 10, 105, 10, 117, 10, 97, 
 -	10, 110, 10, 100, 10, 99, 111, -61, 
 -	10, -87, 10, 10, 110, 10, 97, 10, 
 -	114, 10, 105, 10, 111, 10, 105, 10, 
 -	116, 117, 97, 110, 100, 99, 111, -61, 
 -	-87, 110, 97, 114, 105, 111, 58, 10, 
 -	10, -61, 10, 32, 35, 37, 42, 64, 
 -	65, 67, 69, 70, 76, 77, 80, 81, 
 -	83, 9, 13, -119, 10, 10, 116, 10, 
 -	97, 10, 110, 10, 116, 10, 32, 10, 
 -	100, 10, 111, 10, 110, 10, 110, -61, 
 -	10, -87, 10, 10, 32, 101, 115, 10, 
 -	32, 115, 10, 32, 10, 95, 10, 70, 
 -	10, 69, 10, 65, 10, 84, 10, 85, 
 -	10, 82, 10, 69, 10, 95, 10, 69, 
 -	10, 78, 10, 68, 10, 95, 10, 37, 
 -	10, 108, 10, 111, 10, 114, 10, 115, 
 -	10, 111, 10, 110, 10, 116, 10, 101, 
 -	10, 120, 10, 116, 10, 101, 10, 58, 
 -	10, 116, 10, 32, 97, 10, 111, 10, 
 -	110, 10, 99, 10, 116, 10, 105, 10, 
 -	111, 10, 110, 10, 110, 10, 97, 10, 
 -	108, 10, 105, 10, 116, -61, 10, -87, 
 -	10, 10, 111, 10, 114, 10, 115, 10, 
 -	113, 10, 117, 10, 39, 101, 10, 97, 
 -	10, 105, 10, 108, 10, 97, 10, 110, 
 -	10, 32, 10, 100, 10, 117, 10, 32, 
 -	10, 83, 115, 10, 99, -61, 10, -87, 
 -	10, 10, 110, 10, 97, 10, 114, 10, 
 -	105, 10, 111, 10, 117, 10, 97, 10, 
 -	110, 10, 100, 10, 99, 111, 10, 105, 
 -	10, 116, 105, 116, 32, 124, 9, 13, 
 -	10, 32, 92, 124, 9, 13, 10, 92, 
 -	124, 10, 92, 10, 32, 92, 124, 9, 
 -	13, -61, 10, 32, 34, 35, 37, 42, 
 -	64, 65, 67, 69, 70, 76, 77, 80, 
 -	81, 83, 124, 9, 13, 10, 32, 115, 
 -	10, 32, 10, 95, 10, 70, 10, 69, 
 -	10, 65, 10, 84, 10, 85, 10, 82, 
 -	10, 69, 10, 95, 10, 69, 10, 78, 
 -	10, 68, 10, 95, 10, 37, 10, 108, 
 -	10, 111, 10, 114, 10, 115, 10, 116, 
 -	10, 32, 97, 10, 111, 10, 110, 10, 
 -	99, 10, 116, 10, 105, 10, 111, 10, 
 -	110, 10, 110, 10, 97, 10, 108, 10, 
 -	105, 10, 116, -61, 10, -87, 10, 10, 
 -	58, 10, 111, 10, 114, 10, 115, 10, 
 -	113, 10, 117, 10, 39, 101, 10, 97, 
 -	10, 105, 10, 108, 10, 97, 10, 110, 
 -	10, 32, 10, 100, 10, 117, 10, 32, 
 -	10, 83, 115, 10, 99, -61, 10, -87, 
 -	10, 10, 110, 10, 97, 10, 114, 10, 
 -	105, 10, 111, 10, 117, 10, 97, 10, 
 -	110, 10, 100, 10, 99, 111, 10, 105, 
 -	10, 116, 32, 115, -69, -65, 0
 -};
 -
 -static const char _lexer_single_lengths[] = {
 -	0, 19, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 3, 2, 
 -	2, 18, 1, 1, 2, 2, 3, 3, 
 -	3, 3, 2, 2, 2, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 3, 5, 3, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 15, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 4, 18, 2, 2, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	5, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 10, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 3, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 1, 1, 1, 
 -	1, 1, 2, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 2, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	14, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 4, 3, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 3, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	3, 2, 2, 2, 2, 2, 2, 3, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 1, 1, 1, 1, 2, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	16, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 4, 3, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 3, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 3, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 3, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 3, 2, 
 -	2, 1, 1, 2, 4, 3, 2, 4, 
 -	18, 3, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 3, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 3, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 3, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 3, 2, 2, 2, 1, 1, 
 -	0
 -};
 -
 -static const char _lexer_range_lengths[] = {
 -	0, 1, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 1, 0, 0, 0, 0, 1, 1, 
 -	1, 1, 1, 1, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 1, 1, 1, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 1, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 1, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	1, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 1, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	1, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	1, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 1, 1, 0, 0, 1, 
 -	1, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0
 -};
 -
 -static const short _lexer_index_offsets[] = {
 -	0, 0, 21, 23, 25, 27, 29, 31, 
 -	33, 35, 37, 39, 41, 43, 45, 49, 
 -	52, 55, 75, 77, 79, 82, 85, 90, 
 -	95, 100, 105, 109, 113, 116, 118, 120, 
 -	122, 124, 126, 128, 130, 132, 134, 136, 
 -	138, 140, 142, 144, 146, 148, 153, 160, 
 -	165, 167, 169, 171, 173, 175, 177, 179, 
 -	181, 183, 185, 187, 189, 191, 193, 210, 
 -	213, 216, 219, 222, 225, 228, 231, 234, 
 -	237, 240, 243, 246, 251, 271, 274, 277, 
 -	279, 281, 283, 285, 287, 289, 291, 293, 
 -	295, 302, 305, 308, 311, 314, 317, 320, 
 -	323, 326, 329, 332, 335, 338, 341, 344, 
 -	347, 349, 351, 353, 355, 357, 359, 361, 
 -	363, 365, 367, 369, 371, 373, 375, 377, 
 -	379, 381, 393, 396, 399, 402, 405, 408, 
 -	411, 414, 417, 420, 423, 426, 429, 432, 
 -	435, 438, 441, 444, 447, 450, 453, 456, 
 -	459, 462, 465, 468, 471, 474, 477, 480, 
 -	483, 486, 489, 492, 495, 498, 501, 504, 
 -	507, 510, 513, 516, 519, 522, 525, 528, 
 -	531, 534, 537, 540, 543, 547, 550, 553, 
 -	556, 559, 562, 565, 568, 571, 573, 575, 
 -	577, 579, 581, 584, 586, 588, 590, 592, 
 -	594, 596, 598, 600, 602, 605, 607, 609, 
 -	611, 613, 615, 617, 619, 621, 623, 625, 
 -	627, 643, 646, 649, 652, 655, 658, 661, 
 -	664, 667, 670, 673, 676, 679, 684, 688, 
 -	691, 694, 697, 700, 703, 706, 709, 712, 
 -	715, 718, 721, 724, 727, 730, 733, 736, 
 -	739, 742, 745, 748, 752, 755, 758, 761, 
 -	764, 767, 770, 773, 776, 779, 782, 785, 
 -	788, 791, 794, 797, 800, 803, 806, 809, 
 -	812, 816, 819, 822, 825, 828, 831, 834, 
 -	838, 841, 844, 847, 850, 853, 856, 859, 
 -	862, 865, 867, 869, 871, 873, 876, 878, 
 -	880, 882, 884, 886, 888, 890, 892, 894, 
 -	896, 914, 917, 920, 923, 926, 929, 932, 
 -	935, 938, 941, 944, 947, 950, 955, 959, 
 -	962, 965, 968, 971, 974, 977, 980, 983, 
 -	986, 989, 992, 995, 998, 1001, 1004, 1007, 
 -	1010, 1013, 1016, 1019, 1022, 1025, 1028, 1031, 
 -	1034, 1037, 1040, 1043, 1047, 1050, 1053, 1056, 
 -	1059, 1062, 1065, 1068, 1071, 1074, 1077, 1080, 
 -	1083, 1086, 1089, 1092, 1095, 1098, 1101, 1104, 
 -	1108, 1111, 1114, 1117, 1120, 1123, 1126, 1129, 
 -	1132, 1135, 1139, 1142, 1145, 1148, 1151, 1154, 
 -	1157, 1160, 1163, 1166, 1169, 1172, 1175, 1179, 
 -	1182, 1185, 1187, 1189, 1193, 1199, 1203, 1206, 
 -	1212, 1232, 1236, 1239, 1242, 1245, 1248, 1251, 
 -	1254, 1257, 1260, 1263, 1266, 1269, 1272, 1275, 
 -	1278, 1281, 1284, 1287, 1290, 1293, 1296, 1300, 
 -	1303, 1306, 1309, 1312, 1315, 1318, 1321, 1324, 
 -	1327, 1330, 1333, 1336, 1339, 1342, 1345, 1348, 
 -	1351, 1354, 1357, 1360, 1364, 1367, 1370, 1373, 
 -	1376, 1379, 1382, 1385, 1388, 1391, 1395, 1398, 
 -	1401, 1404, 1407, 1410, 1413, 1416, 1419, 1422, 
 -	1425, 1428, 1431, 1435, 1438, 1441, 1444, 1446, 
 -	1448
 -};
 -
 -static const short _lexer_trans_targs[] = {
 -	2, 462, 17, 17, 18, 28, 30, 44, 
 -	45, 48, 52, 77, 104, 181, 187, 189, 
 -	281, 285, 387, 17, 0, 3, 0, 4, 
 -	0, 5, 0, 6, 0, 7, 0, 8, 
 -	0, 9, 0, 10, 0, 11, 0, 12, 
 -	0, 13, 0, 14, 0, 15, 461, 44, 
 -	0, 17, 29, 16, 17, 29, 16, 2, 
 -	17, 17, 18, 28, 30, 44, 45, 48, 
 -	52, 77, 104, 181, 187, 189, 281, 285, 
 -	387, 17, 0, 19, 0, 20, 0, 22, 
 -	21, 21, 22, 21, 21, 23, 23, 24, 
 -	23, 23, 23, 23, 24, 23, 23, 23, 
 -	23, 25, 23, 23, 23, 23, 26, 23, 
 -	23, 17, 27, 27, 0, 17, 27, 27, 
 -	0, 17, 29, 28, 17, 0, 31, 0, 
 -	32, 0, 33, 0, 34, 0, 35, 0, 
 -	36, 0, 37, 0, 38, 0, 39, 0, 
 -	40, 0, 41, 0, 42, 0, 43, 0, 
 -	464, 0, 15, 0, 0, 0, 0, 0, 
 -	46, 47, 17, 47, 47, 45, 46, 46, 
 -	17, 47, 45, 47, 0, 49, 0, 50, 
 -	0, 51, 0, 44, 0, 53, 0, 54, 
 -	0, 55, 0, 56, 0, 57, 0, 58, 
 -	0, 59, 0, 60, 0, 62, 61, 62, 
 -	61, 63, 62, 62, 17, 395, 394, 17, 
 -	409, 413, 415, 430, 436, 438, 454, 458, 
 -	62, 61, 64, 62, 61, 62, 65, 61, 
 -	62, 66, 61, 62, 67, 61, 62, 68, 
 -	61, 62, 69, 61, 62, 70, 61, 62, 
 -	71, 61, 62, 72, 61, 62, 73, 61, 
 -	74, 62, 61, 75, 62, 61, 62, 76, 
 -	393, 394, 61, 2, 17, 17, 18, 28, 
 -	30, 44, 45, 48, 52, 77, 104, 181, 
 -	187, 189, 281, 285, 387, 17, 0, 78, 
 -	79, 0, 15, 5, 0, 80, 0, 81, 
 -	0, 82, 0, 83, 0, 84, 0, 85, 
 -	0, 86, 0, 88, 87, 88, 87, 88, 
 -	88, 17, 89, 17, 88, 87, 88, 90, 
 -	87, 88, 91, 87, 88, 92, 87, 88, 
 -	93, 87, 88, 94, 87, 88, 95, 87, 
 -	88, 96, 87, 88, 97, 87, 88, 98, 
 -	87, 88, 99, 87, 88, 100, 87, 88, 
 -	101, 87, 102, 88, 87, 103, 88, 87, 
 -	88, 76, 87, 105, 0, 106, 0, 107, 
 -	0, 108, 0, 109, 0, 110, 0, 111, 
 -	0, 112, 0, 113, 0, 114, 0, 115, 
 -	0, 116, 0, 117, 0, 118, 0, 119, 
 -	0, 121, 120, 121, 120, 121, 121, 17, 
 -	122, 17, 136, 144, 151, 165, 173, 121, 
 -	120, 121, 123, 120, 121, 124, 120, 121, 
 -	125, 120, 121, 126, 120, 121, 127, 120, 
 -	121, 128, 120, 121, 129, 120, 121, 130, 
 -	120, 121, 131, 120, 121, 132, 120, 121, 
 -	133, 120, 121, 134, 120, 121, 135, 120, 
 -	121, 17, 120, 121, 137, 120, 121, 138, 
 -	120, 121, 139, 120, 121, 140, 120, 121, 
 -	141, 120, 121, 142, 120, 121, 143, 120, 
 -	121, 76, 120, 121, 145, 120, 121, 146, 
 -	120, 121, 147, 120, 121, 148, 120, 121, 
 -	149, 120, 121, 150, 120, 121, 143, 120, 
 -	121, 152, 120, 121, 153, 120, 121, 154, 
 -	120, 121, 155, 120, 121, 156, 120, 121, 
 -	157, 120, 121, 158, 120, 121, 159, 120, 
 -	121, 160, 120, 121, 161, 120, 121, 162, 
 -	120, 121, 163, 120, 164, 121, 120, 143, 
 -	121, 120, 121, 166, 120, 121, 167, 120, 
 -	121, 168, 120, 121, 169, 120, 121, 170, 
 -	120, 121, 171, 120, 121, 172, 120, 121, 
 -	173, 173, 120, 121, 174, 120, 175, 121, 
 -	120, 176, 121, 120, 121, 177, 120, 121, 
 -	178, 120, 121, 179, 120, 121, 180, 120, 
 -	121, 143, 120, 182, 0, 183, 0, 184, 
 -	0, 185, 0, 186, 0, 15, 44, 0, 
 -	188, 0, 51, 0, 190, 0, 191, 0, 
 -	192, 0, 193, 0, 194, 0, 195, 0, 
 -	196, 0, 197, 197, 0, 198, 0, 199, 
 -	0, 200, 0, 201, 0, 202, 0, 203, 
 -	0, 204, 0, 205, 0, 206, 0, 208, 
 -	207, 208, 207, 209, 208, 208, 17, 224, 
 -	223, 17, 238, 242, 244, 259, 265, 267, 
 -	271, 208, 207, 210, 208, 207, 208, 211, 
 -	207, 208, 212, 207, 208, 213, 207, 208, 
 -	214, 207, 208, 215, 207, 208, 216, 207, 
 -	208, 217, 207, 208, 218, 207, 208, 219, 
 -	207, 220, 208, 207, 221, 208, 207, 208, 
 -	76, 222, 223, 207, 208, 76, 223, 207, 
 -	208, 76, 207, 208, 225, 207, 208, 226, 
 -	207, 208, 227, 207, 208, 228, 207, 208, 
 -	229, 207, 208, 230, 207, 208, 231, 207, 
 -	208, 232, 207, 208, 233, 207, 208, 234, 
 -	207, 208, 235, 207, 208, 236, 207, 208, 
 -	237, 207, 208, 17, 207, 208, 239, 207, 
 -	208, 240, 207, 208, 241, 207, 208, 223, 
 -	207, 208, 243, 207, 208, 76, 212, 207, 
 -	208, 245, 207, 208, 246, 207, 208, 247, 
 -	207, 208, 248, 207, 208, 249, 207, 208, 
 -	250, 207, 208, 251, 207, 208, 252, 207, 
 -	208, 253, 207, 208, 254, 207, 208, 255, 
 -	207, 208, 256, 207, 257, 208, 207, 258, 
 -	208, 207, 208, 76, 207, 208, 260, 207, 
 -	208, 261, 207, 208, 262, 207, 208, 263, 
 -	207, 208, 264, 207, 208, 76, 223, 207, 
 -	208, 266, 207, 208, 241, 207, 208, 268, 
 -	207, 208, 269, 207, 208, 270, 207, 208, 
 -	223, 207, 208, 272, 279, 207, 273, 208, 
 -	207, 274, 208, 207, 208, 275, 207, 208, 
 -	276, 207, 208, 277, 207, 208, 278, 207, 
 -	208, 258, 207, 208, 280, 207, 208, 223, 
 -	207, 282, 0, 283, 0, 284, 0, 44, 
 -	0, 286, 385, 0, 287, 0, 288, 0, 
 -	289, 0, 290, 0, 291, 0, 292, 0, 
 -	293, 0, 294, 0, 296, 295, 296, 295, 
 -	297, 296, 296, 17, 312, 311, 17, 326, 
 -	330, 338, 340, 354, 360, 362, 378, 382, 
 -	296, 295, 298, 296, 295, 296, 299, 295, 
 -	296, 300, 295, 296, 301, 295, 296, 302, 
 -	295, 296, 303, 295, 296, 304, 295, 296, 
 -	305, 295, 296, 306, 295, 296, 307, 295, 
 -	308, 296, 295, 309, 296, 295, 296, 76, 
 -	310, 311, 295, 296, 76, 311, 295, 296, 
 -	76, 295, 296, 313, 295, 296, 314, 295, 
 -	296, 315, 295, 296, 316, 295, 296, 317, 
 -	295, 296, 318, 295, 296, 319, 295, 296, 
 -	320, 295, 296, 321, 295, 296, 322, 295, 
 -	296, 323, 295, 296, 324, 295, 296, 325, 
 -	295, 296, 17, 295, 296, 327, 295, 296, 
 -	328, 295, 296, 329, 295, 296, 311, 295, 
 -	296, 331, 295, 296, 332, 295, 296, 333, 
 -	295, 296, 334, 295, 296, 335, 295, 296, 
 -	336, 295, 296, 337, 295, 296, 76, 295, 
 -	296, 339, 295, 296, 76, 300, 295, 296, 
 -	341, 295, 296, 342, 295, 296, 343, 295, 
 -	296, 344, 295, 296, 345, 295, 296, 346, 
 -	295, 296, 347, 295, 296, 348, 295, 296, 
 -	349, 295, 296, 350, 295, 296, 351, 295, 
 -	296, 352, 295, 353, 296, 295, 337, 296, 
 -	295, 296, 355, 295, 296, 356, 295, 296, 
 -	357, 295, 296, 358, 295, 296, 359, 295, 
 -	296, 76, 311, 295, 296, 361, 295, 296, 
 -	329, 295, 296, 363, 295, 296, 364, 295, 
 -	296, 365, 295, 296, 366, 295, 296, 367, 
 -	295, 296, 368, 295, 296, 369, 295, 296, 
 -	370, 370, 295, 296, 371, 295, 372, 296, 
 -	295, 373, 296, 295, 296, 374, 295, 296, 
 -	375, 295, 296, 376, 295, 296, 377, 295, 
 -	296, 337, 295, 296, 379, 295, 296, 380, 
 -	295, 296, 381, 295, 296, 311, 295, 296, 
 -	371, 383, 295, 296, 384, 295, 296, 311, 
 -	295, 386, 0, 44, 0, 387, 388, 387, 
 -	0, 392, 391, 390, 388, 391, 389, 0, 
 -	390, 388, 389, 0, 390, 389, 392, 391, 
 -	390, 388, 391, 389, 2, 392, 392, 18, 
 -	28, 30, 44, 45, 48, 52, 77, 104, 
 -	181, 187, 189, 281, 285, 387, 392, 0, 
 -	62, 76, 394, 61, 62, 76, 61, 62, 
 -	396, 61, 62, 397, 61, 62, 398, 61, 
 -	62, 399, 61, 62, 400, 61, 62, 401, 
 -	61, 62, 402, 61, 62, 403, 61, 62, 
 -	404, 61, 62, 405, 61, 62, 406, 61, 
 -	62, 407, 61, 62, 408, 61, 62, 17, 
 -	61, 62, 410, 61, 62, 411, 61, 62, 
 -	412, 61, 62, 394, 61, 62, 414, 61, 
 -	62, 76, 66, 61, 62, 416, 61, 62, 
 -	417, 61, 62, 418, 61, 62, 419, 61, 
 -	62, 420, 61, 62, 421, 61, 62, 422, 
 -	61, 62, 423, 61, 62, 424, 61, 62, 
 -	425, 61, 62, 426, 61, 62, 427, 61, 
 -	428, 62, 61, 429, 62, 61, 62, 76, 
 -	61, 62, 431, 61, 62, 432, 61, 62, 
 -	433, 61, 62, 434, 61, 62, 435, 61, 
 -	62, 76, 394, 61, 62, 437, 61, 62, 
 -	412, 61, 62, 439, 61, 62, 440, 61, 
 -	62, 441, 61, 62, 442, 61, 62, 443, 
 -	61, 62, 444, 61, 62, 445, 61, 62, 
 -	446, 446, 61, 62, 447, 61, 448, 62, 
 -	61, 449, 62, 61, 62, 450, 61, 62, 
 -	451, 61, 62, 452, 61, 62, 453, 61, 
 -	62, 429, 61, 62, 455, 61, 62, 456, 
 -	61, 62, 457, 61, 62, 394, 61, 62, 
 -	447, 459, 61, 62, 460, 61, 62, 394, 
 -	61, 15, 44, 0, 463, 0, 17, 0, 
 -	0, 0
 -};
 -
 -static const unsigned char _lexer_trans_actions[] = {
 -	29, 0, 54, 0, 5, 1, 0, 29, 
 -	1, 29, 29, 29, 29, 29, 29, 29, 
 -	29, 29, 35, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 0, 0, 
 -	43, 149, 126, 57, 110, 23, 0, 29, 
 -	54, 0, 5, 1, 0, 29, 1, 29, 
 -	29, 29, 29, 29, 29, 29, 29, 29, 
 -	35, 0, 43, 0, 43, 0, 43, 139, 
 -	48, 9, 106, 11, 0, 134, 45, 45, 
 -	45, 3, 122, 33, 33, 33, 0, 122, 
 -	33, 33, 33, 0, 122, 33, 0, 33, 
 -	0, 102, 7, 7, 43, 54, 0, 0, 
 -	43, 114, 25, 0, 54, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 43, 43, 43, 43, 
 -	0, 27, 118, 27, 27, 51, 27, 0, 
 -	54, 0, 1, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 144, 57, 54, 
 -	0, 84, 54, 0, 72, 33, 84, 72, 
 -	84, 84, 84, 84, 84, 84, 84, 84, 
 -	0, 0, 0, 54, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	0, 54, 0, 0, 54, 0, 54, 15, 
 -	0, 0, 0, 63, 130, 31, 60, 57, 
 -	31, 63, 57, 63, 63, 63, 63, 63, 
 -	63, 63, 63, 63, 66, 31, 43, 0, 
 -	0, 43, 0, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 144, 57, 54, 0, 54, 
 -	0, 81, 84, 81, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 0, 54, 0, 0, 54, 0, 
 -	54, 21, 0, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 144, 57, 54, 0, 54, 0, 69, 
 -	33, 69, 84, 84, 84, 84, 84, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 13, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 13, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 0, 54, 0, 0, 
 -	54, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 0, 54, 0, 0, 0, 54, 
 -	0, 0, 54, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 144, 
 -	57, 54, 0, 84, 54, 0, 78, 33, 
 -	84, 78, 84, 84, 84, 84, 84, 84, 
 -	84, 0, 0, 0, 54, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 0, 54, 0, 0, 54, 0, 54, 
 -	19, 0, 0, 0, 54, 19, 0, 0, 
 -	54, 19, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 19, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 19, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 0, 54, 0, 0, 
 -	54, 0, 54, 19, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 19, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 0, 0, 54, 
 -	0, 0, 54, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 144, 57, 54, 0, 
 -	84, 54, 0, 75, 33, 84, 75, 84, 
 -	84, 84, 84, 84, 84, 84, 84, 84, 
 -	0, 0, 0, 54, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	0, 54, 0, 0, 54, 0, 54, 17, 
 -	0, 0, 0, 54, 17, 0, 0, 54, 
 -	17, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 17, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 17, 0, 
 -	54, 0, 0, 54, 17, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 0, 54, 0, 0, 54, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 17, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 0, 54, 0, 0, 0, 54, 
 -	0, 0, 54, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 0, 43, 0, 43, 0, 0, 0, 
 -	43, 54, 37, 37, 87, 37, 37, 43, 
 -	0, 39, 0, 43, 0, 0, 54, 0, 
 -	0, 39, 0, 0, 96, 54, 0, 93, 
 -	90, 41, 96, 90, 96, 96, 96, 96, 
 -	96, 96, 96, 96, 96, 99, 0, 43, 
 -	54, 15, 0, 0, 54, 15, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 15, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 15, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	0, 54, 0, 0, 54, 0, 54, 15, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 15, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 0, 54, 0, 0, 0, 54, 
 -	0, 0, 54, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 0, 0, 43, 0, 43, 0, 43, 
 -	0, 0
 -};
 -
 -static const unsigned char _lexer_eof_actions[] = {
 -	0, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43
 -};
 -
 -static const int lexer_start = 1;
 -static const int lexer_first_final = 464;
 -static const int lexer_error = 0;
 -
 -static const int lexer_en_main = 1;
 -
 -
 -#line 258 "ragel/i18n/fr.c.rl"
 -
 -static VALUE 
 -unindent(VALUE con, int start_col)
 -{
 -  VALUE re;
 -  /* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */
 -  char pat[32]; 
 -  snprintf(pat, 32, "^[\t ]{0,%d}", start_col); 
 -  re = rb_reg_regcomp(rb_str_new2(pat));
 -  rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2(""));
 -
 -  return Qnil;
 -
 -}
 -
 -static void 
 -store_kw_con(VALUE listener, const char * event_name, 
 -             const char * keyword_at, size_t keyword_length, 
 -             const char * at,         size_t length, 
 -             int current_line)
 -{
 -  VALUE con = Qnil, kw = Qnil;
 -  kw = ENCODED_STR_NEW(keyword_at, keyword_length);
 -  con = ENCODED_STR_NEW(at, length);
 -  rb_funcall(con, rb_intern("strip!"), 0);
 -  rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); 
 -}
 -
 -static void
 -store_multiline_kw_con(VALUE listener, const char * event_name,
 -                      const char * keyword_at, size_t keyword_length,
 -                      const char * at,         size_t length,
 -                      int current_line, int start_col)
 -{
 -  VALUE split;
 -  VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil;
 -
 -  kw = ENCODED_STR_NEW(keyword_at, keyword_length);
 -  con = ENCODED_STR_NEW(at, length);
 -
 -  unindent(con, start_col);
 -  
 -  split = rb_str_split(con, "\n");
 -
 -  name = rb_funcall(split, rb_intern("shift"), 0);
 -  desc = rb_ary_join(split, rb_str_new2( "\n" ));
 -
 -  if( name == Qnil ) 
 -  {
 -    name = rb_str_new2("");
 -  }
 -  if( rb_funcall(desc, rb_intern("size"), 0) == 0) 
 -  {
 -    desc = rb_str_new2("");
 -  }
 -  rb_funcall(name, rb_intern("strip!"), 0);
 -  rb_funcall(desc, rb_intern("rstrip!"), 0);
 -  rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); 
 -}
 -
 -static void 
 -store_attr(VALUE listener, const char * attr_type,
 -           const char * at, size_t length, 
 -           int line)
 -{
 -  VALUE val = ENCODED_STR_NEW(at, length);
 -  rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line));
 -}
 -static void 
 -store_docstring_content(VALUE listener, 
 -          int start_col, 
 -          const char *type_at, size_t type_length,
 -          const char *at, size_t length, 
 -          int current_line)
 -{
 -  VALUE re2;
 -  VALUE unescape_escaped_quotes;
 -  VALUE con = ENCODED_STR_NEW(at, length);
 -  VALUE con_type = ENCODED_STR_NEW(type_at, type_length);
 -
 -  unindent(con, start_col);
 -
 -  re2 = rb_reg_regcomp(rb_str_new2("\r\\Z"));
 -  unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\""));
 -  rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2(""));
 -  rb_funcall(con_type, rb_intern("strip!"), 0);
 -  rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\""));
 -  rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line));
 -}
 -static void 
 -raise_lexer_error(const char * at, int line)
 -{ 
 -  rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at);
 -}
 -
 -static void lexer_init(lexer_state *lexer) {
 -  lexer->content_start = 0;
 -  lexer->content_end = 0;
 -  lexer->content_len = 0;
 -  lexer->docstring_content_type_start = 0;
 -  lexer->docstring_content_type_end = 0;
 -  lexer->mark = 0;
 -  lexer->keyword_start = 0;
 -  lexer->keyword_end = 0;
 -  lexer->next_keyword_start = 0;
 -  lexer->line_number = 1;
 -  lexer->last_newline = 0;
 -  lexer->final_newline = 0;
 -  lexer->start_col = 0;
 -}
 -
 -static VALUE CLexer_alloc(VALUE klass)
 -{
 -  VALUE obj;
 -  lexer_state *lxr = ALLOC(lexer_state);
 -  lexer_init(lxr);
 -
 -  obj = Data_Wrap_Struct(klass, NULL, -1, lxr);
 -
 -  return obj;
 -}
 -
 -static VALUE CLexer_init(VALUE self, VALUE listener)
 -{
 -  lexer_state *lxr; 
 -  rb_iv_set(self, "@listener", listener);
 -  
 -  lxr = NULL;
 -  DATA_GET(self, lexer_state, lxr);
 -  lexer_init(lxr);
 -  
 -  return self;
 -}
 -
 -static VALUE CLexer_scan(VALUE self, VALUE input)
 -{
 -  VALUE input_copy;
 -  char *data;
 -  size_t len;
 -  VALUE listener = rb_iv_get(self, "@listener");
 -
 -  lexer_state *lexer;
 -  lexer = NULL;
 -  DATA_GET(self, lexer_state, lexer);
 -
 -  input_copy = rb_str_dup(input);
 -
 -  rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%"));
 -  data = RSTRING_PTR(input_copy);
 -  len = RSTRING_LEN(input_copy);
 -  
 -  if (len == 0) { 
 -    rb_raise(rb_eGherkinLexingError, "No content to lex.");
 -  } else {
 -
 -    const char *p, *pe, *eof;
 -    int cs = 0;
 -    
 -    VALUE current_row = Qnil;
 -
 -    p = data;
 -    pe = data + len;
 -    eof = pe;
 -    
 -    assert(*pe == '\0' && "pointer does not end on NULL");
 -    
 -    
 -#line 1097 "ext/gherkin_lexer_fr/gherkin_lexer_fr.c"
 -	{
 -	cs = lexer_start;
 -	}
 -
 -#line 425 "ragel/i18n/fr.c.rl"
 -    
 -#line 1104 "ext/gherkin_lexer_fr/gherkin_lexer_fr.c"
 -	{
 -	int _klen;
 -	unsigned int _trans;
 -	const char *_acts;
 -	unsigned int _nacts;
 -	const char *_keys;
 -
 -	if ( p == pe )
 -		goto _test_eof;
 -	if ( cs == 0 )
 -		goto _out;
 -_resume:
 -	_keys = _lexer_trans_keys + _lexer_key_offsets[cs];
 -	_trans = _lexer_index_offsets[cs];
 -
 -	_klen = _lexer_single_lengths[cs];
 -	if ( _klen > 0 ) {
 -		const char *_lower = _keys;
 -		const char *_mid;
 -		const char *_upper = _keys + _klen - 1;
 -		while (1) {
 -			if ( _upper < _lower )
 -				break;
 -
 -			_mid = _lower + ((_upper-_lower) >> 1);
 -			if ( (*p) < *_mid )
 -				_upper = _mid - 1;
 -			else if ( (*p) > *_mid )
 -				_lower = _mid + 1;
 -			else {
 -				_trans += (unsigned int)(_mid - _keys);
 -				goto _match;
 -			}
 -		}
 -		_keys += _klen;
 -		_trans += _klen;
 -	}
 -
 -	_klen = _lexer_range_lengths[cs];
 -	if ( _klen > 0 ) {
 -		const char *_lower = _keys;
 -		const char *_mid;
 -		const char *_upper = _keys + (_klen<<1) - 2;
 -		while (1) {
 -			if ( _upper < _lower )
 -				break;
 -
 -			_mid = _lower + (((_upper-_lower) >> 1) & ~1);
 -			if ( (*p) < _mid[0] )
 -				_upper = _mid - 2;
 -			else if ( (*p) > _mid[1] )
 -				_lower = _mid + 2;
 -			else {
 -				_trans += (unsigned int)((_mid - _keys)>>1);
 -				goto _match;
 -			}
 -		}
 -		_trans += _klen;
 -	}
 -
 -_match:
 -	cs = _lexer_trans_targs[_trans];
 -
 -	if ( _lexer_trans_actions[_trans] == 0 )
 -		goto _again;
 -
 -	_acts = _lexer_actions + _lexer_trans_actions[_trans];
 -	_nacts = (unsigned int) *_acts++;
 -	while ( _nacts-- > 0 )
 -	{
 -		switch ( *_acts++ )
 -		{
 -	case 0:
 -#line 83 "ragel/i18n/fr.c.rl"
 -	{
 -		MARK(content_start, p);
 -    lexer->current_line = lexer->line_number;
 -    lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2;
 -  }
 -	break;
 -	case 1:
 -#line 89 "ragel/i18n/fr.c.rl"
 -	{
 -    MARK(content_start, p);
 -  }
 -	break;
 -	case 2:
 -#line 93 "ragel/i18n/fr.c.rl"
 -	{
 -    lexer->current_line = lexer->line_number;
 -    lexer->start_col = p - data - lexer->last_newline;
 -  }
 -	break;
 -	case 3:
 -#line 98 "ragel/i18n/fr.c.rl"
 -	{
 -    int len = LEN(content_start, PTR_TO(final_newline));
 -    int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end));
 -
 -    if (len < 0) len = 0;
 -    if (type_len < 0) len = 0;
 -
 -    store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line);
 -  }
 -	break;
 -	case 4:
 -#line 108 "ragel/i18n/fr.c.rl"
 -	{ 
 -    MARK(docstring_content_type_start, p);
 -  }
 -	break;
 -	case 5:
 -#line 112 "ragel/i18n/fr.c.rl"
 -	{ 
 -    MARK(docstring_content_type_end, p);
 -  }
 -	break;
 -	case 6:
 -#line 116 "ragel/i18n/fr.c.rl"
 -	{
 -    STORE_KW_END_CON(feature);
 -  }
 -	break;
 -	case 7:
 -#line 120 "ragel/i18n/fr.c.rl"
 -	{
 -    STORE_KW_END_CON(background);
 -  }
 -	break;
 -	case 8:
 -#line 124 "ragel/i18n/fr.c.rl"
 -	{
 -    STORE_KW_END_CON(scenario);
 -  }
 -	break;
 -	case 9:
 -#line 128 "ragel/i18n/fr.c.rl"
 -	{
 -    STORE_KW_END_CON(scenario_outline);
 -  }
 -	break;
 -	case 10:
 -#line 132 "ragel/i18n/fr.c.rl"
 -	{
 -    STORE_KW_END_CON(examples);
 -  }
 -	break;
 -	case 11:
 -#line 136 "ragel/i18n/fr.c.rl"
 -	{
 -    store_kw_con(listener, "step",
 -      PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
 -      PTR_TO(content_start), LEN(content_start, p), 
 -      lexer->current_line);
 -  }
 -	break;
 -	case 12:
 -#line 143 "ragel/i18n/fr.c.rl"
 -	{
 -    STORE_ATTR(comment);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 13:
 -#line 148 "ragel/i18n/fr.c.rl"
 -	{
 -    STORE_ATTR(tag);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 14:
 -#line 153 "ragel/i18n/fr.c.rl"
 -	{
 -    lexer->line_number += 1;
 -    MARK(final_newline, p);
 -  }
 -	break;
 -	case 15:
 -#line 158 "ragel/i18n/fr.c.rl"
 -	{
 -    MARK(last_newline, p + 1);
 -  }
 -	break;
 -	case 16:
 -#line 162 "ragel/i18n/fr.c.rl"
 -	{
 -    if (lexer->mark == 0) {
 -      MARK(mark, p);
 -    }
 -  }
 -	break;
 -	case 17:
 -#line 168 "ragel/i18n/fr.c.rl"
 -	{
 -    MARK(keyword_end, p);
 -    MARK(keyword_start, PTR_TO(mark));
 -    MARK(content_start, p + 1);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 18:
 -#line 175 "ragel/i18n/fr.c.rl"
 -	{
 -    MARK(content_end, p);
 -  }
 -	break;
 -	case 19:
 -#line 179 "ragel/i18n/fr.c.rl"
 -	{
 -    p = p - 1;
 -    lexer->current_line = lexer->line_number;
 -    current_row = rb_ary_new();
 -  }
 -	break;
 -	case 20:
 -#line 185 "ragel/i18n/fr.c.rl"
 -	{
 -		MARK(content_start, p);
 -  }
 -	break;
 -	case 21:
 -#line 189 "ragel/i18n/fr.c.rl"
 -	{
 -    VALUE re_pipe, re_newline, re_backslash;
 -    VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
 -    rb_funcall(con, rb_intern("strip!"), 0);
 -    re_pipe      = rb_reg_regcomp(rb_str_new2("\\\\\\|"));
 -    re_newline   = rb_reg_regcomp(rb_str_new2("\\\\n"));
 -    re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_pipe,      rb_str_new2("|"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_newline,   rb_str_new2("\n"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\"));
 -
 -    rb_ary_push(current_row, con);
 -  }
 -	break;
 -	case 22:
 -#line 203 "ragel/i18n/fr.c.rl"
 -	{
 -    rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
 -  }
 -	break;
 -	case 23:
 -#line 207 "ragel/i18n/fr.c.rl"
 -	{
 -    int line;
 -    if (cs < lexer_first_final) {
 -      size_t count = 0;
 -      VALUE newstr_val;
 -      char *newstr;
 -      int newstr_count = 0;        
 -      size_t len;
 -      const char *buff;
 -      if (lexer->last_newline != 0) {
 -        len = LEN(last_newline, eof);
 -        buff = PTR_TO(last_newline);
 -      } else {
 -        len = strlen(data);
 -        buff = data;
 -      }
 -
 -      /* Allocate as a ruby string so that it gets cleaned up by GC */
 -      newstr_val = rb_str_new(buff, len);
 -      newstr = RSTRING_PTR(newstr_val);
 -
 -
 -      for (count = 0; count < len; count++) {
 -        if(buff[count] == 10) {
 -          newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
 -          break;
 -        } else {
 -          if (buff[count] == '%') {
 -            newstr[newstr_count++] = buff[count];
 -            newstr[newstr_count] = buff[count];
 -          } else {
 -            newstr[newstr_count] = buff[count];
 -          }
 -        }
 -        newstr_count++;
 -      }
 -
 -      line = lexer->line_number;
 -      lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
 -      raise_lexer_error(newstr, line);
 -    } else {
 -      rb_funcall(listener, rb_intern("eof"), 0);
 -    }
 -  }
 -	break;
 -#line 1394 "ext/gherkin_lexer_fr/gherkin_lexer_fr.c"
 -		}
 -	}
 -
 -_again:
 -	if ( cs == 0 )
 -		goto _out;
 -	if ( ++p != pe )
 -		goto _resume;
 -	_test_eof: {}
 -	if ( p == eof )
 -	{
 -	const char *__acts = _lexer_actions + _lexer_eof_actions[cs];
 -	unsigned int __nacts = (unsigned int) *__acts++;
 -	while ( __nacts-- > 0 ) {
 -		switch ( *__acts++ ) {
 -	case 23:
 -#line 207 "ragel/i18n/fr.c.rl"
 -	{
 -    int line;
 -    if (cs < lexer_first_final) {
 -      size_t count = 0;
 -      VALUE newstr_val;
 -      char *newstr;
 -      int newstr_count = 0;        
 -      size_t len;
 -      const char *buff;
 -      if (lexer->last_newline != 0) {
 -        len = LEN(last_newline, eof);
 -        buff = PTR_TO(last_newline);
 -      } else {
 -        len = strlen(data);
 -        buff = data;
 -      }
 -
 -      /* Allocate as a ruby string so that it gets cleaned up by GC */
 -      newstr_val = rb_str_new(buff, len);
 -      newstr = RSTRING_PTR(newstr_val);
 -
 -
 -      for (count = 0; count < len; count++) {
 -        if(buff[count] == 10) {
 -          newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
 -          break;
 -        } else {
 -          if (buff[count] == '%') {
 -            newstr[newstr_count++] = buff[count];
 -            newstr[newstr_count] = buff[count];
 -          } else {
 -            newstr[newstr_count] = buff[count];
 -          }
 -        }
 -        newstr_count++;
 -      }
 -
 -      line = lexer->line_number;
 -      lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
 -      raise_lexer_error(newstr, line);
 -    } else {
 -      rb_funcall(listener, rb_intern("eof"), 0);
 -    }
 -  }
 -	break;
 -#line 1457 "ext/gherkin_lexer_fr/gherkin_lexer_fr.c"
 -		}
 -	}
 -	}
 -
 -	_out: {}
 -	}
 -
 -#line 426 "ragel/i18n/fr.c.rl"
 -
 -    assert(p <= pe && "data overflow after parsing execute");
 -    assert(lexer->content_start <= len && "content starts after data end");
 -    assert(lexer->mark < len && "mark is after data end");
 -    
 -    /* Reset lexer by re-initializing the whole thing */
 -    lexer_init(lexer);
 -
 -    if (cs == lexer_error) {
 -      rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails.");
 -    } else {
 -      return Qtrue;
 -    }
 -  }
 -}
 -
 -void Init_gherkin_lexer_fr()
 -{
 -  mGherkin = rb_define_module("Gherkin");
 -  mGherkinLexer = rb_define_module_under(mGherkin, "Lexer");
 -  rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError"));
 -
 -  mCLexer = rb_define_module_under(mGherkin, "CLexer");
 -  cI18nLexer = rb_define_class_under(mCLexer, "Fr", rb_cObject);
 -  rb_define_alloc_func(cI18nLexer, CLexer_alloc);
 -  rb_define_method(cI18nLexer, "initialize", CLexer_init, 1);
 -  rb_define_method(cI18nLexer, "scan", CLexer_scan, 1);
 -}
 -
diff --cc ext/gherkin_lexer_he/extconf.rb
index cf6d3a2,cf6d3a2..0000000
deleted file mode 100644,100644
--- a/ext/gherkin_lexer_he/extconf.rb
+++ /dev/null
@@@ -1,6 -1,6 +1,0 @@@
--require 'mkmf'
--CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags']
--$CFLAGS << ' -O0 -Wall' if CONFIG['CC'] =~ /gcc|clang/
--dir_config("gherkin_lexer_he")
--have_library("c", "main")
--create_makefile("gherkin_lexer_he")
diff --cc ext/gherkin_lexer_he/gherkin_lexer_he.c
index a5865bf,49ff636..0000000
deleted file mode 100644,100644
--- a/ext/gherkin_lexer_he/gherkin_lexer_he.c
+++ /dev/null
@@@ -1,1374 -1,1374 +1,0 @@@
--
- #line 1 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/he.c.rl"
- #include <assert.h>
- #include <ruby.h>
- 
- #if defined(_WIN32)
- #include <stddef.h>
- #endif
- 
- #ifdef HAVE_RUBY_RE_H
- #include <ruby/re.h>
- #else
- #include <re.h>
- #endif
- 
- #ifdef HAVE_RUBY_ENCODING_H
- #include <ruby/encoding.h>
- #define ENCODED_STR_NEW(ptr, len) \
-     rb_enc_str_new(ptr, len, rb_utf8_encoding())
- #else
- #define ENCODED_STR_NEW(ptr, len) \
-     rb_str_new(ptr, len)
- #endif
- 
- #ifndef RSTRING_PTR
- #define RSTRING_PTR(s) (RSTRING(s)->ptr)
- #endif
- 
- #ifndef RSTRING_LEN
- #define RSTRING_LEN(s) (RSTRING(s)->len)
- #endif
- 
- #define DATA_GET(FROM, TYPE, NAME) \
-   Data_Get_Struct(FROM, TYPE, NAME); \
-   if (NAME == NULL) { \
-     rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \
-   }
-  
- typedef struct lexer_state {
-   int content_len;
-   int line_number;
-   int current_line;
-   int start_col;
-   size_t mark;
-   size_t keyword_start;
-   size_t keyword_end;
-   size_t next_keyword_start;
-   size_t content_start;
-   size_t content_end;
-   size_t docstring_content_type_start;
-   size_t docstring_content_type_end;
-   size_t query_start;
-   size_t last_newline;
-   size_t final_newline;
- } lexer_state;
- 
- static VALUE mGherkin;
- static VALUE mGherkinLexer;
- static VALUE mCLexer;
- static VALUE cI18nLexer;
- static VALUE rb_eGherkinLexingError;
- 
- #define LEN(AT, P) (P - data - lexer->AT)
- #define MARK(M, P) (lexer->M = (P) - data)
- #define PTR_TO(P) (data + lexer->P)
- 
- #define STORE_KW_END_CON(EVENT) \
-   store_multiline_kw_con(listener, # EVENT, \
-     PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \
-     PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \
-     lexer->current_line, lexer->start_col); \
-     if (lexer->content_end != 0) { \
-       p = PTR_TO(content_end - 1); \
-     } \
-     lexer->content_end = 0
- 
- #define STORE_ATTR(ATTR) \
-     store_attr(listener, # ATTR, \
-       PTR_TO(content_start), LEN(content_start, p), \
-       lexer->line_number)
- 
- 
- #line 254 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/he.c.rl"
- 
- 
- /** Data **/
- 
- #line 89 "ext/gherkin_lexer_he/gherkin_lexer_he.c"
- static const char _lexer_actions[] = {
- 	0, 1, 0, 1, 1, 1, 2, 1, 
- 	3, 1, 4, 1, 5, 1, 6, 1, 
- 	7, 1, 8, 1, 9, 1, 10, 1, 
- 	11, 1, 12, 1, 13, 1, 16, 1, 
- 	17, 1, 18, 1, 19, 1, 20, 1, 
- 	21, 1, 22, 1, 23, 2, 1, 18, 
- 	2, 4, 5, 2, 13, 0, 2, 14, 
- 	15, 2, 17, 0, 2, 17, 2, 2, 
- 	17, 16, 2, 17, 19, 2, 18, 6, 
- 	2, 18, 7, 2, 18, 8, 2, 18, 
- 	9, 2, 18, 10, 2, 18, 16, 2, 
- 	20, 21, 2, 22, 0, 2, 22, 2, 
- 	2, 22, 16, 2, 22, 19, 3, 3, 
- 	14, 15, 3, 5, 14, 15, 3, 11, 
- 	14, 15, 3, 12, 14, 15, 3, 13, 
- 	14, 15, 3, 14, 15, 18, 3, 17, 
- 	0, 11, 3, 17, 14, 15, 4, 1, 
- 	14, 15, 18, 4, 4, 5, 14, 15, 
- 	4, 17, 0, 14, 15, 5, 17, 0, 
- 	11, 14, 15
- };
- 
- static const short _lexer_key_offsets[] = {
- 	0, 0, 12, 19, 20, 22, 23, 24, 
- 	25, 27, 29, 40, 41, 42, 44, 46, 
- 	51, 56, 61, 66, 70, 74, 76, 77, 
- 	78, 79, 80, 81, 82, 83, 84, 85, 
- 	86, 87, 88, 89, 90, 91, 96, 103, 
- 	108, 112, 118, 121, 123, 129, 140, 142, 
- 	143, 144, 145, 146, 147, 148, 149, 150, 
- 	151, 152, 153, 154, 155, 156, 157, 158, 
- 	159, 160, 161, 162, 163, 164, 165, 166, 
- 	167, 168, 175, 177, 179, 181, 183, 185, 
- 	187, 189, 191, 193, 195, 206, 207, 208, 
- 	209, 210, 211, 212, 213, 214, 215, 216, 
- 	217, 218, 219, 220, 221, 222, 223, 232, 
- 	238, 240, 243, 245, 247, 249, 252, 254, 
- 	256, 258, 260, 262, 264, 266, 268, 270, 
- 	272, 274, 276, 278, 280, 282, 284, 286, 
- 	288, 290, 292, 294, 296, 300, 302, 304, 
- 	306, 308, 310, 312, 314, 316, 318, 320, 
- 	322, 324, 326, 328, 330, 332, 334, 336, 
- 	338, 340, 342, 344, 346, 348, 350, 352, 
- 	354, 356, 358, 360, 362, 364, 366, 368, 
- 	370, 372, 374, 376, 377, 380, 381, 382, 
- 	383, 384, 385, 386, 387, 388, 389, 390, 
- 	391, 392, 393, 394, 395, 396, 397, 398, 
- 	399, 400, 409, 415, 417, 420, 422, 424, 
- 	426, 429, 431, 433, 435, 437, 439, 441, 
- 	443, 445, 447, 449, 451, 453, 455, 457, 
- 	459, 461, 463, 465, 467, 469, 471, 473, 
- 	476, 478, 480, 482, 484, 486, 488, 490, 
- 	492, 494, 496, 498, 500, 502, 504, 506, 
- 	508, 510, 512, 514, 516, 518, 520, 522, 
- 	524, 526, 528, 530, 531, 532, 533, 534, 
- 	535, 536, 537, 538, 539, 547, 551, 553, 
- 	555, 557, 559, 561, 563, 565, 567, 569, 
- 	571, 573, 575, 577, 579, 581, 583, 585, 
- 	587, 591, 593, 595, 597, 599, 601, 603, 
- 	605, 607, 609, 611, 613, 615, 617, 619, 
- 	621, 623, 625, 627, 629, 631, 633, 635, 
- 	637, 639, 641, 643, 645, 647, 649, 651, 
- 	653, 655, 657, 659, 661, 663, 665, 666, 
- 	667, 668, 669, 670, 671, 672, 673, 674, 
- 	683, 690, 692, 695, 697, 699, 701, 704, 
- 	706, 708, 710, 712, 714, 716, 718, 720, 
- 	722, 724, 726, 728, 730, 732, 734, 736, 
- 	738, 740, 742, 744, 746, 748, 750, 752, 
- 	754, 756, 758, 762, 764, 766, 768, 770, 
- 	772, 774, 776, 778, 780, 782, 784, 786, 
- 	788, 790, 792, 794, 796, 798, 800, 802, 
- 	804, 806, 808, 810, 812, 814, 816, 818, 
- 	820, 822, 824, 826, 828, 830, 832, 834, 
- 	836, 837, 838
- };
- 
- static const char _lexer_trans_keys[] = {
- 	-41, -17, 10, 32, 34, 35, 37, 42, 
- 	64, 124, 9, 13, -112, -111, -109, -107, 
- 	-101, -88, -86, -41, -111, -106, -41, -100, 
- 	32, 10, 13, 10, 13, -41, 10, 32, 
- 	34, 35, 37, 42, 64, 124, 9, 13, 
- 	34, 34, 10, 13, 10, 13, 10, 32, 
- 	34, 9, 13, 10, 32, 34, 9, 13, 
- 	10, 32, 34, 9, 13, 10, 32, 34, 
- 	9, 13, 10, 32, 9, 13, 10, 32, 
- 	9, 13, 10, 13, 10, 95, 70, 69, 
- 	65, 84, 85, 82, 69, 95, 69, 78, 
- 	68, 95, 37, 13, 32, 64, 9, 10, 
- 	9, 10, 13, 32, 64, 11, 12, 10, 
- 	32, 64, 9, 13, 32, 124, 9, 13, 
- 	10, 32, 92, 124, 9, 13, 10, 92, 
- 	124, 10, 92, 10, 32, 92, 124, 9, 
- 	13, -41, 10, 32, 34, 35, 37, 42, 
- 	64, 124, 9, 13, -41, 32, -103, -41, 
- 	-108, -41, -103, -41, -96, -41, -86, -41, 
- 	-97, -41, -107, -41, -110, -41, -98, -41, 
- 	-112, -41, -107, -41, -86, 58, 10, 10, 
- 	-41, 10, 32, 35, 124, 9, 13, -86, 
- 	10, -41, 10, -101, 10, -41, 10, -107, 
- 	10, -41, 10, -96, 10, -41, 10, -108, 
- 	10, 10, 58, -41, 10, 32, 34, 35, 
- 	37, 42, 64, 124, 9, 13, -41, -110, 
- 	-41, -99, -41, -112, -41, -87, -41, -88, 
- 	-41, -89, -41, -94, 58, 10, 10, -41, 
- 	10, 32, 35, 37, 42, 64, 9, 13, 
- 	-112, -111, -107, -101, -86, 10, -41, 10, 
- 	-111, -106, 10, -41, 10, -100, 10, 10, 
- 	32, -41, 10, 32, -103, 10, -41, 10, 
- 	-108, 10, -41, 10, -103, 10, -41, 10, 
- 	-96, 10, -41, 10, -86, 10, -41, 10, 
- 	-97, 10, -41, 10, -110, 10, -41, 10, 
- 	-99, 10, -41, 10, -112, 10, -41, 10, 
- 	-87, 10, -41, 10, -88, 10, -41, 10, 
- 	-111, -101, -88, 10, -41, 10, -96, 10, 
- 	-41, 10, -103, 10, -41, 10, -86, 10, 
- 	10, 32, -41, 10, -86, 10, -41, 10, 
- 	-88, 10, -41, 10, -105, 10, -41, 10, 
- 	-103, 10, -41, 10, -87, 10, 10, 58, 
- 	-41, 10, -107, 10, -41, 10, -96, 10, 
- 	-41, 10, -108, 10, 10, 95, 10, 70, 
- 	10, 69, 10, 65, 10, 84, 10, 85, 
- 	10, 82, 10, 69, 10, 95, 10, 69, 
- 	10, 78, 10, 68, 10, 95, 10, 37, 
- 	-41, -111, -101, -88, -41, -96, -41, -103, 
- 	-41, -86, 32, -41, -86, -41, -88, -41, 
- 	-105, -41, -103, -41, -87, 58, 10, 10, 
- 	-41, 10, 32, 35, 37, 42, 64, 9, 
- 	13, -112, -111, -107, -101, -86, 10, -41, 
- 	10, -111, -106, 10, -41, 10, -100, 10, 
- 	10, 32, -41, 10, 32, -103, 10, -41, 
- 	10, -108, 10, -41, 10, -103, 10, -41, 
- 	10, -96, 10, -41, 10, -86, 10, -41, 
- 	10, -97, 10, -41, 10, -110, 10, -41, 
- 	10, -99, 10, -41, 10, -112, 10, -41, 
- 	10, -87, 10, -41, 10, -88, 10, -41, 
- 	10, -101, -88, 10, -41, 10, -107, 10, 
- 	-41, 10, -96, 10, -41, 10, -108, 10, 
- 	10, 58, -41, 10, -105, 10, -41, 10, 
- 	-103, 10, -41, 10, -87, 10, 10, 95, 
- 	10, 70, 10, 69, 10, 65, 10, 84, 
- 	10, 85, 10, 82, 10, 69, 10, 95, 
- 	10, 69, 10, 78, 10, 68, 10, 95, 
- 	10, 37, -41, -107, -41, -96, -41, -108, 
- 	58, 10, 10, -41, 10, 32, 35, 37, 
- 	64, 9, 13, -109, -88, -86, 10, -41, 
- 	10, -107, 10, -41, 10, -110, 10, -41, 
- 	10, -98, 10, -41, 10, -112, 10, -41, 
- 	10, -107, 10, -41, 10, -86, 10, 10, 
- 	58, -41, 10, -89, 10, -41, 10, -94, 
- 	10, -41, 10, -111, -101, -88, 10, -41, 
- 	10, -96, 10, -41, 10, -103, 10, -41, 
- 	10, -86, 10, 10, 32, -41, 10, -86, 
- 	10, -41, 10, -88, 10, -41, 10, -105, 
- 	10, -41, 10, -103, 10, -41, 10, -87, 
- 	10, -41, 10, -107, 10, -41, 10, -96, 
- 	10, -41, 10, -108, 10, 10, 95, 10, 
- 	70, 10, 69, 10, 65, 10, 84, 10, 
- 	85, 10, 82, 10, 69, 10, 95, 10, 
- 	69, 10, 78, 10, 68, 10, 95, 10, 
- 	37, -41, -105, -41, -103, -41, -87, 58, 
- 	10, 10, -41, 10, 32, 35, 37, 42, 
- 	64, 9, 13, -112, -111, -107, -101, -88, 
- 	-86, 10, -41, 10, -111, -106, 10, -41, 
- 	10, -100, 10, 10, 32, -41, 10, 32, 
- 	-103, 10, -41, 10, -108, 10, -41, 10, 
- 	-103, 10, -41, 10, -96, 10, -41, 10, 
- 	-86, 10, -41, 10, -97, 10, -41, 10, 
- 	-110, 10, -41, 10, -99, 10, -41, 10, 
- 	-112, 10, -41, 10, -87, 10, -41, 10, 
- 	-88, 10, -41, 10, -89, 10, -41, 10, 
- 	-94, 10, 10, 58, -41, 10, -111, -101, 
- 	-88, 10, -41, 10, -96, 10, -41, 10, 
- 	-103, 10, -41, 10, -86, 10, 10, 32, 
- 	-41, 10, -86, 10, -41, 10, -88, 10, 
- 	-41, 10, -105, 10, -41, 10, -103, 10, 
- 	-41, 10, -87, 10, -41, 10, -107, 10, 
- 	-41, 10, -96, 10, -41, 10, -108, 10, 
- 	10, 95, 10, 70, 10, 69, 10, 65, 
- 	10, 84, 10, 85, 10, 82, 10, 69, 
- 	10, 95, 10, 69, 10, 78, 10, 68, 
- 	10, 95, 10, 37, -69, -65, 0
- };
- 
- static const char _lexer_single_lengths[] = {
- 	0, 10, 7, 1, 2, 1, 1, 1, 
- 	2, 2, 9, 1, 1, 2, 2, 3, 
- 	3, 3, 3, 2, 2, 2, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 3, 5, 3, 
- 	2, 4, 3, 2, 4, 9, 2, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 5, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 9, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 7, 6, 
- 	2, 3, 2, 2, 2, 3, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 4, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 1, 3, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 7, 6, 2, 3, 2, 2, 2, 
- 	3, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 3, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 6, 4, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	4, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 7, 
- 	7, 2, 3, 2, 2, 2, 3, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 4, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	1, 1, 0
- };
- 
- static const char _lexer_range_lengths[] = {
- 	0, 1, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 1, 0, 0, 0, 0, 1, 
- 	1, 1, 1, 1, 1, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 1, 1, 1, 
- 	1, 1, 0, 0, 1, 1, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 1, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 1, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 1, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 1, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 1, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 1, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0
- };
- 
- static const short _lexer_index_offsets[] = {
- 	0, 0, 12, 20, 22, 25, 27, 29, 
- 	31, 34, 37, 48, 50, 52, 55, 58, 
- 	63, 68, 73, 78, 82, 86, 89, 91, 
- 	93, 95, 97, 99, 101, 103, 105, 107, 
- 	109, 111, 113, 115, 117, 119, 124, 131, 
- 	136, 140, 146, 150, 153, 159, 170, 173, 
- 	175, 177, 179, 181, 183, 185, 187, 189, 
- 	191, 193, 195, 197, 199, 201, 203, 205, 
- 	207, 209, 211, 213, 215, 217, 219, 221, 
- 	223, 225, 232, 235, 238, 241, 244, 247, 
- 	250, 253, 256, 259, 262, 273, 275, 277, 
- 	279, 281, 283, 285, 287, 289, 291, 293, 
- 	295, 297, 299, 301, 303, 305, 307, 316, 
- 	323, 326, 330, 333, 336, 339, 343, 346, 
- 	349, 352, 355, 358, 361, 364, 367, 370, 
- 	373, 376, 379, 382, 385, 388, 391, 394, 
- 	397, 400, 403, 406, 409, 414, 417, 420, 
- 	423, 426, 429, 432, 435, 438, 441, 444, 
- 	447, 450, 453, 456, 459, 462, 465, 468, 
- 	471, 474, 477, 480, 483, 486, 489, 492, 
- 	495, 498, 501, 504, 507, 510, 513, 516, 
- 	519, 522, 525, 528, 530, 534, 536, 538, 
- 	540, 542, 544, 546, 548, 550, 552, 554, 
- 	556, 558, 560, 562, 564, 566, 568, 570, 
- 	572, 574, 583, 590, 593, 597, 600, 603, 
- 	606, 610, 613, 616, 619, 622, 625, 628, 
- 	631, 634, 637, 640, 643, 646, 649, 652, 
- 	655, 658, 661, 664, 667, 670, 673, 676, 
- 	680, 683, 686, 689, 692, 695, 698, 701, 
- 	704, 707, 710, 713, 716, 719, 722, 725, 
- 	728, 731, 734, 737, 740, 743, 746, 749, 
- 	752, 755, 758, 761, 763, 765, 767, 769, 
- 	771, 773, 775, 777, 779, 787, 792, 795, 
- 	798, 801, 804, 807, 810, 813, 816, 819, 
- 	822, 825, 828, 831, 834, 837, 840, 843, 
- 	846, 851, 854, 857, 860, 863, 866, 869, 
- 	872, 875, 878, 881, 884, 887, 890, 893, 
- 	896, 899, 902, 905, 908, 911, 914, 917, 
- 	920, 923, 926, 929, 932, 935, 938, 941, 
- 	944, 947, 950, 953, 956, 959, 962, 964, 
- 	966, 968, 970, 972, 974, 976, 978, 980, 
- 	989, 997, 1000, 1004, 1007, 1010, 1013, 1017, 
- 	1020, 1023, 1026, 1029, 1032, 1035, 1038, 1041, 
- 	1044, 1047, 1050, 1053, 1056, 1059, 1062, 1065, 
- 	1068, 1071, 1074, 1077, 1080, 1083, 1086, 1089, 
- 	1092, 1095, 1098, 1103, 1106, 1109, 1112, 1115, 
- 	1118, 1121, 1124, 1127, 1130, 1133, 1136, 1139, 
- 	1142, 1145, 1148, 1151, 1154, 1157, 1160, 1163, 
- 	1166, 1169, 1172, 1175, 1178, 1181, 1184, 1187, 
- 	1190, 1193, 1196, 1199, 1202, 1205, 1208, 1211, 
- 	1214, 1216, 1218
- };
- 
- static const short _lexer_trans_targs[] = {
- 	2, 400, 10, 10, 11, 21, 23, 7, 
- 	37, 40, 10, 0, 3, 48, 58, 85, 
- 	89, 95, 171, 0, 4, 0, 5, 46, 
- 	0, 6, 0, 7, 0, 8, 0, 10, 
- 	22, 9, 10, 22, 9, 2, 10, 10, 
- 	11, 21, 23, 7, 37, 40, 10, 0, 
- 	12, 0, 13, 0, 15, 14, 14, 15, 
- 	14, 14, 16, 16, 17, 16, 16, 16, 
- 	16, 17, 16, 16, 16, 16, 18, 16, 
- 	16, 16, 16, 19, 16, 16, 10, 20, 
- 	20, 0, 10, 20, 20, 0, 10, 22, 
- 	21, 10, 0, 24, 0, 25, 0, 26, 
- 	0, 27, 0, 28, 0, 29, 0, 30, 
- 	0, 31, 0, 32, 0, 33, 0, 34, 
- 	0, 35, 0, 36, 0, 402, 0, 0, 
- 	0, 0, 0, 38, 39, 10, 39, 39, 
- 	37, 38, 38, 10, 39, 37, 39, 0, 
- 	40, 41, 40, 0, 45, 44, 43, 41, 
- 	44, 42, 0, 43, 41, 42, 0, 43, 
- 	42, 45, 44, 43, 41, 44, 42, 2, 
- 	45, 45, 11, 21, 23, 7, 37, 40, 
- 	45, 0, 47, 8, 0, 7, 0, 49, 
- 	0, 50, 0, 51, 0, 52, 0, 53, 
- 	0, 54, 0, 55, 0, 56, 0, 57, 
- 	0, 7, 0, 59, 0, 60, 0, 61, 
- 	0, 62, 0, 63, 0, 64, 0, 65, 
- 	0, 66, 0, 67, 0, 68, 0, 69, 
- 	0, 70, 0, 71, 0, 73, 72, 73, 
- 	72, 74, 73, 73, 10, 10, 73, 72, 
- 	75, 73, 72, 76, 73, 72, 77, 73, 
- 	72, 78, 73, 72, 79, 73, 72, 80, 
- 	73, 72, 81, 73, 72, 82, 73, 72, 
- 	83, 73, 72, 73, 84, 72, 2, 10, 
- 	10, 11, 21, 23, 7, 37, 40, 10, 
- 	0, 86, 0, 87, 0, 88, 0, 7, 
- 	0, 90, 0, 91, 0, 92, 0, 93, 
- 	0, 94, 0, 7, 0, 96, 0, 97, 
- 	0, 98, 0, 99, 0, 100, 0, 102, 
- 	101, 102, 101, 103, 102, 102, 10, 157, 
- 	108, 10, 102, 101, 104, 111, 121, 125, 
- 	131, 102, 101, 105, 102, 101, 106, 109, 
- 	102, 101, 107, 102, 101, 108, 102, 101, 
- 	102, 84, 101, 110, 102, 84, 101, 108, 
- 	102, 101, 112, 102, 101, 113, 102, 101, 
- 	114, 102, 101, 115, 102, 101, 116, 102, 
- 	101, 117, 102, 101, 118, 102, 101, 119, 
- 	102, 101, 120, 102, 101, 108, 102, 101, 
- 	122, 102, 101, 123, 102, 101, 124, 102, 
- 	101, 108, 102, 101, 126, 102, 101, 127, 
- 	102, 101, 128, 102, 101, 129, 102, 101, 
- 	130, 102, 101, 108, 102, 101, 132, 102, 
- 	101, 133, 151, 144, 102, 101, 134, 102, 
- 	101, 135, 102, 101, 136, 102, 101, 137, 
- 	102, 101, 138, 102, 101, 139, 102, 101, 
- 	102, 140, 101, 141, 102, 101, 142, 102, 
- 	101, 143, 102, 101, 144, 102, 101, 145, 
- 	102, 101, 146, 102, 101, 147, 102, 101, 
- 	148, 102, 101, 149, 102, 101, 150, 102, 
- 	101, 102, 84, 101, 152, 102, 101, 153, 
- 	102, 101, 154, 102, 101, 155, 102, 101, 
- 	156, 102, 101, 150, 102, 101, 102, 158, 
- 	101, 102, 159, 101, 102, 160, 101, 102, 
- 	161, 101, 102, 162, 101, 102, 163, 101, 
- 	102, 164, 101, 102, 165, 101, 102, 166, 
- 	101, 102, 167, 101, 102, 168, 101, 102, 
- 	169, 101, 102, 170, 101, 102, 10, 101, 
- 	172, 0, 173, 251, 318, 0, 174, 0, 
- 	175, 0, 176, 0, 177, 0, 178, 0, 
- 	179, 0, 180, 0, 181, 0, 182, 0, 
- 	183, 0, 184, 0, 185, 0, 186, 0, 
- 	187, 0, 188, 0, 189, 0, 190, 0, 
- 	191, 0, 193, 192, 193, 192, 194, 193, 
- 	193, 10, 237, 199, 10, 193, 192, 195, 
- 	202, 212, 216, 222, 193, 192, 196, 193, 
- 	192, 197, 200, 193, 192, 198, 193, 192, 
- 	199, 193, 192, 193, 84, 192, 201, 193, 
- 	84, 192, 199, 193, 192, 203, 193, 192, 
- 	204, 193, 192, 205, 193, 192, 206, 193, 
- 	192, 207, 193, 192, 208, 193, 192, 209, 
- 	193, 192, 210, 193, 192, 211, 193, 192, 
- 	199, 193, 192, 213, 193, 192, 214, 193, 
- 	192, 215, 193, 192, 199, 193, 192, 217, 
- 	193, 192, 218, 193, 192, 219, 193, 192, 
- 	220, 193, 192, 221, 193, 192, 199, 193, 
- 	192, 223, 193, 192, 224, 231, 193, 192, 
- 	225, 193, 192, 226, 193, 192, 227, 193, 
- 	192, 228, 193, 192, 229, 193, 192, 230, 
- 	193, 192, 193, 84, 192, 232, 193, 192, 
- 	233, 193, 192, 234, 193, 192, 235, 193, 
- 	192, 236, 193, 192, 230, 193, 192, 193, 
- 	238, 192, 193, 239, 192, 193, 240, 192, 
- 	193, 241, 192, 193, 242, 192, 193, 243, 
- 	192, 193, 244, 192, 193, 245, 192, 193, 
- 	246, 192, 193, 247, 192, 193, 248, 192, 
- 	193, 249, 192, 193, 250, 192, 193, 10, 
- 	192, 252, 0, 253, 0, 254, 0, 255, 
- 	0, 256, 0, 257, 0, 258, 0, 260, 
- 	259, 260, 259, 261, 260, 260, 10, 304, 
- 	10, 260, 259, 262, 275, 279, 260, 259, 
- 	263, 260, 259, 264, 260, 259, 265, 260, 
- 	259, 266, 260, 259, 267, 260, 259, 268, 
- 	260, 259, 269, 260, 259, 270, 260, 259, 
- 	271, 260, 259, 272, 260, 259, 273, 260, 
- 	259, 274, 260, 259, 260, 84, 259, 276, 
- 	260, 259, 277, 260, 259, 278, 260, 259, 
- 	274, 260, 259, 280, 260, 259, 281, 298, 
- 	292, 260, 259, 282, 260, 259, 283, 260, 
- 	259, 284, 260, 259, 285, 260, 259, 286, 
- 	260, 259, 287, 260, 259, 260, 288, 259, 
- 	289, 260, 259, 290, 260, 259, 291, 260, 
- 	259, 292, 260, 259, 293, 260, 259, 294, 
- 	260, 259, 295, 260, 259, 296, 260, 259, 
- 	297, 260, 259, 274, 260, 259, 299, 260, 
- 	259, 300, 260, 259, 301, 260, 259, 302, 
- 	260, 259, 303, 260, 259, 274, 260, 259, 
- 	260, 305, 259, 260, 306, 259, 260, 307, 
- 	259, 260, 308, 259, 260, 309, 259, 260, 
- 	310, 259, 260, 311, 259, 260, 312, 259, 
- 	260, 313, 259, 260, 314, 259, 260, 315, 
- 	259, 260, 316, 259, 260, 317, 259, 260, 
- 	10, 259, 319, 0, 320, 0, 321, 0, 
- 	322, 0, 323, 0, 324, 0, 325, 0, 
- 	327, 326, 327, 326, 328, 327, 327, 10, 
- 	386, 333, 10, 327, 326, 329, 336, 346, 
- 	350, 356, 361, 327, 326, 330, 327, 326, 
- 	331, 334, 327, 326, 332, 327, 326, 333, 
- 	327, 326, 327, 84, 326, 335, 327, 84, 
- 	326, 333, 327, 326, 337, 327, 326, 338, 
- 	327, 326, 339, 327, 326, 340, 327, 326, 
- 	341, 327, 326, 342, 327, 326, 343, 327, 
- 	326, 344, 327, 326, 345, 327, 326, 333, 
- 	327, 326, 347, 327, 326, 348, 327, 326, 
- 	349, 327, 326, 333, 327, 326, 351, 327, 
- 	326, 352, 327, 326, 353, 327, 326, 354, 
- 	327, 326, 355, 327, 326, 333, 327, 326, 
- 	357, 327, 326, 358, 327, 326, 359, 327, 
- 	326, 360, 327, 326, 327, 84, 326, 362, 
- 	327, 326, 363, 380, 374, 327, 326, 364, 
- 	327, 326, 365, 327, 326, 366, 327, 326, 
- 	367, 327, 326, 368, 327, 326, 369, 327, 
- 	326, 327, 370, 326, 371, 327, 326, 372, 
- 	327, 326, 373, 327, 326, 374, 327, 326, 
- 	375, 327, 326, 376, 327, 326, 377, 327, 
- 	326, 378, 327, 326, 379, 327, 326, 360, 
- 	327, 326, 381, 327, 326, 382, 327, 326, 
- 	383, 327, 326, 384, 327, 326, 385, 327, 
- 	326, 360, 327, 326, 327, 387, 326, 327, 
- 	388, 326, 327, 389, 326, 327, 390, 326, 
- 	327, 391, 326, 327, 392, 326, 327, 393, 
- 	326, 327, 394, 326, 327, 395, 326, 327, 
- 	396, 326, 327, 397, 326, 327, 398, 326, 
- 	327, 399, 326, 327, 10, 326, 401, 0, 
- 	10, 0, 0, 0
- };
- 
- static const unsigned char _lexer_trans_actions[] = {
- 	29, 0, 54, 0, 5, 1, 0, 29, 
- 	1, 35, 0, 43, 0, 0, 0, 0, 
- 	0, 0, 0, 43, 0, 43, 0, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 149, 
- 	126, 57, 110, 23, 0, 29, 54, 0, 
- 	5, 1, 0, 29, 1, 35, 0, 43, 
- 	0, 43, 0, 43, 139, 48, 9, 106, 
- 	11, 0, 134, 45, 45, 45, 3, 122, 
- 	33, 33, 33, 0, 122, 33, 33, 33, 
- 	0, 122, 33, 0, 33, 0, 102, 7, 
- 	7, 43, 54, 0, 0, 43, 114, 25, 
- 	0, 54, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 43, 
- 	43, 43, 43, 0, 27, 118, 27, 27, 
- 	51, 27, 0, 54, 0, 1, 0, 43, 
- 	0, 0, 0, 43, 54, 37, 37, 87, 
- 	37, 37, 43, 0, 39, 0, 43, 0, 
- 	0, 54, 0, 0, 39, 0, 0, 96, 
- 	54, 0, 93, 90, 41, 96, 90, 99, 
- 	0, 43, 0, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 144, 57, 54, 
- 	0, 84, 54, 0, 81, 81, 0, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 54, 21, 0, 63, 130, 
- 	31, 60, 57, 31, 63, 57, 66, 31, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 144, 
- 	57, 54, 0, 84, 54, 0, 72, 33, 
- 	84, 72, 0, 0, 0, 0, 0, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	54, 15, 0, 0, 54, 15, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	54, 0, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 54, 15, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 15, 0, 
- 	0, 43, 0, 0, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 144, 57, 54, 0, 84, 54, 
- 	0, 78, 33, 84, 78, 0, 0, 0, 
- 	0, 0, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 54, 19, 0, 0, 54, 
- 	19, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 54, 19, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 19, 
- 	0, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 144, 
- 	57, 54, 0, 84, 54, 0, 69, 33, 
- 	69, 0, 0, 0, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 54, 13, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 54, 0, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	13, 0, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	144, 57, 54, 0, 84, 54, 0, 75, 
- 	33, 84, 75, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 54, 17, 0, 0, 54, 17, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 54, 17, 0, 0, 
- 	54, 0, 0, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 54, 0, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 17, 0, 0, 43, 
- 	0, 43, 0, 0
- };
- 
- static const unsigned char _lexer_eof_actions[] = {
- 	0, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43
- };
- 
- static const int lexer_start = 1;
- static const int lexer_first_final = 402;
- static const int lexer_error = 0;
- 
- static const int lexer_en_main = 1;
- 
- 
- #line 258 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/he.c.rl"
- 
- static VALUE 
- unindent(VALUE con, int start_col)
- {
-   VALUE re;
-   // Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters
-   char pat[32]; 
-   snprintf(pat, 32, "^[\t ]{0,%d}", start_col); 
-   re = rb_reg_regcomp(rb_str_new2(pat));
-   rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2(""));
- 
-   return Qnil;
- 
- }
- 
- static void 
- store_kw_con(VALUE listener, const char * event_name, 
-              const char * keyword_at, size_t keyword_length, 
-              const char * at,         size_t length, 
-              int current_line)
- {
-   VALUE con = Qnil, kw = Qnil;
-   kw = ENCODED_STR_NEW(keyword_at, keyword_length);
-   con = ENCODED_STR_NEW(at, length);
-   rb_funcall(con, rb_intern("strip!"), 0);
-   rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); 
- }
- 
- static void
- store_multiline_kw_con(VALUE listener, const char * event_name,
-                       const char * keyword_at, size_t keyword_length,
-                       const char * at,         size_t length,
-                       int current_line, int start_col)
- {
-   VALUE split;
-   VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil;
- 
-   kw = ENCODED_STR_NEW(keyword_at, keyword_length);
-   con = ENCODED_STR_NEW(at, length);
- 
-   unindent(con, start_col);
-   
-   split = rb_str_split(con, "\n");
- 
-   name = rb_funcall(split, rb_intern("shift"), 0);
-   desc = rb_ary_join(split, rb_str_new2( "\n" ));
- 
-   if( name == Qnil ) 
-   {
-     name = rb_str_new2("");
-   }
-   if( rb_funcall(desc, rb_intern("size"), 0) == 0) 
-   {
-     desc = rb_str_new2("");
-   }
-   rb_funcall(name, rb_intern("strip!"), 0);
-   rb_funcall(desc, rb_intern("rstrip!"), 0);
-   rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); 
- }
- 
- static void 
- store_attr(VALUE listener, const char * attr_type,
-            const char * at, size_t length, 
-            int line)
- {
-   VALUE val = ENCODED_STR_NEW(at, length);
-   rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line));
- }
- static void 
- store_docstring_content(VALUE listener, 
-           int start_col, 
-           const char *type_at, size_t type_length,
-           const char *at, size_t length, 
-           int current_line)
- {
-   VALUE re2;
-   VALUE unescape_escaped_quotes;
-   VALUE con = ENCODED_STR_NEW(at, length);
-   VALUE con_type = ENCODED_STR_NEW(type_at, type_length);
- 
-   unindent(con, start_col);
- 
-   re2 = rb_reg_regcomp(rb_str_new2("\r\\Z"));
-   unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\""));
-   rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2(""));
-   rb_funcall(con_type, rb_intern("strip!"), 0);
-   rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\""));
-   rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line));
- }
- static void 
- raise_lexer_error(const char * at, int line)
- { 
-   rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at);
- }
- 
- static void lexer_init(lexer_state *lexer) {
-   lexer->content_start = 0;
-   lexer->content_end = 0;
-   lexer->content_len = 0;
-   lexer->docstring_content_type_start = 0;
-   lexer->docstring_content_type_end = 0;
-   lexer->mark = 0;
-   lexer->keyword_start = 0;
-   lexer->keyword_end = 0;
-   lexer->next_keyword_start = 0;
-   lexer->line_number = 1;
-   lexer->last_newline = 0;
-   lexer->final_newline = 0;
-   lexer->start_col = 0;
- }
- 
- static VALUE CLexer_alloc(VALUE klass)
- {
-   VALUE obj;
-   lexer_state *lxr = ALLOC(lexer_state);
-   lexer_init(lxr);
- 
-   obj = Data_Wrap_Struct(klass, NULL, -1, lxr);
- 
-   return obj;
- }
- 
- static VALUE CLexer_init(VALUE self, VALUE listener)
- {
-   lexer_state *lxr; 
-   rb_iv_set(self, "@listener", listener);
-   
-   lxr = NULL;
-   DATA_GET(self, lexer_state, lxr);
-   lexer_init(lxr);
-   
-   return self;
- }
- 
- static VALUE CLexer_scan(VALUE self, VALUE input)
- {
-   VALUE input_copy;
-   char *data;
-   size_t len;
-   VALUE listener = rb_iv_get(self, "@listener");
- 
-   lexer_state *lexer;
-   lexer = NULL;
-   DATA_GET(self, lexer_state, lexer);
- 
-   input_copy = rb_str_dup(input);
- 
-   rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%"));
-   data = RSTRING_PTR(input_copy);
-   len = RSTRING_LEN(input_copy);
-   
-   if (len == 0) { 
-     rb_raise(rb_eGherkinLexingError, "No content to lex.");
-   } else {
- 
-     const char *p, *pe, *eof;
-     int cs = 0;
-     
-     VALUE current_row = Qnil;
- 
-     p = data;
-     pe = data + len;
-     eof = pe;
-     
-     assert(*pe == '\0' && "pointer does not end on NULL");
-     
-     
- #line 978 "ext/gherkin_lexer_he/gherkin_lexer_he.c"
- 	{
- 	cs = lexer_start;
- 	}
- 
- #line 425 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/he.c.rl"
-     
- #line 985 "ext/gherkin_lexer_he/gherkin_lexer_he.c"
- 	{
- 	int _klen;
- 	unsigned int _trans;
- 	const char *_acts;
- 	unsigned int _nacts;
- 	const char *_keys;
- 
- 	if ( p == pe )
- 		goto _test_eof;
- 	if ( cs == 0 )
- 		goto _out;
- _resume:
- 	_keys = _lexer_trans_keys + _lexer_key_offsets[cs];
- 	_trans = _lexer_index_offsets[cs];
- 
- 	_klen = _lexer_single_lengths[cs];
- 	if ( _klen > 0 ) {
- 		const char *_lower = _keys;
- 		const char *_mid;
- 		const char *_upper = _keys + _klen - 1;
- 		while (1) {
- 			if ( _upper < _lower )
- 				break;
- 
- 			_mid = _lower + ((_upper-_lower) >> 1);
- 			if ( (*p) < *_mid )
- 				_upper = _mid - 1;
- 			else if ( (*p) > *_mid )
- 				_lower = _mid + 1;
- 			else {
- 				_trans += (_mid - _keys);
- 				goto _match;
- 			}
- 		}
- 		_keys += _klen;
- 		_trans += _klen;
- 	}
- 
- 	_klen = _lexer_range_lengths[cs];
- 	if ( _klen > 0 ) {
- 		const char *_lower = _keys;
- 		const char *_mid;
- 		const char *_upper = _keys + (_klen<<1) - 2;
- 		while (1) {
- 			if ( _upper < _lower )
- 				break;
- 
- 			_mid = _lower + (((_upper-_lower) >> 1) & ~1);
- 			if ( (*p) < _mid[0] )
- 				_upper = _mid - 2;
- 			else if ( (*p) > _mid[1] )
- 				_lower = _mid + 2;
- 			else {
- 				_trans += ((_mid - _keys)>>1);
- 				goto _match;
- 			}
- 		}
- 		_trans += _klen;
- 	}
- 
- _match:
- 	cs = _lexer_trans_targs[_trans];
- 
- 	if ( _lexer_trans_actions[_trans] == 0 )
- 		goto _again;
- 
- 	_acts = _lexer_actions + _lexer_trans_actions[_trans];
- 	_nacts = (unsigned int) *_acts++;
- 	while ( _nacts-- > 0 )
- 	{
- 		switch ( *_acts++ )
- 		{
- 	case 0:
- #line 83 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/he.c.rl"
- 	{
- 		MARK(content_start, p);
-     lexer->current_line = lexer->line_number;
-     lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2;
-   }
- 	break;
- 	case 1:
- #line 89 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/he.c.rl"
- 	{
-     MARK(content_start, p);
-   }
- 	break;
- 	case 2:
- #line 93 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/he.c.rl"
- 	{
-     lexer->current_line = lexer->line_number;
-     lexer->start_col = p - data - lexer->last_newline;
-   }
- 	break;
- 	case 3:
- #line 98 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/he.c.rl"
- 	{
-     int len = LEN(content_start, PTR_TO(final_newline));
-     int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end));
- 
-     if (len < 0) len = 0;
-     if (type_len < 0) len = 0;
- 
-     store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line);
-   }
- 	break;
- 	case 4:
- #line 108 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/he.c.rl"
- 	{ 
-     MARK(docstring_content_type_start, p);
-   }
- 	break;
- 	case 5:
- #line 112 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/he.c.rl"
- 	{ 
-     MARK(docstring_content_type_end, p);
-   }
- 	break;
- 	case 6:
- #line 116 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/he.c.rl"
- 	{
-     STORE_KW_END_CON(feature);
-   }
- 	break;
- 	case 7:
- #line 120 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/he.c.rl"
- 	{
-     STORE_KW_END_CON(background);
-   }
- 	break;
- 	case 8:
- #line 124 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/he.c.rl"
- 	{
-     STORE_KW_END_CON(scenario);
-   }
- 	break;
- 	case 9:
- #line 128 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/he.c.rl"
- 	{
-     STORE_KW_END_CON(scenario_outline);
-   }
- 	break;
- 	case 10:
- #line 132 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/he.c.rl"
- 	{
-     STORE_KW_END_CON(examples);
-   }
- 	break;
- 	case 11:
- #line 136 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/he.c.rl"
- 	{
-     store_kw_con(listener, "step",
-       PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-       PTR_TO(content_start), LEN(content_start, p), 
-       lexer->current_line);
-   }
- 	break;
- 	case 12:
- #line 143 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/he.c.rl"
- 	{
-     STORE_ATTR(comment);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 13:
- #line 148 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/he.c.rl"
- 	{
-     STORE_ATTR(tag);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 14:
- #line 153 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/he.c.rl"
- 	{
-     lexer->line_number += 1;
-     MARK(final_newline, p);
-   }
- 	break;
- 	case 15:
- #line 158 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/he.c.rl"
- 	{
-     MARK(last_newline, p + 1);
-   }
- 	break;
- 	case 16:
- #line 162 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/he.c.rl"
- 	{
-     if (lexer->mark == 0) {
-       MARK(mark, p);
-     }
-   }
- 	break;
- 	case 17:
- #line 168 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/he.c.rl"
- 	{
-     MARK(keyword_end, p);
-     MARK(keyword_start, PTR_TO(mark));
-     MARK(content_start, p + 1);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 18:
- #line 175 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/he.c.rl"
- 	{
-     MARK(content_end, p);
-   }
- 	break;
- 	case 19:
- #line 179 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/he.c.rl"
- 	{
-     p = p - 1;
-     lexer->current_line = lexer->line_number;
-     current_row = rb_ary_new();
-   }
- 	break;
- 	case 20:
- #line 185 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/he.c.rl"
- 	{
- 		MARK(content_start, p);
-   }
- 	break;
- 	case 21:
- #line 189 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/he.c.rl"
- 	{
-     VALUE re_pipe, re_newline, re_backslash;
-     VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
-     rb_funcall(con, rb_intern("strip!"), 0);
-     re_pipe      = rb_reg_regcomp(rb_str_new2("\\\\\\|"));
-     re_newline   = rb_reg_regcomp(rb_str_new2("\\\\n"));
-     re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_pipe,      rb_str_new2("|"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_newline,   rb_str_new2("\n"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\"));
- 
-     rb_ary_push(current_row, con);
-   }
- 	break;
- 	case 22:
- #line 203 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/he.c.rl"
- 	{
-     rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
-   }
- 	break;
- 	case 23:
- #line 207 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/he.c.rl"
- 	{
-     int line;
-     if (cs < lexer_first_final) {
-       size_t count = 0;
-       VALUE newstr_val;
-       char *newstr;
-       int newstr_count = 0;        
-       size_t len;
-       const char *buff;
-       if (lexer->last_newline != 0) {
-         len = LEN(last_newline, eof);
-         buff = PTR_TO(last_newline);
-       } else {
-         len = strlen(data);
-         buff = data;
-       }
- 
-       // Allocate as a ruby string so that it gets cleaned up by GC
-       newstr_val = rb_str_new(buff, len);
-       newstr = RSTRING_PTR(newstr_val);
- 
- 
-       for (count = 0; count < len; count++) {
-         if(buff[count] == 10) {
-           newstr[newstr_count] = '\0'; // terminate new string at first newline found
-           break;
-         } else {
-           if (buff[count] == '%') {
-             newstr[newstr_count++] = buff[count];
-             newstr[newstr_count] = buff[count];
-           } else {
-             newstr[newstr_count] = buff[count];
-           }
-         }
-         newstr_count++;
-       }
- 
-       line = lexer->line_number;
-       lexer_init(lexer); // Re-initialize so we can scan again with the same lexer
-       raise_lexer_error(newstr, line);
-     } else {
-       rb_funcall(listener, rb_intern("eof"), 0);
-     }
-   }
- 	break;
- #line 1275 "ext/gherkin_lexer_he/gherkin_lexer_he.c"
- 		}
- 	}
- 
- _again:
- 	if ( cs == 0 )
- 		goto _out;
- 	if ( ++p != pe )
- 		goto _resume;
- 	_test_eof: {}
- 	if ( p == eof )
- 	{
- 	const char *__acts = _lexer_actions + _lexer_eof_actions[cs];
- 	unsigned int __nacts = (unsigned int) *__acts++;
- 	while ( __nacts-- > 0 ) {
- 		switch ( *__acts++ ) {
- 	case 23:
- #line 207 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/he.c.rl"
- 	{
-     int line;
-     if (cs < lexer_first_final) {
-       size_t count = 0;
-       VALUE newstr_val;
-       char *newstr;
-       int newstr_count = 0;        
-       size_t len;
-       const char *buff;
-       if (lexer->last_newline != 0) {
-         len = LEN(last_newline, eof);
-         buff = PTR_TO(last_newline);
-       } else {
-         len = strlen(data);
-         buff = data;
-       }
- 
-       // Allocate as a ruby string so that it gets cleaned up by GC
-       newstr_val = rb_str_new(buff, len);
-       newstr = RSTRING_PTR(newstr_val);
- 
- 
-       for (count = 0; count < len; count++) {
-         if(buff[count] == 10) {
-           newstr[newstr_count] = '\0'; // terminate new string at first newline found
-           break;
-         } else {
-           if (buff[count] == '%') {
-             newstr[newstr_count++] = buff[count];
-             newstr[newstr_count] = buff[count];
-           } else {
-             newstr[newstr_count] = buff[count];
-           }
-         }
-         newstr_count++;
-       }
- 
-       line = lexer->line_number;
-       lexer_init(lexer); // Re-initialize so we can scan again with the same lexer
-       raise_lexer_error(newstr, line);
-     } else {
-       rb_funcall(listener, rb_intern("eof"), 0);
-     }
-   }
- 	break;
- #line 1338 "ext/gherkin_lexer_he/gherkin_lexer_he.c"
- 		}
- 	}
- 	}
- 
- 	_out: {}
- 	}
- 
- #line 426 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/he.c.rl"
- 
-     assert(p <= pe && "data overflow after parsing execute");
-     assert(lexer->content_start <= len && "content starts after data end");
-     assert(lexer->mark < len && "mark is after data end");
-     
-     // Reset lexer by re-initializing the whole thing
-     lexer_init(lexer);
- 
-     if (cs == lexer_error) {
-       rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails.");
-     } else {
-       return Qtrue;
-     }
-   }
- }
- 
- void Init_gherkin_lexer_he()
- {
-   mGherkin = rb_define_module("Gherkin");
-   mGherkinLexer = rb_define_module_under(mGherkin, "Lexer");
-   rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError"));
- 
-   mCLexer = rb_define_module_under(mGherkin, "CLexer");
-   cI18nLexer = rb_define_class_under(mCLexer, "He", rb_cObject);
-   rb_define_alloc_func(cI18nLexer, CLexer_alloc);
-   rb_define_method(cI18nLexer, "initialize", CLexer_init, 1);
-   rb_define_method(cI18nLexer, "scan", CLexer_scan, 1);
- }
- 
 -#line 1 "ragel/i18n/he.c.rl"
 -#include <assert.h>
 -#include <ruby.h>
 -
 -#if defined(_WIN32)
 -#include <stddef.h>
 -#endif
 -
 -#ifdef HAVE_RUBY_RE_H
 -#include <ruby/re.h>
 -#else
 -#include <re.h>
 -#endif
 -
 -#ifdef HAVE_RUBY_ENCODING_H
 -#include <ruby/encoding.h>
 -#define ENCODED_STR_NEW(ptr, len) \
 -    rb_enc_str_new(ptr, len, rb_utf8_encoding())
 -#else
 -#define ENCODED_STR_NEW(ptr, len) \
 -    rb_str_new(ptr, len)
 -#endif
 -
 -#ifndef RSTRING_PTR
 -#define RSTRING_PTR(s) (RSTRING(s)->ptr)
 -#endif
 -
 -#ifndef RSTRING_LEN
 -#define RSTRING_LEN(s) (RSTRING(s)->len)
 -#endif
 -
 -#define DATA_GET(FROM, TYPE, NAME) \
 -  Data_Get_Struct(FROM, TYPE, NAME); \
 -  if (NAME == NULL) { \
 -    rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \
 -  }
 - 
 -typedef struct lexer_state {
 -  int content_len;
 -  int line_number;
 -  int current_line;
 -  int start_col;
 -  size_t mark;
 -  size_t keyword_start;
 -  size_t keyword_end;
 -  size_t next_keyword_start;
 -  size_t content_start;
 -  size_t content_end;
 -  size_t docstring_content_type_start;
 -  size_t docstring_content_type_end;
 -  size_t query_start;
 -  size_t last_newline;
 -  size_t final_newline;
 -} lexer_state;
 -
 -static VALUE mGherkin;
 -static VALUE mGherkinLexer;
 -static VALUE mCLexer;
 -static VALUE cI18nLexer;
 -static VALUE rb_eGherkinLexingError;
 -
 -#define LEN(AT, P) (P - data - lexer->AT)
 -#define MARK(M, P) (lexer->M = (P) - data)
 -#define PTR_TO(P) (data + lexer->P)
 -
 -#define STORE_KW_END_CON(EVENT) \
 -  store_multiline_kw_con(listener, # EVENT, \
 -    PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \
 -    PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \
 -    lexer->current_line, lexer->start_col); \
 -    if (lexer->content_end != 0) { \
 -      p = PTR_TO(content_end - 1); \
 -    } \
 -    lexer->content_end = 0
 -
 -#define STORE_ATTR(ATTR) \
 -    store_attr(listener, # ATTR, \
 -      PTR_TO(content_start), LEN(content_start, p), \
 -      lexer->line_number)
 -
 -
 -#line 254 "ragel/i18n/he.c.rl"
 -
 -
 -/** Data **/
 -
 -#line 89 "ext/gherkin_lexer_he/gherkin_lexer_he.c"
 -static const char _lexer_actions[] = {
 -	0, 1, 0, 1, 1, 1, 2, 1, 
 -	3, 1, 4, 1, 5, 1, 6, 1, 
 -	7, 1, 8, 1, 9, 1, 10, 1, 
 -	11, 1, 12, 1, 13, 1, 16, 1, 
 -	17, 1, 18, 1, 19, 1, 20, 1, 
 -	21, 1, 22, 1, 23, 2, 1, 18, 
 -	2, 4, 5, 2, 13, 0, 2, 14, 
 -	15, 2, 17, 0, 2, 17, 2, 2, 
 -	17, 16, 2, 17, 19, 2, 18, 6, 
 -	2, 18, 7, 2, 18, 8, 2, 18, 
 -	9, 2, 18, 10, 2, 18, 16, 2, 
 -	20, 21, 2, 22, 0, 2, 22, 2, 
 -	2, 22, 16, 2, 22, 19, 3, 3, 
 -	14, 15, 3, 5, 14, 15, 3, 11, 
 -	14, 15, 3, 12, 14, 15, 3, 13, 
 -	14, 15, 3, 14, 15, 18, 3, 17, 
 -	0, 11, 3, 17, 14, 15, 4, 1, 
 -	14, 15, 18, 4, 4, 5, 14, 15, 
 -	4, 17, 0, 14, 15, 5, 17, 0, 
 -	11, 14, 15
 -};
 -
 -static const short _lexer_key_offsets[] = {
 -	0, 0, 12, 19, 20, 22, 23, 24, 
 -	25, 27, 29, 40, 41, 42, 44, 46, 
 -	51, 56, 61, 66, 70, 74, 76, 77, 
 -	78, 79, 80, 81, 82, 83, 84, 85, 
 -	86, 87, 88, 89, 90, 91, 96, 103, 
 -	108, 112, 118, 121, 123, 129, 140, 142, 
 -	143, 144, 145, 146, 147, 148, 149, 150, 
 -	151, 152, 153, 154, 155, 156, 157, 158, 
 -	159, 160, 161, 162, 163, 164, 165, 166, 
 -	167, 168, 175, 177, 179, 181, 183, 185, 
 -	187, 189, 191, 193, 195, 206, 207, 208, 
 -	209, 210, 211, 212, 213, 214, 215, 216, 
 -	217, 218, 219, 220, 221, 222, 223, 232, 
 -	238, 240, 243, 245, 247, 249, 252, 254, 
 -	256, 258, 260, 262, 264, 266, 268, 270, 
 -	272, 274, 276, 278, 280, 282, 284, 286, 
 -	288, 290, 292, 294, 296, 300, 302, 304, 
 -	306, 308, 310, 312, 314, 316, 318, 320, 
 -	322, 324, 326, 328, 330, 332, 334, 336, 
 -	338, 340, 342, 344, 346, 348, 350, 352, 
 -	354, 356, 358, 360, 362, 364, 366, 368, 
 -	370, 372, 374, 376, 377, 380, 381, 382, 
 -	383, 384, 385, 386, 387, 388, 389, 390, 
 -	391, 392, 393, 394, 395, 396, 397, 398, 
 -	399, 400, 409, 415, 417, 420, 422, 424, 
 -	426, 429, 431, 433, 435, 437, 439, 441, 
 -	443, 445, 447, 449, 451, 453, 455, 457, 
 -	459, 461, 463, 465, 467, 469, 471, 473, 
 -	476, 478, 480, 482, 484, 486, 488, 490, 
 -	492, 494, 496, 498, 500, 502, 504, 506, 
 -	508, 510, 512, 514, 516, 518, 520, 522, 
 -	524, 526, 528, 530, 531, 532, 533, 534, 
 -	535, 536, 537, 538, 539, 547, 551, 553, 
 -	555, 557, 559, 561, 563, 565, 567, 569, 
 -	571, 573, 575, 577, 579, 581, 583, 585, 
 -	587, 591, 593, 595, 597, 599, 601, 603, 
 -	605, 607, 609, 611, 613, 615, 617, 619, 
 -	621, 623, 625, 627, 629, 631, 633, 635, 
 -	637, 639, 641, 643, 645, 647, 649, 651, 
 -	653, 655, 657, 659, 661, 663, 665, 666, 
 -	667, 668, 669, 670, 671, 672, 673, 674, 
 -	683, 690, 692, 695, 697, 699, 701, 704, 
 -	706, 708, 710, 712, 714, 716, 718, 720, 
 -	722, 724, 726, 728, 730, 732, 734, 736, 
 -	738, 740, 742, 744, 746, 748, 750, 752, 
 -	754, 756, 758, 762, 764, 766, 768, 770, 
 -	772, 774, 776, 778, 780, 782, 784, 786, 
 -	788, 790, 792, 794, 796, 798, 800, 802, 
 -	804, 806, 808, 810, 812, 814, 816, 818, 
 -	820, 822, 824, 826, 828, 830, 832, 834, 
 -	836, 837, 838
 -};
 -
 -static const char _lexer_trans_keys[] = {
 -	-41, -17, 10, 32, 34, 35, 37, 42, 
 -	64, 124, 9, 13, -112, -111, -109, -107, 
 -	-101, -88, -86, -41, -111, -106, -41, -100, 
 -	32, 10, 13, 10, 13, -41, 10, 32, 
 -	34, 35, 37, 42, 64, 124, 9, 13, 
 -	34, 34, 10, 13, 10, 13, 10, 32, 
 -	34, 9, 13, 10, 32, 34, 9, 13, 
 -	10, 32, 34, 9, 13, 10, 32, 34, 
 -	9, 13, 10, 32, 9, 13, 10, 32, 
 -	9, 13, 10, 13, 10, 95, 70, 69, 
 -	65, 84, 85, 82, 69, 95, 69, 78, 
 -	68, 95, 37, 13, 32, 64, 9, 10, 
 -	9, 10, 13, 32, 64, 11, 12, 10, 
 -	32, 64, 9, 13, 32, 124, 9, 13, 
 -	10, 32, 92, 124, 9, 13, 10, 92, 
 -	124, 10, 92, 10, 32, 92, 124, 9, 
 -	13, -41, 10, 32, 34, 35, 37, 42, 
 -	64, 124, 9, 13, -41, 32, -103, -41, 
 -	-108, -41, -103, -41, -96, -41, -86, -41, 
 -	-97, -41, -107, -41, -110, -41, -98, -41, 
 -	-112, -41, -107, -41, -86, 58, 10, 10, 
 -	-41, 10, 32, 35, 124, 9, 13, -86, 
 -	10, -41, 10, -101, 10, -41, 10, -107, 
 -	10, -41, 10, -96, 10, -41, 10, -108, 
 -	10, 10, 58, -41, 10, 32, 34, 35, 
 -	37, 42, 64, 124, 9, 13, -41, -110, 
 -	-41, -99, -41, -112, -41, -87, -41, -88, 
 -	-41, -89, -41, -94, 58, 10, 10, -41, 
 -	10, 32, 35, 37, 42, 64, 9, 13, 
 -	-112, -111, -107, -101, -86, 10, -41, 10, 
 -	-111, -106, 10, -41, 10, -100, 10, 10, 
 -	32, -41, 10, 32, -103, 10, -41, 10, 
 -	-108, 10, -41, 10, -103, 10, -41, 10, 
 -	-96, 10, -41, 10, -86, 10, -41, 10, 
 -	-97, 10, -41, 10, -110, 10, -41, 10, 
 -	-99, 10, -41, 10, -112, 10, -41, 10, 
 -	-87, 10, -41, 10, -88, 10, -41, 10, 
 -	-111, -101, -88, 10, -41, 10, -96, 10, 
 -	-41, 10, -103, 10, -41, 10, -86, 10, 
 -	10, 32, -41, 10, -86, 10, -41, 10, 
 -	-88, 10, -41, 10, -105, 10, -41, 10, 
 -	-103, 10, -41, 10, -87, 10, 10, 58, 
 -	-41, 10, -107, 10, -41, 10, -96, 10, 
 -	-41, 10, -108, 10, 10, 95, 10, 70, 
 -	10, 69, 10, 65, 10, 84, 10, 85, 
 -	10, 82, 10, 69, 10, 95, 10, 69, 
 -	10, 78, 10, 68, 10, 95, 10, 37, 
 -	-41, -111, -101, -88, -41, -96, -41, -103, 
 -	-41, -86, 32, -41, -86, -41, -88, -41, 
 -	-105, -41, -103, -41, -87, 58, 10, 10, 
 -	-41, 10, 32, 35, 37, 42, 64, 9, 
 -	13, -112, -111, -107, -101, -86, 10, -41, 
 -	10, -111, -106, 10, -41, 10, -100, 10, 
 -	10, 32, -41, 10, 32, -103, 10, -41, 
 -	10, -108, 10, -41, 10, -103, 10, -41, 
 -	10, -96, 10, -41, 10, -86, 10, -41, 
 -	10, -97, 10, -41, 10, -110, 10, -41, 
 -	10, -99, 10, -41, 10, -112, 10, -41, 
 -	10, -87, 10, -41, 10, -88, 10, -41, 
 -	10, -101, -88, 10, -41, 10, -107, 10, 
 -	-41, 10, -96, 10, -41, 10, -108, 10, 
 -	10, 58, -41, 10, -105, 10, -41, 10, 
 -	-103, 10, -41, 10, -87, 10, 10, 95, 
 -	10, 70, 10, 69, 10, 65, 10, 84, 
 -	10, 85, 10, 82, 10, 69, 10, 95, 
 -	10, 69, 10, 78, 10, 68, 10, 95, 
 -	10, 37, -41, -107, -41, -96, -41, -108, 
 -	58, 10, 10, -41, 10, 32, 35, 37, 
 -	64, 9, 13, -109, -88, -86, 10, -41, 
 -	10, -107, 10, -41, 10, -110, 10, -41, 
 -	10, -98, 10, -41, 10, -112, 10, -41, 
 -	10, -107, 10, -41, 10, -86, 10, 10, 
 -	58, -41, 10, -89, 10, -41, 10, -94, 
 -	10, -41, 10, -111, -101, -88, 10, -41, 
 -	10, -96, 10, -41, 10, -103, 10, -41, 
 -	10, -86, 10, 10, 32, -41, 10, -86, 
 -	10, -41, 10, -88, 10, -41, 10, -105, 
 -	10, -41, 10, -103, 10, -41, 10, -87, 
 -	10, -41, 10, -107, 10, -41, 10, -96, 
 -	10, -41, 10, -108, 10, 10, 95, 10, 
 -	70, 10, 69, 10, 65, 10, 84, 10, 
 -	85, 10, 82, 10, 69, 10, 95, 10, 
 -	69, 10, 78, 10, 68, 10, 95, 10, 
 -	37, -41, -105, -41, -103, -41, -87, 58, 
 -	10, 10, -41, 10, 32, 35, 37, 42, 
 -	64, 9, 13, -112, -111, -107, -101, -88, 
 -	-86, 10, -41, 10, -111, -106, 10, -41, 
 -	10, -100, 10, 10, 32, -41, 10, 32, 
 -	-103, 10, -41, 10, -108, 10, -41, 10, 
 -	-103, 10, -41, 10, -96, 10, -41, 10, 
 -	-86, 10, -41, 10, -97, 10, -41, 10, 
 -	-110, 10, -41, 10, -99, 10, -41, 10, 
 -	-112, 10, -41, 10, -87, 10, -41, 10, 
 -	-88, 10, -41, 10, -89, 10, -41, 10, 
 -	-94, 10, 10, 58, -41, 10, -111, -101, 
 -	-88, 10, -41, 10, -96, 10, -41, 10, 
 -	-103, 10, -41, 10, -86, 10, 10, 32, 
 -	-41, 10, -86, 10, -41, 10, -88, 10, 
 -	-41, 10, -105, 10, -41, 10, -103, 10, 
 -	-41, 10, -87, 10, -41, 10, -107, 10, 
 -	-41, 10, -96, 10, -41, 10, -108, 10, 
 -	10, 95, 10, 70, 10, 69, 10, 65, 
 -	10, 84, 10, 85, 10, 82, 10, 69, 
 -	10, 95, 10, 69, 10, 78, 10, 68, 
 -	10, 95, 10, 37, -69, -65, 0
 -};
 -
 -static const char _lexer_single_lengths[] = {
 -	0, 10, 7, 1, 2, 1, 1, 1, 
 -	2, 2, 9, 1, 1, 2, 2, 3, 
 -	3, 3, 3, 2, 2, 2, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 3, 5, 3, 
 -	2, 4, 3, 2, 4, 9, 2, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 5, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 9, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 7, 6, 
 -	2, 3, 2, 2, 2, 3, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 4, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 1, 3, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 7, 6, 2, 3, 2, 2, 2, 
 -	3, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 3, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 6, 4, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	4, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 7, 
 -	7, 2, 3, 2, 2, 2, 3, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 4, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	1, 1, 0
 -};
 -
 -static const char _lexer_range_lengths[] = {
 -	0, 1, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 1, 0, 0, 0, 0, 1, 
 -	1, 1, 1, 1, 1, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 1, 1, 1, 
 -	1, 1, 0, 0, 1, 1, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 1, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 1, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 1, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 1, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 1, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 1, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0
 -};
 -
 -static const short _lexer_index_offsets[] = {
 -	0, 0, 12, 20, 22, 25, 27, 29, 
 -	31, 34, 37, 48, 50, 52, 55, 58, 
 -	63, 68, 73, 78, 82, 86, 89, 91, 
 -	93, 95, 97, 99, 101, 103, 105, 107, 
 -	109, 111, 113, 115, 117, 119, 124, 131, 
 -	136, 140, 146, 150, 153, 159, 170, 173, 
 -	175, 177, 179, 181, 183, 185, 187, 189, 
 -	191, 193, 195, 197, 199, 201, 203, 205, 
 -	207, 209, 211, 213, 215, 217, 219, 221, 
 -	223, 225, 232, 235, 238, 241, 244, 247, 
 -	250, 253, 256, 259, 262, 273, 275, 277, 
 -	279, 281, 283, 285, 287, 289, 291, 293, 
 -	295, 297, 299, 301, 303, 305, 307, 316, 
 -	323, 326, 330, 333, 336, 339, 343, 346, 
 -	349, 352, 355, 358, 361, 364, 367, 370, 
 -	373, 376, 379, 382, 385, 388, 391, 394, 
 -	397, 400, 403, 406, 409, 414, 417, 420, 
 -	423, 426, 429, 432, 435, 438, 441, 444, 
 -	447, 450, 453, 456, 459, 462, 465, 468, 
 -	471, 474, 477, 480, 483, 486, 489, 492, 
 -	495, 498, 501, 504, 507, 510, 513, 516, 
 -	519, 522, 525, 528, 530, 534, 536, 538, 
 -	540, 542, 544, 546, 548, 550, 552, 554, 
 -	556, 558, 560, 562, 564, 566, 568, 570, 
 -	572, 574, 583, 590, 593, 597, 600, 603, 
 -	606, 610, 613, 616, 619, 622, 625, 628, 
 -	631, 634, 637, 640, 643, 646, 649, 652, 
 -	655, 658, 661, 664, 667, 670, 673, 676, 
 -	680, 683, 686, 689, 692, 695, 698, 701, 
 -	704, 707, 710, 713, 716, 719, 722, 725, 
 -	728, 731, 734, 737, 740, 743, 746, 749, 
 -	752, 755, 758, 761, 763, 765, 767, 769, 
 -	771, 773, 775, 777, 779, 787, 792, 795, 
 -	798, 801, 804, 807, 810, 813, 816, 819, 
 -	822, 825, 828, 831, 834, 837, 840, 843, 
 -	846, 851, 854, 857, 860, 863, 866, 869, 
 -	872, 875, 878, 881, 884, 887, 890, 893, 
 -	896, 899, 902, 905, 908, 911, 914, 917, 
 -	920, 923, 926, 929, 932, 935, 938, 941, 
 -	944, 947, 950, 953, 956, 959, 962, 964, 
 -	966, 968, 970, 972, 974, 976, 978, 980, 
 -	989, 997, 1000, 1004, 1007, 1010, 1013, 1017, 
 -	1020, 1023, 1026, 1029, 1032, 1035, 1038, 1041, 
 -	1044, 1047, 1050, 1053, 1056, 1059, 1062, 1065, 
 -	1068, 1071, 1074, 1077, 1080, 1083, 1086, 1089, 
 -	1092, 1095, 1098, 1103, 1106, 1109, 1112, 1115, 
 -	1118, 1121, 1124, 1127, 1130, 1133, 1136, 1139, 
 -	1142, 1145, 1148, 1151, 1154, 1157, 1160, 1163, 
 -	1166, 1169, 1172, 1175, 1178, 1181, 1184, 1187, 
 -	1190, 1193, 1196, 1199, 1202, 1205, 1208, 1211, 
 -	1214, 1216, 1218
 -};
 -
 -static const short _lexer_trans_targs[] = {
 -	2, 400, 10, 10, 11, 21, 23, 7, 
 -	37, 40, 10, 0, 3, 48, 58, 85, 
 -	89, 95, 171, 0, 4, 0, 5, 46, 
 -	0, 6, 0, 7, 0, 8, 0, 10, 
 -	22, 9, 10, 22, 9, 2, 10, 10, 
 -	11, 21, 23, 7, 37, 40, 10, 0, 
 -	12, 0, 13, 0, 15, 14, 14, 15, 
 -	14, 14, 16, 16, 17, 16, 16, 16, 
 -	16, 17, 16, 16, 16, 16, 18, 16, 
 -	16, 16, 16, 19, 16, 16, 10, 20, 
 -	20, 0, 10, 20, 20, 0, 10, 22, 
 -	21, 10, 0, 24, 0, 25, 0, 26, 
 -	0, 27, 0, 28, 0, 29, 0, 30, 
 -	0, 31, 0, 32, 0, 33, 0, 34, 
 -	0, 35, 0, 36, 0, 402, 0, 0, 
 -	0, 0, 0, 38, 39, 10, 39, 39, 
 -	37, 38, 38, 10, 39, 37, 39, 0, 
 -	40, 41, 40, 0, 45, 44, 43, 41, 
 -	44, 42, 0, 43, 41, 42, 0, 43, 
 -	42, 45, 44, 43, 41, 44, 42, 2, 
 -	45, 45, 11, 21, 23, 7, 37, 40, 
 -	45, 0, 47, 8, 0, 7, 0, 49, 
 -	0, 50, 0, 51, 0, 52, 0, 53, 
 -	0, 54, 0, 55, 0, 56, 0, 57, 
 -	0, 7, 0, 59, 0, 60, 0, 61, 
 -	0, 62, 0, 63, 0, 64, 0, 65, 
 -	0, 66, 0, 67, 0, 68, 0, 69, 
 -	0, 70, 0, 71, 0, 73, 72, 73, 
 -	72, 74, 73, 73, 10, 10, 73, 72, 
 -	75, 73, 72, 76, 73, 72, 77, 73, 
 -	72, 78, 73, 72, 79, 73, 72, 80, 
 -	73, 72, 81, 73, 72, 82, 73, 72, 
 -	83, 73, 72, 73, 84, 72, 2, 10, 
 -	10, 11, 21, 23, 7, 37, 40, 10, 
 -	0, 86, 0, 87, 0, 88, 0, 7, 
 -	0, 90, 0, 91, 0, 92, 0, 93, 
 -	0, 94, 0, 7, 0, 96, 0, 97, 
 -	0, 98, 0, 99, 0, 100, 0, 102, 
 -	101, 102, 101, 103, 102, 102, 10, 157, 
 -	108, 10, 102, 101, 104, 111, 121, 125, 
 -	131, 102, 101, 105, 102, 101, 106, 109, 
 -	102, 101, 107, 102, 101, 108, 102, 101, 
 -	102, 84, 101, 110, 102, 84, 101, 108, 
 -	102, 101, 112, 102, 101, 113, 102, 101, 
 -	114, 102, 101, 115, 102, 101, 116, 102, 
 -	101, 117, 102, 101, 118, 102, 101, 119, 
 -	102, 101, 120, 102, 101, 108, 102, 101, 
 -	122, 102, 101, 123, 102, 101, 124, 102, 
 -	101, 108, 102, 101, 126, 102, 101, 127, 
 -	102, 101, 128, 102, 101, 129, 102, 101, 
 -	130, 102, 101, 108, 102, 101, 132, 102, 
 -	101, 133, 151, 144, 102, 101, 134, 102, 
 -	101, 135, 102, 101, 136, 102, 101, 137, 
 -	102, 101, 138, 102, 101, 139, 102, 101, 
 -	102, 140, 101, 141, 102, 101, 142, 102, 
 -	101, 143, 102, 101, 144, 102, 101, 145, 
 -	102, 101, 146, 102, 101, 147, 102, 101, 
 -	148, 102, 101, 149, 102, 101, 150, 102, 
 -	101, 102, 84, 101, 152, 102, 101, 153, 
 -	102, 101, 154, 102, 101, 155, 102, 101, 
 -	156, 102, 101, 150, 102, 101, 102, 158, 
 -	101, 102, 159, 101, 102, 160, 101, 102, 
 -	161, 101, 102, 162, 101, 102, 163, 101, 
 -	102, 164, 101, 102, 165, 101, 102, 166, 
 -	101, 102, 167, 101, 102, 168, 101, 102, 
 -	169, 101, 102, 170, 101, 102, 10, 101, 
 -	172, 0, 173, 251, 318, 0, 174, 0, 
 -	175, 0, 176, 0, 177, 0, 178, 0, 
 -	179, 0, 180, 0, 181, 0, 182, 0, 
 -	183, 0, 184, 0, 185, 0, 186, 0, 
 -	187, 0, 188, 0, 189, 0, 190, 0, 
 -	191, 0, 193, 192, 193, 192, 194, 193, 
 -	193, 10, 237, 199, 10, 193, 192, 195, 
 -	202, 212, 216, 222, 193, 192, 196, 193, 
 -	192, 197, 200, 193, 192, 198, 193, 192, 
 -	199, 193, 192, 193, 84, 192, 201, 193, 
 -	84, 192, 199, 193, 192, 203, 193, 192, 
 -	204, 193, 192, 205, 193, 192, 206, 193, 
 -	192, 207, 193, 192, 208, 193, 192, 209, 
 -	193, 192, 210, 193, 192, 211, 193, 192, 
 -	199, 193, 192, 213, 193, 192, 214, 193, 
 -	192, 215, 193, 192, 199, 193, 192, 217, 
 -	193, 192, 218, 193, 192, 219, 193, 192, 
 -	220, 193, 192, 221, 193, 192, 199, 193, 
 -	192, 223, 193, 192, 224, 231, 193, 192, 
 -	225, 193, 192, 226, 193, 192, 227, 193, 
 -	192, 228, 193, 192, 229, 193, 192, 230, 
 -	193, 192, 193, 84, 192, 232, 193, 192, 
 -	233, 193, 192, 234, 193, 192, 235, 193, 
 -	192, 236, 193, 192, 230, 193, 192, 193, 
 -	238, 192, 193, 239, 192, 193, 240, 192, 
 -	193, 241, 192, 193, 242, 192, 193, 243, 
 -	192, 193, 244, 192, 193, 245, 192, 193, 
 -	246, 192, 193, 247, 192, 193, 248, 192, 
 -	193, 249, 192, 193, 250, 192, 193, 10, 
 -	192, 252, 0, 253, 0, 254, 0, 255, 
 -	0, 256, 0, 257, 0, 258, 0, 260, 
 -	259, 260, 259, 261, 260, 260, 10, 304, 
 -	10, 260, 259, 262, 275, 279, 260, 259, 
 -	263, 260, 259, 264, 260, 259, 265, 260, 
 -	259, 266, 260, 259, 267, 260, 259, 268, 
 -	260, 259, 269, 260, 259, 270, 260, 259, 
 -	271, 260, 259, 272, 260, 259, 273, 260, 
 -	259, 274, 260, 259, 260, 84, 259, 276, 
 -	260, 259, 277, 260, 259, 278, 260, 259, 
 -	274, 260, 259, 280, 260, 259, 281, 298, 
 -	292, 260, 259, 282, 260, 259, 283, 260, 
 -	259, 284, 260, 259, 285, 260, 259, 286, 
 -	260, 259, 287, 260, 259, 260, 288, 259, 
 -	289, 260, 259, 290, 260, 259, 291, 260, 
 -	259, 292, 260, 259, 293, 260, 259, 294, 
 -	260, 259, 295, 260, 259, 296, 260, 259, 
 -	297, 260, 259, 274, 260, 259, 299, 260, 
 -	259, 300, 260, 259, 301, 260, 259, 302, 
 -	260, 259, 303, 260, 259, 274, 260, 259, 
 -	260, 305, 259, 260, 306, 259, 260, 307, 
 -	259, 260, 308, 259, 260, 309, 259, 260, 
 -	310, 259, 260, 311, 259, 260, 312, 259, 
 -	260, 313, 259, 260, 314, 259, 260, 315, 
 -	259, 260, 316, 259, 260, 317, 259, 260, 
 -	10, 259, 319, 0, 320, 0, 321, 0, 
 -	322, 0, 323, 0, 324, 0, 325, 0, 
 -	327, 326, 327, 326, 328, 327, 327, 10, 
 -	386, 333, 10, 327, 326, 329, 336, 346, 
 -	350, 356, 361, 327, 326, 330, 327, 326, 
 -	331, 334, 327, 326, 332, 327, 326, 333, 
 -	327, 326, 327, 84, 326, 335, 327, 84, 
 -	326, 333, 327, 326, 337, 327, 326, 338, 
 -	327, 326, 339, 327, 326, 340, 327, 326, 
 -	341, 327, 326, 342, 327, 326, 343, 327, 
 -	326, 344, 327, 326, 345, 327, 326, 333, 
 -	327, 326, 347, 327, 326, 348, 327, 326, 
 -	349, 327, 326, 333, 327, 326, 351, 327, 
 -	326, 352, 327, 326, 353, 327, 326, 354, 
 -	327, 326, 355, 327, 326, 333, 327, 326, 
 -	357, 327, 326, 358, 327, 326, 359, 327, 
 -	326, 360, 327, 326, 327, 84, 326, 362, 
 -	327, 326, 363, 380, 374, 327, 326, 364, 
 -	327, 326, 365, 327, 326, 366, 327, 326, 
 -	367, 327, 326, 368, 327, 326, 369, 327, 
 -	326, 327, 370, 326, 371, 327, 326, 372, 
 -	327, 326, 373, 327, 326, 374, 327, 326, 
 -	375, 327, 326, 376, 327, 326, 377, 327, 
 -	326, 378, 327, 326, 379, 327, 326, 360, 
 -	327, 326, 381, 327, 326, 382, 327, 326, 
 -	383, 327, 326, 384, 327, 326, 385, 327, 
 -	326, 360, 327, 326, 327, 387, 326, 327, 
 -	388, 326, 327, 389, 326, 327, 390, 326, 
 -	327, 391, 326, 327, 392, 326, 327, 393, 
 -	326, 327, 394, 326, 327, 395, 326, 327, 
 -	396, 326, 327, 397, 326, 327, 398, 326, 
 -	327, 399, 326, 327, 10, 326, 401, 0, 
 -	10, 0, 0, 0
 -};
 -
 -static const unsigned char _lexer_trans_actions[] = {
 -	29, 0, 54, 0, 5, 1, 0, 29, 
 -	1, 35, 0, 43, 0, 0, 0, 0, 
 -	0, 0, 0, 43, 0, 43, 0, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 149, 
 -	126, 57, 110, 23, 0, 29, 54, 0, 
 -	5, 1, 0, 29, 1, 35, 0, 43, 
 -	0, 43, 0, 43, 139, 48, 9, 106, 
 -	11, 0, 134, 45, 45, 45, 3, 122, 
 -	33, 33, 33, 0, 122, 33, 33, 33, 
 -	0, 122, 33, 0, 33, 0, 102, 7, 
 -	7, 43, 54, 0, 0, 43, 114, 25, 
 -	0, 54, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 43, 
 -	43, 43, 43, 0, 27, 118, 27, 27, 
 -	51, 27, 0, 54, 0, 1, 0, 43, 
 -	0, 0, 0, 43, 54, 37, 37, 87, 
 -	37, 37, 43, 0, 39, 0, 43, 0, 
 -	0, 54, 0, 0, 39, 0, 0, 96, 
 -	54, 0, 93, 90, 41, 96, 90, 99, 
 -	0, 43, 0, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 144, 57, 54, 
 -	0, 84, 54, 0, 81, 81, 0, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 54, 21, 0, 63, 130, 
 -	31, 60, 57, 31, 63, 57, 66, 31, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 144, 
 -	57, 54, 0, 84, 54, 0, 72, 33, 
 -	84, 72, 0, 0, 0, 0, 0, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	54, 15, 0, 0, 54, 15, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	54, 0, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 54, 15, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 15, 0, 
 -	0, 43, 0, 0, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 144, 57, 54, 0, 84, 54, 
 -	0, 78, 33, 84, 78, 0, 0, 0, 
 -	0, 0, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 54, 19, 0, 0, 54, 
 -	19, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 54, 19, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 19, 
 -	0, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 144, 
 -	57, 54, 0, 84, 54, 0, 69, 33, 
 -	69, 0, 0, 0, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 54, 13, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 54, 0, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	13, 0, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	144, 57, 54, 0, 84, 54, 0, 75, 
 -	33, 84, 75, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 54, 17, 0, 0, 54, 17, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 54, 17, 0, 0, 
 -	54, 0, 0, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 54, 0, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 17, 0, 0, 43, 
 -	0, 43, 0, 0
 -};
 -
 -static const unsigned char _lexer_eof_actions[] = {
 -	0, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43
 -};
 -
 -static const int lexer_start = 1;
 -static const int lexer_first_final = 402;
 -static const int lexer_error = 0;
 -
 -static const int lexer_en_main = 1;
 -
 -
 -#line 258 "ragel/i18n/he.c.rl"
 -
 -static VALUE 
 -unindent(VALUE con, int start_col)
 -{
 -  VALUE re;
 -  /* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */
 -  char pat[32]; 
 -  snprintf(pat, 32, "^[\t ]{0,%d}", start_col); 
 -  re = rb_reg_regcomp(rb_str_new2(pat));
 -  rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2(""));
 -
 -  return Qnil;
 -
 -}
 -
 -static void 
 -store_kw_con(VALUE listener, const char * event_name, 
 -             const char * keyword_at, size_t keyword_length, 
 -             const char * at,         size_t length, 
 -             int current_line)
 -{
 -  VALUE con = Qnil, kw = Qnil;
 -  kw = ENCODED_STR_NEW(keyword_at, keyword_length);
 -  con = ENCODED_STR_NEW(at, length);
 -  rb_funcall(con, rb_intern("strip!"), 0);
 -  rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); 
 -}
 -
 -static void
 -store_multiline_kw_con(VALUE listener, const char * event_name,
 -                      const char * keyword_at, size_t keyword_length,
 -                      const char * at,         size_t length,
 -                      int current_line, int start_col)
 -{
 -  VALUE split;
 -  VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil;
 -
 -  kw = ENCODED_STR_NEW(keyword_at, keyword_length);
 -  con = ENCODED_STR_NEW(at, length);
 -
 -  unindent(con, start_col);
 -  
 -  split = rb_str_split(con, "\n");
 -
 -  name = rb_funcall(split, rb_intern("shift"), 0);
 -  desc = rb_ary_join(split, rb_str_new2( "\n" ));
 -
 -  if( name == Qnil ) 
 -  {
 -    name = rb_str_new2("");
 -  }
 -  if( rb_funcall(desc, rb_intern("size"), 0) == 0) 
 -  {
 -    desc = rb_str_new2("");
 -  }
 -  rb_funcall(name, rb_intern("strip!"), 0);
 -  rb_funcall(desc, rb_intern("rstrip!"), 0);
 -  rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); 
 -}
 -
 -static void 
 -store_attr(VALUE listener, const char * attr_type,
 -           const char * at, size_t length, 
 -           int line)
 -{
 -  VALUE val = ENCODED_STR_NEW(at, length);
 -  rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line));
 -}
 -static void 
 -store_docstring_content(VALUE listener, 
 -          int start_col, 
 -          const char *type_at, size_t type_length,
 -          const char *at, size_t length, 
 -          int current_line)
 -{
 -  VALUE re2;
 -  VALUE unescape_escaped_quotes;
 -  VALUE con = ENCODED_STR_NEW(at, length);
 -  VALUE con_type = ENCODED_STR_NEW(type_at, type_length);
 -
 -  unindent(con, start_col);
 -
 -  re2 = rb_reg_regcomp(rb_str_new2("\r\\Z"));
 -  unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\""));
 -  rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2(""));
 -  rb_funcall(con_type, rb_intern("strip!"), 0);
 -  rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\""));
 -  rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line));
 -}
 -static void 
 -raise_lexer_error(const char * at, int line)
 -{ 
 -  rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at);
 -}
 -
 -static void lexer_init(lexer_state *lexer) {
 -  lexer->content_start = 0;
 -  lexer->content_end = 0;
 -  lexer->content_len = 0;
 -  lexer->docstring_content_type_start = 0;
 -  lexer->docstring_content_type_end = 0;
 -  lexer->mark = 0;
 -  lexer->keyword_start = 0;
 -  lexer->keyword_end = 0;
 -  lexer->next_keyword_start = 0;
 -  lexer->line_number = 1;
 -  lexer->last_newline = 0;
 -  lexer->final_newline = 0;
 -  lexer->start_col = 0;
 -}
 -
 -static VALUE CLexer_alloc(VALUE klass)
 -{
 -  VALUE obj;
 -  lexer_state *lxr = ALLOC(lexer_state);
 -  lexer_init(lxr);
 -
 -  obj = Data_Wrap_Struct(klass, NULL, -1, lxr);
 -
 -  return obj;
 -}
 -
 -static VALUE CLexer_init(VALUE self, VALUE listener)
 -{
 -  lexer_state *lxr; 
 -  rb_iv_set(self, "@listener", listener);
 -  
 -  lxr = NULL;
 -  DATA_GET(self, lexer_state, lxr);
 -  lexer_init(lxr);
 -  
 -  return self;
 -}
 -
 -static VALUE CLexer_scan(VALUE self, VALUE input)
 -{
 -  VALUE input_copy;
 -  char *data;
 -  size_t len;
 -  VALUE listener = rb_iv_get(self, "@listener");
 -
 -  lexer_state *lexer;
 -  lexer = NULL;
 -  DATA_GET(self, lexer_state, lexer);
 -
 -  input_copy = rb_str_dup(input);
 -
 -  rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%"));
 -  data = RSTRING_PTR(input_copy);
 -  len = RSTRING_LEN(input_copy);
 -  
 -  if (len == 0) { 
 -    rb_raise(rb_eGherkinLexingError, "No content to lex.");
 -  } else {
 -
 -    const char *p, *pe, *eof;
 -    int cs = 0;
 -    
 -    VALUE current_row = Qnil;
 -
 -    p = data;
 -    pe = data + len;
 -    eof = pe;
 -    
 -    assert(*pe == '\0' && "pointer does not end on NULL");
 -    
 -    
 -#line 978 "ext/gherkin_lexer_he/gherkin_lexer_he.c"
 -	{
 -	cs = lexer_start;
 -	}
 -
 -#line 425 "ragel/i18n/he.c.rl"
 -    
 -#line 985 "ext/gherkin_lexer_he/gherkin_lexer_he.c"
 -	{
 -	int _klen;
 -	unsigned int _trans;
 -	const char *_acts;
 -	unsigned int _nacts;
 -	const char *_keys;
 -
 -	if ( p == pe )
 -		goto _test_eof;
 -	if ( cs == 0 )
 -		goto _out;
 -_resume:
 -	_keys = _lexer_trans_keys + _lexer_key_offsets[cs];
 -	_trans = _lexer_index_offsets[cs];
 -
 -	_klen = _lexer_single_lengths[cs];
 -	if ( _klen > 0 ) {
 -		const char *_lower = _keys;
 -		const char *_mid;
 -		const char *_upper = _keys + _klen - 1;
 -		while (1) {
 -			if ( _upper < _lower )
 -				break;
 -
 -			_mid = _lower + ((_upper-_lower) >> 1);
 -			if ( (*p) < *_mid )
 -				_upper = _mid - 1;
 -			else if ( (*p) > *_mid )
 -				_lower = _mid + 1;
 -			else {
 -				_trans += (unsigned int)(_mid - _keys);
 -				goto _match;
 -			}
 -		}
 -		_keys += _klen;
 -		_trans += _klen;
 -	}
 -
 -	_klen = _lexer_range_lengths[cs];
 -	if ( _klen > 0 ) {
 -		const char *_lower = _keys;
 -		const char *_mid;
 -		const char *_upper = _keys + (_klen<<1) - 2;
 -		while (1) {
 -			if ( _upper < _lower )
 -				break;
 -
 -			_mid = _lower + (((_upper-_lower) >> 1) & ~1);
 -			if ( (*p) < _mid[0] )
 -				_upper = _mid - 2;
 -			else if ( (*p) > _mid[1] )
 -				_lower = _mid + 2;
 -			else {
 -				_trans += (unsigned int)((_mid - _keys)>>1);
 -				goto _match;
 -			}
 -		}
 -		_trans += _klen;
 -	}
 -
 -_match:
 -	cs = _lexer_trans_targs[_trans];
 -
 -	if ( _lexer_trans_actions[_trans] == 0 )
 -		goto _again;
 -
 -	_acts = _lexer_actions + _lexer_trans_actions[_trans];
 -	_nacts = (unsigned int) *_acts++;
 -	while ( _nacts-- > 0 )
 -	{
 -		switch ( *_acts++ )
 -		{
 -	case 0:
 -#line 83 "ragel/i18n/he.c.rl"
 -	{
 -		MARK(content_start, p);
 -    lexer->current_line = lexer->line_number;
 -    lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2;
 -  }
 -	break;
 -	case 1:
 -#line 89 "ragel/i18n/he.c.rl"
 -	{
 -    MARK(content_start, p);
 -  }
 -	break;
 -	case 2:
 -#line 93 "ragel/i18n/he.c.rl"
 -	{
 -    lexer->current_line = lexer->line_number;
 -    lexer->start_col = p - data - lexer->last_newline;
 -  }
 -	break;
 -	case 3:
 -#line 98 "ragel/i18n/he.c.rl"
 -	{
 -    int len = LEN(content_start, PTR_TO(final_newline));
 -    int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end));
 -
 -    if (len < 0) len = 0;
 -    if (type_len < 0) len = 0;
 -
 -    store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line);
 -  }
 -	break;
 -	case 4:
 -#line 108 "ragel/i18n/he.c.rl"
 -	{ 
 -    MARK(docstring_content_type_start, p);
 -  }
 -	break;
 -	case 5:
 -#line 112 "ragel/i18n/he.c.rl"
 -	{ 
 -    MARK(docstring_content_type_end, p);
 -  }
 -	break;
 -	case 6:
 -#line 116 "ragel/i18n/he.c.rl"
 -	{
 -    STORE_KW_END_CON(feature);
 -  }
 -	break;
 -	case 7:
 -#line 120 "ragel/i18n/he.c.rl"
 -	{
 -    STORE_KW_END_CON(background);
 -  }
 -	break;
 -	case 8:
 -#line 124 "ragel/i18n/he.c.rl"
 -	{
 -    STORE_KW_END_CON(scenario);
 -  }
 -	break;
 -	case 9:
 -#line 128 "ragel/i18n/he.c.rl"
 -	{
 -    STORE_KW_END_CON(scenario_outline);
 -  }
 -	break;
 -	case 10:
 -#line 132 "ragel/i18n/he.c.rl"
 -	{
 -    STORE_KW_END_CON(examples);
 -  }
 -	break;
 -	case 11:
 -#line 136 "ragel/i18n/he.c.rl"
 -	{
 -    store_kw_con(listener, "step",
 -      PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
 -      PTR_TO(content_start), LEN(content_start, p), 
 -      lexer->current_line);
 -  }
 -	break;
 -	case 12:
 -#line 143 "ragel/i18n/he.c.rl"
 -	{
 -    STORE_ATTR(comment);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 13:
 -#line 148 "ragel/i18n/he.c.rl"
 -	{
 -    STORE_ATTR(tag);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 14:
 -#line 153 "ragel/i18n/he.c.rl"
 -	{
 -    lexer->line_number += 1;
 -    MARK(final_newline, p);
 -  }
 -	break;
 -	case 15:
 -#line 158 "ragel/i18n/he.c.rl"
 -	{
 -    MARK(last_newline, p + 1);
 -  }
 -	break;
 -	case 16:
 -#line 162 "ragel/i18n/he.c.rl"
 -	{
 -    if (lexer->mark == 0) {
 -      MARK(mark, p);
 -    }
 -  }
 -	break;
 -	case 17:
 -#line 168 "ragel/i18n/he.c.rl"
 -	{
 -    MARK(keyword_end, p);
 -    MARK(keyword_start, PTR_TO(mark));
 -    MARK(content_start, p + 1);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 18:
 -#line 175 "ragel/i18n/he.c.rl"
 -	{
 -    MARK(content_end, p);
 -  }
 -	break;
 -	case 19:
 -#line 179 "ragel/i18n/he.c.rl"
 -	{
 -    p = p - 1;
 -    lexer->current_line = lexer->line_number;
 -    current_row = rb_ary_new();
 -  }
 -	break;
 -	case 20:
 -#line 185 "ragel/i18n/he.c.rl"
 -	{
 -		MARK(content_start, p);
 -  }
 -	break;
 -	case 21:
 -#line 189 "ragel/i18n/he.c.rl"
 -	{
 -    VALUE re_pipe, re_newline, re_backslash;
 -    VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
 -    rb_funcall(con, rb_intern("strip!"), 0);
 -    re_pipe      = rb_reg_regcomp(rb_str_new2("\\\\\\|"));
 -    re_newline   = rb_reg_regcomp(rb_str_new2("\\\\n"));
 -    re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_pipe,      rb_str_new2("|"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_newline,   rb_str_new2("\n"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\"));
 -
 -    rb_ary_push(current_row, con);
 -  }
 -	break;
 -	case 22:
 -#line 203 "ragel/i18n/he.c.rl"
 -	{
 -    rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
 -  }
 -	break;
 -	case 23:
 -#line 207 "ragel/i18n/he.c.rl"
 -	{
 -    int line;
 -    if (cs < lexer_first_final) {
 -      size_t count = 0;
 -      VALUE newstr_val;
 -      char *newstr;
 -      int newstr_count = 0;        
 -      size_t len;
 -      const char *buff;
 -      if (lexer->last_newline != 0) {
 -        len = LEN(last_newline, eof);
 -        buff = PTR_TO(last_newline);
 -      } else {
 -        len = strlen(data);
 -        buff = data;
 -      }
 -
 -      /* Allocate as a ruby string so that it gets cleaned up by GC */
 -      newstr_val = rb_str_new(buff, len);
 -      newstr = RSTRING_PTR(newstr_val);
 -
 -
 -      for (count = 0; count < len; count++) {
 -        if(buff[count] == 10) {
 -          newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
 -          break;
 -        } else {
 -          if (buff[count] == '%') {
 -            newstr[newstr_count++] = buff[count];
 -            newstr[newstr_count] = buff[count];
 -          } else {
 -            newstr[newstr_count] = buff[count];
 -          }
 -        }
 -        newstr_count++;
 -      }
 -
 -      line = lexer->line_number;
 -      lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
 -      raise_lexer_error(newstr, line);
 -    } else {
 -      rb_funcall(listener, rb_intern("eof"), 0);
 -    }
 -  }
 -	break;
 -#line 1275 "ext/gherkin_lexer_he/gherkin_lexer_he.c"
 -		}
 -	}
 -
 -_again:
 -	if ( cs == 0 )
 -		goto _out;
 -	if ( ++p != pe )
 -		goto _resume;
 -	_test_eof: {}
 -	if ( p == eof )
 -	{
 -	const char *__acts = _lexer_actions + _lexer_eof_actions[cs];
 -	unsigned int __nacts = (unsigned int) *__acts++;
 -	while ( __nacts-- > 0 ) {
 -		switch ( *__acts++ ) {
 -	case 23:
 -#line 207 "ragel/i18n/he.c.rl"
 -	{
 -    int line;
 -    if (cs < lexer_first_final) {
 -      size_t count = 0;
 -      VALUE newstr_val;
 -      char *newstr;
 -      int newstr_count = 0;        
 -      size_t len;
 -      const char *buff;
 -      if (lexer->last_newline != 0) {
 -        len = LEN(last_newline, eof);
 -        buff = PTR_TO(last_newline);
 -      } else {
 -        len = strlen(data);
 -        buff = data;
 -      }
 -
 -      /* Allocate as a ruby string so that it gets cleaned up by GC */
 -      newstr_val = rb_str_new(buff, len);
 -      newstr = RSTRING_PTR(newstr_val);
 -
 -
 -      for (count = 0; count < len; count++) {
 -        if(buff[count] == 10) {
 -          newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
 -          break;
 -        } else {
 -          if (buff[count] == '%') {
 -            newstr[newstr_count++] = buff[count];
 -            newstr[newstr_count] = buff[count];
 -          } else {
 -            newstr[newstr_count] = buff[count];
 -          }
 -        }
 -        newstr_count++;
 -      }
 -
 -      line = lexer->line_number;
 -      lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
 -      raise_lexer_error(newstr, line);
 -    } else {
 -      rb_funcall(listener, rb_intern("eof"), 0);
 -    }
 -  }
 -	break;
 -#line 1338 "ext/gherkin_lexer_he/gherkin_lexer_he.c"
 -		}
 -	}
 -	}
 -
 -	_out: {}
 -	}
 -
 -#line 426 "ragel/i18n/he.c.rl"
 -
 -    assert(p <= pe && "data overflow after parsing execute");
 -    assert(lexer->content_start <= len && "content starts after data end");
 -    assert(lexer->mark < len && "mark is after data end");
 -    
 -    /* Reset lexer by re-initializing the whole thing */
 -    lexer_init(lexer);
 -
 -    if (cs == lexer_error) {
 -      rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails.");
 -    } else {
 -      return Qtrue;
 -    }
 -  }
 -}
 -
 -void Init_gherkin_lexer_he()
 -{
 -  mGherkin = rb_define_module("Gherkin");
 -  mGherkinLexer = rb_define_module_under(mGherkin, "Lexer");
 -  rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError"));
 -
 -  mCLexer = rb_define_module_under(mGherkin, "CLexer");
 -  cI18nLexer = rb_define_class_under(mCLexer, "He", rb_cObject);
 -  rb_define_alloc_func(cI18nLexer, CLexer_alloc);
 -  rb_define_method(cI18nLexer, "initialize", CLexer_init, 1);
 -  rb_define_method(cI18nLexer, "scan", CLexer_scan, 1);
 -}
 -
diff --cc ext/gherkin_lexer_hr/extconf.rb
index 71fcdc9,71fcdc9..0000000
deleted file mode 100644,100644
--- a/ext/gherkin_lexer_hr/extconf.rb
+++ /dev/null
@@@ -1,6 -1,6 +1,0 @@@
--require 'mkmf'
--CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags']
--$CFLAGS << ' -O0 -Wall' if CONFIG['CC'] =~ /gcc|clang/
--dir_config("gherkin_lexer_hr")
--have_library("c", "main")
--create_makefile("gherkin_lexer_hr")
diff --cc ext/gherkin_lexer_hr/gherkin_lexer_hr.c
index 49c8b4e,5d13c07..0000000
deleted file mode 100644,100644
--- a/ext/gherkin_lexer_hr/gherkin_lexer_hr.c
+++ /dev/null
@@@ -1,1323 -1,1323 +1,0 @@@
--
- #line 1 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/hr.c.rl"
- #include <assert.h>
- #include <ruby.h>
- 
- #if defined(_WIN32)
- #include <stddef.h>
- #endif
- 
- #ifdef HAVE_RUBY_RE_H
- #include <ruby/re.h>
- #else
- #include <re.h>
- #endif
- 
- #ifdef HAVE_RUBY_ENCODING_H
- #include <ruby/encoding.h>
- #define ENCODED_STR_NEW(ptr, len) \
-     rb_enc_str_new(ptr, len, rb_utf8_encoding())
- #else
- #define ENCODED_STR_NEW(ptr, len) \
-     rb_str_new(ptr, len)
- #endif
- 
- #ifndef RSTRING_PTR
- #define RSTRING_PTR(s) (RSTRING(s)->ptr)
- #endif
- 
- #ifndef RSTRING_LEN
- #define RSTRING_LEN(s) (RSTRING(s)->len)
- #endif
- 
- #define DATA_GET(FROM, TYPE, NAME) \
-   Data_Get_Struct(FROM, TYPE, NAME); \
-   if (NAME == NULL) { \
-     rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \
-   }
-  
- typedef struct lexer_state {
-   int content_len;
-   int line_number;
-   int current_line;
-   int start_col;
-   size_t mark;
-   size_t keyword_start;
-   size_t keyword_end;
-   size_t next_keyword_start;
-   size_t content_start;
-   size_t content_end;
-   size_t docstring_content_type_start;
-   size_t docstring_content_type_end;
-   size_t query_start;
-   size_t last_newline;
-   size_t final_newline;
- } lexer_state;
- 
- static VALUE mGherkin;
- static VALUE mGherkinLexer;
- static VALUE mCLexer;
- static VALUE cI18nLexer;
- static VALUE rb_eGherkinLexingError;
- 
- #define LEN(AT, P) (P - data - lexer->AT)
- #define MARK(M, P) (lexer->M = (P) - data)
- #define PTR_TO(P) (data + lexer->P)
- 
- #define STORE_KW_END_CON(EVENT) \
-   store_multiline_kw_con(listener, # EVENT, \
-     PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \
-     PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \
-     lexer->current_line, lexer->start_col); \
-     if (lexer->content_end != 0) { \
-       p = PTR_TO(content_end - 1); \
-     } \
-     lexer->content_end = 0
- 
- #define STORE_ATTR(ATTR) \
-     store_attr(listener, # ATTR, \
-       PTR_TO(content_start), LEN(content_start, p), \
-       lexer->line_number)
- 
- 
- #line 254 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/hr.c.rl"
- 
- 
- /** Data **/
- 
- #line 89 "ext/gherkin_lexer_hr/gherkin_lexer_hr.c"
- static const char _lexer_actions[] = {
- 	0, 1, 0, 1, 1, 1, 2, 1, 
- 	3, 1, 4, 1, 5, 1, 6, 1, 
- 	7, 1, 8, 1, 9, 1, 10, 1, 
- 	11, 1, 12, 1, 13, 1, 16, 1, 
- 	17, 1, 18, 1, 19, 1, 20, 1, 
- 	21, 1, 22, 1, 23, 2, 1, 18, 
- 	2, 4, 5, 2, 13, 0, 2, 14, 
- 	15, 2, 17, 0, 2, 17, 2, 2, 
- 	17, 16, 2, 17, 19, 2, 18, 6, 
- 	2, 18, 7, 2, 18, 8, 2, 18, 
- 	9, 2, 18, 10, 2, 18, 16, 2, 
- 	20, 21, 2, 22, 0, 2, 22, 2, 
- 	2, 22, 16, 2, 22, 19, 3, 3, 
- 	14, 15, 3, 5, 14, 15, 3, 11, 
- 	14, 15, 3, 12, 14, 15, 3, 13, 
- 	14, 15, 3, 14, 15, 18, 3, 17, 
- 	0, 11, 3, 17, 14, 15, 4, 1, 
- 	14, 15, 18, 4, 4, 5, 14, 15, 
- 	4, 17, 0, 14, 15, 5, 17, 0, 
- 	11, 14, 15
- };
- 
- static const short _lexer_key_offsets[] = {
- 	0, 0, 19, 20, 21, 39, 40, 41, 
- 	43, 45, 50, 55, 60, 65, 69, 73, 
- 	75, 76, 77, 78, 79, 80, 81, 82, 
- 	83, 84, 85, 86, 87, 88, 89, 90, 
- 	91, 93, 95, 100, 107, 112, 113, 114, 
- 	116, 117, 119, 120, 121, 122, 123, 124, 
- 	125, 126, 127, 142, 144, 146, 148, 150, 
- 	152, 154, 156, 158, 160, 162, 164, 166, 
- 	168, 170, 172, 190, 191, 192, 193, 195, 
- 	196, 197, 198, 199, 200, 201, 202, 203, 
- 	215, 217, 219, 221, 223, 225, 227, 229, 
- 	231, 233, 235, 237, 239, 241, 243, 245, 
- 	247, 249, 251, 253, 255, 257, 259, 261, 
- 	263, 266, 268, 270, 272, 274, 276, 278, 
- 	280, 282, 284, 286, 289, 291, 293, 295, 
- 	297, 299, 301, 303, 305, 307, 310, 312, 
- 	314, 316, 318, 320, 322, 325, 327, 329, 
- 	331, 332, 333, 334, 335, 336, 337, 338, 
- 	340, 341, 342, 343, 344, 345, 346, 347, 
- 	348, 349, 364, 366, 368, 370, 372, 374, 
- 	376, 378, 380, 382, 384, 386, 388, 390, 
- 	392, 394, 396, 398, 401, 403, 406, 408, 
- 	410, 412, 414, 416, 418, 420, 422, 424, 
- 	427, 429, 431, 433, 435, 438, 440, 442, 
- 	444, 446, 448, 450, 452, 455, 457, 459, 
- 	461, 463, 465, 467, 469, 471, 473, 475, 
- 	477, 479, 483, 484, 485, 486, 487, 488, 
- 	489, 490, 491, 492, 500, 502, 504, 506, 
- 	509, 511, 513, 515, 517, 519, 521, 523, 
- 	525, 527, 529, 531, 533, 535, 536, 537, 
- 	538, 539, 540, 541, 543, 544, 545, 561, 
- 	563, 565, 567, 569, 571, 573, 575, 577, 
- 	579, 581, 583, 585, 587, 589, 591, 593, 
- 	595, 598, 600, 603, 605, 607, 609, 611, 
- 	613, 615, 617, 619, 621, 624, 626, 628, 
- 	630, 632, 635, 637, 639, 641, 643, 645, 
- 	647, 649, 651, 653, 655, 657, 660, 662, 
- 	664, 666, 668, 670, 672, 674, 676, 678, 
- 	680, 682, 684, 688, 689, 690, 691, 692, 
- 	693, 694, 695, 698, 702, 708, 711, 713, 
- 	719, 737, 739, 741, 743, 745, 748, 750, 
- 	752, 754, 757, 759, 761, 763, 765, 767, 
- 	769, 772, 774, 776, 778, 780, 782, 784, 
- 	786, 788, 790, 792, 794, 796, 798, 800, 
- 	802, 804, 806, 808, 812
- };
- 
- static const char _lexer_trans_keys[] = {
- 	-17, 10, 32, 34, 35, 37, 42, 64, 
- 	65, 73, 75, 77, 79, 80, 83, 90, 
- 	124, 9, 13, -69, -65, 10, 32, 34, 
- 	35, 37, 42, 64, 65, 73, 75, 77, 
- 	79, 80, 83, 90, 124, 9, 13, 34, 
- 	34, 10, 13, 10, 13, 10, 32, 34, 
- 	9, 13, 10, 32, 34, 9, 13, 10, 
- 	32, 34, 9, 13, 10, 32, 34, 9, 
- 	13, 10, 32, 9, 13, 10, 32, 9, 
- 	13, 10, 13, 10, 95, 70, 69, 65, 
- 	84, 85, 82, 69, 95, 69, 78, 68, 
- 	95, 37, 32, 10, 13, 10, 13, 13, 
- 	32, 64, 9, 10, 9, 10, 13, 32, 
- 	64, 11, 12, 10, 32, 64, 9, 13, 
- 	108, 105, 97, 111, 100, 32, 97, 110, 
- 	99, 101, 112, 116, 58, 10, 10, 10, 
- 	32, 35, 37, 42, 64, 65, 73, 75, 
- 	77, 79, 83, 90, 9, 13, 10, 95, 
- 	10, 70, 10, 69, 10, 65, 10, 84, 
- 	10, 85, 10, 82, 10, 69, 10, 95, 
- 	10, 69, 10, 78, 10, 68, 10, 95, 
- 	10, 37, 10, 32, 10, 32, 34, 35, 
- 	37, 42, 64, 65, 73, 75, 77, 79, 
- 	80, 83, 90, 124, 9, 13, 111, 103, 
- 	117, -60, 99, -121, 110, 111, 115, 116, 
- 	58, 10, 10, 10, 32, 35, 37, 64, 
- 	75, 77, 79, 80, 83, 9, 13, 10, 
- 	95, 10, 70, 10, 69, 10, 65, 10, 
- 	84, 10, 85, 10, 82, 10, 69, 10, 
- 	95, 10, 69, 10, 78, 10, 68, 10, 
- 	95, 10, 37, 10, 111, 10, 110, 10, 
- 	99, 10, 101, 10, 112, 10, 116, 10, 
- 	58, 10, 111, 10, 103, 10, 117, -60, 
- 	10, 99, -121, 10, 10, 110, 10, 111, 
- 	10, 115, 10, 115, 10, 111, 10, 98, 
- 	10, 105, 10, 110, 10, 97, 10, 111, 
- 	114, 10, 122, 10, 97, 10, 100, 10, 
- 	105, 10, 109, 10, 106, 10, 101, 10, 
- 	114, 10, 105, 10, 99, 107, 10, 101, 
- 	10, 110, 10, 97, 10, 114, 10, 105, 
- 	10, 106, 10, 58, 105, 10, 105, 10, 
- 	99, 110, 115, 100, 97, 111, 98, 105, 
- 	110, 97, 111, 114, 122, 97, 100, 105, 
- 	110, 97, 58, 10, 10, 10, 32, 35, 
- 	37, 42, 64, 65, 73, 75, 77, 79, 
- 	83, 90, 9, 13, 10, 95, 10, 70, 
- 	10, 69, 10, 65, 10, 84, 10, 85, 
- 	10, 82, 10, 69, 10, 95, 10, 69, 
- 	10, 78, 10, 68, 10, 95, 10, 37, 
- 	10, 32, 10, 108, 10, 105, 10, 97, 
- 	111, 10, 100, 10, 32, 97, 10, 110, 
- 	10, 99, 10, 101, 10, 112, 10, 116, 
- 	10, 58, 10, 111, 10, 103, 10, 117, 
- 	-60, 10, 99, -121, 10, 10, 110, 10, 
- 	111, 10, 115, 10, 110, 115, 10, 100, 
- 	10, 97, 10, 111, 10, 98, 10, 105, 
- 	10, 110, 10, 97, 10, 99, 107, 10, 
- 	101, 10, 110, 10, 97, 10, 114, 10, 
- 	105, 10, 106, 10, 105, 10, 99, 10, 
- 	97, 10, 100, 10, 97, 10, 110, 10, 
- 	32, 105, 111, 105, 109, 106, 101, 114, 
- 	105, 58, 10, 10, 10, 32, 35, 77, 
- 	79, 124, 9, 13, 10, 111, 10, 103, 
- 	10, 117, -60, 10, 99, -121, 10, 10, 
- 	110, 10, 111, 10, 115, 10, 116, 10, 
- 	58, 10, 115, 10, 111, 10, 98, 10, 
- 	105, 10, 110, 10, 97, 99, 107, 101, 
- 	110, 97, 114, 105, 106, 58, 105, 10, 
- 	10, 10, 32, 35, 37, 42, 64, 65, 
- 	73, 75, 77, 79, 80, 83, 90, 9, 
- 	13, 10, 95, 10, 70, 10, 69, 10, 
- 	65, 10, 84, 10, 85, 10, 82, 10, 
- 	69, 10, 95, 10, 69, 10, 78, 10, 
- 	68, 10, 95, 10, 37, 10, 32, 10, 
- 	108, 10, 105, 10, 97, 111, 10, 100, 
- 	10, 32, 97, 10, 110, 10, 99, 10, 
- 	101, 10, 112, 10, 116, 10, 58, 10, 
- 	111, 10, 103, 10, 117, -60, 10, 99, 
- 	-121, 10, 10, 110, 10, 111, 10, 115, 
- 	10, 110, 115, 10, 100, 10, 97, 10, 
- 	111, 10, 98, 10, 105, 10, 110, 10, 
- 	97, 10, 111, 10, 122, 10, 97, 10, 
- 	100, 10, 99, 107, 10, 101, 10, 110, 
- 	10, 97, 10, 114, 10, 105, 10, 106, 
- 	10, 105, 10, 99, 10, 97, 10, 100, 
- 	10, 97, 10, 110, 10, 32, 105, 111, 
- 	105, 99, 97, 97, 100, 97, 110, 32, 
- 	105, 111, 32, 124, 9, 13, 10, 32, 
- 	92, 124, 9, 13, 10, 92, 124, 10, 
- 	92, 10, 32, 92, 124, 9, 13, 10, 
- 	32, 34, 35, 37, 42, 64, 65, 73, 
- 	75, 77, 79, 80, 83, 90, 124, 9, 
- 	13, 10, 108, 10, 105, 10, 97, 10, 
- 	100, 10, 32, 97, 10, 111, 10, 103, 
- 	10, 117, -60, 10, 99, -121, 10, 10, 
- 	110, 10, 111, 10, 115, 10, 116, 10, 
- 	58, 10, 110, 115, 10, 100, 10, 97, 
- 	10, 111, 10, 98, 10, 105, 10, 110, 
- 	10, 97, 10, 99, 10, 101, 10, 110, 
- 	10, 97, 10, 114, 10, 105, 10, 106, 
- 	10, 97, 10, 100, 10, 97, 10, 110, 
- 	10, 32, 105, 111, 0
- };
- 
- static const char _lexer_single_lengths[] = {
- 	0, 17, 1, 1, 16, 1, 1, 2, 
- 	2, 3, 3, 3, 3, 2, 2, 2, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	2, 2, 3, 5, 3, 1, 1, 2, 
- 	1, 2, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 13, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 16, 1, 1, 1, 2, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 10, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	3, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 3, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 3, 2, 2, 
- 	2, 2, 2, 2, 3, 2, 2, 2, 
- 	1, 1, 1, 1, 1, 1, 1, 2, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 13, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 3, 2, 3, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 3, 
- 	2, 2, 2, 2, 3, 2, 2, 2, 
- 	2, 2, 2, 2, 3, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 4, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 6, 2, 2, 2, 3, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 1, 1, 1, 
- 	1, 1, 1, 2, 1, 1, 14, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	3, 2, 3, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 3, 2, 2, 2, 
- 	2, 3, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 3, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 4, 1, 1, 1, 1, 1, 
- 	1, 1, 3, 2, 4, 3, 2, 4, 
- 	16, 2, 2, 2, 2, 3, 2, 2, 
- 	2, 3, 2, 2, 2, 2, 2, 2, 
- 	3, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 4, 0
- };
- 
- static const char _lexer_range_lengths[] = {
- 	0, 1, 0, 0, 1, 0, 0, 0, 
- 	0, 1, 1, 1, 1, 1, 1, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 1, 1, 1, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 1, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 1, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 1, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 1, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 1, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 1, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 1, 1, 0, 0, 1, 
- 	1, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0
- };
- 
- static const short _lexer_index_offsets[] = {
- 	0, 0, 19, 21, 23, 41, 43, 45, 
- 	48, 51, 56, 61, 66, 71, 75, 79, 
- 	82, 84, 86, 88, 90, 92, 94, 96, 
- 	98, 100, 102, 104, 106, 108, 110, 112, 
- 	114, 117, 120, 125, 132, 137, 139, 141, 
- 	144, 146, 149, 151, 153, 155, 157, 159, 
- 	161, 163, 165, 180, 183, 186, 189, 192, 
- 	195, 198, 201, 204, 207, 210, 213, 216, 
- 	219, 222, 225, 243, 245, 247, 249, 252, 
- 	254, 256, 258, 260, 262, 264, 266, 268, 
- 	280, 283, 286, 289, 292, 295, 298, 301, 
- 	304, 307, 310, 313, 316, 319, 322, 325, 
- 	328, 331, 334, 337, 340, 343, 346, 349, 
- 	352, 356, 359, 362, 365, 368, 371, 374, 
- 	377, 380, 383, 386, 390, 393, 396, 399, 
- 	402, 405, 408, 411, 414, 417, 421, 424, 
- 	427, 430, 433, 436, 439, 443, 446, 449, 
- 	452, 454, 456, 458, 460, 462, 464, 466, 
- 	469, 471, 473, 475, 477, 479, 481, 483, 
- 	485, 487, 502, 505, 508, 511, 514, 517, 
- 	520, 523, 526, 529, 532, 535, 538, 541, 
- 	544, 547, 550, 553, 557, 560, 564, 567, 
- 	570, 573, 576, 579, 582, 585, 588, 591, 
- 	595, 598, 601, 604, 607, 611, 614, 617, 
- 	620, 623, 626, 629, 632, 636, 639, 642, 
- 	645, 648, 651, 654, 657, 660, 663, 666, 
- 	669, 672, 677, 679, 681, 683, 685, 687, 
- 	689, 691, 693, 695, 703, 706, 709, 712, 
- 	716, 719, 722, 725, 728, 731, 734, 737, 
- 	740, 743, 746, 749, 752, 755, 757, 759, 
- 	761, 763, 765, 767, 770, 772, 774, 790, 
- 	793, 796, 799, 802, 805, 808, 811, 814, 
- 	817, 820, 823, 826, 829, 832, 835, 838, 
- 	841, 845, 848, 852, 855, 858, 861, 864, 
- 	867, 870, 873, 876, 879, 883, 886, 889, 
- 	892, 895, 899, 902, 905, 908, 911, 914, 
- 	917, 920, 923, 926, 929, 932, 936, 939, 
- 	942, 945, 948, 951, 954, 957, 960, 963, 
- 	966, 969, 972, 977, 979, 981, 983, 985, 
- 	987, 989, 991, 995, 999, 1005, 1009, 1012, 
- 	1018, 1036, 1039, 1042, 1045, 1048, 1052, 1055, 
- 	1058, 1061, 1065, 1068, 1071, 1074, 1077, 1080, 
- 	1083, 1087, 1090, 1093, 1096, 1099, 1102, 1105, 
- 	1108, 1111, 1114, 1117, 1120, 1123, 1126, 1129, 
- 	1132, 1135, 1138, 1141, 1146
- };
- 
- static const short _lexer_trans_targs[] = {
- 	2, 4, 4, 5, 15, 17, 31, 34, 
- 	37, 31, 39, 67, 135, 143, 236, 310, 
- 	315, 4, 0, 3, 0, 4, 0, 4, 
- 	4, 5, 15, 17, 31, 34, 37, 31, 
- 	39, 67, 135, 143, 236, 310, 315, 4, 
- 	0, 6, 0, 7, 0, 9, 8, 8, 
- 	9, 8, 8, 10, 10, 11, 10, 10, 
- 	10, 10, 11, 10, 10, 10, 10, 12, 
- 	10, 10, 10, 10, 13, 10, 10, 4, 
- 	14, 14, 0, 4, 14, 14, 0, 4, 
- 	16, 15, 4, 0, 18, 0, 19, 0, 
- 	20, 0, 21, 0, 22, 0, 23, 0, 
- 	24, 0, 25, 0, 26, 0, 27, 0, 
- 	28, 0, 29, 0, 30, 0, 356, 0, 
- 	32, 0, 4, 16, 33, 4, 16, 33, 
- 	0, 0, 0, 0, 35, 36, 4, 36, 
- 	36, 34, 35, 35, 4, 36, 34, 36, 
- 	0, 38, 0, 31, 0, 40, 42, 0, 
- 	41, 0, 32, 31, 0, 43, 0, 44, 
- 	0, 45, 0, 46, 0, 47, 0, 48, 
- 	0, 50, 49, 50, 49, 50, 50, 4, 
- 	51, 65, 4, 321, 65, 323, 326, 336, 
- 	344, 351, 50, 49, 50, 52, 49, 50, 
- 	53, 49, 50, 54, 49, 50, 55, 49, 
- 	50, 56, 49, 50, 57, 49, 50, 58, 
- 	49, 50, 59, 49, 50, 60, 49, 50, 
- 	61, 49, 50, 62, 49, 50, 63, 49, 
- 	50, 64, 49, 50, 4, 49, 50, 66, 
- 	49, 4, 4, 5, 15, 17, 31, 34, 
- 	37, 31, 39, 67, 135, 143, 236, 310, 
- 	315, 4, 0, 68, 0, 69, 0, 70, 
- 	0, 71, 72, 0, 72, 0, 73, 0, 
- 	74, 0, 75, 0, 76, 0, 77, 0, 
- 	79, 78, 79, 78, 79, 79, 4, 80, 
- 	4, 94, 101, 109, 115, 125, 79, 78, 
- 	79, 81, 78, 79, 82, 78, 79, 83, 
- 	78, 79, 84, 78, 79, 85, 78, 79, 
- 	86, 78, 79, 87, 78, 79, 88, 78, 
- 	79, 89, 78, 79, 90, 78, 79, 91, 
- 	78, 79, 92, 78, 79, 93, 78, 79, 
- 	4, 78, 79, 95, 78, 79, 96, 78, 
- 	79, 97, 78, 79, 98, 78, 79, 99, 
- 	78, 79, 100, 78, 79, 66, 78, 79, 
- 	102, 78, 79, 103, 78, 79, 104, 78, 
- 	105, 79, 106, 78, 106, 79, 78, 79, 
- 	107, 78, 79, 108, 78, 79, 99, 78, 
- 	79, 110, 78, 79, 111, 78, 79, 112, 
- 	78, 79, 113, 78, 79, 114, 78, 79, 
- 	100, 78, 79, 116, 119, 78, 79, 117, 
- 	78, 79, 118, 78, 79, 112, 78, 79, 
- 	120, 78, 79, 121, 78, 79, 122, 78, 
- 	79, 123, 78, 79, 124, 78, 79, 100, 
- 	78, 79, 126, 133, 78, 79, 127, 78, 
- 	79, 128, 78, 79, 129, 78, 79, 130, 
- 	78, 79, 131, 78, 79, 132, 78, 79, 
- 	66, 100, 78, 79, 134, 78, 79, 114, 
- 	78, 136, 138, 0, 137, 0, 31, 0, 
- 	139, 0, 140, 0, 141, 0, 142, 0, 
- 	76, 0, 144, 210, 0, 145, 0, 146, 
- 	0, 147, 0, 148, 0, 149, 0, 150, 
- 	0, 151, 0, 153, 152, 153, 152, 153, 
- 	153, 4, 154, 168, 4, 169, 168, 171, 
- 	180, 188, 196, 205, 153, 152, 153, 155, 
- 	152, 153, 156, 152, 153, 157, 152, 153, 
- 	158, 152, 153, 159, 152, 153, 160, 152, 
- 	153, 161, 152, 153, 162, 152, 153, 163, 
- 	152, 153, 164, 152, 153, 165, 152, 153, 
- 	166, 152, 153, 167, 152, 153, 4, 152, 
- 	153, 66, 152, 153, 170, 152, 153, 168, 
- 	152, 153, 172, 174, 152, 153, 173, 152, 
- 	153, 66, 168, 152, 153, 175, 152, 153, 
- 	176, 152, 153, 177, 152, 153, 178, 152, 
- 	153, 179, 152, 153, 66, 152, 153, 181, 
- 	152, 153, 182, 152, 153, 183, 152, 184, 
- 	153, 185, 152, 185, 153, 152, 153, 186, 
- 	152, 153, 187, 152, 153, 178, 152, 153, 
- 	189, 191, 152, 153, 190, 152, 153, 168, 
- 	152, 153, 192, 152, 153, 193, 152, 153, 
- 	194, 152, 153, 195, 152, 153, 179, 152, 
- 	153, 197, 203, 152, 153, 198, 152, 153, 
- 	199, 152, 153, 200, 152, 153, 201, 152, 
- 	153, 202, 152, 153, 179, 152, 153, 204, 
- 	152, 153, 195, 152, 153, 206, 152, 153, 
- 	207, 152, 153, 208, 152, 153, 209, 152, 
- 	153, 66, 168, 168, 152, 211, 0, 212, 
- 	0, 213, 0, 214, 0, 215, 0, 216, 
- 	0, 217, 0, 219, 218, 219, 218, 219, 
- 	219, 4, 220, 230, 4, 219, 218, 219, 
- 	221, 218, 219, 222, 218, 219, 223, 218, 
- 	224, 219, 225, 218, 225, 219, 218, 219, 
- 	226, 218, 219, 227, 218, 219, 228, 218, 
- 	219, 229, 218, 219, 66, 218, 219, 231, 
- 	218, 219, 232, 218, 219, 233, 218, 219, 
- 	234, 218, 219, 235, 218, 219, 229, 218, 
- 	237, 307, 0, 238, 0, 239, 0, 240, 
- 	0, 241, 0, 242, 0, 243, 0, 244, 
- 	216, 0, 246, 245, 246, 245, 246, 246, 
- 	4, 247, 261, 4, 262, 261, 264, 273, 
- 	281, 289, 293, 302, 246, 245, 246, 248, 
- 	245, 246, 249, 245, 246, 250, 245, 246, 
- 	251, 245, 246, 252, 245, 246, 253, 245, 
- 	246, 254, 245, 246, 255, 245, 246, 256, 
- 	245, 246, 257, 245, 246, 258, 245, 246, 
- 	259, 245, 246, 260, 245, 246, 4, 245, 
- 	246, 66, 245, 246, 263, 245, 246, 261, 
- 	245, 246, 265, 267, 245, 246, 266, 245, 
- 	246, 66, 261, 245, 246, 268, 245, 246, 
- 	269, 245, 246, 270, 245, 246, 271, 245, 
- 	246, 272, 245, 246, 66, 245, 246, 274, 
- 	245, 246, 275, 245, 246, 276, 245, 277, 
- 	246, 278, 245, 278, 246, 245, 246, 279, 
- 	245, 246, 280, 245, 246, 271, 245, 246, 
- 	282, 284, 245, 246, 283, 245, 246, 261, 
- 	245, 246, 285, 245, 246, 286, 245, 246, 
- 	287, 245, 246, 288, 245, 246, 272, 245, 
- 	246, 290, 245, 246, 291, 245, 246, 292, 
- 	245, 246, 286, 245, 246, 294, 300, 245, 
- 	246, 295, 245, 246, 296, 245, 246, 297, 
- 	245, 246, 298, 245, 246, 299, 245, 246, 
- 	272, 245, 246, 301, 245, 246, 288, 245, 
- 	246, 303, 245, 246, 304, 245, 246, 305, 
- 	245, 246, 306, 245, 246, 66, 261, 261, 
- 	245, 308, 0, 309, 0, 47, 0, 311, 
- 	0, 312, 0, 313, 0, 314, 0, 32, 
- 	31, 31, 0, 315, 316, 315, 0, 320, 
- 	319, 318, 316, 319, 317, 0, 318, 316, 
- 	317, 0, 318, 317, 320, 319, 318, 316, 
- 	319, 317, 320, 320, 5, 15, 17, 31, 
- 	34, 37, 31, 39, 67, 135, 143, 236, 
- 	310, 315, 320, 0, 50, 322, 49, 50, 
- 	65, 49, 50, 324, 49, 50, 325, 49, 
- 	50, 66, 65, 49, 50, 327, 49, 50, 
- 	328, 49, 50, 329, 49, 330, 50, 331, 
- 	49, 331, 50, 49, 50, 332, 49, 50, 
- 	333, 49, 50, 334, 49, 50, 335, 49, 
- 	50, 66, 49, 50, 337, 339, 49, 50, 
- 	338, 49, 50, 65, 49, 50, 340, 49, 
- 	50, 341, 49, 50, 342, 49, 50, 343, 
- 	49, 50, 335, 49, 50, 345, 49, 50, 
- 	346, 49, 50, 347, 49, 50, 348, 49, 
- 	50, 349, 49, 50, 350, 49, 50, 335, 
- 	49, 50, 352, 49, 50, 353, 49, 50, 
- 	354, 49, 50, 355, 49, 50, 66, 65, 
- 	65, 49, 0, 0
- };
- 
- static const unsigned char _lexer_trans_actions[] = {
- 	0, 54, 0, 5, 1, 0, 29, 1, 
- 	29, 29, 29, 29, 29, 29, 29, 29, 
- 	35, 0, 43, 0, 43, 0, 43, 54, 
- 	0, 5, 1, 0, 29, 1, 29, 29, 
- 	29, 29, 29, 29, 29, 29, 35, 0, 
- 	43, 0, 43, 0, 43, 139, 48, 9, 
- 	106, 11, 0, 134, 45, 45, 45, 3, 
- 	122, 33, 33, 33, 0, 122, 33, 33, 
- 	33, 0, 122, 33, 0, 33, 0, 102, 
- 	7, 7, 43, 54, 0, 0, 43, 114, 
- 	25, 0, 54, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 149, 126, 57, 110, 23, 0, 
- 	43, 43, 43, 43, 0, 27, 118, 27, 
- 	27, 51, 27, 0, 54, 0, 1, 0, 
- 	43, 0, 43, 0, 43, 0, 0, 43, 
- 	0, 43, 0, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 144, 57, 54, 0, 54, 0, 78, 
- 	33, 84, 78, 84, 84, 84, 84, 84, 
- 	84, 84, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 19, 0, 54, 19, 
- 	0, 130, 31, 60, 57, 31, 63, 57, 
- 	63, 63, 63, 63, 63, 63, 63, 63, 
- 	66, 31, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	144, 57, 54, 0, 54, 0, 69, 33, 
- 	69, 84, 84, 84, 84, 84, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	13, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 13, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	0, 54, 0, 0, 0, 54, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	13, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 0, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 144, 57, 54, 0, 54, 
- 	0, 72, 33, 84, 72, 84, 84, 84, 
- 	84, 84, 84, 84, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 15, 0, 
- 	54, 15, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 0, 54, 0, 0, 
- 	54, 15, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 15, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 0, 
- 	54, 0, 0, 0, 54, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 15, 0, 0, 0, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 144, 57, 54, 0, 54, 
- 	0, 81, 84, 84, 81, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	0, 54, 0, 0, 0, 54, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 21, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	0, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	0, 43, 144, 57, 54, 0, 54, 0, 
- 	75, 33, 84, 75, 84, 84, 84, 84, 
- 	84, 84, 84, 84, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 17, 0, 
- 	54, 17, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 0, 54, 0, 0, 
- 	54, 17, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 17, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 0, 
- 	54, 0, 0, 0, 54, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 17, 0, 0, 
- 	0, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	0, 0, 43, 0, 0, 0, 43, 54, 
- 	37, 37, 87, 37, 37, 43, 0, 39, 
- 	0, 43, 0, 0, 54, 0, 0, 39, 
- 	0, 0, 54, 0, 93, 90, 41, 96, 
- 	90, 96, 96, 96, 96, 96, 96, 96, 
- 	96, 99, 0, 43, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 19, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 0, 54, 0, 
- 	0, 0, 54, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 19, 0, 54, 0, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 19, 0, 
- 	0, 0, 0, 0
- };
- 
- static const unsigned char _lexer_eof_actions[] = {
- 	0, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43
- };
- 
- static const int lexer_start = 1;
- static const int lexer_first_final = 356;
- static const int lexer_error = 0;
- 
- static const int lexer_en_main = 1;
- 
- 
- #line 258 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/hr.c.rl"
- 
- static VALUE 
- unindent(VALUE con, int start_col)
- {
-   VALUE re;
-   // Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters
-   char pat[32]; 
-   snprintf(pat, 32, "^[\t ]{0,%d}", start_col); 
-   re = rb_reg_regcomp(rb_str_new2(pat));
-   rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2(""));
- 
-   return Qnil;
- 
- }
- 
- static void 
- store_kw_con(VALUE listener, const char * event_name, 
-              const char * keyword_at, size_t keyword_length, 
-              const char * at,         size_t length, 
-              int current_line)
- {
-   VALUE con = Qnil, kw = Qnil;
-   kw = ENCODED_STR_NEW(keyword_at, keyword_length);
-   con = ENCODED_STR_NEW(at, length);
-   rb_funcall(con, rb_intern("strip!"), 0);
-   rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); 
- }
- 
- static void
- store_multiline_kw_con(VALUE listener, const char * event_name,
-                       const char * keyword_at, size_t keyword_length,
-                       const char * at,         size_t length,
-                       int current_line, int start_col)
- {
-   VALUE split;
-   VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil;
- 
-   kw = ENCODED_STR_NEW(keyword_at, keyword_length);
-   con = ENCODED_STR_NEW(at, length);
- 
-   unindent(con, start_col);
-   
-   split = rb_str_split(con, "\n");
- 
-   name = rb_funcall(split, rb_intern("shift"), 0);
-   desc = rb_ary_join(split, rb_str_new2( "\n" ));
- 
-   if( name == Qnil ) 
-   {
-     name = rb_str_new2("");
-   }
-   if( rb_funcall(desc, rb_intern("size"), 0) == 0) 
-   {
-     desc = rb_str_new2("");
-   }
-   rb_funcall(name, rb_intern("strip!"), 0);
-   rb_funcall(desc, rb_intern("rstrip!"), 0);
-   rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); 
- }
- 
- static void 
- store_attr(VALUE listener, const char * attr_type,
-            const char * at, size_t length, 
-            int line)
- {
-   VALUE val = ENCODED_STR_NEW(at, length);
-   rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line));
- }
- static void 
- store_docstring_content(VALUE listener, 
-           int start_col, 
-           const char *type_at, size_t type_length,
-           const char *at, size_t length, 
-           int current_line)
- {
-   VALUE re2;
-   VALUE unescape_escaped_quotes;
-   VALUE con = ENCODED_STR_NEW(at, length);
-   VALUE con_type = ENCODED_STR_NEW(type_at, type_length);
- 
-   unindent(con, start_col);
- 
-   re2 = rb_reg_regcomp(rb_str_new2("\r\\Z"));
-   unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\""));
-   rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2(""));
-   rb_funcall(con_type, rb_intern("strip!"), 0);
-   rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\""));
-   rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line));
- }
- static void 
- raise_lexer_error(const char * at, int line)
- { 
-   rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at);
- }
- 
- static void lexer_init(lexer_state *lexer) {
-   lexer->content_start = 0;
-   lexer->content_end = 0;
-   lexer->content_len = 0;
-   lexer->docstring_content_type_start = 0;
-   lexer->docstring_content_type_end = 0;
-   lexer->mark = 0;
-   lexer->keyword_start = 0;
-   lexer->keyword_end = 0;
-   lexer->next_keyword_start = 0;
-   lexer->line_number = 1;
-   lexer->last_newline = 0;
-   lexer->final_newline = 0;
-   lexer->start_col = 0;
- }
- 
- static VALUE CLexer_alloc(VALUE klass)
- {
-   VALUE obj;
-   lexer_state *lxr = ALLOC(lexer_state);
-   lexer_init(lxr);
- 
-   obj = Data_Wrap_Struct(klass, NULL, -1, lxr);
- 
-   return obj;
- }
- 
- static VALUE CLexer_init(VALUE self, VALUE listener)
- {
-   lexer_state *lxr; 
-   rb_iv_set(self, "@listener", listener);
-   
-   lxr = NULL;
-   DATA_GET(self, lexer_state, lxr);
-   lexer_init(lxr);
-   
-   return self;
- }
- 
- static VALUE CLexer_scan(VALUE self, VALUE input)
- {
-   VALUE input_copy;
-   char *data;
-   size_t len;
-   VALUE listener = rb_iv_get(self, "@listener");
- 
-   lexer_state *lexer;
-   lexer = NULL;
-   DATA_GET(self, lexer_state, lexer);
- 
-   input_copy = rb_str_dup(input);
- 
-   rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%"));
-   data = RSTRING_PTR(input_copy);
-   len = RSTRING_LEN(input_copy);
-   
-   if (len == 0) { 
-     rb_raise(rb_eGherkinLexingError, "No content to lex.");
-   } else {
- 
-     const char *p, *pe, *eof;
-     int cs = 0;
-     
-     VALUE current_row = Qnil;
- 
-     p = data;
-     pe = data + len;
-     eof = pe;
-     
-     assert(*pe == '\0' && "pointer does not end on NULL");
-     
-     
- #line 927 "ext/gherkin_lexer_hr/gherkin_lexer_hr.c"
- 	{
- 	cs = lexer_start;
- 	}
- 
- #line 425 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/hr.c.rl"
-     
- #line 934 "ext/gherkin_lexer_hr/gherkin_lexer_hr.c"
- 	{
- 	int _klen;
- 	unsigned int _trans;
- 	const char *_acts;
- 	unsigned int _nacts;
- 	const char *_keys;
- 
- 	if ( p == pe )
- 		goto _test_eof;
- 	if ( cs == 0 )
- 		goto _out;
- _resume:
- 	_keys = _lexer_trans_keys + _lexer_key_offsets[cs];
- 	_trans = _lexer_index_offsets[cs];
- 
- 	_klen = _lexer_single_lengths[cs];
- 	if ( _klen > 0 ) {
- 		const char *_lower = _keys;
- 		const char *_mid;
- 		const char *_upper = _keys + _klen - 1;
- 		while (1) {
- 			if ( _upper < _lower )
- 				break;
- 
- 			_mid = _lower + ((_upper-_lower) >> 1);
- 			if ( (*p) < *_mid )
- 				_upper = _mid - 1;
- 			else if ( (*p) > *_mid )
- 				_lower = _mid + 1;
- 			else {
- 				_trans += (_mid - _keys);
- 				goto _match;
- 			}
- 		}
- 		_keys += _klen;
- 		_trans += _klen;
- 	}
- 
- 	_klen = _lexer_range_lengths[cs];
- 	if ( _klen > 0 ) {
- 		const char *_lower = _keys;
- 		const char *_mid;
- 		const char *_upper = _keys + (_klen<<1) - 2;
- 		while (1) {
- 			if ( _upper < _lower )
- 				break;
- 
- 			_mid = _lower + (((_upper-_lower) >> 1) & ~1);
- 			if ( (*p) < _mid[0] )
- 				_upper = _mid - 2;
- 			else if ( (*p) > _mid[1] )
- 				_lower = _mid + 2;
- 			else {
- 				_trans += ((_mid - _keys)>>1);
- 				goto _match;
- 			}
- 		}
- 		_trans += _klen;
- 	}
- 
- _match:
- 	cs = _lexer_trans_targs[_trans];
- 
- 	if ( _lexer_trans_actions[_trans] == 0 )
- 		goto _again;
- 
- 	_acts = _lexer_actions + _lexer_trans_actions[_trans];
- 	_nacts = (unsigned int) *_acts++;
- 	while ( _nacts-- > 0 )
- 	{
- 		switch ( *_acts++ )
- 		{
- 	case 0:
- #line 83 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/hr.c.rl"
- 	{
- 		MARK(content_start, p);
-     lexer->current_line = lexer->line_number;
-     lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2;
-   }
- 	break;
- 	case 1:
- #line 89 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/hr.c.rl"
- 	{
-     MARK(content_start, p);
-   }
- 	break;
- 	case 2:
- #line 93 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/hr.c.rl"
- 	{
-     lexer->current_line = lexer->line_number;
-     lexer->start_col = p - data - lexer->last_newline;
-   }
- 	break;
- 	case 3:
- #line 98 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/hr.c.rl"
- 	{
-     int len = LEN(content_start, PTR_TO(final_newline));
-     int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end));
- 
-     if (len < 0) len = 0;
-     if (type_len < 0) len = 0;
- 
-     store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line);
-   }
- 	break;
- 	case 4:
- #line 108 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/hr.c.rl"
- 	{ 
-     MARK(docstring_content_type_start, p);
-   }
- 	break;
- 	case 5:
- #line 112 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/hr.c.rl"
- 	{ 
-     MARK(docstring_content_type_end, p);
-   }
- 	break;
- 	case 6:
- #line 116 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/hr.c.rl"
- 	{
-     STORE_KW_END_CON(feature);
-   }
- 	break;
- 	case 7:
- #line 120 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/hr.c.rl"
- 	{
-     STORE_KW_END_CON(background);
-   }
- 	break;
- 	case 8:
- #line 124 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/hr.c.rl"
- 	{
-     STORE_KW_END_CON(scenario);
-   }
- 	break;
- 	case 9:
- #line 128 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/hr.c.rl"
- 	{
-     STORE_KW_END_CON(scenario_outline);
-   }
- 	break;
- 	case 10:
- #line 132 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/hr.c.rl"
- 	{
-     STORE_KW_END_CON(examples);
-   }
- 	break;
- 	case 11:
- #line 136 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/hr.c.rl"
- 	{
-     store_kw_con(listener, "step",
-       PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-       PTR_TO(content_start), LEN(content_start, p), 
-       lexer->current_line);
-   }
- 	break;
- 	case 12:
- #line 143 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/hr.c.rl"
- 	{
-     STORE_ATTR(comment);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 13:
- #line 148 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/hr.c.rl"
- 	{
-     STORE_ATTR(tag);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 14:
- #line 153 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/hr.c.rl"
- 	{
-     lexer->line_number += 1;
-     MARK(final_newline, p);
-   }
- 	break;
- 	case 15:
- #line 158 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/hr.c.rl"
- 	{
-     MARK(last_newline, p + 1);
-   }
- 	break;
- 	case 16:
- #line 162 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/hr.c.rl"
- 	{
-     if (lexer->mark == 0) {
-       MARK(mark, p);
-     }
-   }
- 	break;
- 	case 17:
- #line 168 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/hr.c.rl"
- 	{
-     MARK(keyword_end, p);
-     MARK(keyword_start, PTR_TO(mark));
-     MARK(content_start, p + 1);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 18:
- #line 175 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/hr.c.rl"
- 	{
-     MARK(content_end, p);
-   }
- 	break;
- 	case 19:
- #line 179 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/hr.c.rl"
- 	{
-     p = p - 1;
-     lexer->current_line = lexer->line_number;
-     current_row = rb_ary_new();
-   }
- 	break;
- 	case 20:
- #line 185 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/hr.c.rl"
- 	{
- 		MARK(content_start, p);
-   }
- 	break;
- 	case 21:
- #line 189 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/hr.c.rl"
- 	{
-     VALUE re_pipe, re_newline, re_backslash;
-     VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
-     rb_funcall(con, rb_intern("strip!"), 0);
-     re_pipe      = rb_reg_regcomp(rb_str_new2("\\\\\\|"));
-     re_newline   = rb_reg_regcomp(rb_str_new2("\\\\n"));
-     re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_pipe,      rb_str_new2("|"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_newline,   rb_str_new2("\n"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\"));
- 
-     rb_ary_push(current_row, con);
-   }
- 	break;
- 	case 22:
- #line 203 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/hr.c.rl"
- 	{
-     rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
-   }
- 	break;
- 	case 23:
- #line 207 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/hr.c.rl"
- 	{
-     int line;
-     if (cs < lexer_first_final) {
-       size_t count = 0;
-       VALUE newstr_val;
-       char *newstr;
-       int newstr_count = 0;        
-       size_t len;
-       const char *buff;
-       if (lexer->last_newline != 0) {
-         len = LEN(last_newline, eof);
-         buff = PTR_TO(last_newline);
-       } else {
-         len = strlen(data);
-         buff = data;
-       }
- 
-       // Allocate as a ruby string so that it gets cleaned up by GC
-       newstr_val = rb_str_new(buff, len);
-       newstr = RSTRING_PTR(newstr_val);
- 
- 
-       for (count = 0; count < len; count++) {
-         if(buff[count] == 10) {
-           newstr[newstr_count] = '\0'; // terminate new string at first newline found
-           break;
-         } else {
-           if (buff[count] == '%') {
-             newstr[newstr_count++] = buff[count];
-             newstr[newstr_count] = buff[count];
-           } else {
-             newstr[newstr_count] = buff[count];
-           }
-         }
-         newstr_count++;
-       }
- 
-       line = lexer->line_number;
-       lexer_init(lexer); // Re-initialize so we can scan again with the same lexer
-       raise_lexer_error(newstr, line);
-     } else {
-       rb_funcall(listener, rb_intern("eof"), 0);
-     }
-   }
- 	break;
- #line 1224 "ext/gherkin_lexer_hr/gherkin_lexer_hr.c"
- 		}
- 	}
- 
- _again:
- 	if ( cs == 0 )
- 		goto _out;
- 	if ( ++p != pe )
- 		goto _resume;
- 	_test_eof: {}
- 	if ( p == eof )
- 	{
- 	const char *__acts = _lexer_actions + _lexer_eof_actions[cs];
- 	unsigned int __nacts = (unsigned int) *__acts++;
- 	while ( __nacts-- > 0 ) {
- 		switch ( *__acts++ ) {
- 	case 23:
- #line 207 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/hr.c.rl"
- 	{
-     int line;
-     if (cs < lexer_first_final) {
-       size_t count = 0;
-       VALUE newstr_val;
-       char *newstr;
-       int newstr_count = 0;        
-       size_t len;
-       const char *buff;
-       if (lexer->last_newline != 0) {
-         len = LEN(last_newline, eof);
-         buff = PTR_TO(last_newline);
-       } else {
-         len = strlen(data);
-         buff = data;
-       }
- 
-       // Allocate as a ruby string so that it gets cleaned up by GC
-       newstr_val = rb_str_new(buff, len);
-       newstr = RSTRING_PTR(newstr_val);
- 
- 
-       for (count = 0; count < len; count++) {
-         if(buff[count] == 10) {
-           newstr[newstr_count] = '\0'; // terminate new string at first newline found
-           break;
-         } else {
-           if (buff[count] == '%') {
-             newstr[newstr_count++] = buff[count];
-             newstr[newstr_count] = buff[count];
-           } else {
-             newstr[newstr_count] = buff[count];
-           }
-         }
-         newstr_count++;
-       }
- 
-       line = lexer->line_number;
-       lexer_init(lexer); // Re-initialize so we can scan again with the same lexer
-       raise_lexer_error(newstr, line);
-     } else {
-       rb_funcall(listener, rb_intern("eof"), 0);
-     }
-   }
- 	break;
- #line 1287 "ext/gherkin_lexer_hr/gherkin_lexer_hr.c"
- 		}
- 	}
- 	}
- 
- 	_out: {}
- 	}
- 
- #line 426 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/hr.c.rl"
- 
-     assert(p <= pe && "data overflow after parsing execute");
-     assert(lexer->content_start <= len && "content starts after data end");
-     assert(lexer->mark < len && "mark is after data end");
-     
-     // Reset lexer by re-initializing the whole thing
-     lexer_init(lexer);
- 
-     if (cs == lexer_error) {
-       rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails.");
-     } else {
-       return Qtrue;
-     }
-   }
- }
- 
- void Init_gherkin_lexer_hr()
- {
-   mGherkin = rb_define_module("Gherkin");
-   mGherkinLexer = rb_define_module_under(mGherkin, "Lexer");
-   rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError"));
- 
-   mCLexer = rb_define_module_under(mGherkin, "CLexer");
-   cI18nLexer = rb_define_class_under(mCLexer, "Hr", rb_cObject);
-   rb_define_alloc_func(cI18nLexer, CLexer_alloc);
-   rb_define_method(cI18nLexer, "initialize", CLexer_init, 1);
-   rb_define_method(cI18nLexer, "scan", CLexer_scan, 1);
- }
- 
 -#line 1 "ragel/i18n/hr.c.rl"
 -#include <assert.h>
 -#include <ruby.h>
 -
 -#if defined(_WIN32)
 -#include <stddef.h>
 -#endif
 -
 -#ifdef HAVE_RUBY_RE_H
 -#include <ruby/re.h>
 -#else
 -#include <re.h>
 -#endif
 -
 -#ifdef HAVE_RUBY_ENCODING_H
 -#include <ruby/encoding.h>
 -#define ENCODED_STR_NEW(ptr, len) \
 -    rb_enc_str_new(ptr, len, rb_utf8_encoding())
 -#else
 -#define ENCODED_STR_NEW(ptr, len) \
 -    rb_str_new(ptr, len)
 -#endif
 -
 -#ifndef RSTRING_PTR
 -#define RSTRING_PTR(s) (RSTRING(s)->ptr)
 -#endif
 -
 -#ifndef RSTRING_LEN
 -#define RSTRING_LEN(s) (RSTRING(s)->len)
 -#endif
 -
 -#define DATA_GET(FROM, TYPE, NAME) \
 -  Data_Get_Struct(FROM, TYPE, NAME); \
 -  if (NAME == NULL) { \
 -    rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \
 -  }
 - 
 -typedef struct lexer_state {
 -  int content_len;
 -  int line_number;
 -  int current_line;
 -  int start_col;
 -  size_t mark;
 -  size_t keyword_start;
 -  size_t keyword_end;
 -  size_t next_keyword_start;
 -  size_t content_start;
 -  size_t content_end;
 -  size_t docstring_content_type_start;
 -  size_t docstring_content_type_end;
 -  size_t query_start;
 -  size_t last_newline;
 -  size_t final_newline;
 -} lexer_state;
 -
 -static VALUE mGherkin;
 -static VALUE mGherkinLexer;
 -static VALUE mCLexer;
 -static VALUE cI18nLexer;
 -static VALUE rb_eGherkinLexingError;
 -
 -#define LEN(AT, P) (P - data - lexer->AT)
 -#define MARK(M, P) (lexer->M = (P) - data)
 -#define PTR_TO(P) (data + lexer->P)
 -
 -#define STORE_KW_END_CON(EVENT) \
 -  store_multiline_kw_con(listener, # EVENT, \
 -    PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \
 -    PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \
 -    lexer->current_line, lexer->start_col); \
 -    if (lexer->content_end != 0) { \
 -      p = PTR_TO(content_end - 1); \
 -    } \
 -    lexer->content_end = 0
 -
 -#define STORE_ATTR(ATTR) \
 -    store_attr(listener, # ATTR, \
 -      PTR_TO(content_start), LEN(content_start, p), \
 -      lexer->line_number)
 -
 -
 -#line 254 "ragel/i18n/hr.c.rl"
 -
 -
 -/** Data **/
 -
 -#line 89 "ext/gherkin_lexer_hr/gherkin_lexer_hr.c"
 -static const char _lexer_actions[] = {
 -	0, 1, 0, 1, 1, 1, 2, 1, 
 -	3, 1, 4, 1, 5, 1, 6, 1, 
 -	7, 1, 8, 1, 9, 1, 10, 1, 
 -	11, 1, 12, 1, 13, 1, 16, 1, 
 -	17, 1, 18, 1, 19, 1, 20, 1, 
 -	21, 1, 22, 1, 23, 2, 1, 18, 
 -	2, 4, 5, 2, 13, 0, 2, 14, 
 -	15, 2, 17, 0, 2, 17, 2, 2, 
 -	17, 16, 2, 17, 19, 2, 18, 6, 
 -	2, 18, 7, 2, 18, 8, 2, 18, 
 -	9, 2, 18, 10, 2, 18, 16, 2, 
 -	20, 21, 2, 22, 0, 2, 22, 2, 
 -	2, 22, 16, 2, 22, 19, 3, 3, 
 -	14, 15, 3, 5, 14, 15, 3, 11, 
 -	14, 15, 3, 12, 14, 15, 3, 13, 
 -	14, 15, 3, 14, 15, 18, 3, 17, 
 -	0, 11, 3, 17, 14, 15, 4, 1, 
 -	14, 15, 18, 4, 4, 5, 14, 15, 
 -	4, 17, 0, 14, 15, 5, 17, 0, 
 -	11, 14, 15
 -};
 -
 -static const short _lexer_key_offsets[] = {
 -	0, 0, 19, 20, 21, 39, 40, 41, 
 -	43, 45, 50, 55, 60, 65, 69, 73, 
 -	75, 76, 77, 78, 79, 80, 81, 82, 
 -	83, 84, 85, 86, 87, 88, 89, 90, 
 -	91, 93, 95, 100, 107, 112, 113, 114, 
 -	116, 117, 119, 120, 121, 122, 123, 124, 
 -	125, 126, 127, 142, 144, 146, 148, 150, 
 -	152, 154, 156, 158, 160, 162, 164, 166, 
 -	168, 170, 172, 190, 191, 192, 193, 195, 
 -	196, 197, 198, 199, 200, 201, 202, 203, 
 -	215, 217, 219, 221, 223, 225, 227, 229, 
 -	231, 233, 235, 237, 239, 241, 243, 245, 
 -	247, 249, 251, 253, 255, 257, 259, 261, 
 -	263, 266, 268, 270, 272, 274, 276, 278, 
 -	280, 282, 284, 286, 289, 291, 293, 295, 
 -	297, 299, 301, 303, 305, 307, 310, 312, 
 -	314, 316, 318, 320, 322, 325, 327, 329, 
 -	331, 332, 333, 334, 335, 336, 337, 338, 
 -	340, 341, 342, 343, 344, 345, 346, 347, 
 -	348, 349, 364, 366, 368, 370, 372, 374, 
 -	376, 378, 380, 382, 384, 386, 388, 390, 
 -	392, 394, 396, 398, 401, 403, 406, 408, 
 -	410, 412, 414, 416, 418, 420, 422, 424, 
 -	427, 429, 431, 433, 435, 438, 440, 442, 
 -	444, 446, 448, 450, 452, 455, 457, 459, 
 -	461, 463, 465, 467, 469, 471, 473, 475, 
 -	477, 479, 483, 484, 485, 486, 487, 488, 
 -	489, 490, 491, 492, 500, 502, 504, 506, 
 -	509, 511, 513, 515, 517, 519, 521, 523, 
 -	525, 527, 529, 531, 533, 535, 536, 537, 
 -	538, 539, 540, 541, 543, 544, 545, 561, 
 -	563, 565, 567, 569, 571, 573, 575, 577, 
 -	579, 581, 583, 585, 587, 589, 591, 593, 
 -	595, 598, 600, 603, 605, 607, 609, 611, 
 -	613, 615, 617, 619, 621, 624, 626, 628, 
 -	630, 632, 635, 637, 639, 641, 643, 645, 
 -	647, 649, 651, 653, 655, 657, 660, 662, 
 -	664, 666, 668, 670, 672, 674, 676, 678, 
 -	680, 682, 684, 688, 689, 690, 691, 692, 
 -	693, 694, 695, 698, 702, 708, 711, 713, 
 -	719, 737, 739, 741, 743, 745, 748, 750, 
 -	752, 754, 757, 759, 761, 763, 765, 767, 
 -	769, 772, 774, 776, 778, 780, 782, 784, 
 -	786, 788, 790, 792, 794, 796, 798, 800, 
 -	802, 804, 806, 808, 812
 -};
 -
 -static const char _lexer_trans_keys[] = {
 -	-17, 10, 32, 34, 35, 37, 42, 64, 
 -	65, 73, 75, 77, 79, 80, 83, 90, 
 -	124, 9, 13, -69, -65, 10, 32, 34, 
 -	35, 37, 42, 64, 65, 73, 75, 77, 
 -	79, 80, 83, 90, 124, 9, 13, 34, 
 -	34, 10, 13, 10, 13, 10, 32, 34, 
 -	9, 13, 10, 32, 34, 9, 13, 10, 
 -	32, 34, 9, 13, 10, 32, 34, 9, 
 -	13, 10, 32, 9, 13, 10, 32, 9, 
 -	13, 10, 13, 10, 95, 70, 69, 65, 
 -	84, 85, 82, 69, 95, 69, 78, 68, 
 -	95, 37, 32, 10, 13, 10, 13, 13, 
 -	32, 64, 9, 10, 9, 10, 13, 32, 
 -	64, 11, 12, 10, 32, 64, 9, 13, 
 -	108, 105, 97, 111, 100, 32, 97, 110, 
 -	99, 101, 112, 116, 58, 10, 10, 10, 
 -	32, 35, 37, 42, 64, 65, 73, 75, 
 -	77, 79, 83, 90, 9, 13, 10, 95, 
 -	10, 70, 10, 69, 10, 65, 10, 84, 
 -	10, 85, 10, 82, 10, 69, 10, 95, 
 -	10, 69, 10, 78, 10, 68, 10, 95, 
 -	10, 37, 10, 32, 10, 32, 34, 35, 
 -	37, 42, 64, 65, 73, 75, 77, 79, 
 -	80, 83, 90, 124, 9, 13, 111, 103, 
 -	117, -60, 99, -121, 110, 111, 115, 116, 
 -	58, 10, 10, 10, 32, 35, 37, 64, 
 -	75, 77, 79, 80, 83, 9, 13, 10, 
 -	95, 10, 70, 10, 69, 10, 65, 10, 
 -	84, 10, 85, 10, 82, 10, 69, 10, 
 -	95, 10, 69, 10, 78, 10, 68, 10, 
 -	95, 10, 37, 10, 111, 10, 110, 10, 
 -	99, 10, 101, 10, 112, 10, 116, 10, 
 -	58, 10, 111, 10, 103, 10, 117, -60, 
 -	10, 99, -121, 10, 10, 110, 10, 111, 
 -	10, 115, 10, 115, 10, 111, 10, 98, 
 -	10, 105, 10, 110, 10, 97, 10, 111, 
 -	114, 10, 122, 10, 97, 10, 100, 10, 
 -	105, 10, 109, 10, 106, 10, 101, 10, 
 -	114, 10, 105, 10, 99, 107, 10, 101, 
 -	10, 110, 10, 97, 10, 114, 10, 105, 
 -	10, 106, 10, 58, 105, 10, 105, 10, 
 -	99, 110, 115, 100, 97, 111, 98, 105, 
 -	110, 97, 111, 114, 122, 97, 100, 105, 
 -	110, 97, 58, 10, 10, 10, 32, 35, 
 -	37, 42, 64, 65, 73, 75, 77, 79, 
 -	83, 90, 9, 13, 10, 95, 10, 70, 
 -	10, 69, 10, 65, 10, 84, 10, 85, 
 -	10, 82, 10, 69, 10, 95, 10, 69, 
 -	10, 78, 10, 68, 10, 95, 10, 37, 
 -	10, 32, 10, 108, 10, 105, 10, 97, 
 -	111, 10, 100, 10, 32, 97, 10, 110, 
 -	10, 99, 10, 101, 10, 112, 10, 116, 
 -	10, 58, 10, 111, 10, 103, 10, 117, 
 -	-60, 10, 99, -121, 10, 10, 110, 10, 
 -	111, 10, 115, 10, 110, 115, 10, 100, 
 -	10, 97, 10, 111, 10, 98, 10, 105, 
 -	10, 110, 10, 97, 10, 99, 107, 10, 
 -	101, 10, 110, 10, 97, 10, 114, 10, 
 -	105, 10, 106, 10, 105, 10, 99, 10, 
 -	97, 10, 100, 10, 97, 10, 110, 10, 
 -	32, 105, 111, 105, 109, 106, 101, 114, 
 -	105, 58, 10, 10, 10, 32, 35, 77, 
 -	79, 124, 9, 13, 10, 111, 10, 103, 
 -	10, 117, -60, 10, 99, -121, 10, 10, 
 -	110, 10, 111, 10, 115, 10, 116, 10, 
 -	58, 10, 115, 10, 111, 10, 98, 10, 
 -	105, 10, 110, 10, 97, 99, 107, 101, 
 -	110, 97, 114, 105, 106, 58, 105, 10, 
 -	10, 10, 32, 35, 37, 42, 64, 65, 
 -	73, 75, 77, 79, 80, 83, 90, 9, 
 -	13, 10, 95, 10, 70, 10, 69, 10, 
 -	65, 10, 84, 10, 85, 10, 82, 10, 
 -	69, 10, 95, 10, 69, 10, 78, 10, 
 -	68, 10, 95, 10, 37, 10, 32, 10, 
 -	108, 10, 105, 10, 97, 111, 10, 100, 
 -	10, 32, 97, 10, 110, 10, 99, 10, 
 -	101, 10, 112, 10, 116, 10, 58, 10, 
 -	111, 10, 103, 10, 117, -60, 10, 99, 
 -	-121, 10, 10, 110, 10, 111, 10, 115, 
 -	10, 110, 115, 10, 100, 10, 97, 10, 
 -	111, 10, 98, 10, 105, 10, 110, 10, 
 -	97, 10, 111, 10, 122, 10, 97, 10, 
 -	100, 10, 99, 107, 10, 101, 10, 110, 
 -	10, 97, 10, 114, 10, 105, 10, 106, 
 -	10, 105, 10, 99, 10, 97, 10, 100, 
 -	10, 97, 10, 110, 10, 32, 105, 111, 
 -	105, 99, 97, 97, 100, 97, 110, 32, 
 -	105, 111, 32, 124, 9, 13, 10, 32, 
 -	92, 124, 9, 13, 10, 92, 124, 10, 
 -	92, 10, 32, 92, 124, 9, 13, 10, 
 -	32, 34, 35, 37, 42, 64, 65, 73, 
 -	75, 77, 79, 80, 83, 90, 124, 9, 
 -	13, 10, 108, 10, 105, 10, 97, 10, 
 -	100, 10, 32, 97, 10, 111, 10, 103, 
 -	10, 117, -60, 10, 99, -121, 10, 10, 
 -	110, 10, 111, 10, 115, 10, 116, 10, 
 -	58, 10, 110, 115, 10, 100, 10, 97, 
 -	10, 111, 10, 98, 10, 105, 10, 110, 
 -	10, 97, 10, 99, 10, 101, 10, 110, 
 -	10, 97, 10, 114, 10, 105, 10, 106, 
 -	10, 97, 10, 100, 10, 97, 10, 110, 
 -	10, 32, 105, 111, 0
 -};
 -
 -static const char _lexer_single_lengths[] = {
 -	0, 17, 1, 1, 16, 1, 1, 2, 
 -	2, 3, 3, 3, 3, 2, 2, 2, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	2, 2, 3, 5, 3, 1, 1, 2, 
 -	1, 2, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 13, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 16, 1, 1, 1, 2, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 10, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	3, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 3, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 3, 2, 2, 
 -	2, 2, 2, 2, 3, 2, 2, 2, 
 -	1, 1, 1, 1, 1, 1, 1, 2, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 13, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 3, 2, 3, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 3, 
 -	2, 2, 2, 2, 3, 2, 2, 2, 
 -	2, 2, 2, 2, 3, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 4, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 6, 2, 2, 2, 3, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 1, 1, 1, 
 -	1, 1, 1, 2, 1, 1, 14, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	3, 2, 3, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 3, 2, 2, 2, 
 -	2, 3, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 3, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 4, 1, 1, 1, 1, 1, 
 -	1, 1, 3, 2, 4, 3, 2, 4, 
 -	16, 2, 2, 2, 2, 3, 2, 2, 
 -	2, 3, 2, 2, 2, 2, 2, 2, 
 -	3, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 4, 0
 -};
 -
 -static const char _lexer_range_lengths[] = {
 -	0, 1, 0, 0, 1, 0, 0, 0, 
 -	0, 1, 1, 1, 1, 1, 1, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 1, 1, 1, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 1, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 1, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 1, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 1, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 1, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 1, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 1, 1, 0, 0, 1, 
 -	1, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0
 -};
 -
 -static const short _lexer_index_offsets[] = {
 -	0, 0, 19, 21, 23, 41, 43, 45, 
 -	48, 51, 56, 61, 66, 71, 75, 79, 
 -	82, 84, 86, 88, 90, 92, 94, 96, 
 -	98, 100, 102, 104, 106, 108, 110, 112, 
 -	114, 117, 120, 125, 132, 137, 139, 141, 
 -	144, 146, 149, 151, 153, 155, 157, 159, 
 -	161, 163, 165, 180, 183, 186, 189, 192, 
 -	195, 198, 201, 204, 207, 210, 213, 216, 
 -	219, 222, 225, 243, 245, 247, 249, 252, 
 -	254, 256, 258, 260, 262, 264, 266, 268, 
 -	280, 283, 286, 289, 292, 295, 298, 301, 
 -	304, 307, 310, 313, 316, 319, 322, 325, 
 -	328, 331, 334, 337, 340, 343, 346, 349, 
 -	352, 356, 359, 362, 365, 368, 371, 374, 
 -	377, 380, 383, 386, 390, 393, 396, 399, 
 -	402, 405, 408, 411, 414, 417, 421, 424, 
 -	427, 430, 433, 436, 439, 443, 446, 449, 
 -	452, 454, 456, 458, 460, 462, 464, 466, 
 -	469, 471, 473, 475, 477, 479, 481, 483, 
 -	485, 487, 502, 505, 508, 511, 514, 517, 
 -	520, 523, 526, 529, 532, 535, 538, 541, 
 -	544, 547, 550, 553, 557, 560, 564, 567, 
 -	570, 573, 576, 579, 582, 585, 588, 591, 
 -	595, 598, 601, 604, 607, 611, 614, 617, 
 -	620, 623, 626, 629, 632, 636, 639, 642, 
 -	645, 648, 651, 654, 657, 660, 663, 666, 
 -	669, 672, 677, 679, 681, 683, 685, 687, 
 -	689, 691, 693, 695, 703, 706, 709, 712, 
 -	716, 719, 722, 725, 728, 731, 734, 737, 
 -	740, 743, 746, 749, 752, 755, 757, 759, 
 -	761, 763, 765, 767, 770, 772, 774, 790, 
 -	793, 796, 799, 802, 805, 808, 811, 814, 
 -	817, 820, 823, 826, 829, 832, 835, 838, 
 -	841, 845, 848, 852, 855, 858, 861, 864, 
 -	867, 870, 873, 876, 879, 883, 886, 889, 
 -	892, 895, 899, 902, 905, 908, 911, 914, 
 -	917, 920, 923, 926, 929, 932, 936, 939, 
 -	942, 945, 948, 951, 954, 957, 960, 963, 
 -	966, 969, 972, 977, 979, 981, 983, 985, 
 -	987, 989, 991, 995, 999, 1005, 1009, 1012, 
 -	1018, 1036, 1039, 1042, 1045, 1048, 1052, 1055, 
 -	1058, 1061, 1065, 1068, 1071, 1074, 1077, 1080, 
 -	1083, 1087, 1090, 1093, 1096, 1099, 1102, 1105, 
 -	1108, 1111, 1114, 1117, 1120, 1123, 1126, 1129, 
 -	1132, 1135, 1138, 1141, 1146
 -};
 -
 -static const short _lexer_trans_targs[] = {
 -	2, 4, 4, 5, 15, 17, 31, 34, 
 -	37, 31, 39, 67, 135, 143, 236, 310, 
 -	315, 4, 0, 3, 0, 4, 0, 4, 
 -	4, 5, 15, 17, 31, 34, 37, 31, 
 -	39, 67, 135, 143, 236, 310, 315, 4, 
 -	0, 6, 0, 7, 0, 9, 8, 8, 
 -	9, 8, 8, 10, 10, 11, 10, 10, 
 -	10, 10, 11, 10, 10, 10, 10, 12, 
 -	10, 10, 10, 10, 13, 10, 10, 4, 
 -	14, 14, 0, 4, 14, 14, 0, 4, 
 -	16, 15, 4, 0, 18, 0, 19, 0, 
 -	20, 0, 21, 0, 22, 0, 23, 0, 
 -	24, 0, 25, 0, 26, 0, 27, 0, 
 -	28, 0, 29, 0, 30, 0, 356, 0, 
 -	32, 0, 4, 16, 33, 4, 16, 33, 
 -	0, 0, 0, 0, 35, 36, 4, 36, 
 -	36, 34, 35, 35, 4, 36, 34, 36, 
 -	0, 38, 0, 31, 0, 40, 42, 0, 
 -	41, 0, 32, 31, 0, 43, 0, 44, 
 -	0, 45, 0, 46, 0, 47, 0, 48, 
 -	0, 50, 49, 50, 49, 50, 50, 4, 
 -	51, 65, 4, 321, 65, 323, 326, 336, 
 -	344, 351, 50, 49, 50, 52, 49, 50, 
 -	53, 49, 50, 54, 49, 50, 55, 49, 
 -	50, 56, 49, 50, 57, 49, 50, 58, 
 -	49, 50, 59, 49, 50, 60, 49, 50, 
 -	61, 49, 50, 62, 49, 50, 63, 49, 
 -	50, 64, 49, 50, 4, 49, 50, 66, 
 -	49, 4, 4, 5, 15, 17, 31, 34, 
 -	37, 31, 39, 67, 135, 143, 236, 310, 
 -	315, 4, 0, 68, 0, 69, 0, 70, 
 -	0, 71, 72, 0, 72, 0, 73, 0, 
 -	74, 0, 75, 0, 76, 0, 77, 0, 
 -	79, 78, 79, 78, 79, 79, 4, 80, 
 -	4, 94, 101, 109, 115, 125, 79, 78, 
 -	79, 81, 78, 79, 82, 78, 79, 83, 
 -	78, 79, 84, 78, 79, 85, 78, 79, 
 -	86, 78, 79, 87, 78, 79, 88, 78, 
 -	79, 89, 78, 79, 90, 78, 79, 91, 
 -	78, 79, 92, 78, 79, 93, 78, 79, 
 -	4, 78, 79, 95, 78, 79, 96, 78, 
 -	79, 97, 78, 79, 98, 78, 79, 99, 
 -	78, 79, 100, 78, 79, 66, 78, 79, 
 -	102, 78, 79, 103, 78, 79, 104, 78, 
 -	105, 79, 106, 78, 106, 79, 78, 79, 
 -	107, 78, 79, 108, 78, 79, 99, 78, 
 -	79, 110, 78, 79, 111, 78, 79, 112, 
 -	78, 79, 113, 78, 79, 114, 78, 79, 
 -	100, 78, 79, 116, 119, 78, 79, 117, 
 -	78, 79, 118, 78, 79, 112, 78, 79, 
 -	120, 78, 79, 121, 78, 79, 122, 78, 
 -	79, 123, 78, 79, 124, 78, 79, 100, 
 -	78, 79, 126, 133, 78, 79, 127, 78, 
 -	79, 128, 78, 79, 129, 78, 79, 130, 
 -	78, 79, 131, 78, 79, 132, 78, 79, 
 -	66, 100, 78, 79, 134, 78, 79, 114, 
 -	78, 136, 138, 0, 137, 0, 31, 0, 
 -	139, 0, 140, 0, 141, 0, 142, 0, 
 -	76, 0, 144, 210, 0, 145, 0, 146, 
 -	0, 147, 0, 148, 0, 149, 0, 150, 
 -	0, 151, 0, 153, 152, 153, 152, 153, 
 -	153, 4, 154, 168, 4, 169, 168, 171, 
 -	180, 188, 196, 205, 153, 152, 153, 155, 
 -	152, 153, 156, 152, 153, 157, 152, 153, 
 -	158, 152, 153, 159, 152, 153, 160, 152, 
 -	153, 161, 152, 153, 162, 152, 153, 163, 
 -	152, 153, 164, 152, 153, 165, 152, 153, 
 -	166, 152, 153, 167, 152, 153, 4, 152, 
 -	153, 66, 152, 153, 170, 152, 153, 168, 
 -	152, 153, 172, 174, 152, 153, 173, 152, 
 -	153, 66, 168, 152, 153, 175, 152, 153, 
 -	176, 152, 153, 177, 152, 153, 178, 152, 
 -	153, 179, 152, 153, 66, 152, 153, 181, 
 -	152, 153, 182, 152, 153, 183, 152, 184, 
 -	153, 185, 152, 185, 153, 152, 153, 186, 
 -	152, 153, 187, 152, 153, 178, 152, 153, 
 -	189, 191, 152, 153, 190, 152, 153, 168, 
 -	152, 153, 192, 152, 153, 193, 152, 153, 
 -	194, 152, 153, 195, 152, 153, 179, 152, 
 -	153, 197, 203, 152, 153, 198, 152, 153, 
 -	199, 152, 153, 200, 152, 153, 201, 152, 
 -	153, 202, 152, 153, 179, 152, 153, 204, 
 -	152, 153, 195, 152, 153, 206, 152, 153, 
 -	207, 152, 153, 208, 152, 153, 209, 152, 
 -	153, 66, 168, 168, 152, 211, 0, 212, 
 -	0, 213, 0, 214, 0, 215, 0, 216, 
 -	0, 217, 0, 219, 218, 219, 218, 219, 
 -	219, 4, 220, 230, 4, 219, 218, 219, 
 -	221, 218, 219, 222, 218, 219, 223, 218, 
 -	224, 219, 225, 218, 225, 219, 218, 219, 
 -	226, 218, 219, 227, 218, 219, 228, 218, 
 -	219, 229, 218, 219, 66, 218, 219, 231, 
 -	218, 219, 232, 218, 219, 233, 218, 219, 
 -	234, 218, 219, 235, 218, 219, 229, 218, 
 -	237, 307, 0, 238, 0, 239, 0, 240, 
 -	0, 241, 0, 242, 0, 243, 0, 244, 
 -	216, 0, 246, 245, 246, 245, 246, 246, 
 -	4, 247, 261, 4, 262, 261, 264, 273, 
 -	281, 289, 293, 302, 246, 245, 246, 248, 
 -	245, 246, 249, 245, 246, 250, 245, 246, 
 -	251, 245, 246, 252, 245, 246, 253, 245, 
 -	246, 254, 245, 246, 255, 245, 246, 256, 
 -	245, 246, 257, 245, 246, 258, 245, 246, 
 -	259, 245, 246, 260, 245, 246, 4, 245, 
 -	246, 66, 245, 246, 263, 245, 246, 261, 
 -	245, 246, 265, 267, 245, 246, 266, 245, 
 -	246, 66, 261, 245, 246, 268, 245, 246, 
 -	269, 245, 246, 270, 245, 246, 271, 245, 
 -	246, 272, 245, 246, 66, 245, 246, 274, 
 -	245, 246, 275, 245, 246, 276, 245, 277, 
 -	246, 278, 245, 278, 246, 245, 246, 279, 
 -	245, 246, 280, 245, 246, 271, 245, 246, 
 -	282, 284, 245, 246, 283, 245, 246, 261, 
 -	245, 246, 285, 245, 246, 286, 245, 246, 
 -	287, 245, 246, 288, 245, 246, 272, 245, 
 -	246, 290, 245, 246, 291, 245, 246, 292, 
 -	245, 246, 286, 245, 246, 294, 300, 245, 
 -	246, 295, 245, 246, 296, 245, 246, 297, 
 -	245, 246, 298, 245, 246, 299, 245, 246, 
 -	272, 245, 246, 301, 245, 246, 288, 245, 
 -	246, 303, 245, 246, 304, 245, 246, 305, 
 -	245, 246, 306, 245, 246, 66, 261, 261, 
 -	245, 308, 0, 309, 0, 47, 0, 311, 
 -	0, 312, 0, 313, 0, 314, 0, 32, 
 -	31, 31, 0, 315, 316, 315, 0, 320, 
 -	319, 318, 316, 319, 317, 0, 318, 316, 
 -	317, 0, 318, 317, 320, 319, 318, 316, 
 -	319, 317, 320, 320, 5, 15, 17, 31, 
 -	34, 37, 31, 39, 67, 135, 143, 236, 
 -	310, 315, 320, 0, 50, 322, 49, 50, 
 -	65, 49, 50, 324, 49, 50, 325, 49, 
 -	50, 66, 65, 49, 50, 327, 49, 50, 
 -	328, 49, 50, 329, 49, 330, 50, 331, 
 -	49, 331, 50, 49, 50, 332, 49, 50, 
 -	333, 49, 50, 334, 49, 50, 335, 49, 
 -	50, 66, 49, 50, 337, 339, 49, 50, 
 -	338, 49, 50, 65, 49, 50, 340, 49, 
 -	50, 341, 49, 50, 342, 49, 50, 343, 
 -	49, 50, 335, 49, 50, 345, 49, 50, 
 -	346, 49, 50, 347, 49, 50, 348, 49, 
 -	50, 349, 49, 50, 350, 49, 50, 335, 
 -	49, 50, 352, 49, 50, 353, 49, 50, 
 -	354, 49, 50, 355, 49, 50, 66, 65, 
 -	65, 49, 0, 0
 -};
 -
 -static const unsigned char _lexer_trans_actions[] = {
 -	0, 54, 0, 5, 1, 0, 29, 1, 
 -	29, 29, 29, 29, 29, 29, 29, 29, 
 -	35, 0, 43, 0, 43, 0, 43, 54, 
 -	0, 5, 1, 0, 29, 1, 29, 29, 
 -	29, 29, 29, 29, 29, 29, 35, 0, 
 -	43, 0, 43, 0, 43, 139, 48, 9, 
 -	106, 11, 0, 134, 45, 45, 45, 3, 
 -	122, 33, 33, 33, 0, 122, 33, 33, 
 -	33, 0, 122, 33, 0, 33, 0, 102, 
 -	7, 7, 43, 54, 0, 0, 43, 114, 
 -	25, 0, 54, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 149, 126, 57, 110, 23, 0, 
 -	43, 43, 43, 43, 0, 27, 118, 27, 
 -	27, 51, 27, 0, 54, 0, 1, 0, 
 -	43, 0, 43, 0, 43, 0, 0, 43, 
 -	0, 43, 0, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 144, 57, 54, 0, 54, 0, 78, 
 -	33, 84, 78, 84, 84, 84, 84, 84, 
 -	84, 84, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 19, 0, 54, 19, 
 -	0, 130, 31, 60, 57, 31, 63, 57, 
 -	63, 63, 63, 63, 63, 63, 63, 63, 
 -	66, 31, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	144, 57, 54, 0, 54, 0, 69, 33, 
 -	69, 84, 84, 84, 84, 84, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	13, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 13, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	0, 54, 0, 0, 0, 54, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	13, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 0, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 144, 57, 54, 0, 54, 
 -	0, 72, 33, 84, 72, 84, 84, 84, 
 -	84, 84, 84, 84, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 15, 0, 
 -	54, 15, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 0, 54, 0, 0, 
 -	54, 15, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 15, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 0, 
 -	54, 0, 0, 0, 54, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 15, 0, 0, 0, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 144, 57, 54, 0, 54, 
 -	0, 81, 84, 84, 81, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	0, 54, 0, 0, 0, 54, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 21, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	0, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	0, 43, 144, 57, 54, 0, 54, 0, 
 -	75, 33, 84, 75, 84, 84, 84, 84, 
 -	84, 84, 84, 84, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 17, 0, 
 -	54, 17, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 0, 54, 0, 0, 
 -	54, 17, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 17, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 0, 
 -	54, 0, 0, 0, 54, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 17, 0, 0, 
 -	0, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	0, 0, 43, 0, 0, 0, 43, 54, 
 -	37, 37, 87, 37, 37, 43, 0, 39, 
 -	0, 43, 0, 0, 54, 0, 0, 39, 
 -	0, 0, 54, 0, 93, 90, 41, 96, 
 -	90, 96, 96, 96, 96, 96, 96, 96, 
 -	96, 99, 0, 43, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 19, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 0, 54, 0, 
 -	0, 0, 54, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 19, 0, 54, 0, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 19, 0, 
 -	0, 0, 0, 0
 -};
 -
 -static const unsigned char _lexer_eof_actions[] = {
 -	0, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43
 -};
 -
 -static const int lexer_start = 1;
 -static const int lexer_first_final = 356;
 -static const int lexer_error = 0;
 -
 -static const int lexer_en_main = 1;
 -
 -
 -#line 258 "ragel/i18n/hr.c.rl"
 -
 -static VALUE 
 -unindent(VALUE con, int start_col)
 -{
 -  VALUE re;
 -  /* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */
 -  char pat[32]; 
 -  snprintf(pat, 32, "^[\t ]{0,%d}", start_col); 
 -  re = rb_reg_regcomp(rb_str_new2(pat));
 -  rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2(""));
 -
 -  return Qnil;
 -
 -}
 -
 -static void 
 -store_kw_con(VALUE listener, const char * event_name, 
 -             const char * keyword_at, size_t keyword_length, 
 -             const char * at,         size_t length, 
 -             int current_line)
 -{
 -  VALUE con = Qnil, kw = Qnil;
 -  kw = ENCODED_STR_NEW(keyword_at, keyword_length);
 -  con = ENCODED_STR_NEW(at, length);
 -  rb_funcall(con, rb_intern("strip!"), 0);
 -  rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); 
 -}
 -
 -static void
 -store_multiline_kw_con(VALUE listener, const char * event_name,
 -                      const char * keyword_at, size_t keyword_length,
 -                      const char * at,         size_t length,
 -                      int current_line, int start_col)
 -{
 -  VALUE split;
 -  VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil;
 -
 -  kw = ENCODED_STR_NEW(keyword_at, keyword_length);
 -  con = ENCODED_STR_NEW(at, length);
 -
 -  unindent(con, start_col);
 -  
 -  split = rb_str_split(con, "\n");
 -
 -  name = rb_funcall(split, rb_intern("shift"), 0);
 -  desc = rb_ary_join(split, rb_str_new2( "\n" ));
 -
 -  if( name == Qnil ) 
 -  {
 -    name = rb_str_new2("");
 -  }
 -  if( rb_funcall(desc, rb_intern("size"), 0) == 0) 
 -  {
 -    desc = rb_str_new2("");
 -  }
 -  rb_funcall(name, rb_intern("strip!"), 0);
 -  rb_funcall(desc, rb_intern("rstrip!"), 0);
 -  rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); 
 -}
 -
 -static void 
 -store_attr(VALUE listener, const char * attr_type,
 -           const char * at, size_t length, 
 -           int line)
 -{
 -  VALUE val = ENCODED_STR_NEW(at, length);
 -  rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line));
 -}
 -static void 
 -store_docstring_content(VALUE listener, 
 -          int start_col, 
 -          const char *type_at, size_t type_length,
 -          const char *at, size_t length, 
 -          int current_line)
 -{
 -  VALUE re2;
 -  VALUE unescape_escaped_quotes;
 -  VALUE con = ENCODED_STR_NEW(at, length);
 -  VALUE con_type = ENCODED_STR_NEW(type_at, type_length);
 -
 -  unindent(con, start_col);
 -
 -  re2 = rb_reg_regcomp(rb_str_new2("\r\\Z"));
 -  unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\""));
 -  rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2(""));
 -  rb_funcall(con_type, rb_intern("strip!"), 0);
 -  rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\""));
 -  rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line));
 -}
 -static void 
 -raise_lexer_error(const char * at, int line)
 -{ 
 -  rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at);
 -}
 -
 -static void lexer_init(lexer_state *lexer) {
 -  lexer->content_start = 0;
 -  lexer->content_end = 0;
 -  lexer->content_len = 0;
 -  lexer->docstring_content_type_start = 0;
 -  lexer->docstring_content_type_end = 0;
 -  lexer->mark = 0;
 -  lexer->keyword_start = 0;
 -  lexer->keyword_end = 0;
 -  lexer->next_keyword_start = 0;
 -  lexer->line_number = 1;
 -  lexer->last_newline = 0;
 -  lexer->final_newline = 0;
 -  lexer->start_col = 0;
 -}
 -
 -static VALUE CLexer_alloc(VALUE klass)
 -{
 -  VALUE obj;
 -  lexer_state *lxr = ALLOC(lexer_state);
 -  lexer_init(lxr);
 -
 -  obj = Data_Wrap_Struct(klass, NULL, -1, lxr);
 -
 -  return obj;
 -}
 -
 -static VALUE CLexer_init(VALUE self, VALUE listener)
 -{
 -  lexer_state *lxr; 
 -  rb_iv_set(self, "@listener", listener);
 -  
 -  lxr = NULL;
 -  DATA_GET(self, lexer_state, lxr);
 -  lexer_init(lxr);
 -  
 -  return self;
 -}
 -
 -static VALUE CLexer_scan(VALUE self, VALUE input)
 -{
 -  VALUE input_copy;
 -  char *data;
 -  size_t len;
 -  VALUE listener = rb_iv_get(self, "@listener");
 -
 -  lexer_state *lexer;
 -  lexer = NULL;
 -  DATA_GET(self, lexer_state, lexer);
 -
 -  input_copy = rb_str_dup(input);
 -
 -  rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%"));
 -  data = RSTRING_PTR(input_copy);
 -  len = RSTRING_LEN(input_copy);
 -  
 -  if (len == 0) { 
 -    rb_raise(rb_eGherkinLexingError, "No content to lex.");
 -  } else {
 -
 -    const char *p, *pe, *eof;
 -    int cs = 0;
 -    
 -    VALUE current_row = Qnil;
 -
 -    p = data;
 -    pe = data + len;
 -    eof = pe;
 -    
 -    assert(*pe == '\0' && "pointer does not end on NULL");
 -    
 -    
 -#line 927 "ext/gherkin_lexer_hr/gherkin_lexer_hr.c"
 -	{
 -	cs = lexer_start;
 -	}
 -
 -#line 425 "ragel/i18n/hr.c.rl"
 -    
 -#line 934 "ext/gherkin_lexer_hr/gherkin_lexer_hr.c"
 -	{
 -	int _klen;
 -	unsigned int _trans;
 -	const char *_acts;
 -	unsigned int _nacts;
 -	const char *_keys;
 -
 -	if ( p == pe )
 -		goto _test_eof;
 -	if ( cs == 0 )
 -		goto _out;
 -_resume:
 -	_keys = _lexer_trans_keys + _lexer_key_offsets[cs];
 -	_trans = _lexer_index_offsets[cs];
 -
 -	_klen = _lexer_single_lengths[cs];
 -	if ( _klen > 0 ) {
 -		const char *_lower = _keys;
 -		const char *_mid;
 -		const char *_upper = _keys + _klen - 1;
 -		while (1) {
 -			if ( _upper < _lower )
 -				break;
 -
 -			_mid = _lower + ((_upper-_lower) >> 1);
 -			if ( (*p) < *_mid )
 -				_upper = _mid - 1;
 -			else if ( (*p) > *_mid )
 -				_lower = _mid + 1;
 -			else {
 -				_trans += (unsigned int)(_mid - _keys);
 -				goto _match;
 -			}
 -		}
 -		_keys += _klen;
 -		_trans += _klen;
 -	}
 -
 -	_klen = _lexer_range_lengths[cs];
 -	if ( _klen > 0 ) {
 -		const char *_lower = _keys;
 -		const char *_mid;
 -		const char *_upper = _keys + (_klen<<1) - 2;
 -		while (1) {
 -			if ( _upper < _lower )
 -				break;
 -
 -			_mid = _lower + (((_upper-_lower) >> 1) & ~1);
 -			if ( (*p) < _mid[0] )
 -				_upper = _mid - 2;
 -			else if ( (*p) > _mid[1] )
 -				_lower = _mid + 2;
 -			else {
 -				_trans += (unsigned int)((_mid - _keys)>>1);
 -				goto _match;
 -			}
 -		}
 -		_trans += _klen;
 -	}
 -
 -_match:
 -	cs = _lexer_trans_targs[_trans];
 -
 -	if ( _lexer_trans_actions[_trans] == 0 )
 -		goto _again;
 -
 -	_acts = _lexer_actions + _lexer_trans_actions[_trans];
 -	_nacts = (unsigned int) *_acts++;
 -	while ( _nacts-- > 0 )
 -	{
 -		switch ( *_acts++ )
 -		{
 -	case 0:
 -#line 83 "ragel/i18n/hr.c.rl"
 -	{
 -		MARK(content_start, p);
 -    lexer->current_line = lexer->line_number;
 -    lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2;
 -  }
 -	break;
 -	case 1:
 -#line 89 "ragel/i18n/hr.c.rl"
 -	{
 -    MARK(content_start, p);
 -  }
 -	break;
 -	case 2:
 -#line 93 "ragel/i18n/hr.c.rl"
 -	{
 -    lexer->current_line = lexer->line_number;
 -    lexer->start_col = p - data - lexer->last_newline;
 -  }
 -	break;
 -	case 3:
 -#line 98 "ragel/i18n/hr.c.rl"
 -	{
 -    int len = LEN(content_start, PTR_TO(final_newline));
 -    int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end));
 -
 -    if (len < 0) len = 0;
 -    if (type_len < 0) len = 0;
 -
 -    store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line);
 -  }
 -	break;
 -	case 4:
 -#line 108 "ragel/i18n/hr.c.rl"
 -	{ 
 -    MARK(docstring_content_type_start, p);
 -  }
 -	break;
 -	case 5:
 -#line 112 "ragel/i18n/hr.c.rl"
 -	{ 
 -    MARK(docstring_content_type_end, p);
 -  }
 -	break;
 -	case 6:
 -#line 116 "ragel/i18n/hr.c.rl"
 -	{
 -    STORE_KW_END_CON(feature);
 -  }
 -	break;
 -	case 7:
 -#line 120 "ragel/i18n/hr.c.rl"
 -	{
 -    STORE_KW_END_CON(background);
 -  }
 -	break;
 -	case 8:
 -#line 124 "ragel/i18n/hr.c.rl"
 -	{
 -    STORE_KW_END_CON(scenario);
 -  }
 -	break;
 -	case 9:
 -#line 128 "ragel/i18n/hr.c.rl"
 -	{
 -    STORE_KW_END_CON(scenario_outline);
 -  }
 -	break;
 -	case 10:
 -#line 132 "ragel/i18n/hr.c.rl"
 -	{
 -    STORE_KW_END_CON(examples);
 -  }
 -	break;
 -	case 11:
 -#line 136 "ragel/i18n/hr.c.rl"
 -	{
 -    store_kw_con(listener, "step",
 -      PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
 -      PTR_TO(content_start), LEN(content_start, p), 
 -      lexer->current_line);
 -  }
 -	break;
 -	case 12:
 -#line 143 "ragel/i18n/hr.c.rl"
 -	{
 -    STORE_ATTR(comment);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 13:
 -#line 148 "ragel/i18n/hr.c.rl"
 -	{
 -    STORE_ATTR(tag);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 14:
 -#line 153 "ragel/i18n/hr.c.rl"
 -	{
 -    lexer->line_number += 1;
 -    MARK(final_newline, p);
 -  }
 -	break;
 -	case 15:
 -#line 158 "ragel/i18n/hr.c.rl"
 -	{
 -    MARK(last_newline, p + 1);
 -  }
 -	break;
 -	case 16:
 -#line 162 "ragel/i18n/hr.c.rl"
 -	{
 -    if (lexer->mark == 0) {
 -      MARK(mark, p);
 -    }
 -  }
 -	break;
 -	case 17:
 -#line 168 "ragel/i18n/hr.c.rl"
 -	{
 -    MARK(keyword_end, p);
 -    MARK(keyword_start, PTR_TO(mark));
 -    MARK(content_start, p + 1);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 18:
 -#line 175 "ragel/i18n/hr.c.rl"
 -	{
 -    MARK(content_end, p);
 -  }
 -	break;
 -	case 19:
 -#line 179 "ragel/i18n/hr.c.rl"
 -	{
 -    p = p - 1;
 -    lexer->current_line = lexer->line_number;
 -    current_row = rb_ary_new();
 -  }
 -	break;
 -	case 20:
 -#line 185 "ragel/i18n/hr.c.rl"
 -	{
 -		MARK(content_start, p);
 -  }
 -	break;
 -	case 21:
 -#line 189 "ragel/i18n/hr.c.rl"
 -	{
 -    VALUE re_pipe, re_newline, re_backslash;
 -    VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
 -    rb_funcall(con, rb_intern("strip!"), 0);
 -    re_pipe      = rb_reg_regcomp(rb_str_new2("\\\\\\|"));
 -    re_newline   = rb_reg_regcomp(rb_str_new2("\\\\n"));
 -    re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_pipe,      rb_str_new2("|"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_newline,   rb_str_new2("\n"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\"));
 -
 -    rb_ary_push(current_row, con);
 -  }
 -	break;
 -	case 22:
 -#line 203 "ragel/i18n/hr.c.rl"
 -	{
 -    rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
 -  }
 -	break;
 -	case 23:
 -#line 207 "ragel/i18n/hr.c.rl"
 -	{
 -    int line;
 -    if (cs < lexer_first_final) {
 -      size_t count = 0;
 -      VALUE newstr_val;
 -      char *newstr;
 -      int newstr_count = 0;        
 -      size_t len;
 -      const char *buff;
 -      if (lexer->last_newline != 0) {
 -        len = LEN(last_newline, eof);
 -        buff = PTR_TO(last_newline);
 -      } else {
 -        len = strlen(data);
 -        buff = data;
 -      }
 -
 -      /* Allocate as a ruby string so that it gets cleaned up by GC */
 -      newstr_val = rb_str_new(buff, len);
 -      newstr = RSTRING_PTR(newstr_val);
 -
 -
 -      for (count = 0; count < len; count++) {
 -        if(buff[count] == 10) {
 -          newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
 -          break;
 -        } else {
 -          if (buff[count] == '%') {
 -            newstr[newstr_count++] = buff[count];
 -            newstr[newstr_count] = buff[count];
 -          } else {
 -            newstr[newstr_count] = buff[count];
 -          }
 -        }
 -        newstr_count++;
 -      }
 -
 -      line = lexer->line_number;
 -      lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
 -      raise_lexer_error(newstr, line);
 -    } else {
 -      rb_funcall(listener, rb_intern("eof"), 0);
 -    }
 -  }
 -	break;
 -#line 1224 "ext/gherkin_lexer_hr/gherkin_lexer_hr.c"
 -		}
 -	}
 -
 -_again:
 -	if ( cs == 0 )
 -		goto _out;
 -	if ( ++p != pe )
 -		goto _resume;
 -	_test_eof: {}
 -	if ( p == eof )
 -	{
 -	const char *__acts = _lexer_actions + _lexer_eof_actions[cs];
 -	unsigned int __nacts = (unsigned int) *__acts++;
 -	while ( __nacts-- > 0 ) {
 -		switch ( *__acts++ ) {
 -	case 23:
 -#line 207 "ragel/i18n/hr.c.rl"
 -	{
 -    int line;
 -    if (cs < lexer_first_final) {
 -      size_t count = 0;
 -      VALUE newstr_val;
 -      char *newstr;
 -      int newstr_count = 0;        
 -      size_t len;
 -      const char *buff;
 -      if (lexer->last_newline != 0) {
 -        len = LEN(last_newline, eof);
 -        buff = PTR_TO(last_newline);
 -      } else {
 -        len = strlen(data);
 -        buff = data;
 -      }
 -
 -      /* Allocate as a ruby string so that it gets cleaned up by GC */
 -      newstr_val = rb_str_new(buff, len);
 -      newstr = RSTRING_PTR(newstr_val);
 -
 -
 -      for (count = 0; count < len; count++) {
 -        if(buff[count] == 10) {
 -          newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
 -          break;
 -        } else {
 -          if (buff[count] == '%') {
 -            newstr[newstr_count++] = buff[count];
 -            newstr[newstr_count] = buff[count];
 -          } else {
 -            newstr[newstr_count] = buff[count];
 -          }
 -        }
 -        newstr_count++;
 -      }
 -
 -      line = lexer->line_number;
 -      lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
 -      raise_lexer_error(newstr, line);
 -    } else {
 -      rb_funcall(listener, rb_intern("eof"), 0);
 -    }
 -  }
 -	break;
 -#line 1287 "ext/gherkin_lexer_hr/gherkin_lexer_hr.c"
 -		}
 -	}
 -	}
 -
 -	_out: {}
 -	}
 -
 -#line 426 "ragel/i18n/hr.c.rl"
 -
 -    assert(p <= pe && "data overflow after parsing execute");
 -    assert(lexer->content_start <= len && "content starts after data end");
 -    assert(lexer->mark < len && "mark is after data end");
 -    
 -    /* Reset lexer by re-initializing the whole thing */
 -    lexer_init(lexer);
 -
 -    if (cs == lexer_error) {
 -      rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails.");
 -    } else {
 -      return Qtrue;
 -    }
 -  }
 -}
 -
 -void Init_gherkin_lexer_hr()
 -{
 -  mGherkin = rb_define_module("Gherkin");
 -  mGherkinLexer = rb_define_module_under(mGherkin, "Lexer");
 -  rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError"));
 -
 -  mCLexer = rb_define_module_under(mGherkin, "CLexer");
 -  cI18nLexer = rb_define_class_under(mCLexer, "Hr", rb_cObject);
 -  rb_define_alloc_func(cI18nLexer, CLexer_alloc);
 -  rb_define_method(cI18nLexer, "initialize", CLexer_init, 1);
 -  rb_define_method(cI18nLexer, "scan", CLexer_scan, 1);
 -}
 -
diff --cc ext/gherkin_lexer_hu/extconf.rb
index daab13b,daab13b..0000000
deleted file mode 100644,100644
--- a/ext/gherkin_lexer_hu/extconf.rb
+++ /dev/null
@@@ -1,6 -1,6 +1,0 @@@
--require 'mkmf'
--CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags']
--$CFLAGS << ' -O0 -Wall' if CONFIG['CC'] =~ /gcc|clang/
--dir_config("gherkin_lexer_hu")
--have_library("c", "main")
--create_makefile("gherkin_lexer_hu")
diff --cc ext/gherkin_lexer_hu/gherkin_lexer_hu.c
index ec318ed,a5e7b07..0000000
deleted file mode 100644,100644
--- a/ext/gherkin_lexer_hu/gherkin_lexer_hu.c
+++ /dev/null
@@@ -1,1376 -1,1376 +1,0 @@@
--
- #line 1 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/hu.c.rl"
- #include <assert.h>
- #include <ruby.h>
- 
- #if defined(_WIN32)
- #include <stddef.h>
- #endif
- 
- #ifdef HAVE_RUBY_RE_H
- #include <ruby/re.h>
- #else
- #include <re.h>
- #endif
- 
- #ifdef HAVE_RUBY_ENCODING_H
- #include <ruby/encoding.h>
- #define ENCODED_STR_NEW(ptr, len) \
-     rb_enc_str_new(ptr, len, rb_utf8_encoding())
- #else
- #define ENCODED_STR_NEW(ptr, len) \
-     rb_str_new(ptr, len)
- #endif
- 
- #ifndef RSTRING_PTR
- #define RSTRING_PTR(s) (RSTRING(s)->ptr)
- #endif
- 
- #ifndef RSTRING_LEN
- #define RSTRING_LEN(s) (RSTRING(s)->len)
- #endif
- 
- #define DATA_GET(FROM, TYPE, NAME) \
-   Data_Get_Struct(FROM, TYPE, NAME); \
-   if (NAME == NULL) { \
-     rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \
-   }
-  
- typedef struct lexer_state {
-   int content_len;
-   int line_number;
-   int current_line;
-   int start_col;
-   size_t mark;
-   size_t keyword_start;
-   size_t keyword_end;
-   size_t next_keyword_start;
-   size_t content_start;
-   size_t content_end;
-   size_t docstring_content_type_start;
-   size_t docstring_content_type_end;
-   size_t query_start;
-   size_t last_newline;
-   size_t final_newline;
- } lexer_state;
- 
- static VALUE mGherkin;
- static VALUE mGherkinLexer;
- static VALUE mCLexer;
- static VALUE cI18nLexer;
- static VALUE rb_eGherkinLexingError;
- 
- #define LEN(AT, P) (P - data - lexer->AT)
- #define MARK(M, P) (lexer->M = (P) - data)
- #define PTR_TO(P) (data + lexer->P)
- 
- #define STORE_KW_END_CON(EVENT) \
-   store_multiline_kw_con(listener, # EVENT, \
-     PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \
-     PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \
-     lexer->current_line, lexer->start_col); \
-     if (lexer->content_end != 0) { \
-       p = PTR_TO(content_end - 1); \
-     } \
-     lexer->content_end = 0
- 
- #define STORE_ATTR(ATTR) \
-     store_attr(listener, # ATTR, \
-       PTR_TO(content_start), LEN(content_start, p), \
-       lexer->line_number)
- 
- 
- #line 254 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/hu.c.rl"
- 
- 
- /** Data **/
- 
- #line 89 "ext/gherkin_lexer_hu/gherkin_lexer_hu.c"
- static const char _lexer_actions[] = {
- 	0, 1, 0, 1, 1, 1, 2, 1, 
- 	3, 1, 4, 1, 5, 1, 6, 1, 
- 	7, 1, 8, 1, 9, 1, 10, 1, 
- 	11, 1, 12, 1, 13, 1, 16, 1, 
- 	17, 1, 18, 1, 19, 1, 20, 1, 
- 	21, 1, 22, 1, 23, 2, 1, 18, 
- 	2, 4, 5, 2, 13, 0, 2, 14, 
- 	15, 2, 17, 0, 2, 17, 2, 2, 
- 	17, 16, 2, 17, 19, 2, 18, 6, 
- 	2, 18, 7, 2, 18, 8, 2, 18, 
- 	9, 2, 18, 10, 2, 18, 16, 2, 
- 	20, 21, 2, 22, 0, 2, 22, 2, 
- 	2, 22, 16, 2, 22, 19, 3, 3, 
- 	14, 15, 3, 5, 14, 15, 3, 11, 
- 	14, 15, 3, 12, 14, 15, 3, 13, 
- 	14, 15, 3, 14, 15, 18, 3, 17, 
- 	0, 11, 3, 17, 14, 15, 4, 1, 
- 	14, 15, 18, 4, 4, 5, 14, 15, 
- 	4, 17, 0, 14, 15, 5, 17, 0, 
- 	11, 14, 15
- };
- 
- static const short _lexer_key_offsets[] = {
- 	0, 0, 19, 20, 21, 22, 24, 26, 
- 	44, 45, 46, 48, 50, 55, 60, 65, 
- 	70, 74, 78, 80, 81, 82, 83, 84, 
- 	85, 86, 87, 88, 89, 90, 91, 92, 
- 	93, 94, 95, 100, 107, 112, 115, 116, 
- 	117, 118, 119, 120, 121, 123, 124, 125, 
- 	126, 127, 128, 129, 130, 131, 132, 133, 
- 	134, 135, 136, 137, 138, 139, 140, 141, 
- 	142, 143, 144, 146, 147, 148, 149, 150, 
- 	151, 152, 153, 154, 155, 156, 171, 173, 
- 	175, 177, 195, 197, 198, 199, 200, 201, 
- 	202, 203, 204, 205, 206, 221, 223, 225, 
- 	227, 229, 231, 233, 235, 237, 239, 241, 
- 	243, 245, 247, 249, 251, 253, 255, 259, 
- 	261, 263, 265, 267, 269, 271, 274, 276, 
- 	278, 280, 282, 284, 286, 288, 290, 292, 
- 	294, 296, 298, 300, 302, 304, 306, 308, 
- 	310, 312, 314, 316, 319, 321, 323, 325, 
- 	327, 329, 331, 333, 335, 337, 339, 341, 
- 	343, 345, 347, 349, 351, 353, 355, 357, 
- 	359, 360, 361, 362, 363, 364, 365, 366, 
- 	367, 368, 369, 370, 381, 383, 385, 387, 
- 	389, 391, 393, 395, 397, 399, 401, 403, 
- 	405, 407, 409, 411, 413, 415, 417, 419, 
- 	421, 423, 425, 427, 429, 431, 433, 435, 
- 	438, 440, 442, 444, 446, 448, 450, 452, 
- 	454, 456, 458, 460, 462, 464, 466, 468, 
- 	470, 472, 474, 476, 478, 480, 482, 484, 
- 	486, 488, 490, 492, 494, 496, 498, 499, 
- 	500, 501, 502, 503, 504, 505, 506, 507, 
- 	508, 509, 510, 511, 518, 520, 522, 524, 
- 	526, 528, 530, 532, 534, 536, 540, 546, 
- 	549, 551, 557, 575, 577, 579, 581, 583, 
- 	585, 587, 589, 591, 593, 595, 597, 599, 
- 	601, 603, 607, 609, 611, 613, 615, 617, 
- 	619, 622, 624, 626, 628, 630, 632, 634, 
- 	636, 638, 640, 642, 644, 646, 648, 650, 
- 	652, 654, 656, 658, 660, 662, 664, 666, 
- 	668, 670, 672, 674, 676, 678, 680, 682, 
- 	684, 686, 688, 690, 691, 692, 707, 709, 
- 	711, 713, 715, 717, 719, 721, 723, 725, 
- 	727, 729, 731, 733, 735, 737, 739, 741, 
- 	745, 747, 749, 751, 753, 755, 757, 760, 
- 	762, 764, 766, 768, 770, 772, 774, 776, 
- 	778, 780, 782, 784, 786, 788, 790, 792, 
- 	794, 796, 798, 800, 802, 805, 807, 809, 
- 	811, 813, 815, 817, 819, 821, 824, 826, 
- 	828, 830, 832, 834, 836, 838, 840, 842, 
- 	844, 846, 848, 850, 852, 854, 856, 858, 
- 	859, 860
- };
- 
- static const char _lexer_trans_keys[] = {
- 	-61, -17, 10, 32, 34, 35, 37, 42, 
- 	64, 65, 68, 70, 72, 74, 77, 80, 
- 	124, 9, 13, -119, 115, 32, 10, 13, 
- 	10, 13, -61, 10, 32, 34, 35, 37, 
- 	42, 64, 65, 68, 70, 72, 74, 77, 
- 	80, 124, 9, 13, 34, 34, 10, 13, 
- 	10, 13, 10, 32, 34, 9, 13, 10, 
- 	32, 34, 9, 13, 10, 32, 34, 9, 
- 	13, 10, 32, 34, 9, 13, 10, 32, 
- 	9, 13, 10, 32, 9, 13, 10, 13, 
- 	10, 95, 70, 69, 65, 84, 85, 82, 
- 	69, 95, 69, 78, 68, 95, 37, 13, 
- 	32, 64, 9, 10, 9, 10, 13, 32, 
- 	64, 11, 12, 10, 32, 64, 9, 13, 
- 	100, 107, 109, 111, 116, 116, 107, 111, 
- 	114, 101, 105, 110, 110, 121, 105, 98, 
- 	101, 110, 101, 111, 114, 103, 97, 116, 
- 	-61, -77, 107, -61, -74, 110, 121, 118, 
- 	32, 58, 118, -61, -95, 122, 108, 97, 
- 	116, 58, 10, 10, -61, 10, 32, 35, 
- 	37, 42, 64, 65, 68, 70, 72, 74, 
- 	77, 9, 13, -119, 10, 10, 115, 10, 
- 	32, -61, 10, 32, 34, 35, 37, 42, 
- 	64, 65, 68, 70, 72, 74, 77, 80, 
- 	124, 9, 13, -61, 97, -95, 116, 116, 
- 	-61, -87, 114, 58, 10, 10, -61, 10, 
- 	32, 35, 37, 42, 64, 65, 68, 70, 
- 	72, 74, 77, 9, 13, -119, 10, 10, 
- 	115, 10, 32, 10, 95, 10, 70, 10, 
- 	69, 10, 65, 10, 84, 10, 85, 10, 
- 	82, 10, 69, 10, 95, 10, 69, 10, 
- 	78, 10, 68, 10, 95, 10, 37, 10, 
- 	100, 107, 109, 10, 111, 10, 116, 10, 
- 	116, 10, 107, 10, 111, 10, 114, 10, 
- 	101, 105, 10, 110, 10, 110, 10, 121, 
- 	10, 105, 10, 98, 10, 101, 10, 110, 
- 	10, 101, 10, 111, 10, 114, 10, 103, 
- 	10, 97, 10, 116, -61, 10, -77, 10, 
- 	10, 107, -61, 10, -74, 10, 10, 110, 
- 	10, 121, 10, 118, 10, 32, 58, 10, 
- 	118, -61, 10, -95, 10, 10, 122, 10, 
- 	108, 10, 97, 10, 116, 10, 58, 10, 
- 	97, 10, 101, 10, 108, 10, 108, 10, 
- 	101, 10, 109, 10, 122, -59, 10, -111, 
- 	10, 10, 97, 10, 106, 10, 100, 101, 
- 	108, 108, 101, 109, 122, -59, -111, 58, 
- 	10, 10, 10, 32, 35, 37, 64, 70, 
- 	72, 74, 80, 9, 13, 10, 95, 10, 
- 	70, 10, 69, 10, 65, 10, 84, 10, 
- 	85, 10, 82, 10, 69, 10, 95, 10, 
- 	69, 10, 78, 10, 68, 10, 95, 10, 
- 	37, 10, 111, 10, 114, 10, 103, 10, 
- 	97, 10, 116, -61, 10, -77, 10, 10, 
- 	107, -61, 10, -74, 10, 10, 110, 10, 
- 	121, 10, 118, 10, 32, 58, 10, 118, 
- 	-61, 10, -95, 10, 10, 122, 10, 108, 
- 	10, 97, 10, 116, 10, 58, -61, 10, 
- 	-95, 10, 10, 116, 10, 116, -61, 10, 
- 	-87, 10, 10, 114, 10, 101, 10, 108, 
- 	10, 108, 10, 101, 10, 109, 10, 122, 
- 	-59, 10, -111, 10, -61, 10, -87, 10, 
- 	10, 108, 10, 100, -61, 10, -95, 10, 
- 	10, 107, 97, 106, 100, -61, -87, 108, 
- 	100, -61, -95, 107, 58, 10, 10, 10, 
- 	32, 35, 74, 124, 9, 13, 10, 101, 
- 	10, 108, 10, 108, 10, 101, 10, 109, 
- 	10, 122, -59, 10, -111, 10, 10, 58, 
- 	32, 124, 9, 13, 10, 32, 92, 124, 
- 	9, 13, 10, 92, 124, 10, 92, 10, 
- 	32, 92, 124, 9, 13, -61, 10, 32, 
- 	34, 35, 37, 42, 64, 65, 68, 70, 
- 	72, 74, 77, 80, 124, 9, 13, 10, 
- 	95, 10, 70, 10, 69, 10, 65, 10, 
- 	84, 10, 85, 10, 82, 10, 69, 10, 
- 	95, 10, 69, 10, 78, 10, 68, 10, 
- 	95, 10, 37, 10, 100, 107, 109, 10, 
- 	111, 10, 116, 10, 116, 10, 107, 10, 
- 	111, 10, 114, 10, 101, 105, 10, 110, 
- 	10, 110, 10, 121, 10, 105, 10, 98, 
- 	10, 101, 10, 110, 10, 101, 10, 111, 
- 	10, 114, 10, 103, 10, 97, 10, 116, 
- 	-61, 10, -77, 10, 10, 107, -61, 10, 
- 	-74, 10, 10, 110, 10, 121, 10, 118, 
- 	10, 58, 10, 97, 10, 101, 10, 108, 
- 	10, 108, 10, 101, 10, 109, 10, 122, 
- 	-59, 10, -111, 10, 10, 97, 10, 106, 
- 	10, 100, 10, 10, -61, 10, 32, 35, 
- 	37, 42, 64, 65, 68, 70, 72, 74, 
- 	77, 9, 13, -119, 10, 10, 115, 10, 
- 	32, 10, 95, 10, 70, 10, 69, 10, 
- 	65, 10, 84, 10, 85, 10, 82, 10, 
- 	69, 10, 95, 10, 69, 10, 78, 10, 
- 	68, 10, 95, 10, 37, 10, 100, 107, 
- 	109, 10, 111, 10, 116, 10, 116, 10, 
- 	107, 10, 111, 10, 114, 10, 101, 105, 
- 	10, 110, 10, 110, 10, 121, 10, 105, 
- 	10, 98, 10, 101, 10, 110, 10, 101, 
- 	10, 111, 10, 114, 10, 103, 10, 97, 
- 	10, 116, -61, 10, -77, 10, 10, 107, 
- 	-61, 10, -74, 10, 10, 110, 10, 121, 
- 	10, 118, 10, 32, 58, 10, 118, -61, 
- 	10, -95, 10, 10, 122, 10, 108, 10, 
- 	97, 10, 116, 10, 58, -61, 10, 97, 
- 	-95, 10, 10, 116, 10, 116, -61, 10, 
- 	-87, 10, 10, 114, 10, 101, 10, 108, 
- 	10, 108, 10, 101, 10, 109, 10, 122, 
- 	-59, 10, -111, 10, 10, 97, 10, 106, 
- 	10, 100, -69, -65, 0
- };
- 
- static const char _lexer_single_lengths[] = {
- 	0, 17, 1, 1, 1, 2, 2, 16, 
- 	1, 1, 2, 2, 3, 3, 3, 3, 
- 	2, 2, 2, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 3, 5, 3, 3, 1, 1, 
- 	1, 1, 1, 1, 2, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 2, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 13, 2, 2, 
- 	2, 16, 2, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 13, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 4, 2, 
- 	2, 2, 2, 2, 2, 3, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 3, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 9, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 3, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 5, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 4, 3, 
- 	2, 4, 16, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 4, 2, 2, 2, 2, 2, 2, 
- 	3, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 1, 1, 13, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 4, 
- 	2, 2, 2, 2, 2, 2, 3, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 3, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 3, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 1, 
- 	1, 0
- };
- 
- static const char _lexer_range_lengths[] = {
- 	0, 1, 0, 0, 0, 0, 0, 1, 
- 	0, 0, 0, 0, 1, 1, 1, 1, 
- 	1, 1, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 1, 1, 1, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 1, 0, 0, 
- 	0, 1, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 1, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 1, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 1, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 1, 1, 0, 
- 	0, 1, 1, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 1, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0
- };
- 
- static const short _lexer_index_offsets[] = {
- 	0, 0, 19, 21, 23, 25, 28, 31, 
- 	49, 51, 53, 56, 59, 64, 69, 74, 
- 	79, 83, 87, 90, 92, 94, 96, 98, 
- 	100, 102, 104, 106, 108, 110, 112, 114, 
- 	116, 118, 120, 125, 132, 137, 141, 143, 
- 	145, 147, 149, 151, 153, 156, 158, 160, 
- 	162, 164, 166, 168, 170, 172, 174, 176, 
- 	178, 180, 182, 184, 186, 188, 190, 192, 
- 	194, 196, 198, 201, 203, 205, 207, 209, 
- 	211, 213, 215, 217, 219, 221, 236, 239, 
- 	242, 245, 263, 266, 268, 270, 272, 274, 
- 	276, 278, 280, 282, 284, 299, 302, 305, 
- 	308, 311, 314, 317, 320, 323, 326, 329, 
- 	332, 335, 338, 341, 344, 347, 350, 355, 
- 	358, 361, 364, 367, 370, 373, 377, 380, 
- 	383, 386, 389, 392, 395, 398, 401, 404, 
- 	407, 410, 413, 416, 419, 422, 425, 428, 
- 	431, 434, 437, 440, 444, 447, 450, 453, 
- 	456, 459, 462, 465, 468, 471, 474, 477, 
- 	480, 483, 486, 489, 492, 495, 498, 501, 
- 	504, 506, 508, 510, 512, 514, 516, 518, 
- 	520, 522, 524, 526, 537, 540, 543, 546, 
- 	549, 552, 555, 558, 561, 564, 567, 570, 
- 	573, 576, 579, 582, 585, 588, 591, 594, 
- 	597, 600, 603, 606, 609, 612, 615, 618, 
- 	622, 625, 628, 631, 634, 637, 640, 643, 
- 	646, 649, 652, 655, 658, 661, 664, 667, 
- 	670, 673, 676, 679, 682, 685, 688, 691, 
- 	694, 697, 700, 703, 706, 709, 712, 714, 
- 	716, 718, 720, 722, 724, 726, 728, 730, 
- 	732, 734, 736, 738, 745, 748, 751, 754, 
- 	757, 760, 763, 766, 769, 772, 776, 782, 
- 	786, 789, 795, 813, 816, 819, 822, 825, 
- 	828, 831, 834, 837, 840, 843, 846, 849, 
- 	852, 855, 860, 863, 866, 869, 872, 875, 
- 	878, 882, 885, 888, 891, 894, 897, 900, 
- 	903, 906, 909, 912, 915, 918, 921, 924, 
- 	927, 930, 933, 936, 939, 942, 945, 948, 
- 	951, 954, 957, 960, 963, 966, 969, 972, 
- 	975, 978, 981, 984, 986, 988, 1003, 1006, 
- 	1009, 1012, 1015, 1018, 1021, 1024, 1027, 1030, 
- 	1033, 1036, 1039, 1042, 1045, 1048, 1051, 1054, 
- 	1059, 1062, 1065, 1068, 1071, 1074, 1077, 1081, 
- 	1084, 1087, 1090, 1093, 1096, 1099, 1102, 1105, 
- 	1108, 1111, 1114, 1117, 1120, 1123, 1126, 1129, 
- 	1132, 1135, 1138, 1141, 1144, 1148, 1151, 1154, 
- 	1157, 1160, 1163, 1166, 1169, 1172, 1176, 1179, 
- 	1182, 1185, 1188, 1191, 1194, 1197, 1200, 1203, 
- 	1206, 1209, 1212, 1215, 1218, 1221, 1224, 1227, 
- 	1229, 1231
- };
- 
- static const short _lexer_trans_targs[] = {
- 	2, 391, 7, 7, 8, 18, 20, 4, 
- 	34, 37, 52, 53, 82, 160, 230, 233, 
- 	253, 7, 0, 3, 0, 4, 0, 5, 
- 	0, 7, 19, 6, 7, 19, 6, 2, 
- 	7, 7, 8, 18, 20, 4, 34, 37, 
- 	52, 53, 82, 160, 230, 233, 253, 7, 
- 	0, 9, 0, 10, 0, 12, 11, 11, 
- 	12, 11, 11, 13, 13, 14, 13, 13, 
- 	13, 13, 14, 13, 13, 13, 13, 15, 
- 	13, 13, 13, 13, 16, 13, 13, 7, 
- 	17, 17, 0, 7, 17, 17, 0, 7, 
- 	19, 18, 7, 0, 21, 0, 22, 0, 
- 	23, 0, 24, 0, 25, 0, 26, 0, 
- 	27, 0, 28, 0, 29, 0, 30, 0, 
- 	31, 0, 32, 0, 33, 0, 393, 0, 
- 	0, 0, 0, 0, 35, 36, 7, 36, 
- 	36, 34, 35, 35, 7, 36, 34, 36, 
- 	0, 38, 41, 44, 0, 39, 0, 40, 
- 	0, 4, 0, 42, 0, 43, 0, 4, 
- 	0, 45, 41, 0, 46, 0, 47, 0, 
- 	48, 0, 49, 0, 50, 0, 51, 0, 
- 	4, 0, 4, 0, 54, 0, 55, 0, 
- 	56, 0, 57, 0, 58, 0, 59, 0, 
- 	60, 0, 61, 0, 62, 0, 63, 0, 
- 	64, 0, 65, 0, 66, 0, 67, 315, 
- 	0, 68, 0, 69, 0, 70, 0, 71, 
- 	0, 72, 0, 73, 0, 74, 0, 75, 
- 	0, 77, 76, 77, 76, 78, 77, 77, 
- 	7, 259, 80, 7, 273, 288, 289, 303, 
- 	304, 312, 77, 76, 79, 77, 76, 77, 
- 	80, 76, 77, 81, 76, 2, 7, 7, 
- 	8, 18, 20, 4, 34, 37, 52, 53, 
- 	82, 160, 230, 233, 253, 7, 0, 83, 
- 	4, 0, 84, 0, 85, 0, 86, 0, 
- 	87, 0, 88, 0, 89, 0, 90, 0, 
- 	92, 91, 92, 91, 93, 92, 92, 7, 
- 	96, 95, 7, 110, 125, 126, 148, 149, 
- 	157, 92, 91, 94, 92, 91, 92, 95, 
- 	91, 92, 81, 91, 92, 97, 91, 92, 
- 	98, 91, 92, 99, 91, 92, 100, 91, 
- 	92, 101, 91, 92, 102, 91, 92, 103, 
- 	91, 92, 104, 91, 92, 105, 91, 92, 
- 	106, 91, 92, 107, 91, 92, 108, 91, 
- 	92, 109, 91, 92, 7, 91, 92, 111, 
- 	114, 117, 91, 92, 112, 91, 92, 113, 
- 	91, 92, 95, 91, 92, 115, 91, 92, 
- 	116, 91, 92, 95, 91, 92, 118, 114, 
- 	91, 92, 119, 91, 92, 120, 91, 92, 
- 	121, 91, 92, 122, 91, 92, 123, 91, 
- 	92, 124, 91, 92, 95, 91, 92, 95, 
- 	91, 92, 127, 91, 92, 128, 91, 92, 
- 	129, 91, 92, 130, 91, 92, 131, 91, 
- 	132, 92, 91, 133, 92, 91, 92, 134, 
- 	91, 135, 92, 91, 136, 92, 91, 92, 
- 	137, 91, 92, 138, 91, 92, 139, 91, 
- 	92, 140, 81, 91, 92, 141, 91, 142, 
- 	92, 91, 143, 92, 91, 92, 144, 91, 
- 	92, 145, 91, 92, 146, 91, 92, 147, 
- 	91, 92, 81, 91, 92, 95, 91, 92, 
- 	150, 91, 92, 151, 91, 92, 152, 91, 
- 	92, 153, 91, 92, 154, 91, 92, 155, 
- 	91, 156, 92, 91, 147, 92, 91, 92, 
- 	158, 91, 92, 159, 91, 92, 95, 91, 
- 	161, 0, 162, 0, 163, 0, 164, 0, 
- 	165, 0, 166, 0, 167, 0, 168, 0, 
- 	169, 0, 171, 170, 171, 170, 171, 171, 
- 	7, 172, 7, 186, 208, 215, 223, 171, 
- 	170, 171, 173, 170, 171, 174, 170, 171, 
- 	175, 170, 171, 176, 170, 171, 177, 170, 
- 	171, 178, 170, 171, 179, 170, 171, 180, 
- 	170, 171, 181, 170, 171, 182, 170, 171, 
- 	183, 170, 171, 184, 170, 171, 185, 170, 
- 	171, 7, 170, 171, 187, 170, 171, 188, 
- 	170, 171, 189, 170, 171, 190, 170, 171, 
- 	191, 170, 192, 171, 170, 193, 171, 170, 
- 	171, 194, 170, 195, 171, 170, 196, 171, 
- 	170, 171, 197, 170, 171, 198, 170, 171, 
- 	199, 170, 171, 200, 81, 170, 171, 201, 
- 	170, 202, 171, 170, 203, 171, 170, 171, 
- 	204, 170, 171, 205, 170, 171, 206, 170, 
- 	171, 207, 170, 171, 81, 170, 209, 171, 
- 	170, 210, 171, 170, 171, 211, 170, 171, 
- 	212, 170, 213, 171, 170, 214, 171, 170, 
- 	171, 207, 170, 171, 216, 170, 171, 217, 
- 	170, 171, 218, 170, 171, 219, 170, 171, 
- 	220, 170, 171, 221, 170, 222, 171, 170, 
- 	207, 171, 170, 224, 171, 170, 225, 171, 
- 	170, 171, 226, 170, 171, 227, 170, 228, 
- 	171, 170, 229, 171, 170, 171, 207, 170, 
- 	231, 0, 232, 0, 4, 0, 234, 0, 
- 	235, 0, 236, 0, 237, 0, 238, 0, 
- 	239, 0, 240, 0, 241, 0, 243, 242, 
- 	243, 242, 243, 243, 7, 244, 7, 243, 
- 	242, 243, 245, 242, 243, 246, 242, 243, 
- 	247, 242, 243, 248, 242, 243, 249, 242, 
- 	243, 250, 242, 251, 243, 242, 252, 243, 
- 	242, 243, 81, 242, 253, 254, 253, 0, 
- 	258, 257, 256, 254, 257, 255, 0, 256, 
- 	254, 255, 0, 256, 255, 258, 257, 256, 
- 	254, 257, 255, 2, 258, 258, 8, 18, 
- 	20, 4, 34, 37, 52, 53, 82, 160, 
- 	230, 233, 253, 258, 0, 77, 260, 76, 
- 	77, 261, 76, 77, 262, 76, 77, 263, 
- 	76, 77, 264, 76, 77, 265, 76, 77, 
- 	266, 76, 77, 267, 76, 77, 268, 76, 
- 	77, 269, 76, 77, 270, 76, 77, 271, 
- 	76, 77, 272, 76, 77, 7, 76, 77, 
- 	274, 277, 280, 76, 77, 275, 76, 77, 
- 	276, 76, 77, 80, 76, 77, 278, 76, 
- 	77, 279, 76, 77, 80, 76, 77, 281, 
- 	277, 76, 77, 282, 76, 77, 283, 76, 
- 	77, 284, 76, 77, 285, 76, 77, 286, 
- 	76, 77, 287, 76, 77, 80, 76, 77, 
- 	80, 76, 77, 290, 76, 77, 291, 76, 
- 	77, 292, 76, 77, 293, 76, 77, 294, 
- 	76, 295, 77, 76, 296, 77, 76, 77, 
- 	297, 76, 298, 77, 76, 299, 77, 76, 
- 	77, 300, 76, 77, 301, 76, 77, 302, 
- 	76, 77, 81, 76, 77, 80, 76, 77, 
- 	305, 76, 77, 306, 76, 77, 307, 76, 
- 	77, 308, 76, 77, 309, 76, 77, 310, 
- 	76, 311, 77, 76, 302, 77, 76, 77, 
- 	313, 76, 77, 314, 76, 77, 80, 76, 
- 	317, 316, 317, 316, 318, 317, 317, 7, 
- 	321, 320, 7, 335, 350, 351, 373, 380, 
- 	388, 317, 316, 319, 317, 316, 317, 320, 
- 	316, 317, 81, 316, 317, 322, 316, 317, 
- 	323, 316, 317, 324, 316, 317, 325, 316, 
- 	317, 326, 316, 317, 327, 316, 317, 328, 
- 	316, 317, 329, 316, 317, 330, 316, 317, 
- 	331, 316, 317, 332, 316, 317, 333, 316, 
- 	317, 334, 316, 317, 7, 316, 317, 336, 
- 	339, 342, 316, 317, 337, 316, 317, 338, 
- 	316, 317, 320, 316, 317, 340, 316, 317, 
- 	341, 316, 317, 320, 316, 317, 343, 339, 
- 	316, 317, 344, 316, 317, 345, 316, 317, 
- 	346, 316, 317, 347, 316, 317, 348, 316, 
- 	317, 349, 316, 317, 320, 316, 317, 320, 
- 	316, 317, 352, 316, 317, 353, 316, 317, 
- 	354, 316, 317, 355, 316, 317, 356, 316, 
- 	357, 317, 316, 358, 317, 316, 317, 359, 
- 	316, 360, 317, 316, 361, 317, 316, 317, 
- 	362, 316, 317, 363, 316, 317, 364, 316, 
- 	317, 365, 81, 316, 317, 366, 316, 367, 
- 	317, 316, 368, 317, 316, 317, 369, 316, 
- 	317, 370, 316, 317, 371, 316, 317, 372, 
- 	316, 317, 81, 316, 374, 317, 320, 316, 
- 	375, 317, 316, 317, 376, 316, 317, 377, 
- 	316, 378, 317, 316, 379, 317, 316, 317, 
- 	372, 316, 317, 381, 316, 317, 382, 316, 
- 	317, 383, 316, 317, 384, 316, 317, 385, 
- 	316, 317, 386, 316, 387, 317, 316, 372, 
- 	317, 316, 317, 389, 316, 317, 390, 316, 
- 	317, 320, 316, 392, 0, 7, 0, 0, 
- 	0
- };
- 
- static const unsigned char _lexer_trans_actions[] = {
- 	29, 0, 54, 0, 5, 1, 0, 29, 
- 	1, 29, 29, 29, 29, 29, 29, 29, 
- 	35, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 149, 126, 57, 110, 23, 0, 29, 
- 	54, 0, 5, 1, 0, 29, 1, 29, 
- 	29, 29, 29, 29, 29, 29, 35, 0, 
- 	43, 0, 43, 0, 43, 139, 48, 9, 
- 	106, 11, 0, 134, 45, 45, 45, 3, 
- 	122, 33, 33, 33, 0, 122, 33, 33, 
- 	33, 0, 122, 33, 0, 33, 0, 102, 
- 	7, 7, 43, 54, 0, 0, 43, 114, 
- 	25, 0, 54, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	43, 43, 43, 43, 0, 27, 118, 27, 
- 	27, 51, 27, 0, 54, 0, 1, 0, 
- 	43, 0, 0, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 144, 57, 54, 0, 84, 54, 0, 
- 	78, 33, 84, 78, 84, 84, 84, 84, 
- 	84, 84, 0, 0, 0, 54, 0, 54, 
- 	0, 0, 54, 19, 0, 63, 130, 31, 
- 	60, 57, 31, 63, 57, 63, 63, 63, 
- 	63, 63, 63, 63, 66, 31, 43, 0, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	144, 57, 54, 0, 84, 54, 0, 72, 
- 	33, 84, 72, 84, 84, 84, 84, 84, 
- 	84, 0, 0, 0, 54, 0, 54, 0, 
- 	0, 54, 15, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 15, 0, 54, 0, 
- 	0, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	0, 54, 0, 0, 54, 0, 54, 0, 
- 	0, 0, 54, 0, 0, 54, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 15, 0, 54, 0, 0, 0, 
- 	54, 0, 0, 54, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 15, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 0, 54, 0, 0, 54, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 144, 57, 54, 0, 54, 0, 
- 	69, 33, 69, 84, 84, 84, 84, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 13, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 0, 54, 0, 0, 54, 0, 
- 	54, 0, 0, 0, 54, 0, 0, 54, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 13, 0, 54, 0, 
- 	0, 0, 54, 0, 0, 54, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 13, 0, 0, 54, 
- 	0, 0, 54, 0, 54, 0, 0, 54, 
- 	0, 0, 0, 54, 0, 0, 54, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 54, 0, 0, 54, 0, 0, 0, 
- 	54, 0, 0, 54, 0, 54, 0, 0, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 144, 57, 
- 	54, 0, 54, 0, 81, 84, 81, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 0, 54, 0, 0, 54, 
- 	0, 54, 21, 0, 0, 0, 0, 43, 
- 	54, 37, 37, 87, 37, 37, 43, 0, 
- 	39, 0, 43, 0, 0, 54, 0, 0, 
- 	39, 0, 0, 96, 54, 0, 93, 90, 
- 	41, 96, 90, 96, 96, 96, 96, 96, 
- 	96, 96, 99, 0, 43, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 19, 0, 54, 
- 	0, 0, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 0, 54, 0, 0, 54, 0, 54, 
- 	0, 0, 0, 54, 0, 0, 54, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 19, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 0, 54, 0, 0, 54, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	144, 57, 54, 0, 84, 54, 0, 75, 
- 	33, 84, 75, 84, 84, 84, 84, 84, 
- 	84, 0, 0, 0, 54, 0, 54, 0, 
- 	0, 54, 17, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 17, 0, 54, 0, 
- 	0, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	0, 54, 0, 0, 54, 0, 54, 0, 
- 	0, 0, 54, 0, 0, 54, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 17, 0, 54, 0, 0, 0, 
- 	54, 0, 0, 54, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 17, 0, 0, 54, 0, 0, 
- 	0, 54, 0, 54, 0, 0, 54, 0, 
- 	0, 0, 54, 0, 0, 54, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 0, 54, 0, 0, 
- 	54, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 0, 43, 0, 43, 0, 
- 	0
- };
- 
- static const unsigned char _lexer_eof_actions[] = {
- 	0, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43
- };
- 
- static const int lexer_start = 1;
- static const int lexer_first_final = 393;
- static const int lexer_error = 0;
- 
- static const int lexer_en_main = 1;
- 
- 
- #line 258 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/hu.c.rl"
- 
- static VALUE 
- unindent(VALUE con, int start_col)
- {
-   VALUE re;
-   // Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters
-   char pat[32]; 
-   snprintf(pat, 32, "^[\t ]{0,%d}", start_col); 
-   re = rb_reg_regcomp(rb_str_new2(pat));
-   rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2(""));
- 
-   return Qnil;
- 
- }
- 
- static void 
- store_kw_con(VALUE listener, const char * event_name, 
-              const char * keyword_at, size_t keyword_length, 
-              const char * at,         size_t length, 
-              int current_line)
- {
-   VALUE con = Qnil, kw = Qnil;
-   kw = ENCODED_STR_NEW(keyword_at, keyword_length);
-   con = ENCODED_STR_NEW(at, length);
-   rb_funcall(con, rb_intern("strip!"), 0);
-   rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); 
- }
- 
- static void
- store_multiline_kw_con(VALUE listener, const char * event_name,
-                       const char * keyword_at, size_t keyword_length,
-                       const char * at,         size_t length,
-                       int current_line, int start_col)
- {
-   VALUE split;
-   VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil;
- 
-   kw = ENCODED_STR_NEW(keyword_at, keyword_length);
-   con = ENCODED_STR_NEW(at, length);
- 
-   unindent(con, start_col);
-   
-   split = rb_str_split(con, "\n");
- 
-   name = rb_funcall(split, rb_intern("shift"), 0);
-   desc = rb_ary_join(split, rb_str_new2( "\n" ));
- 
-   if( name == Qnil ) 
-   {
-     name = rb_str_new2("");
-   }
-   if( rb_funcall(desc, rb_intern("size"), 0) == 0) 
-   {
-     desc = rb_str_new2("");
-   }
-   rb_funcall(name, rb_intern("strip!"), 0);
-   rb_funcall(desc, rb_intern("rstrip!"), 0);
-   rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); 
- }
- 
- static void 
- store_attr(VALUE listener, const char * attr_type,
-            const char * at, size_t length, 
-            int line)
- {
-   VALUE val = ENCODED_STR_NEW(at, length);
-   rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line));
- }
- static void 
- store_docstring_content(VALUE listener, 
-           int start_col, 
-           const char *type_at, size_t type_length,
-           const char *at, size_t length, 
-           int current_line)
- {
-   VALUE re2;
-   VALUE unescape_escaped_quotes;
-   VALUE con = ENCODED_STR_NEW(at, length);
-   VALUE con_type = ENCODED_STR_NEW(type_at, type_length);
- 
-   unindent(con, start_col);
- 
-   re2 = rb_reg_regcomp(rb_str_new2("\r\\Z"));
-   unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\""));
-   rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2(""));
-   rb_funcall(con_type, rb_intern("strip!"), 0);
-   rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\""));
-   rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line));
- }
- static void 
- raise_lexer_error(const char * at, int line)
- { 
-   rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at);
- }
- 
- static void lexer_init(lexer_state *lexer) {
-   lexer->content_start = 0;
-   lexer->content_end = 0;
-   lexer->content_len = 0;
-   lexer->docstring_content_type_start = 0;
-   lexer->docstring_content_type_end = 0;
-   lexer->mark = 0;
-   lexer->keyword_start = 0;
-   lexer->keyword_end = 0;
-   lexer->next_keyword_start = 0;
-   lexer->line_number = 1;
-   lexer->last_newline = 0;
-   lexer->final_newline = 0;
-   lexer->start_col = 0;
- }
- 
- static VALUE CLexer_alloc(VALUE klass)
- {
-   VALUE obj;
-   lexer_state *lxr = ALLOC(lexer_state);
-   lexer_init(lxr);
- 
-   obj = Data_Wrap_Struct(klass, NULL, -1, lxr);
- 
-   return obj;
- }
- 
- static VALUE CLexer_init(VALUE self, VALUE listener)
- {
-   lexer_state *lxr; 
-   rb_iv_set(self, "@listener", listener);
-   
-   lxr = NULL;
-   DATA_GET(self, lexer_state, lxr);
-   lexer_init(lxr);
-   
-   return self;
- }
- 
- static VALUE CLexer_scan(VALUE self, VALUE input)
- {
-   VALUE input_copy;
-   char *data;
-   size_t len;
-   VALUE listener = rb_iv_get(self, "@listener");
- 
-   lexer_state *lexer;
-   lexer = NULL;
-   DATA_GET(self, lexer_state, lexer);
- 
-   input_copy = rb_str_dup(input);
- 
-   rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%"));
-   data = RSTRING_PTR(input_copy);
-   len = RSTRING_LEN(input_copy);
-   
-   if (len == 0) { 
-     rb_raise(rb_eGherkinLexingError, "No content to lex.");
-   } else {
- 
-     const char *p, *pe, *eof;
-     int cs = 0;
-     
-     VALUE current_row = Qnil;
- 
-     p = data;
-     pe = data + len;
-     eof = pe;
-     
-     assert(*pe == '\0' && "pointer does not end on NULL");
-     
-     
- #line 980 "ext/gherkin_lexer_hu/gherkin_lexer_hu.c"
- 	{
- 	cs = lexer_start;
- 	}
- 
- #line 425 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/hu.c.rl"
-     
- #line 987 "ext/gherkin_lexer_hu/gherkin_lexer_hu.c"
- 	{
- 	int _klen;
- 	unsigned int _trans;
- 	const char *_acts;
- 	unsigned int _nacts;
- 	const char *_keys;
- 
- 	if ( p == pe )
- 		goto _test_eof;
- 	if ( cs == 0 )
- 		goto _out;
- _resume:
- 	_keys = _lexer_trans_keys + _lexer_key_offsets[cs];
- 	_trans = _lexer_index_offsets[cs];
- 
- 	_klen = _lexer_single_lengths[cs];
- 	if ( _klen > 0 ) {
- 		const char *_lower = _keys;
- 		const char *_mid;
- 		const char *_upper = _keys + _klen - 1;
- 		while (1) {
- 			if ( _upper < _lower )
- 				break;
- 
- 			_mid = _lower + ((_upper-_lower) >> 1);
- 			if ( (*p) < *_mid )
- 				_upper = _mid - 1;
- 			else if ( (*p) > *_mid )
- 				_lower = _mid + 1;
- 			else {
- 				_trans += (_mid - _keys);
- 				goto _match;
- 			}
- 		}
- 		_keys += _klen;
- 		_trans += _klen;
- 	}
- 
- 	_klen = _lexer_range_lengths[cs];
- 	if ( _klen > 0 ) {
- 		const char *_lower = _keys;
- 		const char *_mid;
- 		const char *_upper = _keys + (_klen<<1) - 2;
- 		while (1) {
- 			if ( _upper < _lower )
- 				break;
- 
- 			_mid = _lower + (((_upper-_lower) >> 1) & ~1);
- 			if ( (*p) < _mid[0] )
- 				_upper = _mid - 2;
- 			else if ( (*p) > _mid[1] )
- 				_lower = _mid + 2;
- 			else {
- 				_trans += ((_mid - _keys)>>1);
- 				goto _match;
- 			}
- 		}
- 		_trans += _klen;
- 	}
- 
- _match:
- 	cs = _lexer_trans_targs[_trans];
- 
- 	if ( _lexer_trans_actions[_trans] == 0 )
- 		goto _again;
- 
- 	_acts = _lexer_actions + _lexer_trans_actions[_trans];
- 	_nacts = (unsigned int) *_acts++;
- 	while ( _nacts-- > 0 )
- 	{
- 		switch ( *_acts++ )
- 		{
- 	case 0:
- #line 83 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/hu.c.rl"
- 	{
- 		MARK(content_start, p);
-     lexer->current_line = lexer->line_number;
-     lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2;
-   }
- 	break;
- 	case 1:
- #line 89 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/hu.c.rl"
- 	{
-     MARK(content_start, p);
-   }
- 	break;
- 	case 2:
- #line 93 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/hu.c.rl"
- 	{
-     lexer->current_line = lexer->line_number;
-     lexer->start_col = p - data - lexer->last_newline;
-   }
- 	break;
- 	case 3:
- #line 98 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/hu.c.rl"
- 	{
-     int len = LEN(content_start, PTR_TO(final_newline));
-     int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end));
- 
-     if (len < 0) len = 0;
-     if (type_len < 0) len = 0;
- 
-     store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line);
-   }
- 	break;
- 	case 4:
- #line 108 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/hu.c.rl"
- 	{ 
-     MARK(docstring_content_type_start, p);
-   }
- 	break;
- 	case 5:
- #line 112 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/hu.c.rl"
- 	{ 
-     MARK(docstring_content_type_end, p);
-   }
- 	break;
- 	case 6:
- #line 116 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/hu.c.rl"
- 	{
-     STORE_KW_END_CON(feature);
-   }
- 	break;
- 	case 7:
- #line 120 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/hu.c.rl"
- 	{
-     STORE_KW_END_CON(background);
-   }
- 	break;
- 	case 8:
- #line 124 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/hu.c.rl"
- 	{
-     STORE_KW_END_CON(scenario);
-   }
- 	break;
- 	case 9:
- #line 128 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/hu.c.rl"
- 	{
-     STORE_KW_END_CON(scenario_outline);
-   }
- 	break;
- 	case 10:
- #line 132 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/hu.c.rl"
- 	{
-     STORE_KW_END_CON(examples);
-   }
- 	break;
- 	case 11:
- #line 136 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/hu.c.rl"
- 	{
-     store_kw_con(listener, "step",
-       PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-       PTR_TO(content_start), LEN(content_start, p), 
-       lexer->current_line);
-   }
- 	break;
- 	case 12:
- #line 143 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/hu.c.rl"
- 	{
-     STORE_ATTR(comment);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 13:
- #line 148 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/hu.c.rl"
- 	{
-     STORE_ATTR(tag);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 14:
- #line 153 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/hu.c.rl"
- 	{
-     lexer->line_number += 1;
-     MARK(final_newline, p);
-   }
- 	break;
- 	case 15:
- #line 158 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/hu.c.rl"
- 	{
-     MARK(last_newline, p + 1);
-   }
- 	break;
- 	case 16:
- #line 162 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/hu.c.rl"
- 	{
-     if (lexer->mark == 0) {
-       MARK(mark, p);
-     }
-   }
- 	break;
- 	case 17:
- #line 168 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/hu.c.rl"
- 	{
-     MARK(keyword_end, p);
-     MARK(keyword_start, PTR_TO(mark));
-     MARK(content_start, p + 1);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 18:
- #line 175 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/hu.c.rl"
- 	{
-     MARK(content_end, p);
-   }
- 	break;
- 	case 19:
- #line 179 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/hu.c.rl"
- 	{
-     p = p - 1;
-     lexer->current_line = lexer->line_number;
-     current_row = rb_ary_new();
-   }
- 	break;
- 	case 20:
- #line 185 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/hu.c.rl"
- 	{
- 		MARK(content_start, p);
-   }
- 	break;
- 	case 21:
- #line 189 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/hu.c.rl"
- 	{
-     VALUE re_pipe, re_newline, re_backslash;
-     VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
-     rb_funcall(con, rb_intern("strip!"), 0);
-     re_pipe      = rb_reg_regcomp(rb_str_new2("\\\\\\|"));
-     re_newline   = rb_reg_regcomp(rb_str_new2("\\\\n"));
-     re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_pipe,      rb_str_new2("|"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_newline,   rb_str_new2("\n"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\"));
- 
-     rb_ary_push(current_row, con);
-   }
- 	break;
- 	case 22:
- #line 203 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/hu.c.rl"
- 	{
-     rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
-   }
- 	break;
- 	case 23:
- #line 207 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/hu.c.rl"
- 	{
-     int line;
-     if (cs < lexer_first_final) {
-       size_t count = 0;
-       VALUE newstr_val;
-       char *newstr;
-       int newstr_count = 0;        
-       size_t len;
-       const char *buff;
-       if (lexer->last_newline != 0) {
-         len = LEN(last_newline, eof);
-         buff = PTR_TO(last_newline);
-       } else {
-         len = strlen(data);
-         buff = data;
-       }
- 
-       // Allocate as a ruby string so that it gets cleaned up by GC
-       newstr_val = rb_str_new(buff, len);
-       newstr = RSTRING_PTR(newstr_val);
- 
- 
-       for (count = 0; count < len; count++) {
-         if(buff[count] == 10) {
-           newstr[newstr_count] = '\0'; // terminate new string at first newline found
-           break;
-         } else {
-           if (buff[count] == '%') {
-             newstr[newstr_count++] = buff[count];
-             newstr[newstr_count] = buff[count];
-           } else {
-             newstr[newstr_count] = buff[count];
-           }
-         }
-         newstr_count++;
-       }
- 
-       line = lexer->line_number;
-       lexer_init(lexer); // Re-initialize so we can scan again with the same lexer
-       raise_lexer_error(newstr, line);
-     } else {
-       rb_funcall(listener, rb_intern("eof"), 0);
-     }
-   }
- 	break;
- #line 1277 "ext/gherkin_lexer_hu/gherkin_lexer_hu.c"
- 		}
- 	}
- 
- _again:
- 	if ( cs == 0 )
- 		goto _out;
- 	if ( ++p != pe )
- 		goto _resume;
- 	_test_eof: {}
- 	if ( p == eof )
- 	{
- 	const char *__acts = _lexer_actions + _lexer_eof_actions[cs];
- 	unsigned int __nacts = (unsigned int) *__acts++;
- 	while ( __nacts-- > 0 ) {
- 		switch ( *__acts++ ) {
- 	case 23:
- #line 207 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/hu.c.rl"
- 	{
-     int line;
-     if (cs < lexer_first_final) {
-       size_t count = 0;
-       VALUE newstr_val;
-       char *newstr;
-       int newstr_count = 0;        
-       size_t len;
-       const char *buff;
-       if (lexer->last_newline != 0) {
-         len = LEN(last_newline, eof);
-         buff = PTR_TO(last_newline);
-       } else {
-         len = strlen(data);
-         buff = data;
-       }
- 
-       // Allocate as a ruby string so that it gets cleaned up by GC
-       newstr_val = rb_str_new(buff, len);
-       newstr = RSTRING_PTR(newstr_val);
- 
- 
-       for (count = 0; count < len; count++) {
-         if(buff[count] == 10) {
-           newstr[newstr_count] = '\0'; // terminate new string at first newline found
-           break;
-         } else {
-           if (buff[count] == '%') {
-             newstr[newstr_count++] = buff[count];
-             newstr[newstr_count] = buff[count];
-           } else {
-             newstr[newstr_count] = buff[count];
-           }
-         }
-         newstr_count++;
-       }
- 
-       line = lexer->line_number;
-       lexer_init(lexer); // Re-initialize so we can scan again with the same lexer
-       raise_lexer_error(newstr, line);
-     } else {
-       rb_funcall(listener, rb_intern("eof"), 0);
-     }
-   }
- 	break;
- #line 1340 "ext/gherkin_lexer_hu/gherkin_lexer_hu.c"
- 		}
- 	}
- 	}
- 
- 	_out: {}
- 	}
- 
- #line 426 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/hu.c.rl"
- 
-     assert(p <= pe && "data overflow after parsing execute");
-     assert(lexer->content_start <= len && "content starts after data end");
-     assert(lexer->mark < len && "mark is after data end");
-     
-     // Reset lexer by re-initializing the whole thing
-     lexer_init(lexer);
- 
-     if (cs == lexer_error) {
-       rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails.");
-     } else {
-       return Qtrue;
-     }
-   }
- }
- 
- void Init_gherkin_lexer_hu()
- {
-   mGherkin = rb_define_module("Gherkin");
-   mGherkinLexer = rb_define_module_under(mGherkin, "Lexer");
-   rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError"));
- 
-   mCLexer = rb_define_module_under(mGherkin, "CLexer");
-   cI18nLexer = rb_define_class_under(mCLexer, "Hu", rb_cObject);
-   rb_define_alloc_func(cI18nLexer, CLexer_alloc);
-   rb_define_method(cI18nLexer, "initialize", CLexer_init, 1);
-   rb_define_method(cI18nLexer, "scan", CLexer_scan, 1);
- }
- 
 -#line 1 "ragel/i18n/hu.c.rl"
 -#include <assert.h>
 -#include <ruby.h>
 -
 -#if defined(_WIN32)
 -#include <stddef.h>
 -#endif
 -
 -#ifdef HAVE_RUBY_RE_H
 -#include <ruby/re.h>
 -#else
 -#include <re.h>
 -#endif
 -
 -#ifdef HAVE_RUBY_ENCODING_H
 -#include <ruby/encoding.h>
 -#define ENCODED_STR_NEW(ptr, len) \
 -    rb_enc_str_new(ptr, len, rb_utf8_encoding())
 -#else
 -#define ENCODED_STR_NEW(ptr, len) \
 -    rb_str_new(ptr, len)
 -#endif
 -
 -#ifndef RSTRING_PTR
 -#define RSTRING_PTR(s) (RSTRING(s)->ptr)
 -#endif
 -
 -#ifndef RSTRING_LEN
 -#define RSTRING_LEN(s) (RSTRING(s)->len)
 -#endif
 -
 -#define DATA_GET(FROM, TYPE, NAME) \
 -  Data_Get_Struct(FROM, TYPE, NAME); \
 -  if (NAME == NULL) { \
 -    rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \
 -  }
 - 
 -typedef struct lexer_state {
 -  int content_len;
 -  int line_number;
 -  int current_line;
 -  int start_col;
 -  size_t mark;
 -  size_t keyword_start;
 -  size_t keyword_end;
 -  size_t next_keyword_start;
 -  size_t content_start;
 -  size_t content_end;
 -  size_t docstring_content_type_start;
 -  size_t docstring_content_type_end;
 -  size_t query_start;
 -  size_t last_newline;
 -  size_t final_newline;
 -} lexer_state;
 -
 -static VALUE mGherkin;
 -static VALUE mGherkinLexer;
 -static VALUE mCLexer;
 -static VALUE cI18nLexer;
 -static VALUE rb_eGherkinLexingError;
 -
 -#define LEN(AT, P) (P - data - lexer->AT)
 -#define MARK(M, P) (lexer->M = (P) - data)
 -#define PTR_TO(P) (data + lexer->P)
 -
 -#define STORE_KW_END_CON(EVENT) \
 -  store_multiline_kw_con(listener, # EVENT, \
 -    PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \
 -    PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \
 -    lexer->current_line, lexer->start_col); \
 -    if (lexer->content_end != 0) { \
 -      p = PTR_TO(content_end - 1); \
 -    } \
 -    lexer->content_end = 0
 -
 -#define STORE_ATTR(ATTR) \
 -    store_attr(listener, # ATTR, \
 -      PTR_TO(content_start), LEN(content_start, p), \
 -      lexer->line_number)
 -
 -
 -#line 254 "ragel/i18n/hu.c.rl"
 -
 -
 -/** Data **/
 -
 -#line 89 "ext/gherkin_lexer_hu/gherkin_lexer_hu.c"
 -static const char _lexer_actions[] = {
 -	0, 1, 0, 1, 1, 1, 2, 1, 
 -	3, 1, 4, 1, 5, 1, 6, 1, 
 -	7, 1, 8, 1, 9, 1, 10, 1, 
 -	11, 1, 12, 1, 13, 1, 16, 1, 
 -	17, 1, 18, 1, 19, 1, 20, 1, 
 -	21, 1, 22, 1, 23, 2, 1, 18, 
 -	2, 4, 5, 2, 13, 0, 2, 14, 
 -	15, 2, 17, 0, 2, 17, 2, 2, 
 -	17, 16, 2, 17, 19, 2, 18, 6, 
 -	2, 18, 7, 2, 18, 8, 2, 18, 
 -	9, 2, 18, 10, 2, 18, 16, 2, 
 -	20, 21, 2, 22, 0, 2, 22, 2, 
 -	2, 22, 16, 2, 22, 19, 3, 3, 
 -	14, 15, 3, 5, 14, 15, 3, 11, 
 -	14, 15, 3, 12, 14, 15, 3, 13, 
 -	14, 15, 3, 14, 15, 18, 3, 17, 
 -	0, 11, 3, 17, 14, 15, 4, 1, 
 -	14, 15, 18, 4, 4, 5, 14, 15, 
 -	4, 17, 0, 14, 15, 5, 17, 0, 
 -	11, 14, 15
 -};
 -
 -static const short _lexer_key_offsets[] = {
 -	0, 0, 19, 20, 21, 22, 24, 26, 
 -	44, 45, 46, 48, 50, 55, 60, 65, 
 -	70, 74, 78, 80, 81, 82, 83, 84, 
 -	85, 86, 87, 88, 89, 90, 91, 92, 
 -	93, 94, 95, 100, 107, 112, 115, 116, 
 -	117, 118, 119, 120, 121, 123, 124, 125, 
 -	126, 127, 128, 129, 130, 131, 132, 133, 
 -	134, 135, 136, 137, 138, 139, 140, 141, 
 -	142, 143, 144, 146, 147, 148, 149, 150, 
 -	151, 152, 153, 154, 155, 156, 171, 173, 
 -	175, 177, 195, 197, 198, 199, 200, 201, 
 -	202, 203, 204, 205, 206, 221, 223, 225, 
 -	227, 229, 231, 233, 235, 237, 239, 241, 
 -	243, 245, 247, 249, 251, 253, 255, 259, 
 -	261, 263, 265, 267, 269, 271, 274, 276, 
 -	278, 280, 282, 284, 286, 288, 290, 292, 
 -	294, 296, 298, 300, 302, 304, 306, 308, 
 -	310, 312, 314, 316, 319, 321, 323, 325, 
 -	327, 329, 331, 333, 335, 337, 339, 341, 
 -	343, 345, 347, 349, 351, 353, 355, 357, 
 -	359, 360, 361, 362, 363, 364, 365, 366, 
 -	367, 368, 369, 370, 381, 383, 385, 387, 
 -	389, 391, 393, 395, 397, 399, 401, 403, 
 -	405, 407, 409, 411, 413, 415, 417, 419, 
 -	421, 423, 425, 427, 429, 431, 433, 435, 
 -	438, 440, 442, 444, 446, 448, 450, 452, 
 -	454, 456, 458, 460, 462, 464, 466, 468, 
 -	470, 472, 474, 476, 478, 480, 482, 484, 
 -	486, 488, 490, 492, 494, 496, 498, 499, 
 -	500, 501, 502, 503, 504, 505, 506, 507, 
 -	508, 509, 510, 511, 518, 520, 522, 524, 
 -	526, 528, 530, 532, 534, 536, 540, 546, 
 -	549, 551, 557, 575, 577, 579, 581, 583, 
 -	585, 587, 589, 591, 593, 595, 597, 599, 
 -	601, 603, 607, 609, 611, 613, 615, 617, 
 -	619, 622, 624, 626, 628, 630, 632, 634, 
 -	636, 638, 640, 642, 644, 646, 648, 650, 
 -	652, 654, 656, 658, 660, 662, 664, 666, 
 -	668, 670, 672, 674, 676, 678, 680, 682, 
 -	684, 686, 688, 690, 691, 692, 707, 709, 
 -	711, 713, 715, 717, 719, 721, 723, 725, 
 -	727, 729, 731, 733, 735, 737, 739, 741, 
 -	745, 747, 749, 751, 753, 755, 757, 760, 
 -	762, 764, 766, 768, 770, 772, 774, 776, 
 -	778, 780, 782, 784, 786, 788, 790, 792, 
 -	794, 796, 798, 800, 802, 805, 807, 809, 
 -	811, 813, 815, 817, 819, 821, 824, 826, 
 -	828, 830, 832, 834, 836, 838, 840, 842, 
 -	844, 846, 848, 850, 852, 854, 856, 858, 
 -	859, 860
 -};
 -
 -static const char _lexer_trans_keys[] = {
 -	-61, -17, 10, 32, 34, 35, 37, 42, 
 -	64, 65, 68, 70, 72, 74, 77, 80, 
 -	124, 9, 13, -119, 115, 32, 10, 13, 
 -	10, 13, -61, 10, 32, 34, 35, 37, 
 -	42, 64, 65, 68, 70, 72, 74, 77, 
 -	80, 124, 9, 13, 34, 34, 10, 13, 
 -	10, 13, 10, 32, 34, 9, 13, 10, 
 -	32, 34, 9, 13, 10, 32, 34, 9, 
 -	13, 10, 32, 34, 9, 13, 10, 32, 
 -	9, 13, 10, 32, 9, 13, 10, 13, 
 -	10, 95, 70, 69, 65, 84, 85, 82, 
 -	69, 95, 69, 78, 68, 95, 37, 13, 
 -	32, 64, 9, 10, 9, 10, 13, 32, 
 -	64, 11, 12, 10, 32, 64, 9, 13, 
 -	100, 107, 109, 111, 116, 116, 107, 111, 
 -	114, 101, 105, 110, 110, 121, 105, 98, 
 -	101, 110, 101, 111, 114, 103, 97, 116, 
 -	-61, -77, 107, -61, -74, 110, 121, 118, 
 -	32, 58, 118, -61, -95, 122, 108, 97, 
 -	116, 58, 10, 10, -61, 10, 32, 35, 
 -	37, 42, 64, 65, 68, 70, 72, 74, 
 -	77, 9, 13, -119, 10, 10, 115, 10, 
 -	32, -61, 10, 32, 34, 35, 37, 42, 
 -	64, 65, 68, 70, 72, 74, 77, 80, 
 -	124, 9, 13, -61, 97, -95, 116, 116, 
 -	-61, -87, 114, 58, 10, 10, -61, 10, 
 -	32, 35, 37, 42, 64, 65, 68, 70, 
 -	72, 74, 77, 9, 13, -119, 10, 10, 
 -	115, 10, 32, 10, 95, 10, 70, 10, 
 -	69, 10, 65, 10, 84, 10, 85, 10, 
 -	82, 10, 69, 10, 95, 10, 69, 10, 
 -	78, 10, 68, 10, 95, 10, 37, 10, 
 -	100, 107, 109, 10, 111, 10, 116, 10, 
 -	116, 10, 107, 10, 111, 10, 114, 10, 
 -	101, 105, 10, 110, 10, 110, 10, 121, 
 -	10, 105, 10, 98, 10, 101, 10, 110, 
 -	10, 101, 10, 111, 10, 114, 10, 103, 
 -	10, 97, 10, 116, -61, 10, -77, 10, 
 -	10, 107, -61, 10, -74, 10, 10, 110, 
 -	10, 121, 10, 118, 10, 32, 58, 10, 
 -	118, -61, 10, -95, 10, 10, 122, 10, 
 -	108, 10, 97, 10, 116, 10, 58, 10, 
 -	97, 10, 101, 10, 108, 10, 108, 10, 
 -	101, 10, 109, 10, 122, -59, 10, -111, 
 -	10, 10, 97, 10, 106, 10, 100, 101, 
 -	108, 108, 101, 109, 122, -59, -111, 58, 
 -	10, 10, 10, 32, 35, 37, 64, 70, 
 -	72, 74, 80, 9, 13, 10, 95, 10, 
 -	70, 10, 69, 10, 65, 10, 84, 10, 
 -	85, 10, 82, 10, 69, 10, 95, 10, 
 -	69, 10, 78, 10, 68, 10, 95, 10, 
 -	37, 10, 111, 10, 114, 10, 103, 10, 
 -	97, 10, 116, -61, 10, -77, 10, 10, 
 -	107, -61, 10, -74, 10, 10, 110, 10, 
 -	121, 10, 118, 10, 32, 58, 10, 118, 
 -	-61, 10, -95, 10, 10, 122, 10, 108, 
 -	10, 97, 10, 116, 10, 58, -61, 10, 
 -	-95, 10, 10, 116, 10, 116, -61, 10, 
 -	-87, 10, 10, 114, 10, 101, 10, 108, 
 -	10, 108, 10, 101, 10, 109, 10, 122, 
 -	-59, 10, -111, 10, -61, 10, -87, 10, 
 -	10, 108, 10, 100, -61, 10, -95, 10, 
 -	10, 107, 97, 106, 100, -61, -87, 108, 
 -	100, -61, -95, 107, 58, 10, 10, 10, 
 -	32, 35, 74, 124, 9, 13, 10, 101, 
 -	10, 108, 10, 108, 10, 101, 10, 109, 
 -	10, 122, -59, 10, -111, 10, 10, 58, 
 -	32, 124, 9, 13, 10, 32, 92, 124, 
 -	9, 13, 10, 92, 124, 10, 92, 10, 
 -	32, 92, 124, 9, 13, -61, 10, 32, 
 -	34, 35, 37, 42, 64, 65, 68, 70, 
 -	72, 74, 77, 80, 124, 9, 13, 10, 
 -	95, 10, 70, 10, 69, 10, 65, 10, 
 -	84, 10, 85, 10, 82, 10, 69, 10, 
 -	95, 10, 69, 10, 78, 10, 68, 10, 
 -	95, 10, 37, 10, 100, 107, 109, 10, 
 -	111, 10, 116, 10, 116, 10, 107, 10, 
 -	111, 10, 114, 10, 101, 105, 10, 110, 
 -	10, 110, 10, 121, 10, 105, 10, 98, 
 -	10, 101, 10, 110, 10, 101, 10, 111, 
 -	10, 114, 10, 103, 10, 97, 10, 116, 
 -	-61, 10, -77, 10, 10, 107, -61, 10, 
 -	-74, 10, 10, 110, 10, 121, 10, 118, 
 -	10, 58, 10, 97, 10, 101, 10, 108, 
 -	10, 108, 10, 101, 10, 109, 10, 122, 
 -	-59, 10, -111, 10, 10, 97, 10, 106, 
 -	10, 100, 10, 10, -61, 10, 32, 35, 
 -	37, 42, 64, 65, 68, 70, 72, 74, 
 -	77, 9, 13, -119, 10, 10, 115, 10, 
 -	32, 10, 95, 10, 70, 10, 69, 10, 
 -	65, 10, 84, 10, 85, 10, 82, 10, 
 -	69, 10, 95, 10, 69, 10, 78, 10, 
 -	68, 10, 95, 10, 37, 10, 100, 107, 
 -	109, 10, 111, 10, 116, 10, 116, 10, 
 -	107, 10, 111, 10, 114, 10, 101, 105, 
 -	10, 110, 10, 110, 10, 121, 10, 105, 
 -	10, 98, 10, 101, 10, 110, 10, 101, 
 -	10, 111, 10, 114, 10, 103, 10, 97, 
 -	10, 116, -61, 10, -77, 10, 10, 107, 
 -	-61, 10, -74, 10, 10, 110, 10, 121, 
 -	10, 118, 10, 32, 58, 10, 118, -61, 
 -	10, -95, 10, 10, 122, 10, 108, 10, 
 -	97, 10, 116, 10, 58, -61, 10, 97, 
 -	-95, 10, 10, 116, 10, 116, -61, 10, 
 -	-87, 10, 10, 114, 10, 101, 10, 108, 
 -	10, 108, 10, 101, 10, 109, 10, 122, 
 -	-59, 10, -111, 10, 10, 97, 10, 106, 
 -	10, 100, -69, -65, 0
 -};
 -
 -static const char _lexer_single_lengths[] = {
 -	0, 17, 1, 1, 1, 2, 2, 16, 
 -	1, 1, 2, 2, 3, 3, 3, 3, 
 -	2, 2, 2, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 3, 5, 3, 3, 1, 1, 
 -	1, 1, 1, 1, 2, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 2, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 13, 2, 2, 
 -	2, 16, 2, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 13, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 4, 2, 
 -	2, 2, 2, 2, 2, 3, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 3, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 9, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 3, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 5, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 4, 3, 
 -	2, 4, 16, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 4, 2, 2, 2, 2, 2, 2, 
 -	3, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 1, 1, 13, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 4, 
 -	2, 2, 2, 2, 2, 2, 3, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 3, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 3, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 1, 
 -	1, 0
 -};
 -
 -static const char _lexer_range_lengths[] = {
 -	0, 1, 0, 0, 0, 0, 0, 1, 
 -	0, 0, 0, 0, 1, 1, 1, 1, 
 -	1, 1, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 1, 1, 1, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 1, 0, 0, 
 -	0, 1, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 1, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 1, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 1, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 1, 1, 0, 
 -	0, 1, 1, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 1, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0
 -};
 -
 -static const short _lexer_index_offsets[] = {
 -	0, 0, 19, 21, 23, 25, 28, 31, 
 -	49, 51, 53, 56, 59, 64, 69, 74, 
 -	79, 83, 87, 90, 92, 94, 96, 98, 
 -	100, 102, 104, 106, 108, 110, 112, 114, 
 -	116, 118, 120, 125, 132, 137, 141, 143, 
 -	145, 147, 149, 151, 153, 156, 158, 160, 
 -	162, 164, 166, 168, 170, 172, 174, 176, 
 -	178, 180, 182, 184, 186, 188, 190, 192, 
 -	194, 196, 198, 201, 203, 205, 207, 209, 
 -	211, 213, 215, 217, 219, 221, 236, 239, 
 -	242, 245, 263, 266, 268, 270, 272, 274, 
 -	276, 278, 280, 282, 284, 299, 302, 305, 
 -	308, 311, 314, 317, 320, 323, 326, 329, 
 -	332, 335, 338, 341, 344, 347, 350, 355, 
 -	358, 361, 364, 367, 370, 373, 377, 380, 
 -	383, 386, 389, 392, 395, 398, 401, 404, 
 -	407, 410, 413, 416, 419, 422, 425, 428, 
 -	431, 434, 437, 440, 444, 447, 450, 453, 
 -	456, 459, 462, 465, 468, 471, 474, 477, 
 -	480, 483, 486, 489, 492, 495, 498, 501, 
 -	504, 506, 508, 510, 512, 514, 516, 518, 
 -	520, 522, 524, 526, 537, 540, 543, 546, 
 -	549, 552, 555, 558, 561, 564, 567, 570, 
 -	573, 576, 579, 582, 585, 588, 591, 594, 
 -	597, 600, 603, 606, 609, 612, 615, 618, 
 -	622, 625, 628, 631, 634, 637, 640, 643, 
 -	646, 649, 652, 655, 658, 661, 664, 667, 
 -	670, 673, 676, 679, 682, 685, 688, 691, 
 -	694, 697, 700, 703, 706, 709, 712, 714, 
 -	716, 718, 720, 722, 724, 726, 728, 730, 
 -	732, 734, 736, 738, 745, 748, 751, 754, 
 -	757, 760, 763, 766, 769, 772, 776, 782, 
 -	786, 789, 795, 813, 816, 819, 822, 825, 
 -	828, 831, 834, 837, 840, 843, 846, 849, 
 -	852, 855, 860, 863, 866, 869, 872, 875, 
 -	878, 882, 885, 888, 891, 894, 897, 900, 
 -	903, 906, 909, 912, 915, 918, 921, 924, 
 -	927, 930, 933, 936, 939, 942, 945, 948, 
 -	951, 954, 957, 960, 963, 966, 969, 972, 
 -	975, 978, 981, 984, 986, 988, 1003, 1006, 
 -	1009, 1012, 1015, 1018, 1021, 1024, 1027, 1030, 
 -	1033, 1036, 1039, 1042, 1045, 1048, 1051, 1054, 
 -	1059, 1062, 1065, 1068, 1071, 1074, 1077, 1081, 
 -	1084, 1087, 1090, 1093, 1096, 1099, 1102, 1105, 
 -	1108, 1111, 1114, 1117, 1120, 1123, 1126, 1129, 
 -	1132, 1135, 1138, 1141, 1144, 1148, 1151, 1154, 
 -	1157, 1160, 1163, 1166, 1169, 1172, 1176, 1179, 
 -	1182, 1185, 1188, 1191, 1194, 1197, 1200, 1203, 
 -	1206, 1209, 1212, 1215, 1218, 1221, 1224, 1227, 
 -	1229, 1231
 -};
 -
 -static const short _lexer_trans_targs[] = {
 -	2, 391, 7, 7, 8, 18, 20, 4, 
 -	34, 37, 52, 53, 82, 160, 230, 233, 
 -	253, 7, 0, 3, 0, 4, 0, 5, 
 -	0, 7, 19, 6, 7, 19, 6, 2, 
 -	7, 7, 8, 18, 20, 4, 34, 37, 
 -	52, 53, 82, 160, 230, 233, 253, 7, 
 -	0, 9, 0, 10, 0, 12, 11, 11, 
 -	12, 11, 11, 13, 13, 14, 13, 13, 
 -	13, 13, 14, 13, 13, 13, 13, 15, 
 -	13, 13, 13, 13, 16, 13, 13, 7, 
 -	17, 17, 0, 7, 17, 17, 0, 7, 
 -	19, 18, 7, 0, 21, 0, 22, 0, 
 -	23, 0, 24, 0, 25, 0, 26, 0, 
 -	27, 0, 28, 0, 29, 0, 30, 0, 
 -	31, 0, 32, 0, 33, 0, 393, 0, 
 -	0, 0, 0, 0, 35, 36, 7, 36, 
 -	36, 34, 35, 35, 7, 36, 34, 36, 
 -	0, 38, 41, 44, 0, 39, 0, 40, 
 -	0, 4, 0, 42, 0, 43, 0, 4, 
 -	0, 45, 41, 0, 46, 0, 47, 0, 
 -	48, 0, 49, 0, 50, 0, 51, 0, 
 -	4, 0, 4, 0, 54, 0, 55, 0, 
 -	56, 0, 57, 0, 58, 0, 59, 0, 
 -	60, 0, 61, 0, 62, 0, 63, 0, 
 -	64, 0, 65, 0, 66, 0, 67, 315, 
 -	0, 68, 0, 69, 0, 70, 0, 71, 
 -	0, 72, 0, 73, 0, 74, 0, 75, 
 -	0, 77, 76, 77, 76, 78, 77, 77, 
 -	7, 259, 80, 7, 273, 288, 289, 303, 
 -	304, 312, 77, 76, 79, 77, 76, 77, 
 -	80, 76, 77, 81, 76, 2, 7, 7, 
 -	8, 18, 20, 4, 34, 37, 52, 53, 
 -	82, 160, 230, 233, 253, 7, 0, 83, 
 -	4, 0, 84, 0, 85, 0, 86, 0, 
 -	87, 0, 88, 0, 89, 0, 90, 0, 
 -	92, 91, 92, 91, 93, 92, 92, 7, 
 -	96, 95, 7, 110, 125, 126, 148, 149, 
 -	157, 92, 91, 94, 92, 91, 92, 95, 
 -	91, 92, 81, 91, 92, 97, 91, 92, 
 -	98, 91, 92, 99, 91, 92, 100, 91, 
 -	92, 101, 91, 92, 102, 91, 92, 103, 
 -	91, 92, 104, 91, 92, 105, 91, 92, 
 -	106, 91, 92, 107, 91, 92, 108, 91, 
 -	92, 109, 91, 92, 7, 91, 92, 111, 
 -	114, 117, 91, 92, 112, 91, 92, 113, 
 -	91, 92, 95, 91, 92, 115, 91, 92, 
 -	116, 91, 92, 95, 91, 92, 118, 114, 
 -	91, 92, 119, 91, 92, 120, 91, 92, 
 -	121, 91, 92, 122, 91, 92, 123, 91, 
 -	92, 124, 91, 92, 95, 91, 92, 95, 
 -	91, 92, 127, 91, 92, 128, 91, 92, 
 -	129, 91, 92, 130, 91, 92, 131, 91, 
 -	132, 92, 91, 133, 92, 91, 92, 134, 
 -	91, 135, 92, 91, 136, 92, 91, 92, 
 -	137, 91, 92, 138, 91, 92, 139, 91, 
 -	92, 140, 81, 91, 92, 141, 91, 142, 
 -	92, 91, 143, 92, 91, 92, 144, 91, 
 -	92, 145, 91, 92, 146, 91, 92, 147, 
 -	91, 92, 81, 91, 92, 95, 91, 92, 
 -	150, 91, 92, 151, 91, 92, 152, 91, 
 -	92, 153, 91, 92, 154, 91, 92, 155, 
 -	91, 156, 92, 91, 147, 92, 91, 92, 
 -	158, 91, 92, 159, 91, 92, 95, 91, 
 -	161, 0, 162, 0, 163, 0, 164, 0, 
 -	165, 0, 166, 0, 167, 0, 168, 0, 
 -	169, 0, 171, 170, 171, 170, 171, 171, 
 -	7, 172, 7, 186, 208, 215, 223, 171, 
 -	170, 171, 173, 170, 171, 174, 170, 171, 
 -	175, 170, 171, 176, 170, 171, 177, 170, 
 -	171, 178, 170, 171, 179, 170, 171, 180, 
 -	170, 171, 181, 170, 171, 182, 170, 171, 
 -	183, 170, 171, 184, 170, 171, 185, 170, 
 -	171, 7, 170, 171, 187, 170, 171, 188, 
 -	170, 171, 189, 170, 171, 190, 170, 171, 
 -	191, 170, 192, 171, 170, 193, 171, 170, 
 -	171, 194, 170, 195, 171, 170, 196, 171, 
 -	170, 171, 197, 170, 171, 198, 170, 171, 
 -	199, 170, 171, 200, 81, 170, 171, 201, 
 -	170, 202, 171, 170, 203, 171, 170, 171, 
 -	204, 170, 171, 205, 170, 171, 206, 170, 
 -	171, 207, 170, 171, 81, 170, 209, 171, 
 -	170, 210, 171, 170, 171, 211, 170, 171, 
 -	212, 170, 213, 171, 170, 214, 171, 170, 
 -	171, 207, 170, 171, 216, 170, 171, 217, 
 -	170, 171, 218, 170, 171, 219, 170, 171, 
 -	220, 170, 171, 221, 170, 222, 171, 170, 
 -	207, 171, 170, 224, 171, 170, 225, 171, 
 -	170, 171, 226, 170, 171, 227, 170, 228, 
 -	171, 170, 229, 171, 170, 171, 207, 170, 
 -	231, 0, 232, 0, 4, 0, 234, 0, 
 -	235, 0, 236, 0, 237, 0, 238, 0, 
 -	239, 0, 240, 0, 241, 0, 243, 242, 
 -	243, 242, 243, 243, 7, 244, 7, 243, 
 -	242, 243, 245, 242, 243, 246, 242, 243, 
 -	247, 242, 243, 248, 242, 243, 249, 242, 
 -	243, 250, 242, 251, 243, 242, 252, 243, 
 -	242, 243, 81, 242, 253, 254, 253, 0, 
 -	258, 257, 256, 254, 257, 255, 0, 256, 
 -	254, 255, 0, 256, 255, 258, 257, 256, 
 -	254, 257, 255, 2, 258, 258, 8, 18, 
 -	20, 4, 34, 37, 52, 53, 82, 160, 
 -	230, 233, 253, 258, 0, 77, 260, 76, 
 -	77, 261, 76, 77, 262, 76, 77, 263, 
 -	76, 77, 264, 76, 77, 265, 76, 77, 
 -	266, 76, 77, 267, 76, 77, 268, 76, 
 -	77, 269, 76, 77, 270, 76, 77, 271, 
 -	76, 77, 272, 76, 77, 7, 76, 77, 
 -	274, 277, 280, 76, 77, 275, 76, 77, 
 -	276, 76, 77, 80, 76, 77, 278, 76, 
 -	77, 279, 76, 77, 80, 76, 77, 281, 
 -	277, 76, 77, 282, 76, 77, 283, 76, 
 -	77, 284, 76, 77, 285, 76, 77, 286, 
 -	76, 77, 287, 76, 77, 80, 76, 77, 
 -	80, 76, 77, 290, 76, 77, 291, 76, 
 -	77, 292, 76, 77, 293, 76, 77, 294, 
 -	76, 295, 77, 76, 296, 77, 76, 77, 
 -	297, 76, 298, 77, 76, 299, 77, 76, 
 -	77, 300, 76, 77, 301, 76, 77, 302, 
 -	76, 77, 81, 76, 77, 80, 76, 77, 
 -	305, 76, 77, 306, 76, 77, 307, 76, 
 -	77, 308, 76, 77, 309, 76, 77, 310, 
 -	76, 311, 77, 76, 302, 77, 76, 77, 
 -	313, 76, 77, 314, 76, 77, 80, 76, 
 -	317, 316, 317, 316, 318, 317, 317, 7, 
 -	321, 320, 7, 335, 350, 351, 373, 380, 
 -	388, 317, 316, 319, 317, 316, 317, 320, 
 -	316, 317, 81, 316, 317, 322, 316, 317, 
 -	323, 316, 317, 324, 316, 317, 325, 316, 
 -	317, 326, 316, 317, 327, 316, 317, 328, 
 -	316, 317, 329, 316, 317, 330, 316, 317, 
 -	331, 316, 317, 332, 316, 317, 333, 316, 
 -	317, 334, 316, 317, 7, 316, 317, 336, 
 -	339, 342, 316, 317, 337, 316, 317, 338, 
 -	316, 317, 320, 316, 317, 340, 316, 317, 
 -	341, 316, 317, 320, 316, 317, 343, 339, 
 -	316, 317, 344, 316, 317, 345, 316, 317, 
 -	346, 316, 317, 347, 316, 317, 348, 316, 
 -	317, 349, 316, 317, 320, 316, 317, 320, 
 -	316, 317, 352, 316, 317, 353, 316, 317, 
 -	354, 316, 317, 355, 316, 317, 356, 316, 
 -	357, 317, 316, 358, 317, 316, 317, 359, 
 -	316, 360, 317, 316, 361, 317, 316, 317, 
 -	362, 316, 317, 363, 316, 317, 364, 316, 
 -	317, 365, 81, 316, 317, 366, 316, 367, 
 -	317, 316, 368, 317, 316, 317, 369, 316, 
 -	317, 370, 316, 317, 371, 316, 317, 372, 
 -	316, 317, 81, 316, 374, 317, 320, 316, 
 -	375, 317, 316, 317, 376, 316, 317, 377, 
 -	316, 378, 317, 316, 379, 317, 316, 317, 
 -	372, 316, 317, 381, 316, 317, 382, 316, 
 -	317, 383, 316, 317, 384, 316, 317, 385, 
 -	316, 317, 386, 316, 387, 317, 316, 372, 
 -	317, 316, 317, 389, 316, 317, 390, 316, 
 -	317, 320, 316, 392, 0, 7, 0, 0, 
 -	0
 -};
 -
 -static const unsigned char _lexer_trans_actions[] = {
 -	29, 0, 54, 0, 5, 1, 0, 29, 
 -	1, 29, 29, 29, 29, 29, 29, 29, 
 -	35, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 149, 126, 57, 110, 23, 0, 29, 
 -	54, 0, 5, 1, 0, 29, 1, 29, 
 -	29, 29, 29, 29, 29, 29, 35, 0, 
 -	43, 0, 43, 0, 43, 139, 48, 9, 
 -	106, 11, 0, 134, 45, 45, 45, 3, 
 -	122, 33, 33, 33, 0, 122, 33, 33, 
 -	33, 0, 122, 33, 0, 33, 0, 102, 
 -	7, 7, 43, 54, 0, 0, 43, 114, 
 -	25, 0, 54, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	43, 43, 43, 43, 0, 27, 118, 27, 
 -	27, 51, 27, 0, 54, 0, 1, 0, 
 -	43, 0, 0, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 144, 57, 54, 0, 84, 54, 0, 
 -	78, 33, 84, 78, 84, 84, 84, 84, 
 -	84, 84, 0, 0, 0, 54, 0, 54, 
 -	0, 0, 54, 19, 0, 63, 130, 31, 
 -	60, 57, 31, 63, 57, 63, 63, 63, 
 -	63, 63, 63, 63, 66, 31, 43, 0, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	144, 57, 54, 0, 84, 54, 0, 72, 
 -	33, 84, 72, 84, 84, 84, 84, 84, 
 -	84, 0, 0, 0, 54, 0, 54, 0, 
 -	0, 54, 15, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 15, 0, 54, 0, 
 -	0, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	0, 54, 0, 0, 54, 0, 54, 0, 
 -	0, 0, 54, 0, 0, 54, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 15, 0, 54, 0, 0, 0, 
 -	54, 0, 0, 54, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 15, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 0, 54, 0, 0, 54, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 144, 57, 54, 0, 54, 0, 
 -	69, 33, 69, 84, 84, 84, 84, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 13, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 0, 54, 0, 0, 54, 0, 
 -	54, 0, 0, 0, 54, 0, 0, 54, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 13, 0, 54, 0, 
 -	0, 0, 54, 0, 0, 54, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 13, 0, 0, 54, 
 -	0, 0, 54, 0, 54, 0, 0, 54, 
 -	0, 0, 0, 54, 0, 0, 54, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 54, 0, 0, 54, 0, 0, 0, 
 -	54, 0, 0, 54, 0, 54, 0, 0, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 144, 57, 
 -	54, 0, 54, 0, 81, 84, 81, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 0, 54, 0, 0, 54, 
 -	0, 54, 21, 0, 0, 0, 0, 43, 
 -	54, 37, 37, 87, 37, 37, 43, 0, 
 -	39, 0, 43, 0, 0, 54, 0, 0, 
 -	39, 0, 0, 96, 54, 0, 93, 90, 
 -	41, 96, 90, 96, 96, 96, 96, 96, 
 -	96, 96, 99, 0, 43, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 19, 0, 54, 
 -	0, 0, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 0, 54, 0, 0, 54, 0, 54, 
 -	0, 0, 0, 54, 0, 0, 54, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 19, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 0, 54, 0, 0, 54, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	144, 57, 54, 0, 84, 54, 0, 75, 
 -	33, 84, 75, 84, 84, 84, 84, 84, 
 -	84, 0, 0, 0, 54, 0, 54, 0, 
 -	0, 54, 17, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 17, 0, 54, 0, 
 -	0, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	0, 54, 0, 0, 54, 0, 54, 0, 
 -	0, 0, 54, 0, 0, 54, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 17, 0, 54, 0, 0, 0, 
 -	54, 0, 0, 54, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 17, 0, 0, 54, 0, 0, 
 -	0, 54, 0, 54, 0, 0, 54, 0, 
 -	0, 0, 54, 0, 0, 54, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 0, 54, 0, 0, 
 -	54, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 0, 43, 0, 43, 0, 
 -	0
 -};
 -
 -static const unsigned char _lexer_eof_actions[] = {
 -	0, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43
 -};
 -
 -static const int lexer_start = 1;
 -static const int lexer_first_final = 393;
 -static const int lexer_error = 0;
 -
 -static const int lexer_en_main = 1;
 -
 -
 -#line 258 "ragel/i18n/hu.c.rl"
 -
 -static VALUE 
 -unindent(VALUE con, int start_col)
 -{
 -  VALUE re;
 -  /* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */
 -  char pat[32]; 
 -  snprintf(pat, 32, "^[\t ]{0,%d}", start_col); 
 -  re = rb_reg_regcomp(rb_str_new2(pat));
 -  rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2(""));
 -
 -  return Qnil;
 -
 -}
 -
 -static void 
 -store_kw_con(VALUE listener, const char * event_name, 
 -             const char * keyword_at, size_t keyword_length, 
 -             const char * at,         size_t length, 
 -             int current_line)
 -{
 -  VALUE con = Qnil, kw = Qnil;
 -  kw = ENCODED_STR_NEW(keyword_at, keyword_length);
 -  con = ENCODED_STR_NEW(at, length);
 -  rb_funcall(con, rb_intern("strip!"), 0);
 -  rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); 
 -}
 -
 -static void
 -store_multiline_kw_con(VALUE listener, const char * event_name,
 -                      const char * keyword_at, size_t keyword_length,
 -                      const char * at,         size_t length,
 -                      int current_line, int start_col)
 -{
 -  VALUE split;
 -  VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil;
 -
 -  kw = ENCODED_STR_NEW(keyword_at, keyword_length);
 -  con = ENCODED_STR_NEW(at, length);
 -
 -  unindent(con, start_col);
 -  
 -  split = rb_str_split(con, "\n");
 -
 -  name = rb_funcall(split, rb_intern("shift"), 0);
 -  desc = rb_ary_join(split, rb_str_new2( "\n" ));
 -
 -  if( name == Qnil ) 
 -  {
 -    name = rb_str_new2("");
 -  }
 -  if( rb_funcall(desc, rb_intern("size"), 0) == 0) 
 -  {
 -    desc = rb_str_new2("");
 -  }
 -  rb_funcall(name, rb_intern("strip!"), 0);
 -  rb_funcall(desc, rb_intern("rstrip!"), 0);
 -  rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); 
 -}
 -
 -static void 
 -store_attr(VALUE listener, const char * attr_type,
 -           const char * at, size_t length, 
 -           int line)
 -{
 -  VALUE val = ENCODED_STR_NEW(at, length);
 -  rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line));
 -}
 -static void 
 -store_docstring_content(VALUE listener, 
 -          int start_col, 
 -          const char *type_at, size_t type_length,
 -          const char *at, size_t length, 
 -          int current_line)
 -{
 -  VALUE re2;
 -  VALUE unescape_escaped_quotes;
 -  VALUE con = ENCODED_STR_NEW(at, length);
 -  VALUE con_type = ENCODED_STR_NEW(type_at, type_length);
 -
 -  unindent(con, start_col);
 -
 -  re2 = rb_reg_regcomp(rb_str_new2("\r\\Z"));
 -  unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\""));
 -  rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2(""));
 -  rb_funcall(con_type, rb_intern("strip!"), 0);
 -  rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\""));
 -  rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line));
 -}
 -static void 
 -raise_lexer_error(const char * at, int line)
 -{ 
 -  rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at);
 -}
 -
 -static void lexer_init(lexer_state *lexer) {
 -  lexer->content_start = 0;
 -  lexer->content_end = 0;
 -  lexer->content_len = 0;
 -  lexer->docstring_content_type_start = 0;
 -  lexer->docstring_content_type_end = 0;
 -  lexer->mark = 0;
 -  lexer->keyword_start = 0;
 -  lexer->keyword_end = 0;
 -  lexer->next_keyword_start = 0;
 -  lexer->line_number = 1;
 -  lexer->last_newline = 0;
 -  lexer->final_newline = 0;
 -  lexer->start_col = 0;
 -}
 -
 -static VALUE CLexer_alloc(VALUE klass)
 -{
 -  VALUE obj;
 -  lexer_state *lxr = ALLOC(lexer_state);
 -  lexer_init(lxr);
 -
 -  obj = Data_Wrap_Struct(klass, NULL, -1, lxr);
 -
 -  return obj;
 -}
 -
 -static VALUE CLexer_init(VALUE self, VALUE listener)
 -{
 -  lexer_state *lxr; 
 -  rb_iv_set(self, "@listener", listener);
 -  
 -  lxr = NULL;
 -  DATA_GET(self, lexer_state, lxr);
 -  lexer_init(lxr);
 -  
 -  return self;
 -}
 -
 -static VALUE CLexer_scan(VALUE self, VALUE input)
 -{
 -  VALUE input_copy;
 -  char *data;
 -  size_t len;
 -  VALUE listener = rb_iv_get(self, "@listener");
 -
 -  lexer_state *lexer;
 -  lexer = NULL;
 -  DATA_GET(self, lexer_state, lexer);
 -
 -  input_copy = rb_str_dup(input);
 -
 -  rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%"));
 -  data = RSTRING_PTR(input_copy);
 -  len = RSTRING_LEN(input_copy);
 -  
 -  if (len == 0) { 
 -    rb_raise(rb_eGherkinLexingError, "No content to lex.");
 -  } else {
 -
 -    const char *p, *pe, *eof;
 -    int cs = 0;
 -    
 -    VALUE current_row = Qnil;
 -
 -    p = data;
 -    pe = data + len;
 -    eof = pe;
 -    
 -    assert(*pe == '\0' && "pointer does not end on NULL");
 -    
 -    
 -#line 980 "ext/gherkin_lexer_hu/gherkin_lexer_hu.c"
 -	{
 -	cs = lexer_start;
 -	}
 -
 -#line 425 "ragel/i18n/hu.c.rl"
 -    
 -#line 987 "ext/gherkin_lexer_hu/gherkin_lexer_hu.c"
 -	{
 -	int _klen;
 -	unsigned int _trans;
 -	const char *_acts;
 -	unsigned int _nacts;
 -	const char *_keys;
 -
 -	if ( p == pe )
 -		goto _test_eof;
 -	if ( cs == 0 )
 -		goto _out;
 -_resume:
 -	_keys = _lexer_trans_keys + _lexer_key_offsets[cs];
 -	_trans = _lexer_index_offsets[cs];
 -
 -	_klen = _lexer_single_lengths[cs];
 -	if ( _klen > 0 ) {
 -		const char *_lower = _keys;
 -		const char *_mid;
 -		const char *_upper = _keys + _klen - 1;
 -		while (1) {
 -			if ( _upper < _lower )
 -				break;
 -
 -			_mid = _lower + ((_upper-_lower) >> 1);
 -			if ( (*p) < *_mid )
 -				_upper = _mid - 1;
 -			else if ( (*p) > *_mid )
 -				_lower = _mid + 1;
 -			else {
 -				_trans += (unsigned int)(_mid - _keys);
 -				goto _match;
 -			}
 -		}
 -		_keys += _klen;
 -		_trans += _klen;
 -	}
 -
 -	_klen = _lexer_range_lengths[cs];
 -	if ( _klen > 0 ) {
 -		const char *_lower = _keys;
 -		const char *_mid;
 -		const char *_upper = _keys + (_klen<<1) - 2;
 -		while (1) {
 -			if ( _upper < _lower )
 -				break;
 -
 -			_mid = _lower + (((_upper-_lower) >> 1) & ~1);
 -			if ( (*p) < _mid[0] )
 -				_upper = _mid - 2;
 -			else if ( (*p) > _mid[1] )
 -				_lower = _mid + 2;
 -			else {
 -				_trans += (unsigned int)((_mid - _keys)>>1);
 -				goto _match;
 -			}
 -		}
 -		_trans += _klen;
 -	}
 -
 -_match:
 -	cs = _lexer_trans_targs[_trans];
 -
 -	if ( _lexer_trans_actions[_trans] == 0 )
 -		goto _again;
 -
 -	_acts = _lexer_actions + _lexer_trans_actions[_trans];
 -	_nacts = (unsigned int) *_acts++;
 -	while ( _nacts-- > 0 )
 -	{
 -		switch ( *_acts++ )
 -		{
 -	case 0:
 -#line 83 "ragel/i18n/hu.c.rl"
 -	{
 -		MARK(content_start, p);
 -    lexer->current_line = lexer->line_number;
 -    lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2;
 -  }
 -	break;
 -	case 1:
 -#line 89 "ragel/i18n/hu.c.rl"
 -	{
 -    MARK(content_start, p);
 -  }
 -	break;
 -	case 2:
 -#line 93 "ragel/i18n/hu.c.rl"
 -	{
 -    lexer->current_line = lexer->line_number;
 -    lexer->start_col = p - data - lexer->last_newline;
 -  }
 -	break;
 -	case 3:
 -#line 98 "ragel/i18n/hu.c.rl"
 -	{
 -    int len = LEN(content_start, PTR_TO(final_newline));
 -    int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end));
 -
 -    if (len < 0) len = 0;
 -    if (type_len < 0) len = 0;
 -
 -    store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line);
 -  }
 -	break;
 -	case 4:
 -#line 108 "ragel/i18n/hu.c.rl"
 -	{ 
 -    MARK(docstring_content_type_start, p);
 -  }
 -	break;
 -	case 5:
 -#line 112 "ragel/i18n/hu.c.rl"
 -	{ 
 -    MARK(docstring_content_type_end, p);
 -  }
 -	break;
 -	case 6:
 -#line 116 "ragel/i18n/hu.c.rl"
 -	{
 -    STORE_KW_END_CON(feature);
 -  }
 -	break;
 -	case 7:
 -#line 120 "ragel/i18n/hu.c.rl"
 -	{
 -    STORE_KW_END_CON(background);
 -  }
 -	break;
 -	case 8:
 -#line 124 "ragel/i18n/hu.c.rl"
 -	{
 -    STORE_KW_END_CON(scenario);
 -  }
 -	break;
 -	case 9:
 -#line 128 "ragel/i18n/hu.c.rl"
 -	{
 -    STORE_KW_END_CON(scenario_outline);
 -  }
 -	break;
 -	case 10:
 -#line 132 "ragel/i18n/hu.c.rl"
 -	{
 -    STORE_KW_END_CON(examples);
 -  }
 -	break;
 -	case 11:
 -#line 136 "ragel/i18n/hu.c.rl"
 -	{
 -    store_kw_con(listener, "step",
 -      PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
 -      PTR_TO(content_start), LEN(content_start, p), 
 -      lexer->current_line);
 -  }
 -	break;
 -	case 12:
 -#line 143 "ragel/i18n/hu.c.rl"
 -	{
 -    STORE_ATTR(comment);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 13:
 -#line 148 "ragel/i18n/hu.c.rl"
 -	{
 -    STORE_ATTR(tag);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 14:
 -#line 153 "ragel/i18n/hu.c.rl"
 -	{
 -    lexer->line_number += 1;
 -    MARK(final_newline, p);
 -  }
 -	break;
 -	case 15:
 -#line 158 "ragel/i18n/hu.c.rl"
 -	{
 -    MARK(last_newline, p + 1);
 -  }
 -	break;
 -	case 16:
 -#line 162 "ragel/i18n/hu.c.rl"
 -	{
 -    if (lexer->mark == 0) {
 -      MARK(mark, p);
 -    }
 -  }
 -	break;
 -	case 17:
 -#line 168 "ragel/i18n/hu.c.rl"
 -	{
 -    MARK(keyword_end, p);
 -    MARK(keyword_start, PTR_TO(mark));
 -    MARK(content_start, p + 1);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 18:
 -#line 175 "ragel/i18n/hu.c.rl"
 -	{
 -    MARK(content_end, p);
 -  }
 -	break;
 -	case 19:
 -#line 179 "ragel/i18n/hu.c.rl"
 -	{
 -    p = p - 1;
 -    lexer->current_line = lexer->line_number;
 -    current_row = rb_ary_new();
 -  }
 -	break;
 -	case 20:
 -#line 185 "ragel/i18n/hu.c.rl"
 -	{
 -		MARK(content_start, p);
 -  }
 -	break;
 -	case 21:
 -#line 189 "ragel/i18n/hu.c.rl"
 -	{
 -    VALUE re_pipe, re_newline, re_backslash;
 -    VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
 -    rb_funcall(con, rb_intern("strip!"), 0);
 -    re_pipe      = rb_reg_regcomp(rb_str_new2("\\\\\\|"));
 -    re_newline   = rb_reg_regcomp(rb_str_new2("\\\\n"));
 -    re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_pipe,      rb_str_new2("|"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_newline,   rb_str_new2("\n"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\"));
 -
 -    rb_ary_push(current_row, con);
 -  }
 -	break;
 -	case 22:
 -#line 203 "ragel/i18n/hu.c.rl"
 -	{
 -    rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
 -  }
 -	break;
 -	case 23:
 -#line 207 "ragel/i18n/hu.c.rl"
 -	{
 -    int line;
 -    if (cs < lexer_first_final) {
 -      size_t count = 0;
 -      VALUE newstr_val;
 -      char *newstr;
 -      int newstr_count = 0;        
 -      size_t len;
 -      const char *buff;
 -      if (lexer->last_newline != 0) {
 -        len = LEN(last_newline, eof);
 -        buff = PTR_TO(last_newline);
 -      } else {
 -        len = strlen(data);
 -        buff = data;
 -      }
 -
 -      /* Allocate as a ruby string so that it gets cleaned up by GC */
 -      newstr_val = rb_str_new(buff, len);
 -      newstr = RSTRING_PTR(newstr_val);
 -
 -
 -      for (count = 0; count < len; count++) {
 -        if(buff[count] == 10) {
 -          newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
 -          break;
 -        } else {
 -          if (buff[count] == '%') {
 -            newstr[newstr_count++] = buff[count];
 -            newstr[newstr_count] = buff[count];
 -          } else {
 -            newstr[newstr_count] = buff[count];
 -          }
 -        }
 -        newstr_count++;
 -      }
 -
 -      line = lexer->line_number;
 -      lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
 -      raise_lexer_error(newstr, line);
 -    } else {
 -      rb_funcall(listener, rb_intern("eof"), 0);
 -    }
 -  }
 -	break;
 -#line 1277 "ext/gherkin_lexer_hu/gherkin_lexer_hu.c"
 -		}
 -	}
 -
 -_again:
 -	if ( cs == 0 )
 -		goto _out;
 -	if ( ++p != pe )
 -		goto _resume;
 -	_test_eof: {}
 -	if ( p == eof )
 -	{
 -	const char *__acts = _lexer_actions + _lexer_eof_actions[cs];
 -	unsigned int __nacts = (unsigned int) *__acts++;
 -	while ( __nacts-- > 0 ) {
 -		switch ( *__acts++ ) {
 -	case 23:
 -#line 207 "ragel/i18n/hu.c.rl"
 -	{
 -    int line;
 -    if (cs < lexer_first_final) {
 -      size_t count = 0;
 -      VALUE newstr_val;
 -      char *newstr;
 -      int newstr_count = 0;        
 -      size_t len;
 -      const char *buff;
 -      if (lexer->last_newline != 0) {
 -        len = LEN(last_newline, eof);
 -        buff = PTR_TO(last_newline);
 -      } else {
 -        len = strlen(data);
 -        buff = data;
 -      }
 -
 -      /* Allocate as a ruby string so that it gets cleaned up by GC */
 -      newstr_val = rb_str_new(buff, len);
 -      newstr = RSTRING_PTR(newstr_val);
 -
 -
 -      for (count = 0; count < len; count++) {
 -        if(buff[count] == 10) {
 -          newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
 -          break;
 -        } else {
 -          if (buff[count] == '%') {
 -            newstr[newstr_count++] = buff[count];
 -            newstr[newstr_count] = buff[count];
 -          } else {
 -            newstr[newstr_count] = buff[count];
 -          }
 -        }
 -        newstr_count++;
 -      }
 -
 -      line = lexer->line_number;
 -      lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
 -      raise_lexer_error(newstr, line);
 -    } else {
 -      rb_funcall(listener, rb_intern("eof"), 0);
 -    }
 -  }
 -	break;
 -#line 1340 "ext/gherkin_lexer_hu/gherkin_lexer_hu.c"
 -		}
 -	}
 -	}
 -
 -	_out: {}
 -	}
 -
 -#line 426 "ragel/i18n/hu.c.rl"
 -
 -    assert(p <= pe && "data overflow after parsing execute");
 -    assert(lexer->content_start <= len && "content starts after data end");
 -    assert(lexer->mark < len && "mark is after data end");
 -    
 -    /* Reset lexer by re-initializing the whole thing */
 -    lexer_init(lexer);
 -
 -    if (cs == lexer_error) {
 -      rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails.");
 -    } else {
 -      return Qtrue;
 -    }
 -  }
 -}
 -
 -void Init_gherkin_lexer_hu()
 -{
 -  mGherkin = rb_define_module("Gherkin");
 -  mGherkinLexer = rb_define_module_under(mGherkin, "Lexer");
 -  rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError"));
 -
 -  mCLexer = rb_define_module_under(mGherkin, "CLexer");
 -  cI18nLexer = rb_define_class_under(mCLexer, "Hu", rb_cObject);
 -  rb_define_alloc_func(cI18nLexer, CLexer_alloc);
 -  rb_define_method(cI18nLexer, "initialize", CLexer_init, 1);
 -  rb_define_method(cI18nLexer, "scan", CLexer_scan, 1);
 -}
 -
diff --cc ext/gherkin_lexer_id/extconf.rb
index d807c2a,d807c2a..0000000
deleted file mode 100644,100644
--- a/ext/gherkin_lexer_id/extconf.rb
+++ /dev/null
@@@ -1,6 -1,6 +1,0 @@@
--require 'mkmf'
--CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags']
--$CFLAGS << ' -O0 -Wall' if CONFIG['CC'] =~ /gcc|clang/
--dir_config("gherkin_lexer_id")
--have_library("c", "main")
--create_makefile("gherkin_lexer_id")
diff --cc ext/gherkin_lexer_id/gherkin_lexer_id.c
index 2ac56f4,b504fc9..0000000
deleted file mode 100644,100644
--- a/ext/gherkin_lexer_id/gherkin_lexer_id.c
+++ /dev/null
@@@ -1,1208 -1,1208 +1,0 @@@
--
- #line 1 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/id.c.rl"
- #include <assert.h>
- #include <ruby.h>
- 
- #if defined(_WIN32)
- #include <stddef.h>
- #endif
- 
- #ifdef HAVE_RUBY_RE_H
- #include <ruby/re.h>
- #else
- #include <re.h>
- #endif
- 
- #ifdef HAVE_RUBY_ENCODING_H
- #include <ruby/encoding.h>
- #define ENCODED_STR_NEW(ptr, len) \
-     rb_enc_str_new(ptr, len, rb_utf8_encoding())
- #else
- #define ENCODED_STR_NEW(ptr, len) \
-     rb_str_new(ptr, len)
- #endif
- 
- #ifndef RSTRING_PTR
- #define RSTRING_PTR(s) (RSTRING(s)->ptr)
- #endif
- 
- #ifndef RSTRING_LEN
- #define RSTRING_LEN(s) (RSTRING(s)->len)
- #endif
- 
- #define DATA_GET(FROM, TYPE, NAME) \
-   Data_Get_Struct(FROM, TYPE, NAME); \
-   if (NAME == NULL) { \
-     rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \
-   }
-  
- typedef struct lexer_state {
-   int content_len;
-   int line_number;
-   int current_line;
-   int start_col;
-   size_t mark;
-   size_t keyword_start;
-   size_t keyword_end;
-   size_t next_keyword_start;
-   size_t content_start;
-   size_t content_end;
-   size_t docstring_content_type_start;
-   size_t docstring_content_type_end;
-   size_t query_start;
-   size_t last_newline;
-   size_t final_newline;
- } lexer_state;
- 
- static VALUE mGherkin;
- static VALUE mGherkinLexer;
- static VALUE mCLexer;
- static VALUE cI18nLexer;
- static VALUE rb_eGherkinLexingError;
- 
- #define LEN(AT, P) (P - data - lexer->AT)
- #define MARK(M, P) (lexer->M = (P) - data)
- #define PTR_TO(P) (data + lexer->P)
- 
- #define STORE_KW_END_CON(EVENT) \
-   store_multiline_kw_con(listener, # EVENT, \
-     PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \
-     PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \
-     lexer->current_line, lexer->start_col); \
-     if (lexer->content_end != 0) { \
-       p = PTR_TO(content_end - 1); \
-     } \
-     lexer->content_end = 0
- 
- #define STORE_ATTR(ATTR) \
-     store_attr(listener, # ATTR, \
-       PTR_TO(content_start), LEN(content_start, p), \
-       lexer->line_number)
- 
- 
- #line 254 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/id.c.rl"
- 
- 
- /** Data **/
- 
- #line 89 "ext/gherkin_lexer_id/gherkin_lexer_id.c"
- static const char _lexer_actions[] = {
- 	0, 1, 0, 1, 1, 1, 2, 1, 
- 	3, 1, 4, 1, 5, 1, 6, 1, 
- 	7, 1, 8, 1, 9, 1, 10, 1, 
- 	11, 1, 12, 1, 13, 1, 16, 1, 
- 	17, 1, 18, 1, 19, 1, 20, 1, 
- 	21, 1, 22, 1, 23, 2, 1, 18, 
- 	2, 4, 5, 2, 13, 0, 2, 14, 
- 	15, 2, 17, 0, 2, 17, 2, 2, 
- 	17, 16, 2, 17, 19, 2, 18, 6, 
- 	2, 18, 7, 2, 18, 8, 2, 18, 
- 	9, 2, 18, 10, 2, 18, 16, 2, 
- 	20, 21, 2, 22, 0, 2, 22, 2, 
- 	2, 22, 16, 2, 22, 19, 3, 3, 
- 	14, 15, 3, 5, 14, 15, 3, 11, 
- 	14, 15, 3, 12, 14, 15, 3, 13, 
- 	14, 15, 3, 14, 15, 18, 3, 17, 
- 	0, 11, 3, 17, 14, 15, 4, 1, 
- 	14, 15, 18, 4, 4, 5, 14, 15, 
- 	4, 17, 0, 14, 15, 5, 17, 0, 
- 	11, 14, 15
- };
- 
- static const short _lexer_key_offsets[] = {
- 	0, 0, 18, 19, 20, 37, 38, 39, 
- 	41, 43, 48, 53, 58, 63, 67, 71, 
- 	73, 74, 75, 76, 77, 78, 79, 80, 
- 	81, 82, 83, 84, 85, 86, 87, 88, 
- 	89, 91, 93, 98, 105, 110, 111, 112, 
- 	113, 114, 115, 116, 117, 118, 125, 127, 
- 	129, 131, 133, 135, 152, 154, 156, 157, 
- 	158, 159, 160, 161, 175, 177, 179, 181, 
- 	183, 185, 187, 189, 191, 193, 195, 197, 
- 	199, 201, 203, 205, 208, 210, 212, 214, 
- 	216, 218, 220, 222, 224, 226, 228, 230, 
- 	232, 234, 236, 238, 240, 242, 244, 246, 
- 	248, 250, 252, 255, 257, 259, 261, 263, 
- 	265, 267, 269, 271, 273, 274, 275, 276, 
- 	277, 278, 279, 280, 281, 282, 283, 284, 
- 	295, 297, 299, 301, 303, 305, 307, 309, 
- 	311, 313, 315, 317, 319, 321, 323, 325, 
- 	327, 329, 331, 333, 335, 337, 339, 341, 
- 	343, 345, 347, 349, 351, 353, 355, 357, 
- 	359, 361, 363, 366, 368, 370, 372, 374, 
- 	376, 378, 379, 380, 381, 382, 383, 384, 
- 	385, 386, 387, 388, 389, 390, 391, 393, 
- 	394, 395, 396, 397, 398, 399, 400, 401, 
- 	402, 416, 418, 420, 422, 424, 426, 428, 
- 	430, 432, 434, 436, 438, 440, 442, 444, 
- 	446, 449, 451, 453, 455, 457, 459, 461, 
- 	463, 465, 467, 469, 471, 473, 475, 477, 
- 	479, 481, 483, 485, 487, 489, 491, 493, 
- 	495, 497, 499, 500, 501, 515, 517, 519, 
- 	521, 523, 525, 527, 529, 531, 533, 535, 
- 	537, 539, 541, 543, 545, 548, 551, 553, 
- 	555, 557, 559, 561, 563, 565, 567, 569, 
- 	571, 573, 575, 577, 579, 581, 583, 585, 
- 	587, 589, 591, 593, 595, 597, 600, 602, 
- 	604, 606, 608, 610, 612, 614, 616, 618, 
- 	619, 620, 621, 625, 631, 634, 636, 642, 
- 	659
- };
- 
- static const char _lexer_trans_keys[] = {
- 	-17, 10, 32, 34, 35, 37, 42, 64, 
- 	67, 68, 70, 75, 77, 83, 84, 124, 
- 	9, 13, -69, -65, 10, 32, 34, 35, 
- 	37, 42, 64, 67, 68, 70, 75, 77, 
- 	83, 84, 124, 9, 13, 34, 34, 10, 
- 	13, 10, 13, 10, 32, 34, 9, 13, 
- 	10, 32, 34, 9, 13, 10, 32, 34, 
- 	9, 13, 10, 32, 34, 9, 13, 10, 
- 	32, 9, 13, 10, 32, 9, 13, 10, 
- 	13, 10, 95, 70, 69, 65, 84, 85, 
- 	82, 69, 95, 69, 78, 68, 95, 37, 
- 	32, 10, 13, 10, 13, 13, 32, 64, 
- 	9, 10, 9, 10, 13, 32, 64, 11, 
- 	12, 10, 32, 64, 9, 13, 111, 110, 
- 	116, 111, 104, 58, 10, 10, 10, 32, 
- 	35, 70, 124, 9, 13, 10, 105, 10, 
- 	116, 10, 117, 10, 114, 10, 58, 10, 
- 	32, 34, 35, 37, 42, 64, 67, 68, 
- 	70, 75, 77, 83, 84, 124, 9, 13, 
- 	97, 101, 110, 115, 97, 114, 58, 10, 
- 	10, 10, 32, 35, 37, 42, 64, 68, 
- 	70, 75, 77, 83, 84, 9, 13, 10, 
- 	95, 10, 70, 10, 69, 10, 65, 10, 
- 	84, 10, 85, 10, 82, 10, 69, 10, 
- 	95, 10, 69, 10, 78, 10, 68, 10, 
- 	95, 10, 37, 10, 32, 10, 97, 101, 
- 	10, 110, 10, 110, 10, 103, 10, 97, 
- 	10, 105, 10, 116, 10, 117, 10, 114, 
- 	10, 58, 10, 101, 10, 116, 10, 105, 
- 	10, 107, 10, 97, 10, 97, 10, 107, 
- 	10, 101, 10, 110, 10, 97, 10, 114, 
- 	10, 105, 10, 111, 10, 32, 58, 10, 
- 	107, 10, 111, 10, 110, 10, 115, 10, 
- 	101, 10, 112, 10, 97, 10, 112, 10, 
- 	105, 110, 103, 97, 110, 105, 116, 117, 
- 	114, 58, 10, 10, 10, 32, 35, 37, 
- 	64, 67, 68, 70, 83, 9, 13, 10, 
- 	95, 10, 70, 10, 69, 10, 65, 10, 
- 	84, 10, 85, 10, 82, 10, 69, 10, 
- 	95, 10, 69, 10, 78, 10, 68, 10, 
- 	95, 10, 37, 10, 111, 10, 110, 10, 
- 	116, 10, 111, 10, 104, 10, 58, 10, 
- 	97, 10, 115, 10, 97, 10, 114, 10, 
- 	105, 10, 116, 10, 117, 10, 107, 10, 
- 	101, 10, 110, 10, 97, 10, 114, 10, 
- 	105, 10, 111, 10, 32, 58, 10, 107, 
- 	10, 111, 10, 110, 10, 115, 10, 101, 
- 	10, 112, 101, 116, 105, 107, 97, 97, 
- 	107, 101, 110, 97, 114, 105, 111, 32, 
- 	58, 107, 111, 110, 115, 101, 112, 58, 
- 	10, 10, 10, 32, 35, 37, 42, 64, 
- 	68, 70, 75, 77, 83, 84, 9, 13, 
- 	10, 95, 10, 70, 10, 69, 10, 65, 
- 	10, 84, 10, 85, 10, 82, 10, 69, 
- 	10, 95, 10, 69, 10, 78, 10, 68, 
- 	10, 95, 10, 37, 10, 32, 10, 97, 
- 	101, 10, 110, 10, 110, 10, 103, 10, 
- 	97, 10, 105, 10, 116, 10, 117, 10, 
- 	114, 10, 58, 10, 101, 10, 116, 10, 
- 	105, 10, 107, 10, 97, 10, 97, 10, 
- 	107, 10, 101, 10, 110, 10, 97, 10, 
- 	114, 10, 105, 10, 111, 10, 97, 10, 
- 	112, 10, 105, 10, 10, 10, 32, 35, 
- 	37, 42, 64, 68, 70, 75, 77, 83, 
- 	84, 9, 13, 10, 95, 10, 70, 10, 
- 	69, 10, 65, 10, 84, 10, 85, 10, 
- 	82, 10, 69, 10, 95, 10, 69, 10, 
- 	78, 10, 68, 10, 95, 10, 37, 10, 
- 	32, 10, 97, 101, 10, 110, 115, 10, 
- 	97, 10, 114, 10, 58, 10, 110, 10, 
- 	103, 10, 97, 10, 110, 10, 105, 10, 
- 	116, 10, 117, 10, 101, 10, 116, 10, 
- 	105, 10, 107, 10, 97, 10, 97, 10, 
- 	107, 10, 101, 10, 110, 10, 97, 10, 
- 	114, 10, 105, 10, 111, 10, 32, 58, 
- 	10, 107, 10, 111, 10, 110, 10, 115, 
- 	10, 101, 10, 112, 10, 97, 10, 112, 
- 	10, 105, 97, 112, 105, 32, 124, 9, 
- 	13, 10, 32, 92, 124, 9, 13, 10, 
- 	92, 124, 10, 92, 10, 32, 92, 124, 
- 	9, 13, 10, 32, 34, 35, 37, 42, 
- 	64, 67, 68, 70, 75, 77, 83, 84, 
- 	124, 9, 13, 0
- };
- 
- static const char _lexer_single_lengths[] = {
- 	0, 16, 1, 1, 15, 1, 1, 2, 
- 	2, 3, 3, 3, 3, 2, 2, 2, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	2, 2, 3, 5, 3, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 5, 2, 2, 
- 	2, 2, 2, 15, 2, 2, 1, 1, 
- 	1, 1, 1, 12, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 3, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 3, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 9, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 3, 2, 2, 2, 2, 2, 
- 	2, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 2, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	12, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	3, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 1, 1, 12, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 3, 3, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 3, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 1, 
- 	1, 1, 2, 4, 3, 2, 4, 15, 
- 	0
- };
- 
- static const char _lexer_range_lengths[] = {
- 	0, 1, 0, 0, 1, 0, 0, 0, 
- 	0, 1, 1, 1, 1, 1, 1, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 1, 1, 1, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 1, 0, 0, 
- 	0, 0, 0, 1, 0, 0, 0, 0, 
- 	0, 0, 0, 1, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 1, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	1, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 1, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 1, 1, 0, 0, 1, 1, 
- 	0
- };
- 
- static const short _lexer_index_offsets[] = {
- 	0, 0, 18, 20, 22, 39, 41, 43, 
- 	46, 49, 54, 59, 64, 69, 73, 77, 
- 	80, 82, 84, 86, 88, 90, 92, 94, 
- 	96, 98, 100, 102, 104, 106, 108, 110, 
- 	112, 115, 118, 123, 130, 135, 137, 139, 
- 	141, 143, 145, 147, 149, 151, 158, 161, 
- 	164, 167, 170, 173, 190, 193, 196, 198, 
- 	200, 202, 204, 206, 220, 223, 226, 229, 
- 	232, 235, 238, 241, 244, 247, 250, 253, 
- 	256, 259, 262, 265, 269, 272, 275, 278, 
- 	281, 284, 287, 290, 293, 296, 299, 302, 
- 	305, 308, 311, 314, 317, 320, 323, 326, 
- 	329, 332, 335, 339, 342, 345, 348, 351, 
- 	354, 357, 360, 363, 366, 368, 370, 372, 
- 	374, 376, 378, 380, 382, 384, 386, 388, 
- 	399, 402, 405, 408, 411, 414, 417, 420, 
- 	423, 426, 429, 432, 435, 438, 441, 444, 
- 	447, 450, 453, 456, 459, 462, 465, 468, 
- 	471, 474, 477, 480, 483, 486, 489, 492, 
- 	495, 498, 501, 505, 508, 511, 514, 517, 
- 	520, 523, 525, 527, 529, 531, 533, 535, 
- 	537, 539, 541, 543, 545, 547, 549, 552, 
- 	554, 556, 558, 560, 562, 564, 566, 568, 
- 	570, 584, 587, 590, 593, 596, 599, 602, 
- 	605, 608, 611, 614, 617, 620, 623, 626, 
- 	629, 633, 636, 639, 642, 645, 648, 651, 
- 	654, 657, 660, 663, 666, 669, 672, 675, 
- 	678, 681, 684, 687, 690, 693, 696, 699, 
- 	702, 705, 708, 710, 712, 726, 729, 732, 
- 	735, 738, 741, 744, 747, 750, 753, 756, 
- 	759, 762, 765, 768, 771, 775, 779, 782, 
- 	785, 788, 791, 794, 797, 800, 803, 806, 
- 	809, 812, 815, 818, 821, 824, 827, 830, 
- 	833, 836, 839, 842, 845, 848, 852, 855, 
- 	858, 861, 864, 867, 870, 873, 876, 879, 
- 	881, 883, 885, 889, 895, 899, 902, 908, 
- 	925
- };
- 
- static const short _lexer_trans_targs[] = {
- 	2, 4, 4, 5, 15, 17, 31, 34, 
- 	37, 52, 112, 161, 166, 167, 279, 282, 
- 	4, 0, 3, 0, 4, 0, 4, 4, 
- 	5, 15, 17, 31, 34, 37, 52, 112, 
- 	161, 166, 167, 279, 282, 4, 0, 6, 
- 	0, 7, 0, 9, 8, 8, 9, 8, 
- 	8, 10, 10, 11, 10, 10, 10, 10, 
- 	11, 10, 10, 10, 10, 12, 10, 10, 
- 	10, 10, 13, 10, 10, 4, 14, 14, 
- 	0, 4, 14, 14, 0, 4, 16, 15, 
- 	4, 0, 18, 0, 19, 0, 20, 0, 
- 	21, 0, 22, 0, 23, 0, 24, 0, 
- 	25, 0, 26, 0, 27, 0, 28, 0, 
- 	29, 0, 30, 0, 288, 0, 32, 0, 
- 	4, 16, 33, 4, 16, 33, 0, 0, 
- 	0, 0, 35, 36, 4, 36, 36, 34, 
- 	35, 35, 4, 36, 34, 36, 0, 38, 
- 	0, 39, 0, 40, 0, 41, 0, 42, 
- 	0, 43, 0, 45, 44, 45, 44, 45, 
- 	45, 4, 46, 4, 45, 44, 45, 47, 
- 	44, 45, 48, 44, 45, 49, 44, 45, 
- 	50, 44, 45, 51, 44, 4, 4, 5, 
- 	15, 17, 31, 34, 37, 52, 112, 161, 
- 	166, 167, 279, 282, 4, 0, 53, 108, 
- 	0, 31, 54, 0, 55, 0, 56, 0, 
- 	57, 0, 59, 58, 59, 58, 59, 59, 
- 	4, 60, 74, 4, 75, 80, 85, 90, 
- 	91, 105, 59, 58, 59, 61, 58, 59, 
- 	62, 58, 59, 63, 58, 59, 64, 58, 
- 	59, 65, 58, 59, 66, 58, 59, 67, 
- 	58, 59, 68, 58, 59, 69, 58, 59, 
- 	70, 58, 59, 71, 58, 59, 72, 58, 
- 	59, 73, 58, 59, 4, 58, 59, 51, 
- 	58, 59, 76, 77, 58, 59, 74, 58, 
- 	59, 78, 58, 59, 79, 58, 59, 76, 
- 	58, 59, 81, 58, 59, 82, 58, 59, 
- 	83, 58, 59, 84, 58, 59, 51, 58, 
- 	59, 86, 58, 59, 87, 58, 59, 88, 
- 	58, 59, 89, 58, 59, 74, 58, 59, 
- 	88, 58, 59, 92, 58, 59, 93, 58, 
- 	59, 94, 58, 59, 95, 58, 59, 96, 
- 	58, 59, 97, 58, 59, 98, 58, 59, 
- 	99, 51, 58, 59, 100, 58, 59, 101, 
- 	58, 59, 102, 58, 59, 103, 58, 59, 
- 	104, 58, 59, 84, 58, 59, 106, 58, 
- 	59, 107, 58, 59, 74, 58, 109, 0, 
- 	110, 0, 111, 0, 31, 0, 113, 0, 
- 	114, 0, 115, 0, 116, 0, 117, 0, 
- 	119, 118, 119, 118, 119, 119, 4, 120, 
- 	4, 134, 140, 144, 147, 119, 118, 119, 
- 	121, 118, 119, 122, 118, 119, 123, 118, 
- 	119, 124, 118, 119, 125, 118, 119, 126, 
- 	118, 119, 127, 118, 119, 128, 118, 119, 
- 	129, 118, 119, 130, 118, 119, 131, 118, 
- 	119, 132, 118, 119, 133, 118, 119, 4, 
- 	118, 119, 135, 118, 119, 136, 118, 119, 
- 	137, 118, 119, 138, 118, 119, 139, 118, 
- 	119, 51, 118, 119, 141, 118, 119, 142, 
- 	118, 119, 143, 118, 119, 139, 118, 119, 
- 	145, 118, 119, 146, 118, 119, 143, 118, 
- 	119, 148, 118, 119, 149, 118, 119, 150, 
- 	118, 119, 151, 118, 119, 152, 118, 119, 
- 	153, 118, 119, 154, 118, 119, 155, 51, 
- 	118, 119, 156, 118, 119, 157, 118, 119, 
- 	158, 118, 119, 159, 118, 119, 160, 118, 
- 	119, 139, 118, 162, 0, 163, 0, 164, 
- 	0, 165, 0, 31, 0, 164, 0, 168, 
- 	0, 169, 0, 170, 0, 171, 0, 172, 
- 	0, 173, 0, 174, 0, 175, 226, 0, 
- 	176, 0, 177, 0, 178, 0, 179, 0, 
- 	180, 0, 181, 0, 182, 0, 184, 183, 
- 	184, 183, 184, 184, 4, 185, 199, 4, 
- 	200, 205, 210, 215, 216, 223, 184, 183, 
- 	184, 186, 183, 184, 187, 183, 184, 188, 
- 	183, 184, 189, 183, 184, 190, 183, 184, 
- 	191, 183, 184, 192, 183, 184, 193, 183, 
- 	184, 194, 183, 184, 195, 183, 184, 196, 
- 	183, 184, 197, 183, 184, 198, 183, 184, 
- 	4, 183, 184, 51, 183, 184, 201, 202, 
- 	183, 184, 199, 183, 184, 203, 183, 184, 
- 	204, 183, 184, 201, 183, 184, 206, 183, 
- 	184, 207, 183, 184, 208, 183, 184, 209, 
- 	183, 184, 51, 183, 184, 211, 183, 184, 
- 	212, 183, 184, 213, 183, 184, 214, 183, 
- 	184, 199, 183, 184, 213, 183, 184, 217, 
- 	183, 184, 218, 183, 184, 219, 183, 184, 
- 	220, 183, 184, 221, 183, 184, 222, 183, 
- 	184, 209, 183, 184, 224, 183, 184, 225, 
- 	183, 184, 199, 183, 228, 227, 228, 227, 
- 	228, 228, 4, 229, 243, 4, 244, 253, 
- 	256, 261, 262, 276, 228, 227, 228, 230, 
- 	227, 228, 231, 227, 228, 232, 227, 228, 
- 	233, 227, 228, 234, 227, 228, 235, 227, 
- 	228, 236, 227, 228, 237, 227, 228, 238, 
- 	227, 228, 239, 227, 228, 240, 227, 228, 
- 	241, 227, 228, 242, 227, 228, 4, 227, 
- 	228, 51, 227, 228, 245, 249, 227, 228, 
- 	243, 246, 227, 228, 247, 227, 228, 248, 
- 	227, 228, 51, 227, 228, 250, 227, 228, 
- 	251, 227, 228, 252, 227, 228, 243, 227, 
- 	228, 254, 227, 228, 255, 227, 228, 247, 
- 	227, 228, 257, 227, 228, 258, 227, 228, 
- 	259, 227, 228, 260, 227, 228, 243, 227, 
- 	228, 259, 227, 228, 263, 227, 228, 264, 
- 	227, 228, 265, 227, 228, 266, 227, 228, 
- 	267, 227, 228, 268, 227, 228, 269, 227, 
- 	228, 270, 51, 227, 228, 271, 227, 228, 
- 	272, 227, 228, 273, 227, 228, 274, 227, 
- 	228, 275, 227, 228, 248, 227, 228, 277, 
- 	227, 228, 278, 227, 228, 243, 227, 280, 
- 	0, 281, 0, 31, 0, 282, 283, 282, 
- 	0, 287, 286, 285, 283, 286, 284, 0, 
- 	285, 283, 284, 0, 285, 284, 287, 286, 
- 	285, 283, 286, 284, 287, 287, 5, 15, 
- 	17, 31, 34, 37, 52, 112, 161, 166, 
- 	167, 279, 282, 287, 0, 0, 0
- };
- 
- static const unsigned char _lexer_trans_actions[] = {
- 	0, 54, 0, 5, 1, 0, 29, 1, 
- 	29, 29, 29, 29, 29, 29, 29, 35, 
- 	0, 43, 0, 43, 0, 43, 54, 0, 
- 	5, 1, 0, 29, 1, 29, 29, 29, 
- 	29, 29, 29, 29, 35, 0, 43, 0, 
- 	43, 0, 43, 139, 48, 9, 106, 11, 
- 	0, 134, 45, 45, 45, 3, 122, 33, 
- 	33, 33, 0, 122, 33, 33, 33, 0, 
- 	122, 33, 0, 33, 0, 102, 7, 7, 
- 	43, 54, 0, 0, 43, 114, 25, 0, 
- 	54, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	149, 126, 57, 110, 23, 0, 43, 43, 
- 	43, 43, 0, 27, 118, 27, 27, 51, 
- 	27, 0, 54, 0, 1, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 144, 57, 54, 0, 54, 
- 	0, 81, 84, 81, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 21, 0, 130, 31, 60, 
- 	57, 31, 63, 57, 63, 63, 63, 63, 
- 	63, 63, 63, 66, 31, 43, 0, 0, 
- 	43, 0, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 144, 57, 54, 0, 54, 0, 
- 	72, 33, 84, 72, 84, 84, 84, 84, 
- 	84, 84, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 15, 0, 54, 15, 
- 	0, 54, 0, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 15, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 15, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	144, 57, 54, 0, 54, 0, 69, 33, 
- 	69, 84, 84, 84, 84, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 13, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 13, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 13, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 144, 57, 
- 	54, 0, 54, 0, 78, 33, 84, 78, 
- 	84, 84, 84, 84, 84, 84, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	19, 0, 54, 19, 0, 54, 0, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 19, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 144, 57, 54, 0, 
- 	54, 0, 75, 33, 84, 75, 84, 84, 
- 	84, 84, 84, 84, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 17, 0, 
- 	54, 17, 0, 54, 0, 0, 0, 54, 
- 	0, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 17, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 17, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 0, 
- 	43, 0, 43, 0, 43, 0, 0, 0, 
- 	43, 54, 37, 37, 87, 37, 37, 43, 
- 	0, 39, 0, 43, 0, 0, 54, 0, 
- 	0, 39, 0, 0, 54, 0, 93, 90, 
- 	41, 96, 90, 96, 96, 96, 96, 96, 
- 	96, 96, 99, 0, 43, 0, 0
- };
- 
- static const unsigned char _lexer_eof_actions[] = {
- 	0, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43
- };
- 
- static const int lexer_start = 1;
- static const int lexer_first_final = 288;
- static const int lexer_error = 0;
- 
- static const int lexer_en_main = 1;
- 
- 
- #line 258 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/id.c.rl"
- 
- static VALUE 
- unindent(VALUE con, int start_col)
- {
-   VALUE re;
-   // Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters
-   char pat[32]; 
-   snprintf(pat, 32, "^[\t ]{0,%d}", start_col); 
-   re = rb_reg_regcomp(rb_str_new2(pat));
-   rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2(""));
- 
-   return Qnil;
- 
- }
- 
- static void 
- store_kw_con(VALUE listener, const char * event_name, 
-              const char * keyword_at, size_t keyword_length, 
-              const char * at,         size_t length, 
-              int current_line)
- {
-   VALUE con = Qnil, kw = Qnil;
-   kw = ENCODED_STR_NEW(keyword_at, keyword_length);
-   con = ENCODED_STR_NEW(at, length);
-   rb_funcall(con, rb_intern("strip!"), 0);
-   rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); 
- }
- 
- static void
- store_multiline_kw_con(VALUE listener, const char * event_name,
-                       const char * keyword_at, size_t keyword_length,
-                       const char * at,         size_t length,
-                       int current_line, int start_col)
- {
-   VALUE split;
-   VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil;
- 
-   kw = ENCODED_STR_NEW(keyword_at, keyword_length);
-   con = ENCODED_STR_NEW(at, length);
- 
-   unindent(con, start_col);
-   
-   split = rb_str_split(con, "\n");
- 
-   name = rb_funcall(split, rb_intern("shift"), 0);
-   desc = rb_ary_join(split, rb_str_new2( "\n" ));
- 
-   if( name == Qnil ) 
-   {
-     name = rb_str_new2("");
-   }
-   if( rb_funcall(desc, rb_intern("size"), 0) == 0) 
-   {
-     desc = rb_str_new2("");
-   }
-   rb_funcall(name, rb_intern("strip!"), 0);
-   rb_funcall(desc, rb_intern("rstrip!"), 0);
-   rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); 
- }
- 
- static void 
- store_attr(VALUE listener, const char * attr_type,
-            const char * at, size_t length, 
-            int line)
- {
-   VALUE val = ENCODED_STR_NEW(at, length);
-   rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line));
- }
- static void 
- store_docstring_content(VALUE listener, 
-           int start_col, 
-           const char *type_at, size_t type_length,
-           const char *at, size_t length, 
-           int current_line)
- {
-   VALUE re2;
-   VALUE unescape_escaped_quotes;
-   VALUE con = ENCODED_STR_NEW(at, length);
-   VALUE con_type = ENCODED_STR_NEW(type_at, type_length);
- 
-   unindent(con, start_col);
- 
-   re2 = rb_reg_regcomp(rb_str_new2("\r\\Z"));
-   unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\""));
-   rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2(""));
-   rb_funcall(con_type, rb_intern("strip!"), 0);
-   rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\""));
-   rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line));
- }
- static void 
- raise_lexer_error(const char * at, int line)
- { 
-   rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at);
- }
- 
- static void lexer_init(lexer_state *lexer) {
-   lexer->content_start = 0;
-   lexer->content_end = 0;
-   lexer->content_len = 0;
-   lexer->docstring_content_type_start = 0;
-   lexer->docstring_content_type_end = 0;
-   lexer->mark = 0;
-   lexer->keyword_start = 0;
-   lexer->keyword_end = 0;
-   lexer->next_keyword_start = 0;
-   lexer->line_number = 1;
-   lexer->last_newline = 0;
-   lexer->final_newline = 0;
-   lexer->start_col = 0;
- }
- 
- static VALUE CLexer_alloc(VALUE klass)
- {
-   VALUE obj;
-   lexer_state *lxr = ALLOC(lexer_state);
-   lexer_init(lxr);
- 
-   obj = Data_Wrap_Struct(klass, NULL, -1, lxr);
- 
-   return obj;
- }
- 
- static VALUE CLexer_init(VALUE self, VALUE listener)
- {
-   lexer_state *lxr; 
-   rb_iv_set(self, "@listener", listener);
-   
-   lxr = NULL;
-   DATA_GET(self, lexer_state, lxr);
-   lexer_init(lxr);
-   
-   return self;
- }
- 
- static VALUE CLexer_scan(VALUE self, VALUE input)
- {
-   VALUE input_copy;
-   char *data;
-   size_t len;
-   VALUE listener = rb_iv_get(self, "@listener");
- 
-   lexer_state *lexer;
-   lexer = NULL;
-   DATA_GET(self, lexer_state, lexer);
- 
-   input_copy = rb_str_dup(input);
- 
-   rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%"));
-   data = RSTRING_PTR(input_copy);
-   len = RSTRING_LEN(input_copy);
-   
-   if (len == 0) { 
-     rb_raise(rb_eGherkinLexingError, "No content to lex.");
-   } else {
- 
-     const char *p, *pe, *eof;
-     int cs = 0;
-     
-     VALUE current_row = Qnil;
- 
-     p = data;
-     pe = data + len;
-     eof = pe;
-     
-     assert(*pe == '\0' && "pointer does not end on NULL");
-     
-     
- #line 812 "ext/gherkin_lexer_id/gherkin_lexer_id.c"
- 	{
- 	cs = lexer_start;
- 	}
- 
- #line 425 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/id.c.rl"
-     
- #line 819 "ext/gherkin_lexer_id/gherkin_lexer_id.c"
- 	{
- 	int _klen;
- 	unsigned int _trans;
- 	const char *_acts;
- 	unsigned int _nacts;
- 	const char *_keys;
- 
- 	if ( p == pe )
- 		goto _test_eof;
- 	if ( cs == 0 )
- 		goto _out;
- _resume:
- 	_keys = _lexer_trans_keys + _lexer_key_offsets[cs];
- 	_trans = _lexer_index_offsets[cs];
- 
- 	_klen = _lexer_single_lengths[cs];
- 	if ( _klen > 0 ) {
- 		const char *_lower = _keys;
- 		const char *_mid;
- 		const char *_upper = _keys + _klen - 1;
- 		while (1) {
- 			if ( _upper < _lower )
- 				break;
- 
- 			_mid = _lower + ((_upper-_lower) >> 1);
- 			if ( (*p) < *_mid )
- 				_upper = _mid - 1;
- 			else if ( (*p) > *_mid )
- 				_lower = _mid + 1;
- 			else {
- 				_trans += (_mid - _keys);
- 				goto _match;
- 			}
- 		}
- 		_keys += _klen;
- 		_trans += _klen;
- 	}
- 
- 	_klen = _lexer_range_lengths[cs];
- 	if ( _klen > 0 ) {
- 		const char *_lower = _keys;
- 		const char *_mid;
- 		const char *_upper = _keys + (_klen<<1) - 2;
- 		while (1) {
- 			if ( _upper < _lower )
- 				break;
- 
- 			_mid = _lower + (((_upper-_lower) >> 1) & ~1);
- 			if ( (*p) < _mid[0] )
- 				_upper = _mid - 2;
- 			else if ( (*p) > _mid[1] )
- 				_lower = _mid + 2;
- 			else {
- 				_trans += ((_mid - _keys)>>1);
- 				goto _match;
- 			}
- 		}
- 		_trans += _klen;
- 	}
- 
- _match:
- 	cs = _lexer_trans_targs[_trans];
- 
- 	if ( _lexer_trans_actions[_trans] == 0 )
- 		goto _again;
- 
- 	_acts = _lexer_actions + _lexer_trans_actions[_trans];
- 	_nacts = (unsigned int) *_acts++;
- 	while ( _nacts-- > 0 )
- 	{
- 		switch ( *_acts++ )
- 		{
- 	case 0:
- #line 83 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/id.c.rl"
- 	{
- 		MARK(content_start, p);
-     lexer->current_line = lexer->line_number;
-     lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2;
-   }
- 	break;
- 	case 1:
- #line 89 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/id.c.rl"
- 	{
-     MARK(content_start, p);
-   }
- 	break;
- 	case 2:
- #line 93 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/id.c.rl"
- 	{
-     lexer->current_line = lexer->line_number;
-     lexer->start_col = p - data - lexer->last_newline;
-   }
- 	break;
- 	case 3:
- #line 98 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/id.c.rl"
- 	{
-     int len = LEN(content_start, PTR_TO(final_newline));
-     int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end));
- 
-     if (len < 0) len = 0;
-     if (type_len < 0) len = 0;
- 
-     store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line);
-   }
- 	break;
- 	case 4:
- #line 108 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/id.c.rl"
- 	{ 
-     MARK(docstring_content_type_start, p);
-   }
- 	break;
- 	case 5:
- #line 112 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/id.c.rl"
- 	{ 
-     MARK(docstring_content_type_end, p);
-   }
- 	break;
- 	case 6:
- #line 116 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/id.c.rl"
- 	{
-     STORE_KW_END_CON(feature);
-   }
- 	break;
- 	case 7:
- #line 120 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/id.c.rl"
- 	{
-     STORE_KW_END_CON(background);
-   }
- 	break;
- 	case 8:
- #line 124 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/id.c.rl"
- 	{
-     STORE_KW_END_CON(scenario);
-   }
- 	break;
- 	case 9:
- #line 128 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/id.c.rl"
- 	{
-     STORE_KW_END_CON(scenario_outline);
-   }
- 	break;
- 	case 10:
- #line 132 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/id.c.rl"
- 	{
-     STORE_KW_END_CON(examples);
-   }
- 	break;
- 	case 11:
- #line 136 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/id.c.rl"
- 	{
-     store_kw_con(listener, "step",
-       PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-       PTR_TO(content_start), LEN(content_start, p), 
-       lexer->current_line);
-   }
- 	break;
- 	case 12:
- #line 143 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/id.c.rl"
- 	{
-     STORE_ATTR(comment);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 13:
- #line 148 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/id.c.rl"
- 	{
-     STORE_ATTR(tag);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 14:
- #line 153 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/id.c.rl"
- 	{
-     lexer->line_number += 1;
-     MARK(final_newline, p);
-   }
- 	break;
- 	case 15:
- #line 158 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/id.c.rl"
- 	{
-     MARK(last_newline, p + 1);
-   }
- 	break;
- 	case 16:
- #line 162 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/id.c.rl"
- 	{
-     if (lexer->mark == 0) {
-       MARK(mark, p);
-     }
-   }
- 	break;
- 	case 17:
- #line 168 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/id.c.rl"
- 	{
-     MARK(keyword_end, p);
-     MARK(keyword_start, PTR_TO(mark));
-     MARK(content_start, p + 1);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 18:
- #line 175 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/id.c.rl"
- 	{
-     MARK(content_end, p);
-   }
- 	break;
- 	case 19:
- #line 179 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/id.c.rl"
- 	{
-     p = p - 1;
-     lexer->current_line = lexer->line_number;
-     current_row = rb_ary_new();
-   }
- 	break;
- 	case 20:
- #line 185 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/id.c.rl"
- 	{
- 		MARK(content_start, p);
-   }
- 	break;
- 	case 21:
- #line 189 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/id.c.rl"
- 	{
-     VALUE re_pipe, re_newline, re_backslash;
-     VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
-     rb_funcall(con, rb_intern("strip!"), 0);
-     re_pipe      = rb_reg_regcomp(rb_str_new2("\\\\\\|"));
-     re_newline   = rb_reg_regcomp(rb_str_new2("\\\\n"));
-     re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_pipe,      rb_str_new2("|"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_newline,   rb_str_new2("\n"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\"));
- 
-     rb_ary_push(current_row, con);
-   }
- 	break;
- 	case 22:
- #line 203 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/id.c.rl"
- 	{
-     rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
-   }
- 	break;
- 	case 23:
- #line 207 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/id.c.rl"
- 	{
-     int line;
-     if (cs < lexer_first_final) {
-       size_t count = 0;
-       VALUE newstr_val;
-       char *newstr;
-       int newstr_count = 0;        
-       size_t len;
-       const char *buff;
-       if (lexer->last_newline != 0) {
-         len = LEN(last_newline, eof);
-         buff = PTR_TO(last_newline);
-       } else {
-         len = strlen(data);
-         buff = data;
-       }
- 
-       // Allocate as a ruby string so that it gets cleaned up by GC
-       newstr_val = rb_str_new(buff, len);
-       newstr = RSTRING_PTR(newstr_val);
- 
- 
-       for (count = 0; count < len; count++) {
-         if(buff[count] == 10) {
-           newstr[newstr_count] = '\0'; // terminate new string at first newline found
-           break;
-         } else {
-           if (buff[count] == '%') {
-             newstr[newstr_count++] = buff[count];
-             newstr[newstr_count] = buff[count];
-           } else {
-             newstr[newstr_count] = buff[count];
-           }
-         }
-         newstr_count++;
-       }
- 
-       line = lexer->line_number;
-       lexer_init(lexer); // Re-initialize so we can scan again with the same lexer
-       raise_lexer_error(newstr, line);
-     } else {
-       rb_funcall(listener, rb_intern("eof"), 0);
-     }
-   }
- 	break;
- #line 1109 "ext/gherkin_lexer_id/gherkin_lexer_id.c"
- 		}
- 	}
- 
- _again:
- 	if ( cs == 0 )
- 		goto _out;
- 	if ( ++p != pe )
- 		goto _resume;
- 	_test_eof: {}
- 	if ( p == eof )
- 	{
- 	const char *__acts = _lexer_actions + _lexer_eof_actions[cs];
- 	unsigned int __nacts = (unsigned int) *__acts++;
- 	while ( __nacts-- > 0 ) {
- 		switch ( *__acts++ ) {
- 	case 23:
- #line 207 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/id.c.rl"
- 	{
-     int line;
-     if (cs < lexer_first_final) {
-       size_t count = 0;
-       VALUE newstr_val;
-       char *newstr;
-       int newstr_count = 0;        
-       size_t len;
-       const char *buff;
-       if (lexer->last_newline != 0) {
-         len = LEN(last_newline, eof);
-         buff = PTR_TO(last_newline);
-       } else {
-         len = strlen(data);
-         buff = data;
-       }
- 
-       // Allocate as a ruby string so that it gets cleaned up by GC
-       newstr_val = rb_str_new(buff, len);
-       newstr = RSTRING_PTR(newstr_val);
- 
- 
-       for (count = 0; count < len; count++) {
-         if(buff[count] == 10) {
-           newstr[newstr_count] = '\0'; // terminate new string at first newline found
-           break;
-         } else {
-           if (buff[count] == '%') {
-             newstr[newstr_count++] = buff[count];
-             newstr[newstr_count] = buff[count];
-           } else {
-             newstr[newstr_count] = buff[count];
-           }
-         }
-         newstr_count++;
-       }
- 
-       line = lexer->line_number;
-       lexer_init(lexer); // Re-initialize so we can scan again with the same lexer
-       raise_lexer_error(newstr, line);
-     } else {
-       rb_funcall(listener, rb_intern("eof"), 0);
-     }
-   }
- 	break;
- #line 1172 "ext/gherkin_lexer_id/gherkin_lexer_id.c"
- 		}
- 	}
- 	}
- 
- 	_out: {}
- 	}
- 
- #line 426 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/id.c.rl"
- 
-     assert(p <= pe && "data overflow after parsing execute");
-     assert(lexer->content_start <= len && "content starts after data end");
-     assert(lexer->mark < len && "mark is after data end");
-     
-     // Reset lexer by re-initializing the whole thing
-     lexer_init(lexer);
- 
-     if (cs == lexer_error) {
-       rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails.");
-     } else {
-       return Qtrue;
-     }
-   }
- }
- 
- void Init_gherkin_lexer_id()
- {
-   mGherkin = rb_define_module("Gherkin");
-   mGherkinLexer = rb_define_module_under(mGherkin, "Lexer");
-   rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError"));
- 
-   mCLexer = rb_define_module_under(mGherkin, "CLexer");
-   cI18nLexer = rb_define_class_under(mCLexer, "Id", rb_cObject);
-   rb_define_alloc_func(cI18nLexer, CLexer_alloc);
-   rb_define_method(cI18nLexer, "initialize", CLexer_init, 1);
-   rb_define_method(cI18nLexer, "scan", CLexer_scan, 1);
- }
- 
 -#line 1 "ragel/i18n/id.c.rl"
 -#include <assert.h>
 -#include <ruby.h>
 -
 -#if defined(_WIN32)
 -#include <stddef.h>
 -#endif
 -
 -#ifdef HAVE_RUBY_RE_H
 -#include <ruby/re.h>
 -#else
 -#include <re.h>
 -#endif
 -
 -#ifdef HAVE_RUBY_ENCODING_H
 -#include <ruby/encoding.h>
 -#define ENCODED_STR_NEW(ptr, len) \
 -    rb_enc_str_new(ptr, len, rb_utf8_encoding())
 -#else
 -#define ENCODED_STR_NEW(ptr, len) \
 -    rb_str_new(ptr, len)
 -#endif
 -
 -#ifndef RSTRING_PTR
 -#define RSTRING_PTR(s) (RSTRING(s)->ptr)
 -#endif
 -
 -#ifndef RSTRING_LEN
 -#define RSTRING_LEN(s) (RSTRING(s)->len)
 -#endif
 -
 -#define DATA_GET(FROM, TYPE, NAME) \
 -  Data_Get_Struct(FROM, TYPE, NAME); \
 -  if (NAME == NULL) { \
 -    rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \
 -  }
 - 
 -typedef struct lexer_state {
 -  int content_len;
 -  int line_number;
 -  int current_line;
 -  int start_col;
 -  size_t mark;
 -  size_t keyword_start;
 -  size_t keyword_end;
 -  size_t next_keyword_start;
 -  size_t content_start;
 -  size_t content_end;
 -  size_t docstring_content_type_start;
 -  size_t docstring_content_type_end;
 -  size_t query_start;
 -  size_t last_newline;
 -  size_t final_newline;
 -} lexer_state;
 -
 -static VALUE mGherkin;
 -static VALUE mGherkinLexer;
 -static VALUE mCLexer;
 -static VALUE cI18nLexer;
 -static VALUE rb_eGherkinLexingError;
 -
 -#define LEN(AT, P) (P - data - lexer->AT)
 -#define MARK(M, P) (lexer->M = (P) - data)
 -#define PTR_TO(P) (data + lexer->P)
 -
 -#define STORE_KW_END_CON(EVENT) \
 -  store_multiline_kw_con(listener, # EVENT, \
 -    PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \
 -    PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \
 -    lexer->current_line, lexer->start_col); \
 -    if (lexer->content_end != 0) { \
 -      p = PTR_TO(content_end - 1); \
 -    } \
 -    lexer->content_end = 0
 -
 -#define STORE_ATTR(ATTR) \
 -    store_attr(listener, # ATTR, \
 -      PTR_TO(content_start), LEN(content_start, p), \
 -      lexer->line_number)
 -
 -
 -#line 254 "ragel/i18n/id.c.rl"
 -
 -
 -/** Data **/
 -
 -#line 89 "ext/gherkin_lexer_id/gherkin_lexer_id.c"
 -static const char _lexer_actions[] = {
 -	0, 1, 0, 1, 1, 1, 2, 1, 
 -	3, 1, 4, 1, 5, 1, 6, 1, 
 -	7, 1, 8, 1, 9, 1, 10, 1, 
 -	11, 1, 12, 1, 13, 1, 16, 1, 
 -	17, 1, 18, 1, 19, 1, 20, 1, 
 -	21, 1, 22, 1, 23, 2, 1, 18, 
 -	2, 4, 5, 2, 13, 0, 2, 14, 
 -	15, 2, 17, 0, 2, 17, 2, 2, 
 -	17, 16, 2, 17, 19, 2, 18, 6, 
 -	2, 18, 7, 2, 18, 8, 2, 18, 
 -	9, 2, 18, 10, 2, 18, 16, 2, 
 -	20, 21, 2, 22, 0, 2, 22, 2, 
 -	2, 22, 16, 2, 22, 19, 3, 3, 
 -	14, 15, 3, 5, 14, 15, 3, 11, 
 -	14, 15, 3, 12, 14, 15, 3, 13, 
 -	14, 15, 3, 14, 15, 18, 3, 17, 
 -	0, 11, 3, 17, 14, 15, 4, 1, 
 -	14, 15, 18, 4, 4, 5, 14, 15, 
 -	4, 17, 0, 14, 15, 5, 17, 0, 
 -	11, 14, 15
 -};
 -
 -static const short _lexer_key_offsets[] = {
 -	0, 0, 18, 19, 20, 37, 38, 39, 
 -	41, 43, 48, 53, 58, 63, 67, 71, 
 -	73, 74, 75, 76, 77, 78, 79, 80, 
 -	81, 82, 83, 84, 85, 86, 87, 88, 
 -	89, 91, 93, 98, 105, 110, 111, 112, 
 -	113, 114, 115, 116, 117, 118, 125, 127, 
 -	129, 131, 133, 135, 152, 154, 156, 157, 
 -	158, 159, 160, 161, 175, 177, 179, 181, 
 -	183, 185, 187, 189, 191, 193, 195, 197, 
 -	199, 201, 203, 205, 208, 210, 212, 214, 
 -	216, 218, 220, 222, 224, 226, 228, 230, 
 -	232, 234, 236, 238, 240, 242, 244, 246, 
 -	248, 250, 252, 255, 257, 259, 261, 263, 
 -	265, 267, 269, 271, 273, 274, 275, 276, 
 -	277, 278, 279, 280, 281, 282, 283, 284, 
 -	295, 297, 299, 301, 303, 305, 307, 309, 
 -	311, 313, 315, 317, 319, 321, 323, 325, 
 -	327, 329, 331, 333, 335, 337, 339, 341, 
 -	343, 345, 347, 349, 351, 353, 355, 357, 
 -	359, 361, 363, 366, 368, 370, 372, 374, 
 -	376, 378, 379, 380, 381, 382, 383, 384, 
 -	385, 386, 387, 388, 389, 390, 391, 393, 
 -	394, 395, 396, 397, 398, 399, 400, 401, 
 -	402, 416, 418, 420, 422, 424, 426, 428, 
 -	430, 432, 434, 436, 438, 440, 442, 444, 
 -	446, 449, 451, 453, 455, 457, 459, 461, 
 -	463, 465, 467, 469, 471, 473, 475, 477, 
 -	479, 481, 483, 485, 487, 489, 491, 493, 
 -	495, 497, 499, 500, 501, 515, 517, 519, 
 -	521, 523, 525, 527, 529, 531, 533, 535, 
 -	537, 539, 541, 543, 545, 548, 551, 553, 
 -	555, 557, 559, 561, 563, 565, 567, 569, 
 -	571, 573, 575, 577, 579, 581, 583, 585, 
 -	587, 589, 591, 593, 595, 597, 600, 602, 
 -	604, 606, 608, 610, 612, 614, 616, 618, 
 -	619, 620, 621, 625, 631, 634, 636, 642, 
 -	659
 -};
 -
 -static const char _lexer_trans_keys[] = {
 -	-17, 10, 32, 34, 35, 37, 42, 64, 
 -	67, 68, 70, 75, 77, 83, 84, 124, 
 -	9, 13, -69, -65, 10, 32, 34, 35, 
 -	37, 42, 64, 67, 68, 70, 75, 77, 
 -	83, 84, 124, 9, 13, 34, 34, 10, 
 -	13, 10, 13, 10, 32, 34, 9, 13, 
 -	10, 32, 34, 9, 13, 10, 32, 34, 
 -	9, 13, 10, 32, 34, 9, 13, 10, 
 -	32, 9, 13, 10, 32, 9, 13, 10, 
 -	13, 10, 95, 70, 69, 65, 84, 85, 
 -	82, 69, 95, 69, 78, 68, 95, 37, 
 -	32, 10, 13, 10, 13, 13, 32, 64, 
 -	9, 10, 9, 10, 13, 32, 64, 11, 
 -	12, 10, 32, 64, 9, 13, 111, 110, 
 -	116, 111, 104, 58, 10, 10, 10, 32, 
 -	35, 70, 124, 9, 13, 10, 105, 10, 
 -	116, 10, 117, 10, 114, 10, 58, 10, 
 -	32, 34, 35, 37, 42, 64, 67, 68, 
 -	70, 75, 77, 83, 84, 124, 9, 13, 
 -	97, 101, 110, 115, 97, 114, 58, 10, 
 -	10, 10, 32, 35, 37, 42, 64, 68, 
 -	70, 75, 77, 83, 84, 9, 13, 10, 
 -	95, 10, 70, 10, 69, 10, 65, 10, 
 -	84, 10, 85, 10, 82, 10, 69, 10, 
 -	95, 10, 69, 10, 78, 10, 68, 10, 
 -	95, 10, 37, 10, 32, 10, 97, 101, 
 -	10, 110, 10, 110, 10, 103, 10, 97, 
 -	10, 105, 10, 116, 10, 117, 10, 114, 
 -	10, 58, 10, 101, 10, 116, 10, 105, 
 -	10, 107, 10, 97, 10, 97, 10, 107, 
 -	10, 101, 10, 110, 10, 97, 10, 114, 
 -	10, 105, 10, 111, 10, 32, 58, 10, 
 -	107, 10, 111, 10, 110, 10, 115, 10, 
 -	101, 10, 112, 10, 97, 10, 112, 10, 
 -	105, 110, 103, 97, 110, 105, 116, 117, 
 -	114, 58, 10, 10, 10, 32, 35, 37, 
 -	64, 67, 68, 70, 83, 9, 13, 10, 
 -	95, 10, 70, 10, 69, 10, 65, 10, 
 -	84, 10, 85, 10, 82, 10, 69, 10, 
 -	95, 10, 69, 10, 78, 10, 68, 10, 
 -	95, 10, 37, 10, 111, 10, 110, 10, 
 -	116, 10, 111, 10, 104, 10, 58, 10, 
 -	97, 10, 115, 10, 97, 10, 114, 10, 
 -	105, 10, 116, 10, 117, 10, 107, 10, 
 -	101, 10, 110, 10, 97, 10, 114, 10, 
 -	105, 10, 111, 10, 32, 58, 10, 107, 
 -	10, 111, 10, 110, 10, 115, 10, 101, 
 -	10, 112, 101, 116, 105, 107, 97, 97, 
 -	107, 101, 110, 97, 114, 105, 111, 32, 
 -	58, 107, 111, 110, 115, 101, 112, 58, 
 -	10, 10, 10, 32, 35, 37, 42, 64, 
 -	68, 70, 75, 77, 83, 84, 9, 13, 
 -	10, 95, 10, 70, 10, 69, 10, 65, 
 -	10, 84, 10, 85, 10, 82, 10, 69, 
 -	10, 95, 10, 69, 10, 78, 10, 68, 
 -	10, 95, 10, 37, 10, 32, 10, 97, 
 -	101, 10, 110, 10, 110, 10, 103, 10, 
 -	97, 10, 105, 10, 116, 10, 117, 10, 
 -	114, 10, 58, 10, 101, 10, 116, 10, 
 -	105, 10, 107, 10, 97, 10, 97, 10, 
 -	107, 10, 101, 10, 110, 10, 97, 10, 
 -	114, 10, 105, 10, 111, 10, 97, 10, 
 -	112, 10, 105, 10, 10, 10, 32, 35, 
 -	37, 42, 64, 68, 70, 75, 77, 83, 
 -	84, 9, 13, 10, 95, 10, 70, 10, 
 -	69, 10, 65, 10, 84, 10, 85, 10, 
 -	82, 10, 69, 10, 95, 10, 69, 10, 
 -	78, 10, 68, 10, 95, 10, 37, 10, 
 -	32, 10, 97, 101, 10, 110, 115, 10, 
 -	97, 10, 114, 10, 58, 10, 110, 10, 
 -	103, 10, 97, 10, 110, 10, 105, 10, 
 -	116, 10, 117, 10, 101, 10, 116, 10, 
 -	105, 10, 107, 10, 97, 10, 97, 10, 
 -	107, 10, 101, 10, 110, 10, 97, 10, 
 -	114, 10, 105, 10, 111, 10, 32, 58, 
 -	10, 107, 10, 111, 10, 110, 10, 115, 
 -	10, 101, 10, 112, 10, 97, 10, 112, 
 -	10, 105, 97, 112, 105, 32, 124, 9, 
 -	13, 10, 32, 92, 124, 9, 13, 10, 
 -	92, 124, 10, 92, 10, 32, 92, 124, 
 -	9, 13, 10, 32, 34, 35, 37, 42, 
 -	64, 67, 68, 70, 75, 77, 83, 84, 
 -	124, 9, 13, 0
 -};
 -
 -static const char _lexer_single_lengths[] = {
 -	0, 16, 1, 1, 15, 1, 1, 2, 
 -	2, 3, 3, 3, 3, 2, 2, 2, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	2, 2, 3, 5, 3, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 5, 2, 2, 
 -	2, 2, 2, 15, 2, 2, 1, 1, 
 -	1, 1, 1, 12, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 3, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 3, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 9, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 3, 2, 2, 2, 2, 2, 
 -	2, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 2, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	12, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	3, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 1, 1, 12, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 3, 3, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 3, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 1, 
 -	1, 1, 2, 4, 3, 2, 4, 15, 
 -	0
 -};
 -
 -static const char _lexer_range_lengths[] = {
 -	0, 1, 0, 0, 1, 0, 0, 0, 
 -	0, 1, 1, 1, 1, 1, 1, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 1, 1, 1, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 1, 0, 0, 
 -	0, 0, 0, 1, 0, 0, 0, 0, 
 -	0, 0, 0, 1, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 1, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	1, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 1, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 1, 1, 0, 0, 1, 1, 
 -	0
 -};
 -
 -static const short _lexer_index_offsets[] = {
 -	0, 0, 18, 20, 22, 39, 41, 43, 
 -	46, 49, 54, 59, 64, 69, 73, 77, 
 -	80, 82, 84, 86, 88, 90, 92, 94, 
 -	96, 98, 100, 102, 104, 106, 108, 110, 
 -	112, 115, 118, 123, 130, 135, 137, 139, 
 -	141, 143, 145, 147, 149, 151, 158, 161, 
 -	164, 167, 170, 173, 190, 193, 196, 198, 
 -	200, 202, 204, 206, 220, 223, 226, 229, 
 -	232, 235, 238, 241, 244, 247, 250, 253, 
 -	256, 259, 262, 265, 269, 272, 275, 278, 
 -	281, 284, 287, 290, 293, 296, 299, 302, 
 -	305, 308, 311, 314, 317, 320, 323, 326, 
 -	329, 332, 335, 339, 342, 345, 348, 351, 
 -	354, 357, 360, 363, 366, 368, 370, 372, 
 -	374, 376, 378, 380, 382, 384, 386, 388, 
 -	399, 402, 405, 408, 411, 414, 417, 420, 
 -	423, 426, 429, 432, 435, 438, 441, 444, 
 -	447, 450, 453, 456, 459, 462, 465, 468, 
 -	471, 474, 477, 480, 483, 486, 489, 492, 
 -	495, 498, 501, 505, 508, 511, 514, 517, 
 -	520, 523, 525, 527, 529, 531, 533, 535, 
 -	537, 539, 541, 543, 545, 547, 549, 552, 
 -	554, 556, 558, 560, 562, 564, 566, 568, 
 -	570, 584, 587, 590, 593, 596, 599, 602, 
 -	605, 608, 611, 614, 617, 620, 623, 626, 
 -	629, 633, 636, 639, 642, 645, 648, 651, 
 -	654, 657, 660, 663, 666, 669, 672, 675, 
 -	678, 681, 684, 687, 690, 693, 696, 699, 
 -	702, 705, 708, 710, 712, 726, 729, 732, 
 -	735, 738, 741, 744, 747, 750, 753, 756, 
 -	759, 762, 765, 768, 771, 775, 779, 782, 
 -	785, 788, 791, 794, 797, 800, 803, 806, 
 -	809, 812, 815, 818, 821, 824, 827, 830, 
 -	833, 836, 839, 842, 845, 848, 852, 855, 
 -	858, 861, 864, 867, 870, 873, 876, 879, 
 -	881, 883, 885, 889, 895, 899, 902, 908, 
 -	925
 -};
 -
 -static const short _lexer_trans_targs[] = {
 -	2, 4, 4, 5, 15, 17, 31, 34, 
 -	37, 52, 112, 161, 166, 167, 279, 282, 
 -	4, 0, 3, 0, 4, 0, 4, 4, 
 -	5, 15, 17, 31, 34, 37, 52, 112, 
 -	161, 166, 167, 279, 282, 4, 0, 6, 
 -	0, 7, 0, 9, 8, 8, 9, 8, 
 -	8, 10, 10, 11, 10, 10, 10, 10, 
 -	11, 10, 10, 10, 10, 12, 10, 10, 
 -	10, 10, 13, 10, 10, 4, 14, 14, 
 -	0, 4, 14, 14, 0, 4, 16, 15, 
 -	4, 0, 18, 0, 19, 0, 20, 0, 
 -	21, 0, 22, 0, 23, 0, 24, 0, 
 -	25, 0, 26, 0, 27, 0, 28, 0, 
 -	29, 0, 30, 0, 288, 0, 32, 0, 
 -	4, 16, 33, 4, 16, 33, 0, 0, 
 -	0, 0, 35, 36, 4, 36, 36, 34, 
 -	35, 35, 4, 36, 34, 36, 0, 38, 
 -	0, 39, 0, 40, 0, 41, 0, 42, 
 -	0, 43, 0, 45, 44, 45, 44, 45, 
 -	45, 4, 46, 4, 45, 44, 45, 47, 
 -	44, 45, 48, 44, 45, 49, 44, 45, 
 -	50, 44, 45, 51, 44, 4, 4, 5, 
 -	15, 17, 31, 34, 37, 52, 112, 161, 
 -	166, 167, 279, 282, 4, 0, 53, 108, 
 -	0, 31, 54, 0, 55, 0, 56, 0, 
 -	57, 0, 59, 58, 59, 58, 59, 59, 
 -	4, 60, 74, 4, 75, 80, 85, 90, 
 -	91, 105, 59, 58, 59, 61, 58, 59, 
 -	62, 58, 59, 63, 58, 59, 64, 58, 
 -	59, 65, 58, 59, 66, 58, 59, 67, 
 -	58, 59, 68, 58, 59, 69, 58, 59, 
 -	70, 58, 59, 71, 58, 59, 72, 58, 
 -	59, 73, 58, 59, 4, 58, 59, 51, 
 -	58, 59, 76, 77, 58, 59, 74, 58, 
 -	59, 78, 58, 59, 79, 58, 59, 76, 
 -	58, 59, 81, 58, 59, 82, 58, 59, 
 -	83, 58, 59, 84, 58, 59, 51, 58, 
 -	59, 86, 58, 59, 87, 58, 59, 88, 
 -	58, 59, 89, 58, 59, 74, 58, 59, 
 -	88, 58, 59, 92, 58, 59, 93, 58, 
 -	59, 94, 58, 59, 95, 58, 59, 96, 
 -	58, 59, 97, 58, 59, 98, 58, 59, 
 -	99, 51, 58, 59, 100, 58, 59, 101, 
 -	58, 59, 102, 58, 59, 103, 58, 59, 
 -	104, 58, 59, 84, 58, 59, 106, 58, 
 -	59, 107, 58, 59, 74, 58, 109, 0, 
 -	110, 0, 111, 0, 31, 0, 113, 0, 
 -	114, 0, 115, 0, 116, 0, 117, 0, 
 -	119, 118, 119, 118, 119, 119, 4, 120, 
 -	4, 134, 140, 144, 147, 119, 118, 119, 
 -	121, 118, 119, 122, 118, 119, 123, 118, 
 -	119, 124, 118, 119, 125, 118, 119, 126, 
 -	118, 119, 127, 118, 119, 128, 118, 119, 
 -	129, 118, 119, 130, 118, 119, 131, 118, 
 -	119, 132, 118, 119, 133, 118, 119, 4, 
 -	118, 119, 135, 118, 119, 136, 118, 119, 
 -	137, 118, 119, 138, 118, 119, 139, 118, 
 -	119, 51, 118, 119, 141, 118, 119, 142, 
 -	118, 119, 143, 118, 119, 139, 118, 119, 
 -	145, 118, 119, 146, 118, 119, 143, 118, 
 -	119, 148, 118, 119, 149, 118, 119, 150, 
 -	118, 119, 151, 118, 119, 152, 118, 119, 
 -	153, 118, 119, 154, 118, 119, 155, 51, 
 -	118, 119, 156, 118, 119, 157, 118, 119, 
 -	158, 118, 119, 159, 118, 119, 160, 118, 
 -	119, 139, 118, 162, 0, 163, 0, 164, 
 -	0, 165, 0, 31, 0, 164, 0, 168, 
 -	0, 169, 0, 170, 0, 171, 0, 172, 
 -	0, 173, 0, 174, 0, 175, 226, 0, 
 -	176, 0, 177, 0, 178, 0, 179, 0, 
 -	180, 0, 181, 0, 182, 0, 184, 183, 
 -	184, 183, 184, 184, 4, 185, 199, 4, 
 -	200, 205, 210, 215, 216, 223, 184, 183, 
 -	184, 186, 183, 184, 187, 183, 184, 188, 
 -	183, 184, 189, 183, 184, 190, 183, 184, 
 -	191, 183, 184, 192, 183, 184, 193, 183, 
 -	184, 194, 183, 184, 195, 183, 184, 196, 
 -	183, 184, 197, 183, 184, 198, 183, 184, 
 -	4, 183, 184, 51, 183, 184, 201, 202, 
 -	183, 184, 199, 183, 184, 203, 183, 184, 
 -	204, 183, 184, 201, 183, 184, 206, 183, 
 -	184, 207, 183, 184, 208, 183, 184, 209, 
 -	183, 184, 51, 183, 184, 211, 183, 184, 
 -	212, 183, 184, 213, 183, 184, 214, 183, 
 -	184, 199, 183, 184, 213, 183, 184, 217, 
 -	183, 184, 218, 183, 184, 219, 183, 184, 
 -	220, 183, 184, 221, 183, 184, 222, 183, 
 -	184, 209, 183, 184, 224, 183, 184, 225, 
 -	183, 184, 199, 183, 228, 227, 228, 227, 
 -	228, 228, 4, 229, 243, 4, 244, 253, 
 -	256, 261, 262, 276, 228, 227, 228, 230, 
 -	227, 228, 231, 227, 228, 232, 227, 228, 
 -	233, 227, 228, 234, 227, 228, 235, 227, 
 -	228, 236, 227, 228, 237, 227, 228, 238, 
 -	227, 228, 239, 227, 228, 240, 227, 228, 
 -	241, 227, 228, 242, 227, 228, 4, 227, 
 -	228, 51, 227, 228, 245, 249, 227, 228, 
 -	243, 246, 227, 228, 247, 227, 228, 248, 
 -	227, 228, 51, 227, 228, 250, 227, 228, 
 -	251, 227, 228, 252, 227, 228, 243, 227, 
 -	228, 254, 227, 228, 255, 227, 228, 247, 
 -	227, 228, 257, 227, 228, 258, 227, 228, 
 -	259, 227, 228, 260, 227, 228, 243, 227, 
 -	228, 259, 227, 228, 263, 227, 228, 264, 
 -	227, 228, 265, 227, 228, 266, 227, 228, 
 -	267, 227, 228, 268, 227, 228, 269, 227, 
 -	228, 270, 51, 227, 228, 271, 227, 228, 
 -	272, 227, 228, 273, 227, 228, 274, 227, 
 -	228, 275, 227, 228, 248, 227, 228, 277, 
 -	227, 228, 278, 227, 228, 243, 227, 280, 
 -	0, 281, 0, 31, 0, 282, 283, 282, 
 -	0, 287, 286, 285, 283, 286, 284, 0, 
 -	285, 283, 284, 0, 285, 284, 287, 286, 
 -	285, 283, 286, 284, 287, 287, 5, 15, 
 -	17, 31, 34, 37, 52, 112, 161, 166, 
 -	167, 279, 282, 287, 0, 0, 0
 -};
 -
 -static const unsigned char _lexer_trans_actions[] = {
 -	0, 54, 0, 5, 1, 0, 29, 1, 
 -	29, 29, 29, 29, 29, 29, 29, 35, 
 -	0, 43, 0, 43, 0, 43, 54, 0, 
 -	5, 1, 0, 29, 1, 29, 29, 29, 
 -	29, 29, 29, 29, 35, 0, 43, 0, 
 -	43, 0, 43, 139, 48, 9, 106, 11, 
 -	0, 134, 45, 45, 45, 3, 122, 33, 
 -	33, 33, 0, 122, 33, 33, 33, 0, 
 -	122, 33, 0, 33, 0, 102, 7, 7, 
 -	43, 54, 0, 0, 43, 114, 25, 0, 
 -	54, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	149, 126, 57, 110, 23, 0, 43, 43, 
 -	43, 43, 0, 27, 118, 27, 27, 51, 
 -	27, 0, 54, 0, 1, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 144, 57, 54, 0, 54, 
 -	0, 81, 84, 81, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 21, 0, 130, 31, 60, 
 -	57, 31, 63, 57, 63, 63, 63, 63, 
 -	63, 63, 63, 66, 31, 43, 0, 0, 
 -	43, 0, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 144, 57, 54, 0, 54, 0, 
 -	72, 33, 84, 72, 84, 84, 84, 84, 
 -	84, 84, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 15, 0, 54, 15, 
 -	0, 54, 0, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 15, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 15, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	144, 57, 54, 0, 54, 0, 69, 33, 
 -	69, 84, 84, 84, 84, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 13, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 13, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 13, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 144, 57, 
 -	54, 0, 54, 0, 78, 33, 84, 78, 
 -	84, 84, 84, 84, 84, 84, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	19, 0, 54, 19, 0, 54, 0, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 19, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 144, 57, 54, 0, 
 -	54, 0, 75, 33, 84, 75, 84, 84, 
 -	84, 84, 84, 84, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 17, 0, 
 -	54, 17, 0, 54, 0, 0, 0, 54, 
 -	0, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 17, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 17, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 0, 
 -	43, 0, 43, 0, 43, 0, 0, 0, 
 -	43, 54, 37, 37, 87, 37, 37, 43, 
 -	0, 39, 0, 43, 0, 0, 54, 0, 
 -	0, 39, 0, 0, 54, 0, 93, 90, 
 -	41, 96, 90, 96, 96, 96, 96, 96, 
 -	96, 96, 99, 0, 43, 0, 0
 -};
 -
 -static const unsigned char _lexer_eof_actions[] = {
 -	0, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43
 -};
 -
 -static const int lexer_start = 1;
 -static const int lexer_first_final = 288;
 -static const int lexer_error = 0;
 -
 -static const int lexer_en_main = 1;
 -
 -
 -#line 258 "ragel/i18n/id.c.rl"
 -
 -static VALUE 
 -unindent(VALUE con, int start_col)
 -{
 -  VALUE re;
 -  /* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */
 -  char pat[32]; 
 -  snprintf(pat, 32, "^[\t ]{0,%d}", start_col); 
 -  re = rb_reg_regcomp(rb_str_new2(pat));
 -  rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2(""));
 -
 -  return Qnil;
 -
 -}
 -
 -static void 
 -store_kw_con(VALUE listener, const char * event_name, 
 -             const char * keyword_at, size_t keyword_length, 
 -             const char * at,         size_t length, 
 -             int current_line)
 -{
 -  VALUE con = Qnil, kw = Qnil;
 -  kw = ENCODED_STR_NEW(keyword_at, keyword_length);
 -  con = ENCODED_STR_NEW(at, length);
 -  rb_funcall(con, rb_intern("strip!"), 0);
 -  rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); 
 -}
 -
 -static void
 -store_multiline_kw_con(VALUE listener, const char * event_name,
 -                      const char * keyword_at, size_t keyword_length,
 -                      const char * at,         size_t length,
 -                      int current_line, int start_col)
 -{
 -  VALUE split;
 -  VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil;
 -
 -  kw = ENCODED_STR_NEW(keyword_at, keyword_length);
 -  con = ENCODED_STR_NEW(at, length);
 -
 -  unindent(con, start_col);
 -  
 -  split = rb_str_split(con, "\n");
 -
 -  name = rb_funcall(split, rb_intern("shift"), 0);
 -  desc = rb_ary_join(split, rb_str_new2( "\n" ));
 -
 -  if( name == Qnil ) 
 -  {
 -    name = rb_str_new2("");
 -  }
 -  if( rb_funcall(desc, rb_intern("size"), 0) == 0) 
 -  {
 -    desc = rb_str_new2("");
 -  }
 -  rb_funcall(name, rb_intern("strip!"), 0);
 -  rb_funcall(desc, rb_intern("rstrip!"), 0);
 -  rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); 
 -}
 -
 -static void 
 -store_attr(VALUE listener, const char * attr_type,
 -           const char * at, size_t length, 
 -           int line)
 -{
 -  VALUE val = ENCODED_STR_NEW(at, length);
 -  rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line));
 -}
 -static void 
 -store_docstring_content(VALUE listener, 
 -          int start_col, 
 -          const char *type_at, size_t type_length,
 -          const char *at, size_t length, 
 -          int current_line)
 -{
 -  VALUE re2;
 -  VALUE unescape_escaped_quotes;
 -  VALUE con = ENCODED_STR_NEW(at, length);
 -  VALUE con_type = ENCODED_STR_NEW(type_at, type_length);
 -
 -  unindent(con, start_col);
 -
 -  re2 = rb_reg_regcomp(rb_str_new2("\r\\Z"));
 -  unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\""));
 -  rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2(""));
 -  rb_funcall(con_type, rb_intern("strip!"), 0);
 -  rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\""));
 -  rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line));
 -}
 -static void 
 -raise_lexer_error(const char * at, int line)
 -{ 
 -  rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at);
 -}
 -
 -static void lexer_init(lexer_state *lexer) {
 -  lexer->content_start = 0;
 -  lexer->content_end = 0;
 -  lexer->content_len = 0;
 -  lexer->docstring_content_type_start = 0;
 -  lexer->docstring_content_type_end = 0;
 -  lexer->mark = 0;
 -  lexer->keyword_start = 0;
 -  lexer->keyword_end = 0;
 -  lexer->next_keyword_start = 0;
 -  lexer->line_number = 1;
 -  lexer->last_newline = 0;
 -  lexer->final_newline = 0;
 -  lexer->start_col = 0;
 -}
 -
 -static VALUE CLexer_alloc(VALUE klass)
 -{
 -  VALUE obj;
 -  lexer_state *lxr = ALLOC(lexer_state);
 -  lexer_init(lxr);
 -
 -  obj = Data_Wrap_Struct(klass, NULL, -1, lxr);
 -
 -  return obj;
 -}
 -
 -static VALUE CLexer_init(VALUE self, VALUE listener)
 -{
 -  lexer_state *lxr; 
 -  rb_iv_set(self, "@listener", listener);
 -  
 -  lxr = NULL;
 -  DATA_GET(self, lexer_state, lxr);
 -  lexer_init(lxr);
 -  
 -  return self;
 -}
 -
 -static VALUE CLexer_scan(VALUE self, VALUE input)
 -{
 -  VALUE input_copy;
 -  char *data;
 -  size_t len;
 -  VALUE listener = rb_iv_get(self, "@listener");
 -
 -  lexer_state *lexer;
 -  lexer = NULL;
 -  DATA_GET(self, lexer_state, lexer);
 -
 -  input_copy = rb_str_dup(input);
 -
 -  rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%"));
 -  data = RSTRING_PTR(input_copy);
 -  len = RSTRING_LEN(input_copy);
 -  
 -  if (len == 0) { 
 -    rb_raise(rb_eGherkinLexingError, "No content to lex.");
 -  } else {
 -
 -    const char *p, *pe, *eof;
 -    int cs = 0;
 -    
 -    VALUE current_row = Qnil;
 -
 -    p = data;
 -    pe = data + len;
 -    eof = pe;
 -    
 -    assert(*pe == '\0' && "pointer does not end on NULL");
 -    
 -    
 -#line 812 "ext/gherkin_lexer_id/gherkin_lexer_id.c"
 -	{
 -	cs = lexer_start;
 -	}
 -
 -#line 425 "ragel/i18n/id.c.rl"
 -    
 -#line 819 "ext/gherkin_lexer_id/gherkin_lexer_id.c"
 -	{
 -	int _klen;
 -	unsigned int _trans;
 -	const char *_acts;
 -	unsigned int _nacts;
 -	const char *_keys;
 -
 -	if ( p == pe )
 -		goto _test_eof;
 -	if ( cs == 0 )
 -		goto _out;
 -_resume:
 -	_keys = _lexer_trans_keys + _lexer_key_offsets[cs];
 -	_trans = _lexer_index_offsets[cs];
 -
 -	_klen = _lexer_single_lengths[cs];
 -	if ( _klen > 0 ) {
 -		const char *_lower = _keys;
 -		const char *_mid;
 -		const char *_upper = _keys + _klen - 1;
 -		while (1) {
 -			if ( _upper < _lower )
 -				break;
 -
 -			_mid = _lower + ((_upper-_lower) >> 1);
 -			if ( (*p) < *_mid )
 -				_upper = _mid - 1;
 -			else if ( (*p) > *_mid )
 -				_lower = _mid + 1;
 -			else {
 -				_trans += (unsigned int)(_mid - _keys);
 -				goto _match;
 -			}
 -		}
 -		_keys += _klen;
 -		_trans += _klen;
 -	}
 -
 -	_klen = _lexer_range_lengths[cs];
 -	if ( _klen > 0 ) {
 -		const char *_lower = _keys;
 -		const char *_mid;
 -		const char *_upper = _keys + (_klen<<1) - 2;
 -		while (1) {
 -			if ( _upper < _lower )
 -				break;
 -
 -			_mid = _lower + (((_upper-_lower) >> 1) & ~1);
 -			if ( (*p) < _mid[0] )
 -				_upper = _mid - 2;
 -			else if ( (*p) > _mid[1] )
 -				_lower = _mid + 2;
 -			else {
 -				_trans += (unsigned int)((_mid - _keys)>>1);
 -				goto _match;
 -			}
 -		}
 -		_trans += _klen;
 -	}
 -
 -_match:
 -	cs = _lexer_trans_targs[_trans];
 -
 -	if ( _lexer_trans_actions[_trans] == 0 )
 -		goto _again;
 -
 -	_acts = _lexer_actions + _lexer_trans_actions[_trans];
 -	_nacts = (unsigned int) *_acts++;
 -	while ( _nacts-- > 0 )
 -	{
 -		switch ( *_acts++ )
 -		{
 -	case 0:
 -#line 83 "ragel/i18n/id.c.rl"
 -	{
 -		MARK(content_start, p);
 -    lexer->current_line = lexer->line_number;
 -    lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2;
 -  }
 -	break;
 -	case 1:
 -#line 89 "ragel/i18n/id.c.rl"
 -	{
 -    MARK(content_start, p);
 -  }
 -	break;
 -	case 2:
 -#line 93 "ragel/i18n/id.c.rl"
 -	{
 -    lexer->current_line = lexer->line_number;
 -    lexer->start_col = p - data - lexer->last_newline;
 -  }
 -	break;
 -	case 3:
 -#line 98 "ragel/i18n/id.c.rl"
 -	{
 -    int len = LEN(content_start, PTR_TO(final_newline));
 -    int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end));
 -
 -    if (len < 0) len = 0;
 -    if (type_len < 0) len = 0;
 -
 -    store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line);
 -  }
 -	break;
 -	case 4:
 -#line 108 "ragel/i18n/id.c.rl"
 -	{ 
 -    MARK(docstring_content_type_start, p);
 -  }
 -	break;
 -	case 5:
 -#line 112 "ragel/i18n/id.c.rl"
 -	{ 
 -    MARK(docstring_content_type_end, p);
 -  }
 -	break;
 -	case 6:
 -#line 116 "ragel/i18n/id.c.rl"
 -	{
 -    STORE_KW_END_CON(feature);
 -  }
 -	break;
 -	case 7:
 -#line 120 "ragel/i18n/id.c.rl"
 -	{
 -    STORE_KW_END_CON(background);
 -  }
 -	break;
 -	case 8:
 -#line 124 "ragel/i18n/id.c.rl"
 -	{
 -    STORE_KW_END_CON(scenario);
 -  }
 -	break;
 -	case 9:
 -#line 128 "ragel/i18n/id.c.rl"
 -	{
 -    STORE_KW_END_CON(scenario_outline);
 -  }
 -	break;
 -	case 10:
 -#line 132 "ragel/i18n/id.c.rl"
 -	{
 -    STORE_KW_END_CON(examples);
 -  }
 -	break;
 -	case 11:
 -#line 136 "ragel/i18n/id.c.rl"
 -	{
 -    store_kw_con(listener, "step",
 -      PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
 -      PTR_TO(content_start), LEN(content_start, p), 
 -      lexer->current_line);
 -  }
 -	break;
 -	case 12:
 -#line 143 "ragel/i18n/id.c.rl"
 -	{
 -    STORE_ATTR(comment);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 13:
 -#line 148 "ragel/i18n/id.c.rl"
 -	{
 -    STORE_ATTR(tag);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 14:
 -#line 153 "ragel/i18n/id.c.rl"
 -	{
 -    lexer->line_number += 1;
 -    MARK(final_newline, p);
 -  }
 -	break;
 -	case 15:
 -#line 158 "ragel/i18n/id.c.rl"
 -	{
 -    MARK(last_newline, p + 1);
 -  }
 -	break;
 -	case 16:
 -#line 162 "ragel/i18n/id.c.rl"
 -	{
 -    if (lexer->mark == 0) {
 -      MARK(mark, p);
 -    }
 -  }
 -	break;
 -	case 17:
 -#line 168 "ragel/i18n/id.c.rl"
 -	{
 -    MARK(keyword_end, p);
 -    MARK(keyword_start, PTR_TO(mark));
 -    MARK(content_start, p + 1);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 18:
 -#line 175 "ragel/i18n/id.c.rl"
 -	{
 -    MARK(content_end, p);
 -  }
 -	break;
 -	case 19:
 -#line 179 "ragel/i18n/id.c.rl"
 -	{
 -    p = p - 1;
 -    lexer->current_line = lexer->line_number;
 -    current_row = rb_ary_new();
 -  }
 -	break;
 -	case 20:
 -#line 185 "ragel/i18n/id.c.rl"
 -	{
 -		MARK(content_start, p);
 -  }
 -	break;
 -	case 21:
 -#line 189 "ragel/i18n/id.c.rl"
 -	{
 -    VALUE re_pipe, re_newline, re_backslash;
 -    VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
 -    rb_funcall(con, rb_intern("strip!"), 0);
 -    re_pipe      = rb_reg_regcomp(rb_str_new2("\\\\\\|"));
 -    re_newline   = rb_reg_regcomp(rb_str_new2("\\\\n"));
 -    re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_pipe,      rb_str_new2("|"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_newline,   rb_str_new2("\n"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\"));
 -
 -    rb_ary_push(current_row, con);
 -  }
 -	break;
 -	case 22:
 -#line 203 "ragel/i18n/id.c.rl"
 -	{
 -    rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
 -  }
 -	break;
 -	case 23:
 -#line 207 "ragel/i18n/id.c.rl"
 -	{
 -    int line;
 -    if (cs < lexer_first_final) {
 -      size_t count = 0;
 -      VALUE newstr_val;
 -      char *newstr;
 -      int newstr_count = 0;        
 -      size_t len;
 -      const char *buff;
 -      if (lexer->last_newline != 0) {
 -        len = LEN(last_newline, eof);
 -        buff = PTR_TO(last_newline);
 -      } else {
 -        len = strlen(data);
 -        buff = data;
 -      }
 -
 -      /* Allocate as a ruby string so that it gets cleaned up by GC */
 -      newstr_val = rb_str_new(buff, len);
 -      newstr = RSTRING_PTR(newstr_val);
 -
 -
 -      for (count = 0; count < len; count++) {
 -        if(buff[count] == 10) {
 -          newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
 -          break;
 -        } else {
 -          if (buff[count] == '%') {
 -            newstr[newstr_count++] = buff[count];
 -            newstr[newstr_count] = buff[count];
 -          } else {
 -            newstr[newstr_count] = buff[count];
 -          }
 -        }
 -        newstr_count++;
 -      }
 -
 -      line = lexer->line_number;
 -      lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
 -      raise_lexer_error(newstr, line);
 -    } else {
 -      rb_funcall(listener, rb_intern("eof"), 0);
 -    }
 -  }
 -	break;
 -#line 1109 "ext/gherkin_lexer_id/gherkin_lexer_id.c"
 -		}
 -	}
 -
 -_again:
 -	if ( cs == 0 )
 -		goto _out;
 -	if ( ++p != pe )
 -		goto _resume;
 -	_test_eof: {}
 -	if ( p == eof )
 -	{
 -	const char *__acts = _lexer_actions + _lexer_eof_actions[cs];
 -	unsigned int __nacts = (unsigned int) *__acts++;
 -	while ( __nacts-- > 0 ) {
 -		switch ( *__acts++ ) {
 -	case 23:
 -#line 207 "ragel/i18n/id.c.rl"
 -	{
 -    int line;
 -    if (cs < lexer_first_final) {
 -      size_t count = 0;
 -      VALUE newstr_val;
 -      char *newstr;
 -      int newstr_count = 0;        
 -      size_t len;
 -      const char *buff;
 -      if (lexer->last_newline != 0) {
 -        len = LEN(last_newline, eof);
 -        buff = PTR_TO(last_newline);
 -      } else {
 -        len = strlen(data);
 -        buff = data;
 -      }
 -
 -      /* Allocate as a ruby string so that it gets cleaned up by GC */
 -      newstr_val = rb_str_new(buff, len);
 -      newstr = RSTRING_PTR(newstr_val);
 -
 -
 -      for (count = 0; count < len; count++) {
 -        if(buff[count] == 10) {
 -          newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
 -          break;
 -        } else {
 -          if (buff[count] == '%') {
 -            newstr[newstr_count++] = buff[count];
 -            newstr[newstr_count] = buff[count];
 -          } else {
 -            newstr[newstr_count] = buff[count];
 -          }
 -        }
 -        newstr_count++;
 -      }
 -
 -      line = lexer->line_number;
 -      lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
 -      raise_lexer_error(newstr, line);
 -    } else {
 -      rb_funcall(listener, rb_intern("eof"), 0);
 -    }
 -  }
 -	break;
 -#line 1172 "ext/gherkin_lexer_id/gherkin_lexer_id.c"
 -		}
 -	}
 -	}
 -
 -	_out: {}
 -	}
 -
 -#line 426 "ragel/i18n/id.c.rl"
 -
 -    assert(p <= pe && "data overflow after parsing execute");
 -    assert(lexer->content_start <= len && "content starts after data end");
 -    assert(lexer->mark < len && "mark is after data end");
 -    
 -    /* Reset lexer by re-initializing the whole thing */
 -    lexer_init(lexer);
 -
 -    if (cs == lexer_error) {
 -      rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails.");
 -    } else {
 -      return Qtrue;
 -    }
 -  }
 -}
 -
 -void Init_gherkin_lexer_id()
 -{
 -  mGherkin = rb_define_module("Gherkin");
 -  mGherkinLexer = rb_define_module_under(mGherkin, "Lexer");
 -  rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError"));
 -
 -  mCLexer = rb_define_module_under(mGherkin, "CLexer");
 -  cI18nLexer = rb_define_class_under(mCLexer, "Id", rb_cObject);
 -  rb_define_alloc_func(cI18nLexer, CLexer_alloc);
 -  rb_define_method(cI18nLexer, "initialize", CLexer_init, 1);
 -  rb_define_method(cI18nLexer, "scan", CLexer_scan, 1);
 -}
 -
diff --cc ext/gherkin_lexer_is/extconf.rb
index 3a0751d,3a0751d..0000000
deleted file mode 100644,100644
--- a/ext/gherkin_lexer_is/extconf.rb
+++ /dev/null
@@@ -1,6 -1,6 +1,0 @@@
--require 'mkmf'
--CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags']
--$CFLAGS << ' -O0 -Wall' if CONFIG['CC'] =~ /gcc|clang/
--dir_config("gherkin_lexer_is")
--have_library("c", "main")
--create_makefile("gherkin_lexer_is")
diff --cc ext/gherkin_lexer_is/gherkin_lexer_is.c
index ec85837,061d6a2..0000000
deleted file mode 100644,100644
--- a/ext/gherkin_lexer_is/gherkin_lexer_is.c
+++ /dev/null
@@@ -1,1376 -1,1376 +1,0 @@@
--
- #line 1 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/is.c.rl"
- #include <assert.h>
- #include <ruby.h>
- 
- #if defined(_WIN32)
- #include <stddef.h>
- #endif
- 
- #ifdef HAVE_RUBY_RE_H
- #include <ruby/re.h>
- #else
- #include <re.h>
- #endif
- 
- #ifdef HAVE_RUBY_ENCODING_H
- #include <ruby/encoding.h>
- #define ENCODED_STR_NEW(ptr, len) \
-     rb_enc_str_new(ptr, len, rb_utf8_encoding())
- #else
- #define ENCODED_STR_NEW(ptr, len) \
-     rb_str_new(ptr, len)
- #endif
- 
- #ifndef RSTRING_PTR
- #define RSTRING_PTR(s) (RSTRING(s)->ptr)
- #endif
- 
- #ifndef RSTRING_LEN
- #define RSTRING_LEN(s) (RSTRING(s)->len)
- #endif
- 
- #define DATA_GET(FROM, TYPE, NAME) \
-   Data_Get_Struct(FROM, TYPE, NAME); \
-   if (NAME == NULL) { \
-     rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \
-   }
-  
- typedef struct lexer_state {
-   int content_len;
-   int line_number;
-   int current_line;
-   int start_col;
-   size_t mark;
-   size_t keyword_start;
-   size_t keyword_end;
-   size_t next_keyword_start;
-   size_t content_start;
-   size_t content_end;
-   size_t docstring_content_type_start;
-   size_t docstring_content_type_end;
-   size_t query_start;
-   size_t last_newline;
-   size_t final_newline;
- } lexer_state;
- 
- static VALUE mGherkin;
- static VALUE mGherkinLexer;
- static VALUE mCLexer;
- static VALUE cI18nLexer;
- static VALUE rb_eGherkinLexingError;
- 
- #define LEN(AT, P) (P - data - lexer->AT)
- #define MARK(M, P) (lexer->M = (P) - data)
- #define PTR_TO(P) (data + lexer->P)
- 
- #define STORE_KW_END_CON(EVENT) \
-   store_multiline_kw_con(listener, # EVENT, \
-     PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \
-     PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \
-     lexer->current_line, lexer->start_col); \
-     if (lexer->content_end != 0) { \
-       p = PTR_TO(content_end - 1); \
-     } \
-     lexer->content_end = 0
- 
- #define STORE_ATTR(ATTR) \
-     store_attr(listener, # ATTR, \
-       PTR_TO(content_start), LEN(content_start, p), \
-       lexer->line_number)
- 
- 
- #line 254 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/is.c.rl"
- 
- 
- /** Data **/
- 
- #line 89 "ext/gherkin_lexer_is/gherkin_lexer_is.c"
- static const char _lexer_actions[] = {
- 	0, 1, 0, 1, 1, 1, 2, 1, 
- 	3, 1, 4, 1, 5, 1, 6, 1, 
- 	7, 1, 8, 1, 9, 1, 10, 1, 
- 	11, 1, 12, 1, 13, 1, 16, 1, 
- 	17, 1, 18, 1, 19, 1, 20, 1, 
- 	21, 1, 22, 1, 23, 2, 1, 18, 
- 	2, 4, 5, 2, 13, 0, 2, 14, 
- 	15, 2, 17, 0, 2, 17, 2, 2, 
- 	17, 16, 2, 17, 19, 2, 18, 6, 
- 	2, 18, 7, 2, 18, 8, 2, 18, 
- 	9, 2, 18, 10, 2, 18, 16, 2, 
- 	20, 21, 2, 22, 0, 2, 22, 2, 
- 	2, 22, 16, 2, 22, 19, 3, 3, 
- 	14, 15, 3, 5, 14, 15, 3, 11, 
- 	14, 15, 3, 12, 14, 15, 3, 13, 
- 	14, 15, 3, 14, 15, 18, 3, 17, 
- 	0, 11, 3, 17, 14, 15, 4, 1, 
- 	14, 15, 18, 4, 4, 5, 14, 15, 
- 	4, 17, 0, 14, 15, 5, 17, 0, 
- 	11, 14, 15
- };
- 
- static const short _lexer_key_offsets[] = {
- 	0, 0, 18, 19, 21, 22, 23, 25, 
- 	27, 44, 45, 46, 48, 50, 55, 60, 
- 	65, 70, 74, 78, 80, 81, 82, 83, 
- 	84, 85, 86, 87, 88, 89, 90, 91, 
- 	92, 93, 94, 95, 100, 107, 112, 113, 
- 	114, 115, 116, 117, 118, 119, 120, 121, 
- 	122, 123, 125, 126, 127, 141, 143, 146, 
- 	148, 150, 167, 168, 169, 170, 171, 172, 
- 	173, 174, 175, 176, 177, 178, 179, 192, 
- 	194, 197, 199, 201, 203, 205, 207, 209, 
- 	211, 213, 215, 217, 219, 221, 223, 225, 
- 	227, 229, 231, 233, 235, 237, 239, 241, 
- 	243, 245, 247, 249, 251, 253, 255, 257, 
- 	259, 263, 265, 267, 269, 271, 273, 275, 
- 	277, 279, 281, 283, 285, 287, 289, 291, 
- 	293, 296, 298, 300, 302, 304, 306, 308, 
- 	310, 312, 314, 316, 318, 320, 322, 324, 
- 	326, 328, 330, 332, 333, 334, 335, 336, 
- 	337, 338, 339, 346, 348, 350, 352, 354, 
- 	356, 358, 360, 362, 364, 366, 369, 370, 
- 	371, 372, 373, 374, 375, 376, 377, 378, 
- 	379, 380, 392, 394, 396, 398, 400, 402, 
- 	404, 406, 408, 410, 412, 414, 416, 418, 
- 	420, 422, 424, 426, 428, 430, 432, 434, 
- 	436, 438, 440, 442, 445, 447, 449, 451, 
- 	453, 455, 457, 459, 461, 463, 465, 467, 
- 	469, 471, 473, 475, 477, 479, 481, 483, 
- 	485, 487, 489, 491, 493, 495, 497, 499, 
- 	501, 503, 506, 508, 510, 512, 514, 516, 
- 	518, 520, 522, 524, 526, 528, 530, 532, 
- 	534, 536, 538, 539, 540, 541, 542, 543, 
- 	544, 545, 547, 548, 549, 550, 551, 552, 
- 	553, 554, 555, 556, 557, 558, 559, 560, 
- 	561, 562, 563, 575, 577, 580, 582, 584, 
- 	586, 588, 590, 592, 594, 596, 598, 600, 
- 	602, 604, 606, 608, 610, 612, 614, 616, 
- 	618, 620, 622, 624, 626, 628, 630, 632, 
- 	634, 636, 638, 640, 642, 646, 648, 650, 
- 	652, 654, 656, 658, 660, 662, 664, 665, 
- 	666, 667, 668, 669, 673, 679, 682, 684, 
- 	690, 707, 709, 711, 713, 715, 717, 719, 
- 	721, 723, 725, 727, 729, 731, 733, 735, 
- 	737, 739, 741, 743, 745, 747, 749, 751, 
- 	753, 755, 757, 759, 761, 763, 765, 767, 
- 	769, 771, 773, 775, 777, 779, 781, 783, 
- 	787, 789, 791, 793, 795, 797, 799, 801, 
- 	803, 805, 807, 809, 811, 813, 815, 817, 
- 	820, 822, 824, 826, 828, 830, 832, 834, 
- 	836, 838, 840, 842, 844, 846, 848, 850, 
- 	852, 854, 855, 856, 857, 858, 859, 860
- };
- 
- static const char _lexer_trans_keys[] = {
- 	-61, -17, 10, 32, 34, 35, 37, 42, 
- 	64, 65, 66, 68, 69, 76, 79, 124, 
- 	9, 13, -98, -61, 101, -95, 32, 10, 
- 	13, 10, 13, -61, 10, 32, 34, 35, 
- 	37, 42, 64, 65, 66, 68, 69, 76, 
- 	79, 124, 9, 13, 34, 34, 10, 13, 
- 	10, 13, 10, 32, 34, 9, 13, 10, 
- 	32, 34, 9, 13, 10, 32, 34, 9, 
- 	13, 10, 32, 34, 9, 13, 10, 32, 
- 	9, 13, 10, 32, 9, 13, 10, 13, 
- 	10, 95, 70, 69, 65, 84, 85, 82, 
- 	69, 95, 69, 78, 68, 95, 37, 13, 
- 	32, 64, 9, 10, 9, 10, 13, 32, 
- 	64, 11, 12, 10, 32, 64, 9, 13, 
- 	116, 98, 117, 114, -61, -80, 97, 114, 
- 	-61, -95, 115, 58, 105, 10, 10, -61, 
- 	10, 32, 35, 37, 42, 64, 65, 66, 
- 	69, 76, 79, 9, 13, -98, 10, -61, 
- 	10, 101, -95, 10, 10, 32, -61, 10, 
- 	32, 34, 35, 37, 42, 64, 65, 66, 
- 	68, 69, 76, 79, 124, 9, 13, 97, 
- 	107, 103, 114, 117, 110, 110, 117, 114, 
- 	58, 10, 10, -61, 10, 32, 35, 37, 
- 	42, 64, 65, 69, 76, 79, 9, 13, 
- 	-98, 10, -61, 10, 101, -95, 10, 10, 
- 	32, 10, 103, 10, 97, 10, 114, 10, 
- 	95, 10, 70, 10, 69, 10, 65, 10, 
- 	84, 10, 85, 10, 82, 10, 69, 10, 
- 	95, 10, 69, 10, 78, 10, 68, 10, 
- 	95, 10, 37, 10, 116, 10, 98, 10, 
- 	117, 10, 114, -61, 10, -80, 10, 10, 
- 	97, 10, 114, -61, 10, -95, 10, 10, 
- 	115, 10, 58, 10, 102, 105, 110, 10, 
- 	103, 10, 105, 10, 110, 10, 108, 10, 
- 	101, 10, 105, 10, 107, 10, 105, -61, 
- 	10, -67, 10, 10, 115, 10, 105, 10, 
- 	110, 10, 103, 10, 32, 10, 65, 68, 
- 	10, 116, 10, 98, 10, 117, 10, 114, 
- 	-61, 10, -80, 10, 10, 97, 10, 114, 
- 	-61, 10, -95, 10, 10, 115, 10, 97, 
- 	10, 114, -61, 10, -90, 10, 10, 109, 
- 	10, 97, 10, 103, -61, -90, 109, 105, 
- 	58, 10, 10, 10, 32, 35, 69, 124, 
- 	9, 13, 10, 105, 10, 103, 10, 105, 
- 	10, 110, 10, 108, 10, 101, 10, 105, 
- 	10, 107, 10, 105, 10, 58, 102, 105, 
- 	110, 103, 105, 110, 108, 101, 105, 107, 
- 	105, 58, 10, 10, 10, 32, 35, 37, 
- 	64, 65, 66, 68, 69, 76, 9, 13, 
- 	10, 95, 10, 70, 10, 69, 10, 65, 
- 	10, 84, 10, 85, 10, 82, 10, 69, 
- 	10, 95, 10, 69, 10, 78, 10, 68, 
- 	10, 95, 10, 37, 10, 116, 10, 98, 
- 	10, 117, 10, 114, -61, 10, -80, 10, 
- 	10, 97, 10, 114, -61, 10, -95, 10, 
- 	10, 115, 10, 58, 105, 10, 114, 10, 
- 	58, 10, 97, 10, 107, 10, 103, 10, 
- 	114, 10, 117, 10, 110, 10, 110, 10, 
- 	117, -61, 10, -90, 10, 10, 109, 10, 
- 	105, 10, 105, 10, 103, 10, 105, 10, 
- 	110, 10, 108, 10, 101, 10, 105, 10, 
- 	107, -61, 10, -67, 10, 10, 115, 10, 
- 	105, 10, 110, 10, 103, 10, 32, 10, 
- 	65, 68, 10, 116, 10, 98, 10, 117, 
- 	10, 114, -61, 10, -80, 10, 10, 97, 
- 	10, 114, -61, 10, -95, 10, 10, 115, 
- 	10, 97, -61, 10, -90, 10, 10, 109, 
- 	10, 97, -61, -67, 115, 105, 110, 103, 
- 	32, 65, 68, 116, 98, 117, 114, -61, 
- 	-80, 97, 114, -61, -95, 115, 97, 114, 
- 	58, 10, 10, -61, 10, 32, 35, 37, 
- 	42, 64, 65, 69, 79, 9, 13, -98, 
- 	10, -61, 10, 101, -95, 10, 10, 32, 
- 	10, 103, 10, 97, 10, 114, 10, 95, 
- 	10, 70, 10, 69, 10, 65, 10, 84, 
- 	10, 85, 10, 82, 10, 69, 10, 95, 
- 	10, 69, 10, 78, 10, 68, 10, 95, 
- 	10, 37, 10, 116, 10, 98, 10, 117, 
- 	10, 114, -61, 10, -80, 10, 10, 97, 
- 	10, 114, -61, 10, -95, 10, 10, 115, 
- 	10, 58, 10, 102, 105, 110, 10, 103, 
- 	10, 105, 10, 110, 10, 108, 10, 101, 
- 	10, 105, 10, 107, 10, 105, 10, 103, 
- 	-61, -90, 109, 97, 103, 32, 124, 9, 
- 	13, 10, 32, 92, 124, 9, 13, 10, 
- 	92, 124, 10, 92, 10, 32, 92, 124, 
- 	9, 13, -61, 10, 32, 34, 35, 37, 
- 	42, 64, 65, 66, 68, 69, 76, 79, 
- 	124, 9, 13, 10, 103, 10, 97, 10, 
- 	114, 10, 95, 10, 70, 10, 69, 10, 
- 	65, 10, 84, 10, 85, 10, 82, 10, 
- 	69, 10, 95, 10, 69, 10, 78, 10, 
- 	68, 10, 95, 10, 37, 10, 116, 10, 
- 	98, 10, 117, 10, 114, -61, 10, -80, 
- 	10, 10, 97, 10, 114, -61, 10, -95, 
- 	10, 10, 115, 10, 58, 10, 97, 10, 
- 	107, 10, 103, 10, 114, 10, 117, 10, 
- 	110, 10, 110, 10, 117, 10, 114, 10, 
- 	102, 105, 110, 10, 103, 10, 105, 10, 
- 	110, 10, 108, 10, 101, 10, 105, 10, 
- 	107, 10, 105, -61, 10, -67, 10, 10, 
- 	115, 10, 105, 10, 110, 10, 103, 10, 
- 	32, 10, 65, 68, 10, 116, 10, 98, 
- 	10, 117, 10, 114, -61, 10, -80, 10, 
- 	10, 97, 10, 114, -61, 10, -95, 10, 
- 	10, 115, 10, 97, -61, 10, -90, 10, 
- 	10, 109, 10, 97, 10, 103, 114, 103, 
- 	97, 114, -69, -65, 0
- };
- 
- static const char _lexer_single_lengths[] = {
- 	0, 16, 1, 2, 1, 1, 2, 2, 
- 	15, 1, 1, 2, 2, 3, 3, 3, 
- 	3, 2, 2, 2, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 3, 5, 3, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 2, 1, 1, 12, 2, 3, 2, 
- 	2, 15, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 11, 2, 
- 	3, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	4, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	3, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 1, 1, 1, 1, 1, 
- 	1, 1, 5, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 3, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 10, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 3, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 3, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 1, 1, 1, 1, 1, 1, 
- 	1, 2, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 10, 2, 3, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 4, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 1, 1, 
- 	1, 1, 1, 2, 4, 3, 2, 4, 
- 	15, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 4, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 3, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 1, 1, 1, 1, 1, 1, 0
- };
- 
- static const char _lexer_range_lengths[] = {
- 	0, 1, 0, 0, 0, 0, 0, 0, 
- 	1, 0, 0, 0, 0, 1, 1, 1, 
- 	1, 1, 1, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 1, 1, 1, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 1, 0, 0, 0, 
- 	0, 1, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 1, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 1, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 1, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 1, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 1, 1, 0, 0, 1, 
- 	1, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0
- };
- 
- static const short _lexer_index_offsets[] = {
- 	0, 0, 18, 20, 23, 25, 27, 30, 
- 	33, 50, 52, 54, 57, 60, 65, 70, 
- 	75, 80, 84, 88, 91, 93, 95, 97, 
- 	99, 101, 103, 105, 107, 109, 111, 113, 
- 	115, 117, 119, 121, 126, 133, 138, 140, 
- 	142, 144, 146, 148, 150, 152, 154, 156, 
- 	158, 160, 163, 165, 167, 181, 184, 188, 
- 	191, 194, 211, 213, 215, 217, 219, 221, 
- 	223, 225, 227, 229, 231, 233, 235, 248, 
- 	251, 255, 258, 261, 264, 267, 270, 273, 
- 	276, 279, 282, 285, 288, 291, 294, 297, 
- 	300, 303, 306, 309, 312, 315, 318, 321, 
- 	324, 327, 330, 333, 336, 339, 342, 345, 
- 	348, 353, 356, 359, 362, 365, 368, 371, 
- 	374, 377, 380, 383, 386, 389, 392, 395, 
- 	398, 402, 405, 408, 411, 414, 417, 420, 
- 	423, 426, 429, 432, 435, 438, 441, 444, 
- 	447, 450, 453, 456, 458, 460, 462, 464, 
- 	466, 468, 470, 477, 480, 483, 486, 489, 
- 	492, 495, 498, 501, 504, 507, 511, 513, 
- 	515, 517, 519, 521, 523, 525, 527, 529, 
- 	531, 533, 545, 548, 551, 554, 557, 560, 
- 	563, 566, 569, 572, 575, 578, 581, 584, 
- 	587, 590, 593, 596, 599, 602, 605, 608, 
- 	611, 614, 617, 620, 624, 627, 630, 633, 
- 	636, 639, 642, 645, 648, 651, 654, 657, 
- 	660, 663, 666, 669, 672, 675, 678, 681, 
- 	684, 687, 690, 693, 696, 699, 702, 705, 
- 	708, 711, 715, 718, 721, 724, 727, 730, 
- 	733, 736, 739, 742, 745, 748, 751, 754, 
- 	757, 760, 763, 765, 767, 769, 771, 773, 
- 	775, 777, 780, 782, 784, 786, 788, 790, 
- 	792, 794, 796, 798, 800, 802, 804, 806, 
- 	808, 810, 812, 824, 827, 831, 834, 837, 
- 	840, 843, 846, 849, 852, 855, 858, 861, 
- 	864, 867, 870, 873, 876, 879, 882, 885, 
- 	888, 891, 894, 897, 900, 903, 906, 909, 
- 	912, 915, 918, 921, 924, 929, 932, 935, 
- 	938, 941, 944, 947, 950, 953, 956, 958, 
- 	960, 962, 964, 966, 970, 976, 980, 983, 
- 	989, 1006, 1009, 1012, 1015, 1018, 1021, 1024, 
- 	1027, 1030, 1033, 1036, 1039, 1042, 1045, 1048, 
- 	1051, 1054, 1057, 1060, 1063, 1066, 1069, 1072, 
- 	1075, 1078, 1081, 1084, 1087, 1090, 1093, 1096, 
- 	1099, 1102, 1105, 1108, 1111, 1114, 1117, 1120, 
- 	1125, 1128, 1131, 1134, 1137, 1140, 1143, 1146, 
- 	1149, 1152, 1155, 1158, 1161, 1164, 1167, 1170, 
- 	1174, 1177, 1180, 1183, 1186, 1189, 1192, 1195, 
- 	1198, 1201, 1204, 1207, 1210, 1213, 1216, 1219, 
- 	1222, 1225, 1227, 1229, 1231, 1233, 1235, 1237
- };
- 
- static const short _lexer_trans_targs[] = {
- 	2, 397, 8, 8, 9, 19, 21, 5, 
- 	35, 38, 58, 139, 157, 242, 314, 315, 
- 	8, 0, 3, 0, 4, 394, 0, 5, 
- 	0, 6, 0, 8, 20, 7, 8, 20, 
- 	7, 2, 8, 8, 9, 19, 21, 5, 
- 	35, 38, 58, 139, 157, 242, 314, 315, 
- 	8, 0, 10, 0, 11, 0, 13, 12, 
- 	12, 13, 12, 12, 14, 14, 15, 14, 
- 	14, 14, 14, 15, 14, 14, 14, 14, 
- 	16, 14, 14, 14, 14, 17, 14, 14, 
- 	8, 18, 18, 0, 8, 18, 18, 0, 
- 	8, 20, 19, 8, 0, 22, 0, 23, 
- 	0, 24, 0, 25, 0, 26, 0, 27, 
- 	0, 28, 0, 29, 0, 30, 0, 31, 
- 	0, 32, 0, 33, 0, 34, 0, 399, 
- 	0, 0, 0, 0, 0, 36, 37, 8, 
- 	37, 37, 35, 36, 36, 8, 37, 35, 
- 	37, 0, 39, 0, 40, 0, 41, 0, 
- 	42, 0, 43, 0, 44, 0, 45, 0, 
- 	46, 0, 47, 0, 48, 0, 49, 0, 
- 	50, 393, 0, 52, 51, 52, 51, 53, 
- 	52, 52, 8, 324, 56, 8, 338, 350, 
- 	359, 368, 392, 52, 51, 54, 52, 51, 
- 	55, 52, 321, 51, 56, 52, 51, 52, 
- 	57, 51, 2, 8, 8, 9, 19, 21, 
- 	5, 35, 38, 58, 139, 157, 242, 314, 
- 	315, 8, 0, 59, 0, 60, 0, 61, 
- 	0, 62, 0, 63, 0, 64, 0, 65, 
- 	0, 66, 0, 67, 0, 68, 0, 70, 
- 	69, 70, 69, 71, 70, 70, 8, 78, 
- 	74, 8, 92, 104, 113, 138, 70, 69, 
- 	72, 70, 69, 73, 70, 75, 69, 74, 
- 	70, 69, 70, 57, 69, 70, 76, 69, 
- 	70, 77, 69, 70, 74, 69, 70, 79, 
- 	69, 70, 80, 69, 70, 81, 69, 70, 
- 	82, 69, 70, 83, 69, 70, 84, 69, 
- 	70, 85, 69, 70, 86, 69, 70, 87, 
- 	69, 70, 88, 69, 70, 89, 69, 70, 
- 	90, 69, 70, 91, 69, 70, 8, 69, 
- 	70, 93, 69, 70, 94, 69, 70, 95, 
- 	69, 70, 96, 69, 97, 70, 69, 98, 
- 	70, 69, 70, 99, 69, 70, 100, 69, 
- 	101, 70, 69, 102, 70, 69, 70, 103, 
- 	69, 70, 57, 69, 70, 74, 105, 74, 
- 	69, 70, 106, 69, 70, 107, 69, 70, 
- 	108, 69, 70, 109, 69, 70, 110, 69, 
- 	70, 111, 69, 70, 112, 69, 70, 103, 
- 	69, 114, 70, 69, 115, 70, 69, 70, 
- 	116, 69, 70, 117, 69, 70, 118, 69, 
- 	70, 119, 69, 70, 120, 69, 70, 121, 
- 	134, 69, 70, 122, 69, 70, 123, 69, 
- 	70, 124, 69, 70, 125, 69, 126, 70, 
- 	69, 127, 70, 69, 70, 128, 69, 70, 
- 	129, 69, 130, 70, 69, 131, 70, 69, 
- 	70, 132, 69, 70, 133, 69, 70, 103, 
- 	69, 135, 70, 69, 136, 70, 69, 70, 
- 	137, 69, 70, 103, 69, 70, 74, 69, 
- 	140, 0, 141, 0, 142, 0, 143, 0, 
- 	144, 0, 146, 145, 146, 145, 146, 146, 
- 	8, 147, 8, 146, 145, 146, 148, 145, 
- 	146, 149, 145, 146, 150, 145, 146, 151, 
- 	145, 146, 152, 145, 146, 153, 145, 146, 
- 	154, 145, 146, 155, 145, 146, 156, 145, 
- 	146, 57, 145, 5, 158, 5, 0, 159, 
- 	0, 160, 0, 161, 0, 162, 0, 163, 
- 	0, 164, 0, 165, 0, 166, 0, 167, 
- 	0, 169, 168, 169, 168, 169, 169, 8, 
- 	170, 8, 184, 198, 206, 210, 218, 169, 
- 	168, 169, 171, 168, 169, 172, 168, 169, 
- 	173, 168, 169, 174, 168, 169, 175, 168, 
- 	169, 176, 168, 169, 177, 168, 169, 178, 
- 	168, 169, 179, 168, 169, 180, 168, 169, 
- 	181, 168, 169, 182, 168, 169, 183, 168, 
- 	169, 8, 168, 169, 185, 168, 169, 186, 
- 	168, 169, 187, 168, 169, 188, 168, 189, 
- 	169, 168, 190, 169, 168, 169, 191, 168, 
- 	169, 192, 168, 193, 169, 168, 194, 169, 
- 	168, 169, 195, 168, 169, 57, 196, 168, 
- 	169, 197, 168, 169, 57, 168, 169, 199, 
- 	168, 169, 200, 168, 169, 201, 168, 169, 
- 	202, 168, 169, 203, 168, 169, 204, 168, 
- 	169, 205, 168, 169, 196, 168, 207, 169, 
- 	168, 208, 169, 168, 169, 209, 168, 169, 
- 	197, 168, 169, 211, 168, 169, 212, 168, 
- 	169, 213, 168, 169, 214, 168, 169, 215, 
- 	168, 169, 216, 168, 169, 217, 168, 169, 
- 	209, 168, 219, 169, 168, 220, 169, 168, 
- 	169, 221, 168, 169, 222, 168, 169, 223, 
- 	168, 169, 224, 168, 169, 225, 168, 169, 
- 	226, 238, 168, 169, 227, 168, 169, 228, 
- 	168, 169, 229, 168, 169, 230, 168, 231, 
- 	169, 168, 232, 169, 168, 169, 233, 168, 
- 	169, 234, 168, 235, 169, 168, 236, 169, 
- 	168, 169, 237, 168, 169, 196, 168, 239, 
- 	169, 168, 240, 169, 168, 169, 241, 168, 
- 	169, 197, 168, 243, 0, 244, 0, 245, 
- 	0, 246, 0, 247, 0, 248, 0, 249, 
- 	0, 250, 310, 0, 251, 0, 252, 0, 
- 	253, 0, 254, 0, 255, 0, 256, 0, 
- 	257, 0, 258, 0, 259, 0, 260, 0, 
- 	261, 0, 262, 0, 263, 0, 264, 0, 
- 	266, 265, 266, 265, 267, 266, 266, 8, 
- 	274, 270, 8, 288, 300, 309, 266, 265, 
- 	268, 266, 265, 269, 266, 271, 265, 270, 
- 	266, 265, 266, 57, 265, 266, 272, 265, 
- 	266, 273, 265, 266, 270, 265, 266, 275, 
- 	265, 266, 276, 265, 266, 277, 265, 266, 
- 	278, 265, 266, 279, 265, 266, 280, 265, 
- 	266, 281, 265, 266, 282, 265, 266, 283, 
- 	265, 266, 284, 265, 266, 285, 265, 266, 
- 	286, 265, 266, 287, 265, 266, 8, 265, 
- 	266, 289, 265, 266, 290, 265, 266, 291, 
- 	265, 266, 292, 265, 293, 266, 265, 294, 
- 	266, 265, 266, 295, 265, 266, 296, 265, 
- 	297, 266, 265, 298, 266, 265, 266, 299, 
- 	265, 266, 57, 265, 266, 270, 301, 270, 
- 	265, 266, 302, 265, 266, 303, 265, 266, 
- 	304, 265, 266, 305, 265, 266, 306, 265, 
- 	266, 307, 265, 266, 308, 265, 266, 299, 
- 	265, 266, 270, 265, 311, 0, 312, 0, 
- 	313, 0, 263, 0, 5, 0, 315, 316, 
- 	315, 0, 320, 319, 318, 316, 319, 317, 
- 	0, 318, 316, 317, 0, 318, 317, 320, 
- 	319, 318, 316, 319, 317, 2, 320, 320, 
- 	9, 19, 21, 5, 35, 38, 58, 139, 
- 	157, 242, 314, 315, 320, 0, 52, 322, 
- 	51, 52, 323, 51, 52, 56, 51, 52, 
- 	325, 51, 52, 326, 51, 52, 327, 51, 
- 	52, 328, 51, 52, 329, 51, 52, 330, 
- 	51, 52, 331, 51, 52, 332, 51, 52, 
- 	333, 51, 52, 334, 51, 52, 335, 51, 
- 	52, 336, 51, 52, 337, 51, 52, 8, 
- 	51, 52, 339, 51, 52, 340, 51, 52, 
- 	341, 51, 52, 342, 51, 343, 52, 51, 
- 	344, 52, 51, 52, 345, 51, 52, 346, 
- 	51, 347, 52, 51, 348, 52, 51, 52, 
- 	349, 51, 52, 57, 51, 52, 351, 51, 
- 	52, 352, 51, 52, 353, 51, 52, 354, 
- 	51, 52, 355, 51, 52, 356, 51, 52, 
- 	357, 51, 52, 358, 51, 52, 349, 51, 
- 	52, 56, 360, 56, 51, 52, 361, 51, 
- 	52, 362, 51, 52, 363, 51, 52, 364, 
- 	51, 52, 365, 51, 52, 366, 51, 52, 
- 	367, 51, 52, 349, 51, 369, 52, 51, 
- 	370, 52, 51, 52, 371, 51, 52, 372, 
- 	51, 52, 373, 51, 52, 374, 51, 52, 
- 	375, 51, 52, 376, 388, 51, 52, 377, 
- 	51, 52, 378, 51, 52, 379, 51, 52, 
- 	380, 51, 381, 52, 51, 382, 52, 51, 
- 	52, 383, 51, 52, 384, 51, 385, 52, 
- 	51, 386, 52, 51, 52, 387, 51, 52, 
- 	358, 51, 389, 52, 51, 390, 52, 51, 
- 	52, 391, 51, 52, 349, 51, 52, 56, 
- 	51, 143, 0, 395, 0, 396, 0, 5, 
- 	0, 398, 0, 8, 0, 0, 0
- };
- 
- static const unsigned char _lexer_trans_actions[] = {
- 	29, 0, 54, 0, 5, 1, 0, 29, 
- 	1, 29, 29, 29, 29, 29, 29, 35, 
- 	0, 43, 0, 43, 0, 0, 43, 0, 
- 	43, 0, 43, 149, 126, 57, 110, 23, 
- 	0, 29, 54, 0, 5, 1, 0, 29, 
- 	1, 29, 29, 29, 29, 29, 29, 35, 
- 	0, 43, 0, 43, 0, 43, 139, 48, 
- 	9, 106, 11, 0, 134, 45, 45, 45, 
- 	3, 122, 33, 33, 33, 0, 122, 33, 
- 	33, 33, 0, 122, 33, 0, 33, 0, 
- 	102, 7, 7, 43, 54, 0, 0, 43, 
- 	114, 25, 0, 54, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 43, 43, 43, 43, 0, 27, 118, 
- 	27, 27, 51, 27, 0, 54, 0, 1, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 0, 43, 144, 57, 54, 0, 84, 
- 	54, 0, 75, 33, 84, 75, 84, 84, 
- 	84, 84, 84, 0, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 0, 54, 0, 54, 
- 	17, 0, 63, 130, 31, 60, 57, 31, 
- 	63, 57, 63, 63, 63, 63, 63, 63, 
- 	66, 31, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 144, 
- 	57, 54, 0, 84, 54, 0, 72, 33, 
- 	84, 72, 84, 84, 84, 84, 0, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 0, 
- 	54, 0, 54, 15, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 15, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 0, 54, 0, 0, 
- 	54, 0, 54, 0, 0, 54, 0, 0, 
- 	0, 54, 0, 0, 54, 0, 54, 0, 
- 	0, 54, 15, 0, 54, 0, 0, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 0, 54, 0, 0, 54, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 0, 54, 
- 	0, 0, 54, 0, 54, 0, 0, 54, 
- 	0, 0, 0, 54, 0, 0, 54, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 0, 54, 0, 0, 54, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 144, 57, 54, 0, 54, 0, 
- 	81, 84, 81, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 21, 0, 0, 0, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 144, 57, 54, 0, 54, 0, 69, 
- 	33, 69, 84, 84, 84, 84, 84, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 13, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 0, 
- 	54, 0, 0, 54, 0, 54, 0, 0, 
- 	54, 0, 0, 0, 54, 0, 0, 54, 
- 	0, 54, 0, 0, 54, 13, 0, 0, 
- 	54, 0, 0, 54, 13, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 0, 54, 
- 	0, 0, 54, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 0, 54, 0, 0, 54, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 0, 
- 	54, 0, 0, 54, 0, 54, 0, 0, 
- 	54, 0, 0, 0, 54, 0, 0, 54, 
- 	0, 54, 0, 0, 54, 0, 0, 0, 
- 	54, 0, 0, 54, 0, 54, 0, 0, 
- 	54, 0, 0, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	144, 57, 54, 0, 84, 54, 0, 78, 
- 	33, 84, 78, 84, 84, 84, 0, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 0, 
- 	54, 0, 54, 19, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 19, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 0, 54, 0, 0, 
- 	54, 0, 54, 0, 0, 54, 0, 0, 
- 	0, 54, 0, 0, 54, 0, 54, 0, 
- 	0, 54, 19, 0, 54, 0, 0, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 0, 
- 	0, 43, 54, 37, 37, 87, 37, 37, 
- 	43, 0, 39, 0, 43, 0, 0, 54, 
- 	0, 0, 39, 0, 0, 96, 54, 0, 
- 	93, 90, 41, 96, 90, 96, 96, 96, 
- 	96, 96, 96, 99, 0, 43, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 17, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 0, 54, 0, 
- 	0, 54, 0, 54, 0, 0, 54, 0, 
- 	0, 0, 54, 0, 0, 54, 0, 54, 
- 	0, 0, 54, 17, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 0, 54, 0, 
- 	0, 54, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 0, 54, 0, 0, 54, 0, 
- 	54, 0, 0, 54, 0, 0, 0, 54, 
- 	0, 0, 54, 0, 54, 0, 0, 54, 
- 	0, 0, 0, 54, 0, 0, 54, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 0
- };
- 
- static const unsigned char _lexer_eof_actions[] = {
- 	0, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43
- };
- 
- static const int lexer_start = 1;
- static const int lexer_first_final = 399;
- static const int lexer_error = 0;
- 
- static const int lexer_en_main = 1;
- 
- 
- #line 258 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/is.c.rl"
- 
- static VALUE 
- unindent(VALUE con, int start_col)
- {
-   VALUE re;
-   // Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters
-   char pat[32]; 
-   snprintf(pat, 32, "^[\t ]{0,%d}", start_col); 
-   re = rb_reg_regcomp(rb_str_new2(pat));
-   rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2(""));
- 
-   return Qnil;
- 
- }
- 
- static void 
- store_kw_con(VALUE listener, const char * event_name, 
-              const char * keyword_at, size_t keyword_length, 
-              const char * at,         size_t length, 
-              int current_line)
- {
-   VALUE con = Qnil, kw = Qnil;
-   kw = ENCODED_STR_NEW(keyword_at, keyword_length);
-   con = ENCODED_STR_NEW(at, length);
-   rb_funcall(con, rb_intern("strip!"), 0);
-   rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); 
- }
- 
- static void
- store_multiline_kw_con(VALUE listener, const char * event_name,
-                       const char * keyword_at, size_t keyword_length,
-                       const char * at,         size_t length,
-                       int current_line, int start_col)
- {
-   VALUE split;
-   VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil;
- 
-   kw = ENCODED_STR_NEW(keyword_at, keyword_length);
-   con = ENCODED_STR_NEW(at, length);
- 
-   unindent(con, start_col);
-   
-   split = rb_str_split(con, "\n");
- 
-   name = rb_funcall(split, rb_intern("shift"), 0);
-   desc = rb_ary_join(split, rb_str_new2( "\n" ));
- 
-   if( name == Qnil ) 
-   {
-     name = rb_str_new2("");
-   }
-   if( rb_funcall(desc, rb_intern("size"), 0) == 0) 
-   {
-     desc = rb_str_new2("");
-   }
-   rb_funcall(name, rb_intern("strip!"), 0);
-   rb_funcall(desc, rb_intern("rstrip!"), 0);
-   rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); 
- }
- 
- static void 
- store_attr(VALUE listener, const char * attr_type,
-            const char * at, size_t length, 
-            int line)
- {
-   VALUE val = ENCODED_STR_NEW(at, length);
-   rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line));
- }
- static void 
- store_docstring_content(VALUE listener, 
-           int start_col, 
-           const char *type_at, size_t type_length,
-           const char *at, size_t length, 
-           int current_line)
- {
-   VALUE re2;
-   VALUE unescape_escaped_quotes;
-   VALUE con = ENCODED_STR_NEW(at, length);
-   VALUE con_type = ENCODED_STR_NEW(type_at, type_length);
- 
-   unindent(con, start_col);
- 
-   re2 = rb_reg_regcomp(rb_str_new2("\r\\Z"));
-   unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\""));
-   rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2(""));
-   rb_funcall(con_type, rb_intern("strip!"), 0);
-   rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\""));
-   rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line));
- }
- static void 
- raise_lexer_error(const char * at, int line)
- { 
-   rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at);
- }
- 
- static void lexer_init(lexer_state *lexer) {
-   lexer->content_start = 0;
-   lexer->content_end = 0;
-   lexer->content_len = 0;
-   lexer->docstring_content_type_start = 0;
-   lexer->docstring_content_type_end = 0;
-   lexer->mark = 0;
-   lexer->keyword_start = 0;
-   lexer->keyword_end = 0;
-   lexer->next_keyword_start = 0;
-   lexer->line_number = 1;
-   lexer->last_newline = 0;
-   lexer->final_newline = 0;
-   lexer->start_col = 0;
- }
- 
- static VALUE CLexer_alloc(VALUE klass)
- {
-   VALUE obj;
-   lexer_state *lxr = ALLOC(lexer_state);
-   lexer_init(lxr);
- 
-   obj = Data_Wrap_Struct(klass, NULL, -1, lxr);
- 
-   return obj;
- }
- 
- static VALUE CLexer_init(VALUE self, VALUE listener)
- {
-   lexer_state *lxr; 
-   rb_iv_set(self, "@listener", listener);
-   
-   lxr = NULL;
-   DATA_GET(self, lexer_state, lxr);
-   lexer_init(lxr);
-   
-   return self;
- }
- 
- static VALUE CLexer_scan(VALUE self, VALUE input)
- {
-   VALUE input_copy;
-   char *data;
-   size_t len;
-   VALUE listener = rb_iv_get(self, "@listener");
- 
-   lexer_state *lexer;
-   lexer = NULL;
-   DATA_GET(self, lexer_state, lexer);
- 
-   input_copy = rb_str_dup(input);
- 
-   rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%"));
-   data = RSTRING_PTR(input_copy);
-   len = RSTRING_LEN(input_copy);
-   
-   if (len == 0) { 
-     rb_raise(rb_eGherkinLexingError, "No content to lex.");
-   } else {
- 
-     const char *p, *pe, *eof;
-     int cs = 0;
-     
-     VALUE current_row = Qnil;
- 
-     p = data;
-     pe = data + len;
-     eof = pe;
-     
-     assert(*pe == '\0' && "pointer does not end on NULL");
-     
-     
- #line 980 "ext/gherkin_lexer_is/gherkin_lexer_is.c"
- 	{
- 	cs = lexer_start;
- 	}
- 
- #line 425 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/is.c.rl"
-     
- #line 987 "ext/gherkin_lexer_is/gherkin_lexer_is.c"
- 	{
- 	int _klen;
- 	unsigned int _trans;
- 	const char *_acts;
- 	unsigned int _nacts;
- 	const char *_keys;
- 
- 	if ( p == pe )
- 		goto _test_eof;
- 	if ( cs == 0 )
- 		goto _out;
- _resume:
- 	_keys = _lexer_trans_keys + _lexer_key_offsets[cs];
- 	_trans = _lexer_index_offsets[cs];
- 
- 	_klen = _lexer_single_lengths[cs];
- 	if ( _klen > 0 ) {
- 		const char *_lower = _keys;
- 		const char *_mid;
- 		const char *_upper = _keys + _klen - 1;
- 		while (1) {
- 			if ( _upper < _lower )
- 				break;
- 
- 			_mid = _lower + ((_upper-_lower) >> 1);
- 			if ( (*p) < *_mid )
- 				_upper = _mid - 1;
- 			else if ( (*p) > *_mid )
- 				_lower = _mid + 1;
- 			else {
- 				_trans += (_mid - _keys);
- 				goto _match;
- 			}
- 		}
- 		_keys += _klen;
- 		_trans += _klen;
- 	}
- 
- 	_klen = _lexer_range_lengths[cs];
- 	if ( _klen > 0 ) {
- 		const char *_lower = _keys;
- 		const char *_mid;
- 		const char *_upper = _keys + (_klen<<1) - 2;
- 		while (1) {
- 			if ( _upper < _lower )
- 				break;
- 
- 			_mid = _lower + (((_upper-_lower) >> 1) & ~1);
- 			if ( (*p) < _mid[0] )
- 				_upper = _mid - 2;
- 			else if ( (*p) > _mid[1] )
- 				_lower = _mid + 2;
- 			else {
- 				_trans += ((_mid - _keys)>>1);
- 				goto _match;
- 			}
- 		}
- 		_trans += _klen;
- 	}
- 
- _match:
- 	cs = _lexer_trans_targs[_trans];
- 
- 	if ( _lexer_trans_actions[_trans] == 0 )
- 		goto _again;
- 
- 	_acts = _lexer_actions + _lexer_trans_actions[_trans];
- 	_nacts = (unsigned int) *_acts++;
- 	while ( _nacts-- > 0 )
- 	{
- 		switch ( *_acts++ )
- 		{
- 	case 0:
- #line 83 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/is.c.rl"
- 	{
- 		MARK(content_start, p);
-     lexer->current_line = lexer->line_number;
-     lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2;
-   }
- 	break;
- 	case 1:
- #line 89 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/is.c.rl"
- 	{
-     MARK(content_start, p);
-   }
- 	break;
- 	case 2:
- #line 93 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/is.c.rl"
- 	{
-     lexer->current_line = lexer->line_number;
-     lexer->start_col = p - data - lexer->last_newline;
-   }
- 	break;
- 	case 3:
- #line 98 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/is.c.rl"
- 	{
-     int len = LEN(content_start, PTR_TO(final_newline));
-     int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end));
- 
-     if (len < 0) len = 0;
-     if (type_len < 0) len = 0;
- 
-     store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line);
-   }
- 	break;
- 	case 4:
- #line 108 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/is.c.rl"
- 	{ 
-     MARK(docstring_content_type_start, p);
-   }
- 	break;
- 	case 5:
- #line 112 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/is.c.rl"
- 	{ 
-     MARK(docstring_content_type_end, p);
-   }
- 	break;
- 	case 6:
- #line 116 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/is.c.rl"
- 	{
-     STORE_KW_END_CON(feature);
-   }
- 	break;
- 	case 7:
- #line 120 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/is.c.rl"
- 	{
-     STORE_KW_END_CON(background);
-   }
- 	break;
- 	case 8:
- #line 124 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/is.c.rl"
- 	{
-     STORE_KW_END_CON(scenario);
-   }
- 	break;
- 	case 9:
- #line 128 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/is.c.rl"
- 	{
-     STORE_KW_END_CON(scenario_outline);
-   }
- 	break;
- 	case 10:
- #line 132 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/is.c.rl"
- 	{
-     STORE_KW_END_CON(examples);
-   }
- 	break;
- 	case 11:
- #line 136 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/is.c.rl"
- 	{
-     store_kw_con(listener, "step",
-       PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-       PTR_TO(content_start), LEN(content_start, p), 
-       lexer->current_line);
-   }
- 	break;
- 	case 12:
- #line 143 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/is.c.rl"
- 	{
-     STORE_ATTR(comment);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 13:
- #line 148 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/is.c.rl"
- 	{
-     STORE_ATTR(tag);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 14:
- #line 153 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/is.c.rl"
- 	{
-     lexer->line_number += 1;
-     MARK(final_newline, p);
-   }
- 	break;
- 	case 15:
- #line 158 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/is.c.rl"
- 	{
-     MARK(last_newline, p + 1);
-   }
- 	break;
- 	case 16:
- #line 162 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/is.c.rl"
- 	{
-     if (lexer->mark == 0) {
-       MARK(mark, p);
-     }
-   }
- 	break;
- 	case 17:
- #line 168 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/is.c.rl"
- 	{
-     MARK(keyword_end, p);
-     MARK(keyword_start, PTR_TO(mark));
-     MARK(content_start, p + 1);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 18:
- #line 175 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/is.c.rl"
- 	{
-     MARK(content_end, p);
-   }
- 	break;
- 	case 19:
- #line 179 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/is.c.rl"
- 	{
-     p = p - 1;
-     lexer->current_line = lexer->line_number;
-     current_row = rb_ary_new();
-   }
- 	break;
- 	case 20:
- #line 185 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/is.c.rl"
- 	{
- 		MARK(content_start, p);
-   }
- 	break;
- 	case 21:
- #line 189 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/is.c.rl"
- 	{
-     VALUE re_pipe, re_newline, re_backslash;
-     VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
-     rb_funcall(con, rb_intern("strip!"), 0);
-     re_pipe      = rb_reg_regcomp(rb_str_new2("\\\\\\|"));
-     re_newline   = rb_reg_regcomp(rb_str_new2("\\\\n"));
-     re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_pipe,      rb_str_new2("|"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_newline,   rb_str_new2("\n"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\"));
- 
-     rb_ary_push(current_row, con);
-   }
- 	break;
- 	case 22:
- #line 203 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/is.c.rl"
- 	{
-     rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
-   }
- 	break;
- 	case 23:
- #line 207 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/is.c.rl"
- 	{
-     int line;
-     if (cs < lexer_first_final) {
-       size_t count = 0;
-       VALUE newstr_val;
-       char *newstr;
-       int newstr_count = 0;        
-       size_t len;
-       const char *buff;
-       if (lexer->last_newline != 0) {
-         len = LEN(last_newline, eof);
-         buff = PTR_TO(last_newline);
-       } else {
-         len = strlen(data);
-         buff = data;
-       }
- 
-       // Allocate as a ruby string so that it gets cleaned up by GC
-       newstr_val = rb_str_new(buff, len);
-       newstr = RSTRING_PTR(newstr_val);
- 
- 
-       for (count = 0; count < len; count++) {
-         if(buff[count] == 10) {
-           newstr[newstr_count] = '\0'; // terminate new string at first newline found
-           break;
-         } else {
-           if (buff[count] == '%') {
-             newstr[newstr_count++] = buff[count];
-             newstr[newstr_count] = buff[count];
-           } else {
-             newstr[newstr_count] = buff[count];
-           }
-         }
-         newstr_count++;
-       }
- 
-       line = lexer->line_number;
-       lexer_init(lexer); // Re-initialize so we can scan again with the same lexer
-       raise_lexer_error(newstr, line);
-     } else {
-       rb_funcall(listener, rb_intern("eof"), 0);
-     }
-   }
- 	break;
- #line 1277 "ext/gherkin_lexer_is/gherkin_lexer_is.c"
- 		}
- 	}
- 
- _again:
- 	if ( cs == 0 )
- 		goto _out;
- 	if ( ++p != pe )
- 		goto _resume;
- 	_test_eof: {}
- 	if ( p == eof )
- 	{
- 	const char *__acts = _lexer_actions + _lexer_eof_actions[cs];
- 	unsigned int __nacts = (unsigned int) *__acts++;
- 	while ( __nacts-- > 0 ) {
- 		switch ( *__acts++ ) {
- 	case 23:
- #line 207 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/is.c.rl"
- 	{
-     int line;
-     if (cs < lexer_first_final) {
-       size_t count = 0;
-       VALUE newstr_val;
-       char *newstr;
-       int newstr_count = 0;        
-       size_t len;
-       const char *buff;
-       if (lexer->last_newline != 0) {
-         len = LEN(last_newline, eof);
-         buff = PTR_TO(last_newline);
-       } else {
-         len = strlen(data);
-         buff = data;
-       }
- 
-       // Allocate as a ruby string so that it gets cleaned up by GC
-       newstr_val = rb_str_new(buff, len);
-       newstr = RSTRING_PTR(newstr_val);
- 
- 
-       for (count = 0; count < len; count++) {
-         if(buff[count] == 10) {
-           newstr[newstr_count] = '\0'; // terminate new string at first newline found
-           break;
-         } else {
-           if (buff[count] == '%') {
-             newstr[newstr_count++] = buff[count];
-             newstr[newstr_count] = buff[count];
-           } else {
-             newstr[newstr_count] = buff[count];
-           }
-         }
-         newstr_count++;
-       }
- 
-       line = lexer->line_number;
-       lexer_init(lexer); // Re-initialize so we can scan again with the same lexer
-       raise_lexer_error(newstr, line);
-     } else {
-       rb_funcall(listener, rb_intern("eof"), 0);
-     }
-   }
- 	break;
- #line 1340 "ext/gherkin_lexer_is/gherkin_lexer_is.c"
- 		}
- 	}
- 	}
- 
- 	_out: {}
- 	}
- 
- #line 426 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/is.c.rl"
- 
-     assert(p <= pe && "data overflow after parsing execute");
-     assert(lexer->content_start <= len && "content starts after data end");
-     assert(lexer->mark < len && "mark is after data end");
-     
-     // Reset lexer by re-initializing the whole thing
-     lexer_init(lexer);
- 
-     if (cs == lexer_error) {
-       rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails.");
-     } else {
-       return Qtrue;
-     }
-   }
- }
- 
- void Init_gherkin_lexer_is()
- {
-   mGherkin = rb_define_module("Gherkin");
-   mGherkinLexer = rb_define_module_under(mGherkin, "Lexer");
-   rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError"));
- 
-   mCLexer = rb_define_module_under(mGherkin, "CLexer");
-   cI18nLexer = rb_define_class_under(mCLexer, "Is", rb_cObject);
-   rb_define_alloc_func(cI18nLexer, CLexer_alloc);
-   rb_define_method(cI18nLexer, "initialize", CLexer_init, 1);
-   rb_define_method(cI18nLexer, "scan", CLexer_scan, 1);
- }
- 
 -#line 1 "ragel/i18n/is.c.rl"
 -#include <assert.h>
 -#include <ruby.h>
 -
 -#if defined(_WIN32)
 -#include <stddef.h>
 -#endif
 -
 -#ifdef HAVE_RUBY_RE_H
 -#include <ruby/re.h>
 -#else
 -#include <re.h>
 -#endif
 -
 -#ifdef HAVE_RUBY_ENCODING_H
 -#include <ruby/encoding.h>
 -#define ENCODED_STR_NEW(ptr, len) \
 -    rb_enc_str_new(ptr, len, rb_utf8_encoding())
 -#else
 -#define ENCODED_STR_NEW(ptr, len) \
 -    rb_str_new(ptr, len)
 -#endif
 -
 -#ifndef RSTRING_PTR
 -#define RSTRING_PTR(s) (RSTRING(s)->ptr)
 -#endif
 -
 -#ifndef RSTRING_LEN
 -#define RSTRING_LEN(s) (RSTRING(s)->len)
 -#endif
 -
 -#define DATA_GET(FROM, TYPE, NAME) \
 -  Data_Get_Struct(FROM, TYPE, NAME); \
 -  if (NAME == NULL) { \
 -    rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \
 -  }
 - 
 -typedef struct lexer_state {
 -  int content_len;
 -  int line_number;
 -  int current_line;
 -  int start_col;
 -  size_t mark;
 -  size_t keyword_start;
 -  size_t keyword_end;
 -  size_t next_keyword_start;
 -  size_t content_start;
 -  size_t content_end;
 -  size_t docstring_content_type_start;
 -  size_t docstring_content_type_end;
 -  size_t query_start;
 -  size_t last_newline;
 -  size_t final_newline;
 -} lexer_state;
 -
 -static VALUE mGherkin;
 -static VALUE mGherkinLexer;
 -static VALUE mCLexer;
 -static VALUE cI18nLexer;
 -static VALUE rb_eGherkinLexingError;
 -
 -#define LEN(AT, P) (P - data - lexer->AT)
 -#define MARK(M, P) (lexer->M = (P) - data)
 -#define PTR_TO(P) (data + lexer->P)
 -
 -#define STORE_KW_END_CON(EVENT) \
 -  store_multiline_kw_con(listener, # EVENT, \
 -    PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \
 -    PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \
 -    lexer->current_line, lexer->start_col); \
 -    if (lexer->content_end != 0) { \
 -      p = PTR_TO(content_end - 1); \
 -    } \
 -    lexer->content_end = 0
 -
 -#define STORE_ATTR(ATTR) \
 -    store_attr(listener, # ATTR, \
 -      PTR_TO(content_start), LEN(content_start, p), \
 -      lexer->line_number)
 -
 -
 -#line 254 "ragel/i18n/is.c.rl"
 -
 -
 -/** Data **/
 -
 -#line 89 "ext/gherkin_lexer_is/gherkin_lexer_is.c"
 -static const char _lexer_actions[] = {
 -	0, 1, 0, 1, 1, 1, 2, 1, 
 -	3, 1, 4, 1, 5, 1, 6, 1, 
 -	7, 1, 8, 1, 9, 1, 10, 1, 
 -	11, 1, 12, 1, 13, 1, 16, 1, 
 -	17, 1, 18, 1, 19, 1, 20, 1, 
 -	21, 1, 22, 1, 23, 2, 1, 18, 
 -	2, 4, 5, 2, 13, 0, 2, 14, 
 -	15, 2, 17, 0, 2, 17, 2, 2, 
 -	17, 16, 2, 17, 19, 2, 18, 6, 
 -	2, 18, 7, 2, 18, 8, 2, 18, 
 -	9, 2, 18, 10, 2, 18, 16, 2, 
 -	20, 21, 2, 22, 0, 2, 22, 2, 
 -	2, 22, 16, 2, 22, 19, 3, 3, 
 -	14, 15, 3, 5, 14, 15, 3, 11, 
 -	14, 15, 3, 12, 14, 15, 3, 13, 
 -	14, 15, 3, 14, 15, 18, 3, 17, 
 -	0, 11, 3, 17, 14, 15, 4, 1, 
 -	14, 15, 18, 4, 4, 5, 14, 15, 
 -	4, 17, 0, 14, 15, 5, 17, 0, 
 -	11, 14, 15
 -};
 -
 -static const short _lexer_key_offsets[] = {
 -	0, 0, 18, 19, 21, 22, 23, 25, 
 -	27, 44, 45, 46, 48, 50, 55, 60, 
 -	65, 70, 74, 78, 80, 81, 82, 83, 
 -	84, 85, 86, 87, 88, 89, 90, 91, 
 -	92, 93, 94, 95, 100, 107, 112, 113, 
 -	114, 115, 116, 117, 118, 119, 120, 121, 
 -	122, 123, 125, 126, 127, 141, 143, 146, 
 -	148, 150, 167, 168, 169, 170, 171, 172, 
 -	173, 174, 175, 176, 177, 178, 179, 192, 
 -	194, 197, 199, 201, 203, 205, 207, 209, 
 -	211, 213, 215, 217, 219, 221, 223, 225, 
 -	227, 229, 231, 233, 235, 237, 239, 241, 
 -	243, 245, 247, 249, 251, 253, 255, 257, 
 -	259, 263, 265, 267, 269, 271, 273, 275, 
 -	277, 279, 281, 283, 285, 287, 289, 291, 
 -	293, 296, 298, 300, 302, 304, 306, 308, 
 -	310, 312, 314, 316, 318, 320, 322, 324, 
 -	326, 328, 330, 332, 333, 334, 335, 336, 
 -	337, 338, 339, 346, 348, 350, 352, 354, 
 -	356, 358, 360, 362, 364, 366, 369, 370, 
 -	371, 372, 373, 374, 375, 376, 377, 378, 
 -	379, 380, 392, 394, 396, 398, 400, 402, 
 -	404, 406, 408, 410, 412, 414, 416, 418, 
 -	420, 422, 424, 426, 428, 430, 432, 434, 
 -	436, 438, 440, 442, 445, 447, 449, 451, 
 -	453, 455, 457, 459, 461, 463, 465, 467, 
 -	469, 471, 473, 475, 477, 479, 481, 483, 
 -	485, 487, 489, 491, 493, 495, 497, 499, 
 -	501, 503, 506, 508, 510, 512, 514, 516, 
 -	518, 520, 522, 524, 526, 528, 530, 532, 
 -	534, 536, 538, 539, 540, 541, 542, 543, 
 -	544, 545, 547, 548, 549, 550, 551, 552, 
 -	553, 554, 555, 556, 557, 558, 559, 560, 
 -	561, 562, 563, 575, 577, 580, 582, 584, 
 -	586, 588, 590, 592, 594, 596, 598, 600, 
 -	602, 604, 606, 608, 610, 612, 614, 616, 
 -	618, 620, 622, 624, 626, 628, 630, 632, 
 -	634, 636, 638, 640, 642, 646, 648, 650, 
 -	652, 654, 656, 658, 660, 662, 664, 665, 
 -	666, 667, 668, 669, 673, 679, 682, 684, 
 -	690, 707, 709, 711, 713, 715, 717, 719, 
 -	721, 723, 725, 727, 729, 731, 733, 735, 
 -	737, 739, 741, 743, 745, 747, 749, 751, 
 -	753, 755, 757, 759, 761, 763, 765, 767, 
 -	769, 771, 773, 775, 777, 779, 781, 783, 
 -	787, 789, 791, 793, 795, 797, 799, 801, 
 -	803, 805, 807, 809, 811, 813, 815, 817, 
 -	820, 822, 824, 826, 828, 830, 832, 834, 
 -	836, 838, 840, 842, 844, 846, 848, 850, 
 -	852, 854, 855, 856, 857, 858, 859, 860
 -};
 -
 -static const char _lexer_trans_keys[] = {
 -	-61, -17, 10, 32, 34, 35, 37, 42, 
 -	64, 65, 66, 68, 69, 76, 79, 124, 
 -	9, 13, -98, -61, 101, -95, 32, 10, 
 -	13, 10, 13, -61, 10, 32, 34, 35, 
 -	37, 42, 64, 65, 66, 68, 69, 76, 
 -	79, 124, 9, 13, 34, 34, 10, 13, 
 -	10, 13, 10, 32, 34, 9, 13, 10, 
 -	32, 34, 9, 13, 10, 32, 34, 9, 
 -	13, 10, 32, 34, 9, 13, 10, 32, 
 -	9, 13, 10, 32, 9, 13, 10, 13, 
 -	10, 95, 70, 69, 65, 84, 85, 82, 
 -	69, 95, 69, 78, 68, 95, 37, 13, 
 -	32, 64, 9, 10, 9, 10, 13, 32, 
 -	64, 11, 12, 10, 32, 64, 9, 13, 
 -	116, 98, 117, 114, -61, -80, 97, 114, 
 -	-61, -95, 115, 58, 105, 10, 10, -61, 
 -	10, 32, 35, 37, 42, 64, 65, 66, 
 -	69, 76, 79, 9, 13, -98, 10, -61, 
 -	10, 101, -95, 10, 10, 32, -61, 10, 
 -	32, 34, 35, 37, 42, 64, 65, 66, 
 -	68, 69, 76, 79, 124, 9, 13, 97, 
 -	107, 103, 114, 117, 110, 110, 117, 114, 
 -	58, 10, 10, -61, 10, 32, 35, 37, 
 -	42, 64, 65, 69, 76, 79, 9, 13, 
 -	-98, 10, -61, 10, 101, -95, 10, 10, 
 -	32, 10, 103, 10, 97, 10, 114, 10, 
 -	95, 10, 70, 10, 69, 10, 65, 10, 
 -	84, 10, 85, 10, 82, 10, 69, 10, 
 -	95, 10, 69, 10, 78, 10, 68, 10, 
 -	95, 10, 37, 10, 116, 10, 98, 10, 
 -	117, 10, 114, -61, 10, -80, 10, 10, 
 -	97, 10, 114, -61, 10, -95, 10, 10, 
 -	115, 10, 58, 10, 102, 105, 110, 10, 
 -	103, 10, 105, 10, 110, 10, 108, 10, 
 -	101, 10, 105, 10, 107, 10, 105, -61, 
 -	10, -67, 10, 10, 115, 10, 105, 10, 
 -	110, 10, 103, 10, 32, 10, 65, 68, 
 -	10, 116, 10, 98, 10, 117, 10, 114, 
 -	-61, 10, -80, 10, 10, 97, 10, 114, 
 -	-61, 10, -95, 10, 10, 115, 10, 97, 
 -	10, 114, -61, 10, -90, 10, 10, 109, 
 -	10, 97, 10, 103, -61, -90, 109, 105, 
 -	58, 10, 10, 10, 32, 35, 69, 124, 
 -	9, 13, 10, 105, 10, 103, 10, 105, 
 -	10, 110, 10, 108, 10, 101, 10, 105, 
 -	10, 107, 10, 105, 10, 58, 102, 105, 
 -	110, 103, 105, 110, 108, 101, 105, 107, 
 -	105, 58, 10, 10, 10, 32, 35, 37, 
 -	64, 65, 66, 68, 69, 76, 9, 13, 
 -	10, 95, 10, 70, 10, 69, 10, 65, 
 -	10, 84, 10, 85, 10, 82, 10, 69, 
 -	10, 95, 10, 69, 10, 78, 10, 68, 
 -	10, 95, 10, 37, 10, 116, 10, 98, 
 -	10, 117, 10, 114, -61, 10, -80, 10, 
 -	10, 97, 10, 114, -61, 10, -95, 10, 
 -	10, 115, 10, 58, 105, 10, 114, 10, 
 -	58, 10, 97, 10, 107, 10, 103, 10, 
 -	114, 10, 117, 10, 110, 10, 110, 10, 
 -	117, -61, 10, -90, 10, 10, 109, 10, 
 -	105, 10, 105, 10, 103, 10, 105, 10, 
 -	110, 10, 108, 10, 101, 10, 105, 10, 
 -	107, -61, 10, -67, 10, 10, 115, 10, 
 -	105, 10, 110, 10, 103, 10, 32, 10, 
 -	65, 68, 10, 116, 10, 98, 10, 117, 
 -	10, 114, -61, 10, -80, 10, 10, 97, 
 -	10, 114, -61, 10, -95, 10, 10, 115, 
 -	10, 97, -61, 10, -90, 10, 10, 109, 
 -	10, 97, -61, -67, 115, 105, 110, 103, 
 -	32, 65, 68, 116, 98, 117, 114, -61, 
 -	-80, 97, 114, -61, -95, 115, 97, 114, 
 -	58, 10, 10, -61, 10, 32, 35, 37, 
 -	42, 64, 65, 69, 79, 9, 13, -98, 
 -	10, -61, 10, 101, -95, 10, 10, 32, 
 -	10, 103, 10, 97, 10, 114, 10, 95, 
 -	10, 70, 10, 69, 10, 65, 10, 84, 
 -	10, 85, 10, 82, 10, 69, 10, 95, 
 -	10, 69, 10, 78, 10, 68, 10, 95, 
 -	10, 37, 10, 116, 10, 98, 10, 117, 
 -	10, 114, -61, 10, -80, 10, 10, 97, 
 -	10, 114, -61, 10, -95, 10, 10, 115, 
 -	10, 58, 10, 102, 105, 110, 10, 103, 
 -	10, 105, 10, 110, 10, 108, 10, 101, 
 -	10, 105, 10, 107, 10, 105, 10, 103, 
 -	-61, -90, 109, 97, 103, 32, 124, 9, 
 -	13, 10, 32, 92, 124, 9, 13, 10, 
 -	92, 124, 10, 92, 10, 32, 92, 124, 
 -	9, 13, -61, 10, 32, 34, 35, 37, 
 -	42, 64, 65, 66, 68, 69, 76, 79, 
 -	124, 9, 13, 10, 103, 10, 97, 10, 
 -	114, 10, 95, 10, 70, 10, 69, 10, 
 -	65, 10, 84, 10, 85, 10, 82, 10, 
 -	69, 10, 95, 10, 69, 10, 78, 10, 
 -	68, 10, 95, 10, 37, 10, 116, 10, 
 -	98, 10, 117, 10, 114, -61, 10, -80, 
 -	10, 10, 97, 10, 114, -61, 10, -95, 
 -	10, 10, 115, 10, 58, 10, 97, 10, 
 -	107, 10, 103, 10, 114, 10, 117, 10, 
 -	110, 10, 110, 10, 117, 10, 114, 10, 
 -	102, 105, 110, 10, 103, 10, 105, 10, 
 -	110, 10, 108, 10, 101, 10, 105, 10, 
 -	107, 10, 105, -61, 10, -67, 10, 10, 
 -	115, 10, 105, 10, 110, 10, 103, 10, 
 -	32, 10, 65, 68, 10, 116, 10, 98, 
 -	10, 117, 10, 114, -61, 10, -80, 10, 
 -	10, 97, 10, 114, -61, 10, -95, 10, 
 -	10, 115, 10, 97, -61, 10, -90, 10, 
 -	10, 109, 10, 97, 10, 103, 114, 103, 
 -	97, 114, -69, -65, 0
 -};
 -
 -static const char _lexer_single_lengths[] = {
 -	0, 16, 1, 2, 1, 1, 2, 2, 
 -	15, 1, 1, 2, 2, 3, 3, 3, 
 -	3, 2, 2, 2, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 3, 5, 3, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 2, 1, 1, 12, 2, 3, 2, 
 -	2, 15, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 11, 2, 
 -	3, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	4, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	3, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 1, 1, 1, 1, 1, 
 -	1, 1, 5, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 3, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 10, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 3, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 3, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 1, 1, 1, 1, 1, 1, 
 -	1, 2, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 10, 2, 3, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 4, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 1, 1, 
 -	1, 1, 1, 2, 4, 3, 2, 4, 
 -	15, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 4, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 3, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 1, 1, 1, 1, 1, 1, 0
 -};
 -
 -static const char _lexer_range_lengths[] = {
 -	0, 1, 0, 0, 0, 0, 0, 0, 
 -	1, 0, 0, 0, 0, 1, 1, 1, 
 -	1, 1, 1, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 1, 1, 1, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 1, 0, 0, 0, 
 -	0, 1, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 1, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 1, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 1, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 1, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 1, 1, 0, 0, 1, 
 -	1, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0
 -};
 -
 -static const short _lexer_index_offsets[] = {
 -	0, 0, 18, 20, 23, 25, 27, 30, 
 -	33, 50, 52, 54, 57, 60, 65, 70, 
 -	75, 80, 84, 88, 91, 93, 95, 97, 
 -	99, 101, 103, 105, 107, 109, 111, 113, 
 -	115, 117, 119, 121, 126, 133, 138, 140, 
 -	142, 144, 146, 148, 150, 152, 154, 156, 
 -	158, 160, 163, 165, 167, 181, 184, 188, 
 -	191, 194, 211, 213, 215, 217, 219, 221, 
 -	223, 225, 227, 229, 231, 233, 235, 248, 
 -	251, 255, 258, 261, 264, 267, 270, 273, 
 -	276, 279, 282, 285, 288, 291, 294, 297, 
 -	300, 303, 306, 309, 312, 315, 318, 321, 
 -	324, 327, 330, 333, 336, 339, 342, 345, 
 -	348, 353, 356, 359, 362, 365, 368, 371, 
 -	374, 377, 380, 383, 386, 389, 392, 395, 
 -	398, 402, 405, 408, 411, 414, 417, 420, 
 -	423, 426, 429, 432, 435, 438, 441, 444, 
 -	447, 450, 453, 456, 458, 460, 462, 464, 
 -	466, 468, 470, 477, 480, 483, 486, 489, 
 -	492, 495, 498, 501, 504, 507, 511, 513, 
 -	515, 517, 519, 521, 523, 525, 527, 529, 
 -	531, 533, 545, 548, 551, 554, 557, 560, 
 -	563, 566, 569, 572, 575, 578, 581, 584, 
 -	587, 590, 593, 596, 599, 602, 605, 608, 
 -	611, 614, 617, 620, 624, 627, 630, 633, 
 -	636, 639, 642, 645, 648, 651, 654, 657, 
 -	660, 663, 666, 669, 672, 675, 678, 681, 
 -	684, 687, 690, 693, 696, 699, 702, 705, 
 -	708, 711, 715, 718, 721, 724, 727, 730, 
 -	733, 736, 739, 742, 745, 748, 751, 754, 
 -	757, 760, 763, 765, 767, 769, 771, 773, 
 -	775, 777, 780, 782, 784, 786, 788, 790, 
 -	792, 794, 796, 798, 800, 802, 804, 806, 
 -	808, 810, 812, 824, 827, 831, 834, 837, 
 -	840, 843, 846, 849, 852, 855, 858, 861, 
 -	864, 867, 870, 873, 876, 879, 882, 885, 
 -	888, 891, 894, 897, 900, 903, 906, 909, 
 -	912, 915, 918, 921, 924, 929, 932, 935, 
 -	938, 941, 944, 947, 950, 953, 956, 958, 
 -	960, 962, 964, 966, 970, 976, 980, 983, 
 -	989, 1006, 1009, 1012, 1015, 1018, 1021, 1024, 
 -	1027, 1030, 1033, 1036, 1039, 1042, 1045, 1048, 
 -	1051, 1054, 1057, 1060, 1063, 1066, 1069, 1072, 
 -	1075, 1078, 1081, 1084, 1087, 1090, 1093, 1096, 
 -	1099, 1102, 1105, 1108, 1111, 1114, 1117, 1120, 
 -	1125, 1128, 1131, 1134, 1137, 1140, 1143, 1146, 
 -	1149, 1152, 1155, 1158, 1161, 1164, 1167, 1170, 
 -	1174, 1177, 1180, 1183, 1186, 1189, 1192, 1195, 
 -	1198, 1201, 1204, 1207, 1210, 1213, 1216, 1219, 
 -	1222, 1225, 1227, 1229, 1231, 1233, 1235, 1237
 -};
 -
 -static const short _lexer_trans_targs[] = {
 -	2, 397, 8, 8, 9, 19, 21, 5, 
 -	35, 38, 58, 139, 157, 242, 314, 315, 
 -	8, 0, 3, 0, 4, 394, 0, 5, 
 -	0, 6, 0, 8, 20, 7, 8, 20, 
 -	7, 2, 8, 8, 9, 19, 21, 5, 
 -	35, 38, 58, 139, 157, 242, 314, 315, 
 -	8, 0, 10, 0, 11, 0, 13, 12, 
 -	12, 13, 12, 12, 14, 14, 15, 14, 
 -	14, 14, 14, 15, 14, 14, 14, 14, 
 -	16, 14, 14, 14, 14, 17, 14, 14, 
 -	8, 18, 18, 0, 8, 18, 18, 0, 
 -	8, 20, 19, 8, 0, 22, 0, 23, 
 -	0, 24, 0, 25, 0, 26, 0, 27, 
 -	0, 28, 0, 29, 0, 30, 0, 31, 
 -	0, 32, 0, 33, 0, 34, 0, 399, 
 -	0, 0, 0, 0, 0, 36, 37, 8, 
 -	37, 37, 35, 36, 36, 8, 37, 35, 
 -	37, 0, 39, 0, 40, 0, 41, 0, 
 -	42, 0, 43, 0, 44, 0, 45, 0, 
 -	46, 0, 47, 0, 48, 0, 49, 0, 
 -	50, 393, 0, 52, 51, 52, 51, 53, 
 -	52, 52, 8, 324, 56, 8, 338, 350, 
 -	359, 368, 392, 52, 51, 54, 52, 51, 
 -	55, 52, 321, 51, 56, 52, 51, 52, 
 -	57, 51, 2, 8, 8, 9, 19, 21, 
 -	5, 35, 38, 58, 139, 157, 242, 314, 
 -	315, 8, 0, 59, 0, 60, 0, 61, 
 -	0, 62, 0, 63, 0, 64, 0, 65, 
 -	0, 66, 0, 67, 0, 68, 0, 70, 
 -	69, 70, 69, 71, 70, 70, 8, 78, 
 -	74, 8, 92, 104, 113, 138, 70, 69, 
 -	72, 70, 69, 73, 70, 75, 69, 74, 
 -	70, 69, 70, 57, 69, 70, 76, 69, 
 -	70, 77, 69, 70, 74, 69, 70, 79, 
 -	69, 70, 80, 69, 70, 81, 69, 70, 
 -	82, 69, 70, 83, 69, 70, 84, 69, 
 -	70, 85, 69, 70, 86, 69, 70, 87, 
 -	69, 70, 88, 69, 70, 89, 69, 70, 
 -	90, 69, 70, 91, 69, 70, 8, 69, 
 -	70, 93, 69, 70, 94, 69, 70, 95, 
 -	69, 70, 96, 69, 97, 70, 69, 98, 
 -	70, 69, 70, 99, 69, 70, 100, 69, 
 -	101, 70, 69, 102, 70, 69, 70, 103, 
 -	69, 70, 57, 69, 70, 74, 105, 74, 
 -	69, 70, 106, 69, 70, 107, 69, 70, 
 -	108, 69, 70, 109, 69, 70, 110, 69, 
 -	70, 111, 69, 70, 112, 69, 70, 103, 
 -	69, 114, 70, 69, 115, 70, 69, 70, 
 -	116, 69, 70, 117, 69, 70, 118, 69, 
 -	70, 119, 69, 70, 120, 69, 70, 121, 
 -	134, 69, 70, 122, 69, 70, 123, 69, 
 -	70, 124, 69, 70, 125, 69, 126, 70, 
 -	69, 127, 70, 69, 70, 128, 69, 70, 
 -	129, 69, 130, 70, 69, 131, 70, 69, 
 -	70, 132, 69, 70, 133, 69, 70, 103, 
 -	69, 135, 70, 69, 136, 70, 69, 70, 
 -	137, 69, 70, 103, 69, 70, 74, 69, 
 -	140, 0, 141, 0, 142, 0, 143, 0, 
 -	144, 0, 146, 145, 146, 145, 146, 146, 
 -	8, 147, 8, 146, 145, 146, 148, 145, 
 -	146, 149, 145, 146, 150, 145, 146, 151, 
 -	145, 146, 152, 145, 146, 153, 145, 146, 
 -	154, 145, 146, 155, 145, 146, 156, 145, 
 -	146, 57, 145, 5, 158, 5, 0, 159, 
 -	0, 160, 0, 161, 0, 162, 0, 163, 
 -	0, 164, 0, 165, 0, 166, 0, 167, 
 -	0, 169, 168, 169, 168, 169, 169, 8, 
 -	170, 8, 184, 198, 206, 210, 218, 169, 
 -	168, 169, 171, 168, 169, 172, 168, 169, 
 -	173, 168, 169, 174, 168, 169, 175, 168, 
 -	169, 176, 168, 169, 177, 168, 169, 178, 
 -	168, 169, 179, 168, 169, 180, 168, 169, 
 -	181, 168, 169, 182, 168, 169, 183, 168, 
 -	169, 8, 168, 169, 185, 168, 169, 186, 
 -	168, 169, 187, 168, 169, 188, 168, 189, 
 -	169, 168, 190, 169, 168, 169, 191, 168, 
 -	169, 192, 168, 193, 169, 168, 194, 169, 
 -	168, 169, 195, 168, 169, 57, 196, 168, 
 -	169, 197, 168, 169, 57, 168, 169, 199, 
 -	168, 169, 200, 168, 169, 201, 168, 169, 
 -	202, 168, 169, 203, 168, 169, 204, 168, 
 -	169, 205, 168, 169, 196, 168, 207, 169, 
 -	168, 208, 169, 168, 169, 209, 168, 169, 
 -	197, 168, 169, 211, 168, 169, 212, 168, 
 -	169, 213, 168, 169, 214, 168, 169, 215, 
 -	168, 169, 216, 168, 169, 217, 168, 169, 
 -	209, 168, 219, 169, 168, 220, 169, 168, 
 -	169, 221, 168, 169, 222, 168, 169, 223, 
 -	168, 169, 224, 168, 169, 225, 168, 169, 
 -	226, 238, 168, 169, 227, 168, 169, 228, 
 -	168, 169, 229, 168, 169, 230, 168, 231, 
 -	169, 168, 232, 169, 168, 169, 233, 168, 
 -	169, 234, 168, 235, 169, 168, 236, 169, 
 -	168, 169, 237, 168, 169, 196, 168, 239, 
 -	169, 168, 240, 169, 168, 169, 241, 168, 
 -	169, 197, 168, 243, 0, 244, 0, 245, 
 -	0, 246, 0, 247, 0, 248, 0, 249, 
 -	0, 250, 310, 0, 251, 0, 252, 0, 
 -	253, 0, 254, 0, 255, 0, 256, 0, 
 -	257, 0, 258, 0, 259, 0, 260, 0, 
 -	261, 0, 262, 0, 263, 0, 264, 0, 
 -	266, 265, 266, 265, 267, 266, 266, 8, 
 -	274, 270, 8, 288, 300, 309, 266, 265, 
 -	268, 266, 265, 269, 266, 271, 265, 270, 
 -	266, 265, 266, 57, 265, 266, 272, 265, 
 -	266, 273, 265, 266, 270, 265, 266, 275, 
 -	265, 266, 276, 265, 266, 277, 265, 266, 
 -	278, 265, 266, 279, 265, 266, 280, 265, 
 -	266, 281, 265, 266, 282, 265, 266, 283, 
 -	265, 266, 284, 265, 266, 285, 265, 266, 
 -	286, 265, 266, 287, 265, 266, 8, 265, 
 -	266, 289, 265, 266, 290, 265, 266, 291, 
 -	265, 266, 292, 265, 293, 266, 265, 294, 
 -	266, 265, 266, 295, 265, 266, 296, 265, 
 -	297, 266, 265, 298, 266, 265, 266, 299, 
 -	265, 266, 57, 265, 266, 270, 301, 270, 
 -	265, 266, 302, 265, 266, 303, 265, 266, 
 -	304, 265, 266, 305, 265, 266, 306, 265, 
 -	266, 307, 265, 266, 308, 265, 266, 299, 
 -	265, 266, 270, 265, 311, 0, 312, 0, 
 -	313, 0, 263, 0, 5, 0, 315, 316, 
 -	315, 0, 320, 319, 318, 316, 319, 317, 
 -	0, 318, 316, 317, 0, 318, 317, 320, 
 -	319, 318, 316, 319, 317, 2, 320, 320, 
 -	9, 19, 21, 5, 35, 38, 58, 139, 
 -	157, 242, 314, 315, 320, 0, 52, 322, 
 -	51, 52, 323, 51, 52, 56, 51, 52, 
 -	325, 51, 52, 326, 51, 52, 327, 51, 
 -	52, 328, 51, 52, 329, 51, 52, 330, 
 -	51, 52, 331, 51, 52, 332, 51, 52, 
 -	333, 51, 52, 334, 51, 52, 335, 51, 
 -	52, 336, 51, 52, 337, 51, 52, 8, 
 -	51, 52, 339, 51, 52, 340, 51, 52, 
 -	341, 51, 52, 342, 51, 343, 52, 51, 
 -	344, 52, 51, 52, 345, 51, 52, 346, 
 -	51, 347, 52, 51, 348, 52, 51, 52, 
 -	349, 51, 52, 57, 51, 52, 351, 51, 
 -	52, 352, 51, 52, 353, 51, 52, 354, 
 -	51, 52, 355, 51, 52, 356, 51, 52, 
 -	357, 51, 52, 358, 51, 52, 349, 51, 
 -	52, 56, 360, 56, 51, 52, 361, 51, 
 -	52, 362, 51, 52, 363, 51, 52, 364, 
 -	51, 52, 365, 51, 52, 366, 51, 52, 
 -	367, 51, 52, 349, 51, 369, 52, 51, 
 -	370, 52, 51, 52, 371, 51, 52, 372, 
 -	51, 52, 373, 51, 52, 374, 51, 52, 
 -	375, 51, 52, 376, 388, 51, 52, 377, 
 -	51, 52, 378, 51, 52, 379, 51, 52, 
 -	380, 51, 381, 52, 51, 382, 52, 51, 
 -	52, 383, 51, 52, 384, 51, 385, 52, 
 -	51, 386, 52, 51, 52, 387, 51, 52, 
 -	358, 51, 389, 52, 51, 390, 52, 51, 
 -	52, 391, 51, 52, 349, 51, 52, 56, 
 -	51, 143, 0, 395, 0, 396, 0, 5, 
 -	0, 398, 0, 8, 0, 0, 0
 -};
 -
 -static const unsigned char _lexer_trans_actions[] = {
 -	29, 0, 54, 0, 5, 1, 0, 29, 
 -	1, 29, 29, 29, 29, 29, 29, 35, 
 -	0, 43, 0, 43, 0, 0, 43, 0, 
 -	43, 0, 43, 149, 126, 57, 110, 23, 
 -	0, 29, 54, 0, 5, 1, 0, 29, 
 -	1, 29, 29, 29, 29, 29, 29, 35, 
 -	0, 43, 0, 43, 0, 43, 139, 48, 
 -	9, 106, 11, 0, 134, 45, 45, 45, 
 -	3, 122, 33, 33, 33, 0, 122, 33, 
 -	33, 33, 0, 122, 33, 0, 33, 0, 
 -	102, 7, 7, 43, 54, 0, 0, 43, 
 -	114, 25, 0, 54, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 43, 43, 43, 43, 0, 27, 118, 
 -	27, 27, 51, 27, 0, 54, 0, 1, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 0, 43, 144, 57, 54, 0, 84, 
 -	54, 0, 75, 33, 84, 75, 84, 84, 
 -	84, 84, 84, 0, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 0, 54, 0, 54, 
 -	17, 0, 63, 130, 31, 60, 57, 31, 
 -	63, 57, 63, 63, 63, 63, 63, 63, 
 -	66, 31, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 144, 
 -	57, 54, 0, 84, 54, 0, 72, 33, 
 -	84, 72, 84, 84, 84, 84, 0, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 0, 
 -	54, 0, 54, 15, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 15, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 0, 54, 0, 0, 
 -	54, 0, 54, 0, 0, 54, 0, 0, 
 -	0, 54, 0, 0, 54, 0, 54, 0, 
 -	0, 54, 15, 0, 54, 0, 0, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 0, 54, 0, 0, 54, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 0, 54, 
 -	0, 0, 54, 0, 54, 0, 0, 54, 
 -	0, 0, 0, 54, 0, 0, 54, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 0, 54, 0, 0, 54, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 144, 57, 54, 0, 54, 0, 
 -	81, 84, 81, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 21, 0, 0, 0, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 144, 57, 54, 0, 54, 0, 69, 
 -	33, 69, 84, 84, 84, 84, 84, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 13, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 0, 
 -	54, 0, 0, 54, 0, 54, 0, 0, 
 -	54, 0, 0, 0, 54, 0, 0, 54, 
 -	0, 54, 0, 0, 54, 13, 0, 0, 
 -	54, 0, 0, 54, 13, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 0, 54, 
 -	0, 0, 54, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 0, 54, 0, 0, 54, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 0, 
 -	54, 0, 0, 54, 0, 54, 0, 0, 
 -	54, 0, 0, 0, 54, 0, 0, 54, 
 -	0, 54, 0, 0, 54, 0, 0, 0, 
 -	54, 0, 0, 54, 0, 54, 0, 0, 
 -	54, 0, 0, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	144, 57, 54, 0, 84, 54, 0, 78, 
 -	33, 84, 78, 84, 84, 84, 0, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 0, 
 -	54, 0, 54, 19, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 19, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 0, 54, 0, 0, 
 -	54, 0, 54, 0, 0, 54, 0, 0, 
 -	0, 54, 0, 0, 54, 0, 54, 0, 
 -	0, 54, 19, 0, 54, 0, 0, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 0, 
 -	0, 43, 54, 37, 37, 87, 37, 37, 
 -	43, 0, 39, 0, 43, 0, 0, 54, 
 -	0, 0, 39, 0, 0, 96, 54, 0, 
 -	93, 90, 41, 96, 90, 96, 96, 96, 
 -	96, 96, 96, 99, 0, 43, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 17, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 0, 54, 0, 
 -	0, 54, 0, 54, 0, 0, 54, 0, 
 -	0, 0, 54, 0, 0, 54, 0, 54, 
 -	0, 0, 54, 17, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 0, 54, 0, 
 -	0, 54, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 0, 54, 0, 0, 54, 0, 
 -	54, 0, 0, 54, 0, 0, 0, 54, 
 -	0, 0, 54, 0, 54, 0, 0, 54, 
 -	0, 0, 0, 54, 0, 0, 54, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 0
 -};
 -
 -static const unsigned char _lexer_eof_actions[] = {
 -	0, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43
 -};
 -
 -static const int lexer_start = 1;
 -static const int lexer_first_final = 399;
 -static const int lexer_error = 0;
 -
 -static const int lexer_en_main = 1;
 -
 -
 -#line 258 "ragel/i18n/is.c.rl"
 -
 -static VALUE 
 -unindent(VALUE con, int start_col)
 -{
 -  VALUE re;
 -  /* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */
 -  char pat[32]; 
 -  snprintf(pat, 32, "^[\t ]{0,%d}", start_col); 
 -  re = rb_reg_regcomp(rb_str_new2(pat));
 -  rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2(""));
 -
 -  return Qnil;
 -
 -}
 -
 -static void 
 -store_kw_con(VALUE listener, const char * event_name, 
 -             const char * keyword_at, size_t keyword_length, 
 -             const char * at,         size_t length, 
 -             int current_line)
 -{
 -  VALUE con = Qnil, kw = Qnil;
 -  kw = ENCODED_STR_NEW(keyword_at, keyword_length);
 -  con = ENCODED_STR_NEW(at, length);
 -  rb_funcall(con, rb_intern("strip!"), 0);
 -  rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); 
 -}
 -
 -static void
 -store_multiline_kw_con(VALUE listener, const char * event_name,
 -                      const char * keyword_at, size_t keyword_length,
 -                      const char * at,         size_t length,
 -                      int current_line, int start_col)
 -{
 -  VALUE split;
 -  VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil;
 -
 -  kw = ENCODED_STR_NEW(keyword_at, keyword_length);
 -  con = ENCODED_STR_NEW(at, length);
 -
 -  unindent(con, start_col);
 -  
 -  split = rb_str_split(con, "\n");
 -
 -  name = rb_funcall(split, rb_intern("shift"), 0);
 -  desc = rb_ary_join(split, rb_str_new2( "\n" ));
 -
 -  if( name == Qnil ) 
 -  {
 -    name = rb_str_new2("");
 -  }
 -  if( rb_funcall(desc, rb_intern("size"), 0) == 0) 
 -  {
 -    desc = rb_str_new2("");
 -  }
 -  rb_funcall(name, rb_intern("strip!"), 0);
 -  rb_funcall(desc, rb_intern("rstrip!"), 0);
 -  rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); 
 -}
 -
 -static void 
 -store_attr(VALUE listener, const char * attr_type,
 -           const char * at, size_t length, 
 -           int line)
 -{
 -  VALUE val = ENCODED_STR_NEW(at, length);
 -  rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line));
 -}
 -static void 
 -store_docstring_content(VALUE listener, 
 -          int start_col, 
 -          const char *type_at, size_t type_length,
 -          const char *at, size_t length, 
 -          int current_line)
 -{
 -  VALUE re2;
 -  VALUE unescape_escaped_quotes;
 -  VALUE con = ENCODED_STR_NEW(at, length);
 -  VALUE con_type = ENCODED_STR_NEW(type_at, type_length);
 -
 -  unindent(con, start_col);
 -
 -  re2 = rb_reg_regcomp(rb_str_new2("\r\\Z"));
 -  unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\""));
 -  rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2(""));
 -  rb_funcall(con_type, rb_intern("strip!"), 0);
 -  rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\""));
 -  rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line));
 -}
 -static void 
 -raise_lexer_error(const char * at, int line)
 -{ 
 -  rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at);
 -}
 -
 -static void lexer_init(lexer_state *lexer) {
 -  lexer->content_start = 0;
 -  lexer->content_end = 0;
 -  lexer->content_len = 0;
 -  lexer->docstring_content_type_start = 0;
 -  lexer->docstring_content_type_end = 0;
 -  lexer->mark = 0;
 -  lexer->keyword_start = 0;
 -  lexer->keyword_end = 0;
 -  lexer->next_keyword_start = 0;
 -  lexer->line_number = 1;
 -  lexer->last_newline = 0;
 -  lexer->final_newline = 0;
 -  lexer->start_col = 0;
 -}
 -
 -static VALUE CLexer_alloc(VALUE klass)
 -{
 -  VALUE obj;
 -  lexer_state *lxr = ALLOC(lexer_state);
 -  lexer_init(lxr);
 -
 -  obj = Data_Wrap_Struct(klass, NULL, -1, lxr);
 -
 -  return obj;
 -}
 -
 -static VALUE CLexer_init(VALUE self, VALUE listener)
 -{
 -  lexer_state *lxr; 
 -  rb_iv_set(self, "@listener", listener);
 -  
 -  lxr = NULL;
 -  DATA_GET(self, lexer_state, lxr);
 -  lexer_init(lxr);
 -  
 -  return self;
 -}
 -
 -static VALUE CLexer_scan(VALUE self, VALUE input)
 -{
 -  VALUE input_copy;
 -  char *data;
 -  size_t len;
 -  VALUE listener = rb_iv_get(self, "@listener");
 -
 -  lexer_state *lexer;
 -  lexer = NULL;
 -  DATA_GET(self, lexer_state, lexer);
 -
 -  input_copy = rb_str_dup(input);
 -
 -  rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%"));
 -  data = RSTRING_PTR(input_copy);
 -  len = RSTRING_LEN(input_copy);
 -  
 -  if (len == 0) { 
 -    rb_raise(rb_eGherkinLexingError, "No content to lex.");
 -  } else {
 -
 -    const char *p, *pe, *eof;
 -    int cs = 0;
 -    
 -    VALUE current_row = Qnil;
 -
 -    p = data;
 -    pe = data + len;
 -    eof = pe;
 -    
 -    assert(*pe == '\0' && "pointer does not end on NULL");
 -    
 -    
 -#line 980 "ext/gherkin_lexer_is/gherkin_lexer_is.c"
 -	{
 -	cs = lexer_start;
 -	}
 -
 -#line 425 "ragel/i18n/is.c.rl"
 -    
 -#line 987 "ext/gherkin_lexer_is/gherkin_lexer_is.c"
 -	{
 -	int _klen;
 -	unsigned int _trans;
 -	const char *_acts;
 -	unsigned int _nacts;
 -	const char *_keys;
 -
 -	if ( p == pe )
 -		goto _test_eof;
 -	if ( cs == 0 )
 -		goto _out;
 -_resume:
 -	_keys = _lexer_trans_keys + _lexer_key_offsets[cs];
 -	_trans = _lexer_index_offsets[cs];
 -
 -	_klen = _lexer_single_lengths[cs];
 -	if ( _klen > 0 ) {
 -		const char *_lower = _keys;
 -		const char *_mid;
 -		const char *_upper = _keys + _klen - 1;
 -		while (1) {
 -			if ( _upper < _lower )
 -				break;
 -
 -			_mid = _lower + ((_upper-_lower) >> 1);
 -			if ( (*p) < *_mid )
 -				_upper = _mid - 1;
 -			else if ( (*p) > *_mid )
 -				_lower = _mid + 1;
 -			else {
 -				_trans += (unsigned int)(_mid - _keys);
 -				goto _match;
 -			}
 -		}
 -		_keys += _klen;
 -		_trans += _klen;
 -	}
 -
 -	_klen = _lexer_range_lengths[cs];
 -	if ( _klen > 0 ) {
 -		const char *_lower = _keys;
 -		const char *_mid;
 -		const char *_upper = _keys + (_klen<<1) - 2;
 -		while (1) {
 -			if ( _upper < _lower )
 -				break;
 -
 -			_mid = _lower + (((_upper-_lower) >> 1) & ~1);
 -			if ( (*p) < _mid[0] )
 -				_upper = _mid - 2;
 -			else if ( (*p) > _mid[1] )
 -				_lower = _mid + 2;
 -			else {
 -				_trans += (unsigned int)((_mid - _keys)>>1);
 -				goto _match;
 -			}
 -		}
 -		_trans += _klen;
 -	}
 -
 -_match:
 -	cs = _lexer_trans_targs[_trans];
 -
 -	if ( _lexer_trans_actions[_trans] == 0 )
 -		goto _again;
 -
 -	_acts = _lexer_actions + _lexer_trans_actions[_trans];
 -	_nacts = (unsigned int) *_acts++;
 -	while ( _nacts-- > 0 )
 -	{
 -		switch ( *_acts++ )
 -		{
 -	case 0:
 -#line 83 "ragel/i18n/is.c.rl"
 -	{
 -		MARK(content_start, p);
 -    lexer->current_line = lexer->line_number;
 -    lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2;
 -  }
 -	break;
 -	case 1:
 -#line 89 "ragel/i18n/is.c.rl"
 -	{
 -    MARK(content_start, p);
 -  }
 -	break;
 -	case 2:
 -#line 93 "ragel/i18n/is.c.rl"
 -	{
 -    lexer->current_line = lexer->line_number;
 -    lexer->start_col = p - data - lexer->last_newline;
 -  }
 -	break;
 -	case 3:
 -#line 98 "ragel/i18n/is.c.rl"
 -	{
 -    int len = LEN(content_start, PTR_TO(final_newline));
 -    int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end));
 -
 -    if (len < 0) len = 0;
 -    if (type_len < 0) len = 0;
 -
 -    store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line);
 -  }
 -	break;
 -	case 4:
 -#line 108 "ragel/i18n/is.c.rl"
 -	{ 
 -    MARK(docstring_content_type_start, p);
 -  }
 -	break;
 -	case 5:
 -#line 112 "ragel/i18n/is.c.rl"
 -	{ 
 -    MARK(docstring_content_type_end, p);
 -  }
 -	break;
 -	case 6:
 -#line 116 "ragel/i18n/is.c.rl"
 -	{
 -    STORE_KW_END_CON(feature);
 -  }
 -	break;
 -	case 7:
 -#line 120 "ragel/i18n/is.c.rl"
 -	{
 -    STORE_KW_END_CON(background);
 -  }
 -	break;
 -	case 8:
 -#line 124 "ragel/i18n/is.c.rl"
 -	{
 -    STORE_KW_END_CON(scenario);
 -  }
 -	break;
 -	case 9:
 -#line 128 "ragel/i18n/is.c.rl"
 -	{
 -    STORE_KW_END_CON(scenario_outline);
 -  }
 -	break;
 -	case 10:
 -#line 132 "ragel/i18n/is.c.rl"
 -	{
 -    STORE_KW_END_CON(examples);
 -  }
 -	break;
 -	case 11:
 -#line 136 "ragel/i18n/is.c.rl"
 -	{
 -    store_kw_con(listener, "step",
 -      PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
 -      PTR_TO(content_start), LEN(content_start, p), 
 -      lexer->current_line);
 -  }
 -	break;
 -	case 12:
 -#line 143 "ragel/i18n/is.c.rl"
 -	{
 -    STORE_ATTR(comment);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 13:
 -#line 148 "ragel/i18n/is.c.rl"
 -	{
 -    STORE_ATTR(tag);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 14:
 -#line 153 "ragel/i18n/is.c.rl"
 -	{
 -    lexer->line_number += 1;
 -    MARK(final_newline, p);
 -  }
 -	break;
 -	case 15:
 -#line 158 "ragel/i18n/is.c.rl"
 -	{
 -    MARK(last_newline, p + 1);
 -  }
 -	break;
 -	case 16:
 -#line 162 "ragel/i18n/is.c.rl"
 -	{
 -    if (lexer->mark == 0) {
 -      MARK(mark, p);
 -    }
 -  }
 -	break;
 -	case 17:
 -#line 168 "ragel/i18n/is.c.rl"
 -	{
 -    MARK(keyword_end, p);
 -    MARK(keyword_start, PTR_TO(mark));
 -    MARK(content_start, p + 1);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 18:
 -#line 175 "ragel/i18n/is.c.rl"
 -	{
 -    MARK(content_end, p);
 -  }
 -	break;
 -	case 19:
 -#line 179 "ragel/i18n/is.c.rl"
 -	{
 -    p = p - 1;
 -    lexer->current_line = lexer->line_number;
 -    current_row = rb_ary_new();
 -  }
 -	break;
 -	case 20:
 -#line 185 "ragel/i18n/is.c.rl"
 -	{
 -		MARK(content_start, p);
 -  }
 -	break;
 -	case 21:
 -#line 189 "ragel/i18n/is.c.rl"
 -	{
 -    VALUE re_pipe, re_newline, re_backslash;
 -    VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
 -    rb_funcall(con, rb_intern("strip!"), 0);
 -    re_pipe      = rb_reg_regcomp(rb_str_new2("\\\\\\|"));
 -    re_newline   = rb_reg_regcomp(rb_str_new2("\\\\n"));
 -    re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_pipe,      rb_str_new2("|"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_newline,   rb_str_new2("\n"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\"));
 -
 -    rb_ary_push(current_row, con);
 -  }
 -	break;
 -	case 22:
 -#line 203 "ragel/i18n/is.c.rl"
 -	{
 -    rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
 -  }
 -	break;
 -	case 23:
 -#line 207 "ragel/i18n/is.c.rl"
 -	{
 -    int line;
 -    if (cs < lexer_first_final) {
 -      size_t count = 0;
 -      VALUE newstr_val;
 -      char *newstr;
 -      int newstr_count = 0;        
 -      size_t len;
 -      const char *buff;
 -      if (lexer->last_newline != 0) {
 -        len = LEN(last_newline, eof);
 -        buff = PTR_TO(last_newline);
 -      } else {
 -        len = strlen(data);
 -        buff = data;
 -      }
 -
 -      /* Allocate as a ruby string so that it gets cleaned up by GC */
 -      newstr_val = rb_str_new(buff, len);
 -      newstr = RSTRING_PTR(newstr_val);
 -
 -
 -      for (count = 0; count < len; count++) {
 -        if(buff[count] == 10) {
 -          newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
 -          break;
 -        } else {
 -          if (buff[count] == '%') {
 -            newstr[newstr_count++] = buff[count];
 -            newstr[newstr_count] = buff[count];
 -          } else {
 -            newstr[newstr_count] = buff[count];
 -          }
 -        }
 -        newstr_count++;
 -      }
 -
 -      line = lexer->line_number;
 -      lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
 -      raise_lexer_error(newstr, line);
 -    } else {
 -      rb_funcall(listener, rb_intern("eof"), 0);
 -    }
 -  }
 -	break;
 -#line 1277 "ext/gherkin_lexer_is/gherkin_lexer_is.c"
 -		}
 -	}
 -
 -_again:
 -	if ( cs == 0 )
 -		goto _out;
 -	if ( ++p != pe )
 -		goto _resume;
 -	_test_eof: {}
 -	if ( p == eof )
 -	{
 -	const char *__acts = _lexer_actions + _lexer_eof_actions[cs];
 -	unsigned int __nacts = (unsigned int) *__acts++;
 -	while ( __nacts-- > 0 ) {
 -		switch ( *__acts++ ) {
 -	case 23:
 -#line 207 "ragel/i18n/is.c.rl"
 -	{
 -    int line;
 -    if (cs < lexer_first_final) {
 -      size_t count = 0;
 -      VALUE newstr_val;
 -      char *newstr;
 -      int newstr_count = 0;        
 -      size_t len;
 -      const char *buff;
 -      if (lexer->last_newline != 0) {
 -        len = LEN(last_newline, eof);
 -        buff = PTR_TO(last_newline);
 -      } else {
 -        len = strlen(data);
 -        buff = data;
 -      }
 -
 -      /* Allocate as a ruby string so that it gets cleaned up by GC */
 -      newstr_val = rb_str_new(buff, len);
 -      newstr = RSTRING_PTR(newstr_val);
 -
 -
 -      for (count = 0; count < len; count++) {
 -        if(buff[count] == 10) {
 -          newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
 -          break;
 -        } else {
 -          if (buff[count] == '%') {
 -            newstr[newstr_count++] = buff[count];
 -            newstr[newstr_count] = buff[count];
 -          } else {
 -            newstr[newstr_count] = buff[count];
 -          }
 -        }
 -        newstr_count++;
 -      }
 -
 -      line = lexer->line_number;
 -      lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
 -      raise_lexer_error(newstr, line);
 -    } else {
 -      rb_funcall(listener, rb_intern("eof"), 0);
 -    }
 -  }
 -	break;
 -#line 1340 "ext/gherkin_lexer_is/gherkin_lexer_is.c"
 -		}
 -	}
 -	}
 -
 -	_out: {}
 -	}
 -
 -#line 426 "ragel/i18n/is.c.rl"
 -
 -    assert(p <= pe && "data overflow after parsing execute");
 -    assert(lexer->content_start <= len && "content starts after data end");
 -    assert(lexer->mark < len && "mark is after data end");
 -    
 -    /* Reset lexer by re-initializing the whole thing */
 -    lexer_init(lexer);
 -
 -    if (cs == lexer_error) {
 -      rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails.");
 -    } else {
 -      return Qtrue;
 -    }
 -  }
 -}
 -
 -void Init_gherkin_lexer_is()
 -{
 -  mGherkin = rb_define_module("Gherkin");
 -  mGherkinLexer = rb_define_module_under(mGherkin, "Lexer");
 -  rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError"));
 -
 -  mCLexer = rb_define_module_under(mGherkin, "CLexer");
 -  cI18nLexer = rb_define_class_under(mCLexer, "Is", rb_cObject);
 -  rb_define_alloc_func(cI18nLexer, CLexer_alloc);
 -  rb_define_method(cI18nLexer, "initialize", CLexer_init, 1);
 -  rb_define_method(cI18nLexer, "scan", CLexer_scan, 1);
 -}
 -
diff --cc ext/gherkin_lexer_it/extconf.rb
index f95c573,f95c573..0000000
deleted file mode 100644,100644
--- a/ext/gherkin_lexer_it/extconf.rb
+++ /dev/null
@@@ -1,6 -1,6 +1,0 @@@
--require 'mkmf'
--CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags']
--$CFLAGS << ' -O0 -Wall' if CONFIG['CC'] =~ /gcc|clang/
--dir_config("gherkin_lexer_it")
--have_library("c", "main")
--create_makefile("gherkin_lexer_it")
diff --cc ext/gherkin_lexer_it/gherkin_lexer_it.c
index dd99b42,b48a634..0000000
deleted file mode 100644,100644
--- a/ext/gherkin_lexer_it/gherkin_lexer_it.c
+++ /dev/null
@@@ -1,1340 -1,1340 +1,0 @@@
--
- #line 1 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/it.c.rl"
- #include <assert.h>
- #include <ruby.h>
- 
- #if defined(_WIN32)
- #include <stddef.h>
- #endif
- 
- #ifdef HAVE_RUBY_RE_H
- #include <ruby/re.h>
- #else
- #include <re.h>
- #endif
- 
- #ifdef HAVE_RUBY_ENCODING_H
- #include <ruby/encoding.h>
- #define ENCODED_STR_NEW(ptr, len) \
-     rb_enc_str_new(ptr, len, rb_utf8_encoding())
- #else
- #define ENCODED_STR_NEW(ptr, len) \
-     rb_str_new(ptr, len)
- #endif
- 
- #ifndef RSTRING_PTR
- #define RSTRING_PTR(s) (RSTRING(s)->ptr)
- #endif
- 
- #ifndef RSTRING_LEN
- #define RSTRING_LEN(s) (RSTRING(s)->len)
- #endif
- 
- #define DATA_GET(FROM, TYPE, NAME) \
-   Data_Get_Struct(FROM, TYPE, NAME); \
-   if (NAME == NULL) { \
-     rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \
-   }
-  
- typedef struct lexer_state {
-   int content_len;
-   int line_number;
-   int current_line;
-   int start_col;
-   size_t mark;
-   size_t keyword_start;
-   size_t keyword_end;
-   size_t next_keyword_start;
-   size_t content_start;
-   size_t content_end;
-   size_t docstring_content_type_start;
-   size_t docstring_content_type_end;
-   size_t query_start;
-   size_t last_newline;
-   size_t final_newline;
- } lexer_state;
- 
- static VALUE mGherkin;
- static VALUE mGherkinLexer;
- static VALUE mCLexer;
- static VALUE cI18nLexer;
- static VALUE rb_eGherkinLexingError;
- 
- #define LEN(AT, P) (P - data - lexer->AT)
- #define MARK(M, P) (lexer->M = (P) - data)
- #define PTR_TO(P) (data + lexer->P)
- 
- #define STORE_KW_END_CON(EVENT) \
-   store_multiline_kw_con(listener, # EVENT, \
-     PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \
-     PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \
-     lexer->current_line, lexer->start_col); \
-     if (lexer->content_end != 0) { \
-       p = PTR_TO(content_end - 1); \
-     } \
-     lexer->content_end = 0
- 
- #define STORE_ATTR(ATTR) \
-     store_attr(listener, # ATTR, \
-       PTR_TO(content_start), LEN(content_start, p), \
-       lexer->line_number)
- 
- 
- #line 254 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/it.c.rl"
- 
- 
- /** Data **/
- 
- #line 89 "ext/gherkin_lexer_it/gherkin_lexer_it.c"
- static const char _lexer_actions[] = {
- 	0, 1, 0, 1, 1, 1, 2, 1, 
- 	3, 1, 4, 1, 5, 1, 6, 1, 
- 	7, 1, 8, 1, 9, 1, 10, 1, 
- 	11, 1, 12, 1, 13, 1, 16, 1, 
- 	17, 1, 18, 1, 19, 1, 20, 1, 
- 	21, 1, 22, 1, 23, 2, 1, 18, 
- 	2, 4, 5, 2, 13, 0, 2, 14, 
- 	15, 2, 17, 0, 2, 17, 2, 2, 
- 	17, 16, 2, 17, 19, 2, 18, 6, 
- 	2, 18, 7, 2, 18, 8, 2, 18, 
- 	9, 2, 18, 10, 2, 18, 16, 2, 
- 	20, 21, 2, 22, 0, 2, 22, 2, 
- 	2, 22, 16, 2, 22, 19, 3, 3, 
- 	14, 15, 3, 5, 14, 15, 3, 11, 
- 	14, 15, 3, 12, 14, 15, 3, 13, 
- 	14, 15, 3, 14, 15, 18, 3, 17, 
- 	0, 11, 3, 17, 14, 15, 4, 1, 
- 	14, 15, 18, 4, 4, 5, 14, 15, 
- 	4, 17, 0, 14, 15, 5, 17, 0, 
- 	11, 14, 15
- };
- 
- static const short _lexer_key_offsets[] = {
- 	0, 0, 19, 20, 21, 39, 40, 41, 
- 	43, 45, 50, 55, 60, 65, 69, 73, 
- 	75, 76, 77, 78, 79, 80, 81, 82, 
- 	83, 84, 85, 86, 87, 88, 89, 90, 
- 	91, 93, 95, 100, 107, 112, 113, 114, 
- 	115, 116, 117, 118, 119, 120, 121, 122, 
- 	123, 124, 125, 126, 127, 142, 144, 146, 
- 	148, 150, 152, 154, 156, 158, 160, 162, 
- 	164, 166, 168, 170, 172, 190, 191, 192, 
- 	196, 198, 199, 200, 201, 202, 203, 204, 
- 	205, 212, 214, 216, 218, 220, 222, 224, 
- 	226, 228, 230, 232, 234, 236, 238, 239, 
- 	240, 241, 242, 243, 244, 245, 246, 247, 
- 	248, 249, 250, 251, 252, 253, 264, 266, 
- 	268, 270, 272, 274, 276, 278, 280, 282, 
- 	284, 286, 288, 290, 292, 294, 296, 298, 
- 	300, 302, 304, 306, 308, 310, 312, 314, 
- 	316, 318, 320, 322, 324, 326, 328, 330, 
- 	332, 334, 336, 338, 340, 342, 344, 347, 
- 	349, 351, 353, 355, 357, 359, 361, 363, 
- 	365, 367, 369, 371, 373, 375, 377, 379, 
- 	381, 382, 383, 384, 385, 386, 387, 389, 
- 	390, 391, 392, 393, 394, 395, 396, 397, 
- 	413, 415, 417, 419, 421, 423, 425, 427, 
- 	429, 431, 433, 435, 437, 439, 441, 443, 
- 	445, 447, 449, 451, 453, 455, 457, 459, 
- 	461, 463, 465, 467, 469, 471, 473, 478, 
- 	480, 482, 484, 486, 488, 490, 492, 494, 
- 	496, 498, 500, 502, 504, 506, 508, 510, 
- 	512, 514, 517, 519, 521, 523, 525, 527, 
- 	529, 531, 533, 535, 537, 539, 541, 543, 
- 	545, 547, 549, 551, 552, 553, 554, 555, 
- 	556, 557, 558, 559, 560, 561, 562, 563, 
- 	564, 565, 566, 567, 568, 569, 570, 571, 
- 	572, 587, 589, 591, 593, 595, 597, 599, 
- 	601, 603, 605, 607, 609, 611, 613, 615, 
- 	617, 619, 621, 623, 625, 627, 629, 631, 
- 	636, 638, 640, 642, 644, 646, 648, 650, 
- 	652, 654, 656, 658, 660, 662, 664, 666, 
- 	668, 670, 672, 674, 676, 678, 680, 682, 
- 	684, 686, 690, 696, 699, 701, 707, 725, 
- 	727, 729, 731, 733, 735, 737, 739, 744, 
- 	746, 748, 750, 752, 754, 756, 758, 760, 
- 	762, 764, 766, 768, 770, 772, 774, 776, 
- 	778, 780, 782, 785, 787, 789, 791, 793, 
- 	795, 797, 799, 801, 803, 805, 807, 809, 
- 	811, 813, 815, 817, 819, 821
- };
- 
- static const char _lexer_trans_keys[] = {
- 	-17, 10, 32, 34, 35, 37, 42, 64, 
- 	65, 67, 68, 69, 70, 77, 81, 83, 
- 	124, 9, 13, -69, -65, 10, 32, 34, 
- 	35, 37, 42, 64, 65, 67, 68, 69, 
- 	70, 77, 81, 83, 124, 9, 13, 34, 
- 	34, 10, 13, 10, 13, 10, 32, 34, 
- 	9, 13, 10, 32, 34, 9, 13, 10, 
- 	32, 34, 9, 13, 10, 32, 34, 9, 
- 	13, 10, 32, 9, 13, 10, 32, 9, 
- 	13, 10, 13, 10, 95, 70, 69, 65, 
- 	84, 85, 82, 69, 95, 69, 78, 68, 
- 	95, 37, 32, 10, 13, 10, 13, 13, 
- 	32, 64, 9, 10, 9, 10, 13, 32, 
- 	64, 11, 12, 10, 32, 64, 9, 13, 
- 	108, 108, 111, 114, 97, 111, 110, 116, 
- 	101, 115, 116, 111, 58, 10, 10, 10, 
- 	32, 35, 37, 42, 64, 65, 68, 69, 
- 	70, 77, 81, 83, 9, 13, 10, 95, 
- 	10, 70, 10, 69, 10, 65, 10, 84, 
- 	10, 85, 10, 82, 10, 69, 10, 95, 
- 	10, 69, 10, 78, 10, 68, 10, 95, 
- 	10, 37, 10, 32, 10, 32, 34, 35, 
- 	37, 42, 64, 65, 67, 68, 69, 70, 
- 	77, 81, 83, 124, 9, 13, 97, 116, 
- 	97, 101, 105, 111, 32, 115, 101, 109, 
- 	112, 105, 58, 10, 10, 10, 32, 35, 
- 	70, 124, 9, 13, 10, 117, 10, 110, 
- 	10, 122, 10, 105, 10, 111, 10, 110, 
- 	10, 97, 10, 108, 10, 105, 10, 116, 
- 	-61, 10, -96, 10, 10, 58, 117, 110, 
- 	122, 105, 111, 110, 97, 108, 105, 116, 
- 	-61, -96, 58, 10, 10, 10, 32, 35, 
- 	37, 64, 67, 69, 70, 83, 9, 13, 
- 	10, 95, 10, 70, 10, 69, 10, 65, 
- 	10, 84, 10, 85, 10, 82, 10, 69, 
- 	10, 95, 10, 69, 10, 78, 10, 68, 
- 	10, 95, 10, 37, 10, 111, 10, 110, 
- 	10, 116, 10, 101, 10, 115, 10, 116, 
- 	10, 111, 10, 58, 10, 115, 10, 101, 
- 	10, 109, 10, 112, 10, 105, 10, 117, 
- 	10, 110, 10, 122, 10, 105, 10, 111, 
- 	10, 110, 10, 97, 10, 108, 10, 105, 
- 	10, 116, -61, 10, -96, 10, 10, 99, 
- 	10, 101, 104, 10, 110, 10, 97, 10, 
- 	114, 10, 105, 10, 101, 10, 109, 10, 
- 	97, 10, 32, 10, 100, 10, 101, 10, 
- 	108, 10, 108, 10, 111, 10, 32, 10, 
- 	115, 10, 99, 10, 101, 117, 97, 110, 
- 	100, 111, 99, 101, 104, 110, 97, 114, 
- 	105, 111, 58, 10, 10, 10, 32, 35, 
- 	37, 42, 64, 65, 67, 68, 69, 70, 
- 	77, 81, 83, 9, 13, 10, 95, 10, 
- 	70, 10, 69, 10, 65, 10, 84, 10, 
- 	85, 10, 82, 10, 69, 10, 95, 10, 
- 	69, 10, 78, 10, 68, 10, 95, 10, 
- 	37, 10, 32, 10, 108, 10, 108, 10, 
- 	111, 10, 114, 10, 97, 10, 111, 10, 
- 	110, 10, 116, 10, 101, 10, 115, 10, 
- 	116, 10, 111, 10, 58, 10, 97, 10, 
- 	116, 10, 97, 101, 105, 111, 10, 117, 
- 	10, 110, 10, 122, 10, 105, 10, 111, 
- 	10, 110, 10, 97, 10, 108, 10, 105, 
- 	10, 116, -61, 10, -96, 10, 10, 117, 
- 	10, 97, 10, 110, 10, 100, 10, 111, 
- 	10, 99, 10, 101, 104, 10, 110, 10, 
- 	97, 10, 114, 10, 105, 10, 101, 10, 
- 	109, 10, 97, 10, 32, 10, 100, 10, 
- 	101, 10, 108, 10, 108, 10, 111, 10, 
- 	32, 10, 115, 10, 99, 10, 101, 101, 
- 	109, 97, 32, 100, 101, 108, 108, 111, 
- 	32, 115, 99, 101, 110, 97, 114, 105, 
- 	111, 58, 10, 10, 10, 32, 35, 37, 
- 	42, 64, 65, 68, 69, 70, 77, 81, 
- 	83, 9, 13, 10, 95, 10, 70, 10, 
- 	69, 10, 65, 10, 84, 10, 85, 10, 
- 	82, 10, 69, 10, 95, 10, 69, 10, 
- 	78, 10, 68, 10, 95, 10, 37, 10, 
- 	32, 10, 108, 10, 108, 10, 111, 10, 
- 	114, 10, 97, 10, 97, 10, 116, 10, 
- 	97, 101, 105, 111, 10, 117, 10, 110, 
- 	10, 122, 10, 105, 10, 111, 10, 110, 
- 	10, 97, 10, 108, 10, 105, 10, 116, 
- 	-61, 10, -96, 10, 10, 58, 10, 117, 
- 	10, 97, 10, 110, 10, 100, 10, 111, 
- 	10, 99, 10, 101, 10, 110, 10, 97, 
- 	10, 114, 10, 105, 10, 111, 32, 124, 
- 	9, 13, 10, 32, 92, 124, 9, 13, 
- 	10, 92, 124, 10, 92, 10, 32, 92, 
- 	124, 9, 13, 10, 32, 34, 35, 37, 
- 	42, 64, 65, 67, 68, 69, 70, 77, 
- 	81, 83, 124, 9, 13, 10, 108, 10, 
- 	108, 10, 111, 10, 114, 10, 97, 10, 
- 	97, 10, 116, 10, 97, 101, 105, 111, 
- 	10, 117, 10, 110, 10, 122, 10, 105, 
- 	10, 111, 10, 110, 10, 97, 10, 108, 
- 	10, 105, 10, 116, -61, 10, -96, 10, 
- 	10, 58, 10, 117, 10, 97, 10, 110, 
- 	10, 100, 10, 111, 10, 99, 10, 101, 
- 	104, 10, 110, 10, 97, 10, 114, 10, 
- 	105, 10, 111, 10, 101, 10, 109, 10, 
- 	97, 10, 32, 10, 100, 10, 101, 10, 
- 	108, 10, 108, 10, 111, 10, 32, 10, 
- 	115, 10, 99, 10, 101, 0
- };
- 
- static const char _lexer_single_lengths[] = {
- 	0, 17, 1, 1, 16, 1, 1, 2, 
- 	2, 3, 3, 3, 3, 2, 2, 2, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	2, 2, 3, 5, 3, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 13, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 16, 1, 1, 4, 
- 	2, 1, 1, 1, 1, 1, 1, 1, 
- 	5, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 9, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 3, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	1, 1, 1, 1, 1, 1, 2, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 14, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 5, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 3, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	13, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 5, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 4, 3, 2, 4, 16, 2, 
- 	2, 2, 2, 2, 2, 2, 5, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 3, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 0
- };
- 
- static const char _lexer_range_lengths[] = {
- 	0, 1, 0, 0, 1, 0, 0, 0, 
- 	0, 1, 1, 1, 1, 1, 1, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 1, 1, 1, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 1, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 1, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	1, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 1, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 1, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	1, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 1, 1, 0, 0, 1, 1, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0
- };
- 
- static const short _lexer_index_offsets[] = {
- 	0, 0, 19, 21, 23, 41, 43, 45, 
- 	48, 51, 56, 61, 66, 71, 75, 79, 
- 	82, 84, 86, 88, 90, 92, 94, 96, 
- 	98, 100, 102, 104, 106, 108, 110, 112, 
- 	114, 117, 120, 125, 132, 137, 139, 141, 
- 	143, 145, 147, 149, 151, 153, 155, 157, 
- 	159, 161, 163, 165, 167, 182, 185, 188, 
- 	191, 194, 197, 200, 203, 206, 209, 212, 
- 	215, 218, 221, 224, 227, 245, 247, 249, 
- 	254, 257, 259, 261, 263, 265, 267, 269, 
- 	271, 278, 281, 284, 287, 290, 293, 296, 
- 	299, 302, 305, 308, 311, 314, 317, 319, 
- 	321, 323, 325, 327, 329, 331, 333, 335, 
- 	337, 339, 341, 343, 345, 347, 358, 361, 
- 	364, 367, 370, 373, 376, 379, 382, 385, 
- 	388, 391, 394, 397, 400, 403, 406, 409, 
- 	412, 415, 418, 421, 424, 427, 430, 433, 
- 	436, 439, 442, 445, 448, 451, 454, 457, 
- 	460, 463, 466, 469, 472, 475, 478, 482, 
- 	485, 488, 491, 494, 497, 500, 503, 506, 
- 	509, 512, 515, 518, 521, 524, 527, 530, 
- 	533, 535, 537, 539, 541, 543, 545, 548, 
- 	550, 552, 554, 556, 558, 560, 562, 564, 
- 	580, 583, 586, 589, 592, 595, 598, 601, 
- 	604, 607, 610, 613, 616, 619, 622, 625, 
- 	628, 631, 634, 637, 640, 643, 646, 649, 
- 	652, 655, 658, 661, 664, 667, 670, 676, 
- 	679, 682, 685, 688, 691, 694, 697, 700, 
- 	703, 706, 709, 712, 715, 718, 721, 724, 
- 	727, 730, 734, 737, 740, 743, 746, 749, 
- 	752, 755, 758, 761, 764, 767, 770, 773, 
- 	776, 779, 782, 785, 787, 789, 791, 793, 
- 	795, 797, 799, 801, 803, 805, 807, 809, 
- 	811, 813, 815, 817, 819, 821, 823, 825, 
- 	827, 842, 845, 848, 851, 854, 857, 860, 
- 	863, 866, 869, 872, 875, 878, 881, 884, 
- 	887, 890, 893, 896, 899, 902, 905, 908, 
- 	914, 917, 920, 923, 926, 929, 932, 935, 
- 	938, 941, 944, 947, 950, 953, 956, 959, 
- 	962, 965, 968, 971, 974, 977, 980, 983, 
- 	986, 989, 993, 999, 1003, 1006, 1012, 1030, 
- 	1033, 1036, 1039, 1042, 1045, 1048, 1051, 1057, 
- 	1060, 1063, 1066, 1069, 1072, 1075, 1078, 1081, 
- 	1084, 1087, 1090, 1093, 1096, 1099, 1102, 1105, 
- 	1108, 1111, 1114, 1118, 1121, 1124, 1127, 1130, 
- 	1133, 1136, 1139, 1142, 1145, 1148, 1151, 1154, 
- 	1157, 1160, 1163, 1166, 1169, 1172
- };
- 
- static const short _lexer_trans_targs[] = {
- 	2, 4, 4, 5, 15, 17, 31, 34, 
- 	37, 42, 69, 72, 94, 41, 168, 173, 
- 	321, 4, 0, 3, 0, 4, 0, 4, 
- 	4, 5, 15, 17, 31, 34, 37, 42, 
- 	69, 72, 94, 41, 168, 173, 321, 4, 
- 	0, 6, 0, 7, 0, 9, 8, 8, 
- 	9, 8, 8, 10, 10, 11, 10, 10, 
- 	10, 10, 11, 10, 10, 10, 10, 12, 
- 	10, 10, 10, 10, 13, 10, 10, 4, 
- 	14, 14, 0, 4, 14, 14, 0, 4, 
- 	16, 15, 4, 0, 18, 0, 19, 0, 
- 	20, 0, 21, 0, 22, 0, 23, 0, 
- 	24, 0, 25, 0, 26, 0, 27, 0, 
- 	28, 0, 29, 0, 30, 0, 373, 0, 
- 	32, 0, 4, 16, 33, 4, 16, 33, 
- 	0, 0, 0, 0, 35, 36, 4, 36, 
- 	36, 34, 35, 35, 4, 36, 34, 36, 
- 	0, 38, 0, 39, 0, 40, 0, 41, 
- 	0, 31, 0, 43, 0, 44, 0, 45, 
- 	0, 46, 0, 47, 0, 48, 0, 49, 
- 	0, 50, 0, 52, 51, 52, 51, 52, 
- 	52, 4, 53, 67, 4, 327, 332, 67, 
- 	335, 331, 348, 353, 52, 51, 52, 54, 
- 	51, 52, 55, 51, 52, 56, 51, 52, 
- 	57, 51, 52, 58, 51, 52, 59, 51, 
- 	52, 60, 51, 52, 61, 51, 52, 62, 
- 	51, 52, 63, 51, 52, 64, 51, 52, 
- 	65, 51, 52, 66, 51, 52, 4, 51, 
- 	52, 68, 51, 4, 4, 5, 15, 17, 
- 	31, 34, 37, 42, 69, 72, 94, 41, 
- 	168, 173, 321, 4, 0, 70, 0, 71, 
- 	0, 31, 31, 31, 31, 0, 32, 73, 
- 	0, 74, 0, 75, 0, 76, 0, 77, 
- 	0, 78, 0, 80, 79, 80, 79, 80, 
- 	80, 4, 81, 4, 80, 79, 80, 82, 
- 	79, 80, 83, 79, 80, 84, 79, 80, 
- 	85, 79, 80, 86, 79, 80, 87, 79, 
- 	80, 88, 79, 80, 89, 79, 80, 90, 
- 	79, 80, 91, 79, 92, 80, 79, 93, 
- 	80, 79, 80, 68, 79, 95, 0, 96, 
- 	0, 97, 0, 98, 0, 99, 0, 100, 
- 	0, 101, 0, 102, 0, 103, 0, 104, 
- 	0, 105, 0, 106, 0, 107, 0, 109, 
- 	108, 109, 108, 109, 109, 4, 110, 4, 
- 	124, 132, 137, 149, 109, 108, 109, 111, 
- 	108, 109, 112, 108, 109, 113, 108, 109, 
- 	114, 108, 109, 115, 108, 109, 116, 108, 
- 	109, 117, 108, 109, 118, 108, 109, 119, 
- 	108, 109, 120, 108, 109, 121, 108, 109, 
- 	122, 108, 109, 123, 108, 109, 4, 108, 
- 	109, 125, 108, 109, 126, 108, 109, 127, 
- 	108, 109, 128, 108, 109, 129, 108, 109, 
- 	130, 108, 109, 131, 108, 109, 68, 108, 
- 	109, 133, 108, 109, 134, 108, 109, 135, 
- 	108, 109, 136, 108, 109, 131, 108, 109, 
- 	138, 108, 109, 139, 108, 109, 140, 108, 
- 	109, 141, 108, 109, 142, 108, 109, 143, 
- 	108, 109, 144, 108, 109, 145, 108, 109, 
- 	146, 108, 109, 147, 108, 148, 109, 108, 
- 	131, 109, 108, 109, 150, 108, 109, 151, 
- 	155, 108, 109, 152, 108, 109, 153, 108, 
- 	109, 154, 108, 109, 130, 108, 109, 156, 
- 	108, 109, 157, 108, 109, 158, 108, 109, 
- 	159, 108, 109, 160, 108, 109, 161, 108, 
- 	109, 162, 108, 109, 163, 108, 109, 164, 
- 	108, 109, 165, 108, 109, 166, 108, 109, 
- 	167, 108, 109, 151, 108, 169, 0, 170, 
- 	0, 171, 0, 172, 0, 31, 0, 174, 
- 	0, 175, 251, 0, 176, 0, 177, 0, 
- 	178, 0, 179, 0, 180, 0, 181, 0, 
- 	183, 182, 183, 182, 183, 183, 4, 184, 
- 	198, 4, 199, 204, 212, 198, 215, 203, 
- 	227, 232, 183, 182, 183, 185, 182, 183, 
- 	186, 182, 183, 187, 182, 183, 188, 182, 
- 	183, 189, 182, 183, 190, 182, 183, 191, 
- 	182, 183, 192, 182, 183, 193, 182, 183, 
- 	194, 182, 183, 195, 182, 183, 196, 182, 
- 	183, 197, 182, 183, 4, 182, 183, 68, 
- 	182, 183, 200, 182, 183, 201, 182, 183, 
- 	202, 182, 183, 203, 182, 183, 198, 182, 
- 	183, 205, 182, 183, 206, 182, 183, 207, 
- 	182, 183, 208, 182, 183, 209, 182, 183, 
- 	210, 182, 183, 211, 182, 183, 68, 182, 
- 	183, 213, 182, 183, 214, 182, 183, 198, 
- 	198, 198, 198, 182, 183, 216, 182, 183, 
- 	217, 182, 183, 218, 182, 183, 219, 182, 
- 	183, 220, 182, 183, 221, 182, 183, 222, 
- 	182, 183, 223, 182, 183, 224, 182, 183, 
- 	225, 182, 226, 183, 182, 211, 183, 182, 
- 	183, 228, 182, 183, 229, 182, 183, 230, 
- 	182, 183, 231, 182, 183, 198, 182, 183, 
- 	233, 182, 183, 234, 238, 182, 183, 235, 
- 	182, 183, 236, 182, 183, 237, 182, 183, 
- 	210, 182, 183, 239, 182, 183, 240, 182, 
- 	183, 241, 182, 183, 242, 182, 183, 243, 
- 	182, 183, 244, 182, 183, 245, 182, 183, 
- 	246, 182, 183, 247, 182, 183, 248, 182, 
- 	183, 249, 182, 183, 250, 182, 183, 234, 
- 	182, 252, 0, 253, 0, 254, 0, 255, 
- 	0, 256, 0, 257, 0, 258, 0, 259, 
- 	0, 260, 0, 261, 0, 262, 0, 263, 
- 	0, 264, 0, 265, 0, 266, 0, 267, 
- 	0, 268, 0, 269, 0, 270, 0, 272, 
- 	271, 272, 271, 272, 272, 4, 273, 287, 
- 	4, 288, 293, 287, 296, 292, 309, 314, 
- 	272, 271, 272, 274, 271, 272, 275, 271, 
- 	272, 276, 271, 272, 277, 271, 272, 278, 
- 	271, 272, 279, 271, 272, 280, 271, 272, 
- 	281, 271, 272, 282, 271, 272, 283, 271, 
- 	272, 284, 271, 272, 285, 271, 272, 286, 
- 	271, 272, 4, 271, 272, 68, 271, 272, 
- 	289, 271, 272, 290, 271, 272, 291, 271, 
- 	272, 292, 271, 272, 287, 271, 272, 294, 
- 	271, 272, 295, 271, 272, 287, 287, 287, 
- 	287, 271, 272, 297, 271, 272, 298, 271, 
- 	272, 299, 271, 272, 300, 271, 272, 301, 
- 	271, 272, 302, 271, 272, 303, 271, 272, 
- 	304, 271, 272, 305, 271, 272, 306, 271, 
- 	307, 272, 271, 308, 272, 271, 272, 68, 
- 	271, 272, 310, 271, 272, 311, 271, 272, 
- 	312, 271, 272, 313, 271, 272, 287, 271, 
- 	272, 315, 271, 272, 316, 271, 272, 317, 
- 	271, 272, 318, 271, 272, 319, 271, 272, 
- 	320, 271, 272, 308, 271, 321, 322, 321, 
- 	0, 326, 325, 324, 322, 325, 323, 0, 
- 	324, 322, 323, 0, 324, 323, 326, 325, 
- 	324, 322, 325, 323, 326, 326, 5, 15, 
- 	17, 31, 34, 37, 42, 69, 72, 94, 
- 	41, 168, 173, 321, 326, 0, 52, 328, 
- 	51, 52, 329, 51, 52, 330, 51, 52, 
- 	331, 51, 52, 67, 51, 52, 333, 51, 
- 	52, 334, 51, 52, 67, 67, 67, 67, 
- 	51, 52, 336, 51, 52, 337, 51, 52, 
- 	338, 51, 52, 339, 51, 52, 340, 51, 
- 	52, 341, 51, 52, 342, 51, 52, 343, 
- 	51, 52, 344, 51, 52, 345, 51, 346, 
- 	52, 51, 347, 52, 51, 52, 68, 51, 
- 	52, 349, 51, 52, 350, 51, 52, 351, 
- 	51, 52, 352, 51, 52, 67, 51, 52, 
- 	354, 51, 52, 355, 360, 51, 52, 356, 
- 	51, 52, 357, 51, 52, 358, 51, 52, 
- 	359, 51, 52, 347, 51, 52, 361, 51, 
- 	52, 362, 51, 52, 363, 51, 52, 364, 
- 	51, 52, 365, 51, 52, 366, 51, 52, 
- 	367, 51, 52, 368, 51, 52, 369, 51, 
- 	52, 370, 51, 52, 371, 51, 52, 372, 
- 	51, 52, 355, 51, 0, 0
- };
- 
- static const unsigned char _lexer_trans_actions[] = {
- 	0, 54, 0, 5, 1, 0, 29, 1, 
- 	29, 29, 29, 29, 29, 29, 29, 29, 
- 	35, 0, 43, 0, 43, 0, 43, 54, 
- 	0, 5, 1, 0, 29, 1, 29, 29, 
- 	29, 29, 29, 29, 29, 29, 35, 0, 
- 	43, 0, 43, 0, 43, 139, 48, 9, 
- 	106, 11, 0, 134, 45, 45, 45, 3, 
- 	122, 33, 33, 33, 0, 122, 33, 33, 
- 	33, 0, 122, 33, 0, 33, 0, 102, 
- 	7, 7, 43, 54, 0, 0, 43, 114, 
- 	25, 0, 54, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 149, 126, 57, 110, 23, 0, 
- 	43, 43, 43, 43, 0, 27, 118, 27, 
- 	27, 51, 27, 0, 54, 0, 1, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 144, 57, 54, 0, 54, 
- 	0, 72, 33, 84, 72, 84, 84, 84, 
- 	84, 84, 84, 84, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 15, 0, 
- 	54, 15, 0, 130, 31, 60, 57, 31, 
- 	63, 57, 63, 63, 63, 63, 63, 63, 
- 	63, 63, 66, 31, 43, 0, 43, 0, 
- 	43, 0, 0, 0, 0, 43, 0, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 144, 57, 54, 0, 54, 
- 	0, 81, 84, 81, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 0, 54, 0, 0, 
- 	54, 0, 54, 21, 0, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 144, 
- 	57, 54, 0, 54, 0, 69, 33, 69, 
- 	84, 84, 84, 84, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 13, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 13, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 0, 54, 0, 
- 	0, 54, 0, 54, 0, 0, 54, 0, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	144, 57, 54, 0, 54, 0, 75, 33, 
- 	84, 75, 84, 84, 84, 84, 84, 84, 
- 	84, 84, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 17, 0, 54, 17, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 17, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 0, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 0, 54, 0, 0, 54, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 144, 
- 	57, 54, 0, 54, 0, 78, 33, 84, 
- 	78, 84, 84, 84, 84, 84, 84, 84, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 19, 0, 54, 19, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 0, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	0, 54, 0, 0, 54, 0, 54, 19, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 0, 0, 0, 
- 	43, 54, 37, 37, 87, 37, 37, 43, 
- 	0, 39, 0, 43, 0, 0, 54, 0, 
- 	0, 39, 0, 0, 54, 0, 93, 90, 
- 	41, 96, 90, 96, 96, 96, 96, 96, 
- 	96, 96, 96, 99, 0, 43, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 0, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 0, 
- 	54, 0, 0, 54, 0, 54, 15, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 0, 0
- };
- 
- static const unsigned char _lexer_eof_actions[] = {
- 	0, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43
- };
- 
- static const int lexer_start = 1;
- static const int lexer_first_final = 373;
- static const int lexer_error = 0;
- 
- static const int lexer_en_main = 1;
- 
- 
- #line 258 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/it.c.rl"
- 
- static VALUE 
- unindent(VALUE con, int start_col)
- {
-   VALUE re;
-   // Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters
-   char pat[32]; 
-   snprintf(pat, 32, "^[\t ]{0,%d}", start_col); 
-   re = rb_reg_regcomp(rb_str_new2(pat));
-   rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2(""));
- 
-   return Qnil;
- 
- }
- 
- static void 
- store_kw_con(VALUE listener, const char * event_name, 
-              const char * keyword_at, size_t keyword_length, 
-              const char * at,         size_t length, 
-              int current_line)
- {
-   VALUE con = Qnil, kw = Qnil;
-   kw = ENCODED_STR_NEW(keyword_at, keyword_length);
-   con = ENCODED_STR_NEW(at, length);
-   rb_funcall(con, rb_intern("strip!"), 0);
-   rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); 
- }
- 
- static void
- store_multiline_kw_con(VALUE listener, const char * event_name,
-                       const char * keyword_at, size_t keyword_length,
-                       const char * at,         size_t length,
-                       int current_line, int start_col)
- {
-   VALUE split;
-   VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil;
- 
-   kw = ENCODED_STR_NEW(keyword_at, keyword_length);
-   con = ENCODED_STR_NEW(at, length);
- 
-   unindent(con, start_col);
-   
-   split = rb_str_split(con, "\n");
- 
-   name = rb_funcall(split, rb_intern("shift"), 0);
-   desc = rb_ary_join(split, rb_str_new2( "\n" ));
- 
-   if( name == Qnil ) 
-   {
-     name = rb_str_new2("");
-   }
-   if( rb_funcall(desc, rb_intern("size"), 0) == 0) 
-   {
-     desc = rb_str_new2("");
-   }
-   rb_funcall(name, rb_intern("strip!"), 0);
-   rb_funcall(desc, rb_intern("rstrip!"), 0);
-   rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); 
- }
- 
- static void 
- store_attr(VALUE listener, const char * attr_type,
-            const char * at, size_t length, 
-            int line)
- {
-   VALUE val = ENCODED_STR_NEW(at, length);
-   rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line));
- }
- static void 
- store_docstring_content(VALUE listener, 
-           int start_col, 
-           const char *type_at, size_t type_length,
-           const char *at, size_t length, 
-           int current_line)
- {
-   VALUE re2;
-   VALUE unescape_escaped_quotes;
-   VALUE con = ENCODED_STR_NEW(at, length);
-   VALUE con_type = ENCODED_STR_NEW(type_at, type_length);
- 
-   unindent(con, start_col);
- 
-   re2 = rb_reg_regcomp(rb_str_new2("\r\\Z"));
-   unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\""));
-   rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2(""));
-   rb_funcall(con_type, rb_intern("strip!"), 0);
-   rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\""));
-   rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line));
- }
- static void 
- raise_lexer_error(const char * at, int line)
- { 
-   rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at);
- }
- 
- static void lexer_init(lexer_state *lexer) {
-   lexer->content_start = 0;
-   lexer->content_end = 0;
-   lexer->content_len = 0;
-   lexer->docstring_content_type_start = 0;
-   lexer->docstring_content_type_end = 0;
-   lexer->mark = 0;
-   lexer->keyword_start = 0;
-   lexer->keyword_end = 0;
-   lexer->next_keyword_start = 0;
-   lexer->line_number = 1;
-   lexer->last_newline = 0;
-   lexer->final_newline = 0;
-   lexer->start_col = 0;
- }
- 
- static VALUE CLexer_alloc(VALUE klass)
- {
-   VALUE obj;
-   lexer_state *lxr = ALLOC(lexer_state);
-   lexer_init(lxr);
- 
-   obj = Data_Wrap_Struct(klass, NULL, -1, lxr);
- 
-   return obj;
- }
- 
- static VALUE CLexer_init(VALUE self, VALUE listener)
- {
-   lexer_state *lxr; 
-   rb_iv_set(self, "@listener", listener);
-   
-   lxr = NULL;
-   DATA_GET(self, lexer_state, lxr);
-   lexer_init(lxr);
-   
-   return self;
- }
- 
- static VALUE CLexer_scan(VALUE self, VALUE input)
- {
-   VALUE input_copy;
-   char *data;
-   size_t len;
-   VALUE listener = rb_iv_get(self, "@listener");
- 
-   lexer_state *lexer;
-   lexer = NULL;
-   DATA_GET(self, lexer_state, lexer);
- 
-   input_copy = rb_str_dup(input);
- 
-   rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%"));
-   data = RSTRING_PTR(input_copy);
-   len = RSTRING_LEN(input_copy);
-   
-   if (len == 0) { 
-     rb_raise(rb_eGherkinLexingError, "No content to lex.");
-   } else {
- 
-     const char *p, *pe, *eof;
-     int cs = 0;
-     
-     VALUE current_row = Qnil;
- 
-     p = data;
-     pe = data + len;
-     eof = pe;
-     
-     assert(*pe == '\0' && "pointer does not end on NULL");
-     
-     
- #line 944 "ext/gherkin_lexer_it/gherkin_lexer_it.c"
- 	{
- 	cs = lexer_start;
- 	}
- 
- #line 425 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/it.c.rl"
-     
- #line 951 "ext/gherkin_lexer_it/gherkin_lexer_it.c"
- 	{
- 	int _klen;
- 	unsigned int _trans;
- 	const char *_acts;
- 	unsigned int _nacts;
- 	const char *_keys;
- 
- 	if ( p == pe )
- 		goto _test_eof;
- 	if ( cs == 0 )
- 		goto _out;
- _resume:
- 	_keys = _lexer_trans_keys + _lexer_key_offsets[cs];
- 	_trans = _lexer_index_offsets[cs];
- 
- 	_klen = _lexer_single_lengths[cs];
- 	if ( _klen > 0 ) {
- 		const char *_lower = _keys;
- 		const char *_mid;
- 		const char *_upper = _keys + _klen - 1;
- 		while (1) {
- 			if ( _upper < _lower )
- 				break;
- 
- 			_mid = _lower + ((_upper-_lower) >> 1);
- 			if ( (*p) < *_mid )
- 				_upper = _mid - 1;
- 			else if ( (*p) > *_mid )
- 				_lower = _mid + 1;
- 			else {
- 				_trans += (_mid - _keys);
- 				goto _match;
- 			}
- 		}
- 		_keys += _klen;
- 		_trans += _klen;
- 	}
- 
- 	_klen = _lexer_range_lengths[cs];
- 	if ( _klen > 0 ) {
- 		const char *_lower = _keys;
- 		const char *_mid;
- 		const char *_upper = _keys + (_klen<<1) - 2;
- 		while (1) {
- 			if ( _upper < _lower )
- 				break;
- 
- 			_mid = _lower + (((_upper-_lower) >> 1) & ~1);
- 			if ( (*p) < _mid[0] )
- 				_upper = _mid - 2;
- 			else if ( (*p) > _mid[1] )
- 				_lower = _mid + 2;
- 			else {
- 				_trans += ((_mid - _keys)>>1);
- 				goto _match;
- 			}
- 		}
- 		_trans += _klen;
- 	}
- 
- _match:
- 	cs = _lexer_trans_targs[_trans];
- 
- 	if ( _lexer_trans_actions[_trans] == 0 )
- 		goto _again;
- 
- 	_acts = _lexer_actions + _lexer_trans_actions[_trans];
- 	_nacts = (unsigned int) *_acts++;
- 	while ( _nacts-- > 0 )
- 	{
- 		switch ( *_acts++ )
- 		{
- 	case 0:
- #line 83 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/it.c.rl"
- 	{
- 		MARK(content_start, p);
-     lexer->current_line = lexer->line_number;
-     lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2;
-   }
- 	break;
- 	case 1:
- #line 89 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/it.c.rl"
- 	{
-     MARK(content_start, p);
-   }
- 	break;
- 	case 2:
- #line 93 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/it.c.rl"
- 	{
-     lexer->current_line = lexer->line_number;
-     lexer->start_col = p - data - lexer->last_newline;
-   }
- 	break;
- 	case 3:
- #line 98 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/it.c.rl"
- 	{
-     int len = LEN(content_start, PTR_TO(final_newline));
-     int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end));
- 
-     if (len < 0) len = 0;
-     if (type_len < 0) len = 0;
- 
-     store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line);
-   }
- 	break;
- 	case 4:
- #line 108 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/it.c.rl"
- 	{ 
-     MARK(docstring_content_type_start, p);
-   }
- 	break;
- 	case 5:
- #line 112 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/it.c.rl"
- 	{ 
-     MARK(docstring_content_type_end, p);
-   }
- 	break;
- 	case 6:
- #line 116 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/it.c.rl"
- 	{
-     STORE_KW_END_CON(feature);
-   }
- 	break;
- 	case 7:
- #line 120 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/it.c.rl"
- 	{
-     STORE_KW_END_CON(background);
-   }
- 	break;
- 	case 8:
- #line 124 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/it.c.rl"
- 	{
-     STORE_KW_END_CON(scenario);
-   }
- 	break;
- 	case 9:
- #line 128 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/it.c.rl"
- 	{
-     STORE_KW_END_CON(scenario_outline);
-   }
- 	break;
- 	case 10:
- #line 132 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/it.c.rl"
- 	{
-     STORE_KW_END_CON(examples);
-   }
- 	break;
- 	case 11:
- #line 136 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/it.c.rl"
- 	{
-     store_kw_con(listener, "step",
-       PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-       PTR_TO(content_start), LEN(content_start, p), 
-       lexer->current_line);
-   }
- 	break;
- 	case 12:
- #line 143 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/it.c.rl"
- 	{
-     STORE_ATTR(comment);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 13:
- #line 148 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/it.c.rl"
- 	{
-     STORE_ATTR(tag);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 14:
- #line 153 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/it.c.rl"
- 	{
-     lexer->line_number += 1;
-     MARK(final_newline, p);
-   }
- 	break;
- 	case 15:
- #line 158 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/it.c.rl"
- 	{
-     MARK(last_newline, p + 1);
-   }
- 	break;
- 	case 16:
- #line 162 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/it.c.rl"
- 	{
-     if (lexer->mark == 0) {
-       MARK(mark, p);
-     }
-   }
- 	break;
- 	case 17:
- #line 168 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/it.c.rl"
- 	{
-     MARK(keyword_end, p);
-     MARK(keyword_start, PTR_TO(mark));
-     MARK(content_start, p + 1);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 18:
- #line 175 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/it.c.rl"
- 	{
-     MARK(content_end, p);
-   }
- 	break;
- 	case 19:
- #line 179 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/it.c.rl"
- 	{
-     p = p - 1;
-     lexer->current_line = lexer->line_number;
-     current_row = rb_ary_new();
-   }
- 	break;
- 	case 20:
- #line 185 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/it.c.rl"
- 	{
- 		MARK(content_start, p);
-   }
- 	break;
- 	case 21:
- #line 189 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/it.c.rl"
- 	{
-     VALUE re_pipe, re_newline, re_backslash;
-     VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
-     rb_funcall(con, rb_intern("strip!"), 0);
-     re_pipe      = rb_reg_regcomp(rb_str_new2("\\\\\\|"));
-     re_newline   = rb_reg_regcomp(rb_str_new2("\\\\n"));
-     re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_pipe,      rb_str_new2("|"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_newline,   rb_str_new2("\n"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\"));
- 
-     rb_ary_push(current_row, con);
-   }
- 	break;
- 	case 22:
- #line 203 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/it.c.rl"
- 	{
-     rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
-   }
- 	break;
- 	case 23:
- #line 207 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/it.c.rl"
- 	{
-     int line;
-     if (cs < lexer_first_final) {
-       size_t count = 0;
-       VALUE newstr_val;
-       char *newstr;
-       int newstr_count = 0;        
-       size_t len;
-       const char *buff;
-       if (lexer->last_newline != 0) {
-         len = LEN(last_newline, eof);
-         buff = PTR_TO(last_newline);
-       } else {
-         len = strlen(data);
-         buff = data;
-       }
- 
-       // Allocate as a ruby string so that it gets cleaned up by GC
-       newstr_val = rb_str_new(buff, len);
-       newstr = RSTRING_PTR(newstr_val);
- 
- 
-       for (count = 0; count < len; count++) {
-         if(buff[count] == 10) {
-           newstr[newstr_count] = '\0'; // terminate new string at first newline found
-           break;
-         } else {
-           if (buff[count] == '%') {
-             newstr[newstr_count++] = buff[count];
-             newstr[newstr_count] = buff[count];
-           } else {
-             newstr[newstr_count] = buff[count];
-           }
-         }
-         newstr_count++;
-       }
- 
-       line = lexer->line_number;
-       lexer_init(lexer); // Re-initialize so we can scan again with the same lexer
-       raise_lexer_error(newstr, line);
-     } else {
-       rb_funcall(listener, rb_intern("eof"), 0);
-     }
-   }
- 	break;
- #line 1241 "ext/gherkin_lexer_it/gherkin_lexer_it.c"
- 		}
- 	}
- 
- _again:
- 	if ( cs == 0 )
- 		goto _out;
- 	if ( ++p != pe )
- 		goto _resume;
- 	_test_eof: {}
- 	if ( p == eof )
- 	{
- 	const char *__acts = _lexer_actions + _lexer_eof_actions[cs];
- 	unsigned int __nacts = (unsigned int) *__acts++;
- 	while ( __nacts-- > 0 ) {
- 		switch ( *__acts++ ) {
- 	case 23:
- #line 207 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/it.c.rl"
- 	{
-     int line;
-     if (cs < lexer_first_final) {
-       size_t count = 0;
-       VALUE newstr_val;
-       char *newstr;
-       int newstr_count = 0;        
-       size_t len;
-       const char *buff;
-       if (lexer->last_newline != 0) {
-         len = LEN(last_newline, eof);
-         buff = PTR_TO(last_newline);
-       } else {
-         len = strlen(data);
-         buff = data;
-       }
- 
-       // Allocate as a ruby string so that it gets cleaned up by GC
-       newstr_val = rb_str_new(buff, len);
-       newstr = RSTRING_PTR(newstr_val);
- 
- 
-       for (count = 0; count < len; count++) {
-         if(buff[count] == 10) {
-           newstr[newstr_count] = '\0'; // terminate new string at first newline found
-           break;
-         } else {
-           if (buff[count] == '%') {
-             newstr[newstr_count++] = buff[count];
-             newstr[newstr_count] = buff[count];
-           } else {
-             newstr[newstr_count] = buff[count];
-           }
-         }
-         newstr_count++;
-       }
- 
-       line = lexer->line_number;
-       lexer_init(lexer); // Re-initialize so we can scan again with the same lexer
-       raise_lexer_error(newstr, line);
-     } else {
-       rb_funcall(listener, rb_intern("eof"), 0);
-     }
-   }
- 	break;
- #line 1304 "ext/gherkin_lexer_it/gherkin_lexer_it.c"
- 		}
- 	}
- 	}
- 
- 	_out: {}
- 	}
- 
- #line 426 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/it.c.rl"
- 
-     assert(p <= pe && "data overflow after parsing execute");
-     assert(lexer->content_start <= len && "content starts after data end");
-     assert(lexer->mark < len && "mark is after data end");
-     
-     // Reset lexer by re-initializing the whole thing
-     lexer_init(lexer);
- 
-     if (cs == lexer_error) {
-       rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails.");
-     } else {
-       return Qtrue;
-     }
-   }
- }
- 
- void Init_gherkin_lexer_it()
- {
-   mGherkin = rb_define_module("Gherkin");
-   mGherkinLexer = rb_define_module_under(mGherkin, "Lexer");
-   rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError"));
- 
-   mCLexer = rb_define_module_under(mGherkin, "CLexer");
-   cI18nLexer = rb_define_class_under(mCLexer, "It", rb_cObject);
-   rb_define_alloc_func(cI18nLexer, CLexer_alloc);
-   rb_define_method(cI18nLexer, "initialize", CLexer_init, 1);
-   rb_define_method(cI18nLexer, "scan", CLexer_scan, 1);
- }
- 
 -#line 1 "ragel/i18n/it.c.rl"
 -#include <assert.h>
 -#include <ruby.h>
 -
 -#if defined(_WIN32)
 -#include <stddef.h>
 -#endif
 -
 -#ifdef HAVE_RUBY_RE_H
 -#include <ruby/re.h>
 -#else
 -#include <re.h>
 -#endif
 -
 -#ifdef HAVE_RUBY_ENCODING_H
 -#include <ruby/encoding.h>
 -#define ENCODED_STR_NEW(ptr, len) \
 -    rb_enc_str_new(ptr, len, rb_utf8_encoding())
 -#else
 -#define ENCODED_STR_NEW(ptr, len) \
 -    rb_str_new(ptr, len)
 -#endif
 -
 -#ifndef RSTRING_PTR
 -#define RSTRING_PTR(s) (RSTRING(s)->ptr)
 -#endif
 -
 -#ifndef RSTRING_LEN
 -#define RSTRING_LEN(s) (RSTRING(s)->len)
 -#endif
 -
 -#define DATA_GET(FROM, TYPE, NAME) \
 -  Data_Get_Struct(FROM, TYPE, NAME); \
 -  if (NAME == NULL) { \
 -    rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \
 -  }
 - 
 -typedef struct lexer_state {
 -  int content_len;
 -  int line_number;
 -  int current_line;
 -  int start_col;
 -  size_t mark;
 -  size_t keyword_start;
 -  size_t keyword_end;
 -  size_t next_keyword_start;
 -  size_t content_start;
 -  size_t content_end;
 -  size_t docstring_content_type_start;
 -  size_t docstring_content_type_end;
 -  size_t query_start;
 -  size_t last_newline;
 -  size_t final_newline;
 -} lexer_state;
 -
 -static VALUE mGherkin;
 -static VALUE mGherkinLexer;
 -static VALUE mCLexer;
 -static VALUE cI18nLexer;
 -static VALUE rb_eGherkinLexingError;
 -
 -#define LEN(AT, P) (P - data - lexer->AT)
 -#define MARK(M, P) (lexer->M = (P) - data)
 -#define PTR_TO(P) (data + lexer->P)
 -
 -#define STORE_KW_END_CON(EVENT) \
 -  store_multiline_kw_con(listener, # EVENT, \
 -    PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \
 -    PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \
 -    lexer->current_line, lexer->start_col); \
 -    if (lexer->content_end != 0) { \
 -      p = PTR_TO(content_end - 1); \
 -    } \
 -    lexer->content_end = 0
 -
 -#define STORE_ATTR(ATTR) \
 -    store_attr(listener, # ATTR, \
 -      PTR_TO(content_start), LEN(content_start, p), \
 -      lexer->line_number)
 -
 -
 -#line 254 "ragel/i18n/it.c.rl"
 -
 -
 -/** Data **/
 -
 -#line 89 "ext/gherkin_lexer_it/gherkin_lexer_it.c"
 -static const char _lexer_actions[] = {
 -	0, 1, 0, 1, 1, 1, 2, 1, 
 -	3, 1, 4, 1, 5, 1, 6, 1, 
 -	7, 1, 8, 1, 9, 1, 10, 1, 
 -	11, 1, 12, 1, 13, 1, 16, 1, 
 -	17, 1, 18, 1, 19, 1, 20, 1, 
 -	21, 1, 22, 1, 23, 2, 1, 18, 
 -	2, 4, 5, 2, 13, 0, 2, 14, 
 -	15, 2, 17, 0, 2, 17, 2, 2, 
 -	17, 16, 2, 17, 19, 2, 18, 6, 
 -	2, 18, 7, 2, 18, 8, 2, 18, 
 -	9, 2, 18, 10, 2, 18, 16, 2, 
 -	20, 21, 2, 22, 0, 2, 22, 2, 
 -	2, 22, 16, 2, 22, 19, 3, 3, 
 -	14, 15, 3, 5, 14, 15, 3, 11, 
 -	14, 15, 3, 12, 14, 15, 3, 13, 
 -	14, 15, 3, 14, 15, 18, 3, 17, 
 -	0, 11, 3, 17, 14, 15, 4, 1, 
 -	14, 15, 18, 4, 4, 5, 14, 15, 
 -	4, 17, 0, 14, 15, 5, 17, 0, 
 -	11, 14, 15
 -};
 -
 -static const short _lexer_key_offsets[] = {
 -	0, 0, 19, 20, 21, 39, 40, 41, 
 -	43, 45, 50, 55, 60, 65, 69, 73, 
 -	75, 76, 77, 78, 79, 80, 81, 82, 
 -	83, 84, 85, 86, 87, 88, 89, 90, 
 -	91, 93, 95, 100, 107, 112, 113, 114, 
 -	115, 116, 117, 118, 119, 120, 121, 122, 
 -	123, 124, 125, 126, 127, 142, 144, 146, 
 -	148, 150, 152, 154, 156, 158, 160, 162, 
 -	164, 166, 168, 170, 172, 190, 191, 192, 
 -	196, 198, 199, 200, 201, 202, 203, 204, 
 -	205, 212, 214, 216, 218, 220, 222, 224, 
 -	226, 228, 230, 232, 234, 236, 238, 239, 
 -	240, 241, 242, 243, 244, 245, 246, 247, 
 -	248, 249, 250, 251, 252, 253, 264, 266, 
 -	268, 270, 272, 274, 276, 278, 280, 282, 
 -	284, 286, 288, 290, 292, 294, 296, 298, 
 -	300, 302, 304, 306, 308, 310, 312, 314, 
 -	316, 318, 320, 322, 324, 326, 328, 330, 
 -	332, 334, 336, 338, 340, 342, 344, 347, 
 -	349, 351, 353, 355, 357, 359, 361, 363, 
 -	365, 367, 369, 371, 373, 375, 377, 379, 
 -	381, 382, 383, 384, 385, 386, 387, 389, 
 -	390, 391, 392, 393, 394, 395, 396, 397, 
 -	413, 415, 417, 419, 421, 423, 425, 427, 
 -	429, 431, 433, 435, 437, 439, 441, 443, 
 -	445, 447, 449, 451, 453, 455, 457, 459, 
 -	461, 463, 465, 467, 469, 471, 473, 478, 
 -	480, 482, 484, 486, 488, 490, 492, 494, 
 -	496, 498, 500, 502, 504, 506, 508, 510, 
 -	512, 514, 517, 519, 521, 523, 525, 527, 
 -	529, 531, 533, 535, 537, 539, 541, 543, 
 -	545, 547, 549, 551, 552, 553, 554, 555, 
 -	556, 557, 558, 559, 560, 561, 562, 563, 
 -	564, 565, 566, 567, 568, 569, 570, 571, 
 -	572, 587, 589, 591, 593, 595, 597, 599, 
 -	601, 603, 605, 607, 609, 611, 613, 615, 
 -	617, 619, 621, 623, 625, 627, 629, 631, 
 -	636, 638, 640, 642, 644, 646, 648, 650, 
 -	652, 654, 656, 658, 660, 662, 664, 666, 
 -	668, 670, 672, 674, 676, 678, 680, 682, 
 -	684, 686, 690, 696, 699, 701, 707, 725, 
 -	727, 729, 731, 733, 735, 737, 739, 744, 
 -	746, 748, 750, 752, 754, 756, 758, 760, 
 -	762, 764, 766, 768, 770, 772, 774, 776, 
 -	778, 780, 782, 785, 787, 789, 791, 793, 
 -	795, 797, 799, 801, 803, 805, 807, 809, 
 -	811, 813, 815, 817, 819, 821
 -};
 -
 -static const char _lexer_trans_keys[] = {
 -	-17, 10, 32, 34, 35, 37, 42, 64, 
 -	65, 67, 68, 69, 70, 77, 81, 83, 
 -	124, 9, 13, -69, -65, 10, 32, 34, 
 -	35, 37, 42, 64, 65, 67, 68, 69, 
 -	70, 77, 81, 83, 124, 9, 13, 34, 
 -	34, 10, 13, 10, 13, 10, 32, 34, 
 -	9, 13, 10, 32, 34, 9, 13, 10, 
 -	32, 34, 9, 13, 10, 32, 34, 9, 
 -	13, 10, 32, 9, 13, 10, 32, 9, 
 -	13, 10, 13, 10, 95, 70, 69, 65, 
 -	84, 85, 82, 69, 95, 69, 78, 68, 
 -	95, 37, 32, 10, 13, 10, 13, 13, 
 -	32, 64, 9, 10, 9, 10, 13, 32, 
 -	64, 11, 12, 10, 32, 64, 9, 13, 
 -	108, 108, 111, 114, 97, 111, 110, 116, 
 -	101, 115, 116, 111, 58, 10, 10, 10, 
 -	32, 35, 37, 42, 64, 65, 68, 69, 
 -	70, 77, 81, 83, 9, 13, 10, 95, 
 -	10, 70, 10, 69, 10, 65, 10, 84, 
 -	10, 85, 10, 82, 10, 69, 10, 95, 
 -	10, 69, 10, 78, 10, 68, 10, 95, 
 -	10, 37, 10, 32, 10, 32, 34, 35, 
 -	37, 42, 64, 65, 67, 68, 69, 70, 
 -	77, 81, 83, 124, 9, 13, 97, 116, 
 -	97, 101, 105, 111, 32, 115, 101, 109, 
 -	112, 105, 58, 10, 10, 10, 32, 35, 
 -	70, 124, 9, 13, 10, 117, 10, 110, 
 -	10, 122, 10, 105, 10, 111, 10, 110, 
 -	10, 97, 10, 108, 10, 105, 10, 116, 
 -	-61, 10, -96, 10, 10, 58, 117, 110, 
 -	122, 105, 111, 110, 97, 108, 105, 116, 
 -	-61, -96, 58, 10, 10, 10, 32, 35, 
 -	37, 64, 67, 69, 70, 83, 9, 13, 
 -	10, 95, 10, 70, 10, 69, 10, 65, 
 -	10, 84, 10, 85, 10, 82, 10, 69, 
 -	10, 95, 10, 69, 10, 78, 10, 68, 
 -	10, 95, 10, 37, 10, 111, 10, 110, 
 -	10, 116, 10, 101, 10, 115, 10, 116, 
 -	10, 111, 10, 58, 10, 115, 10, 101, 
 -	10, 109, 10, 112, 10, 105, 10, 117, 
 -	10, 110, 10, 122, 10, 105, 10, 111, 
 -	10, 110, 10, 97, 10, 108, 10, 105, 
 -	10, 116, -61, 10, -96, 10, 10, 99, 
 -	10, 101, 104, 10, 110, 10, 97, 10, 
 -	114, 10, 105, 10, 101, 10, 109, 10, 
 -	97, 10, 32, 10, 100, 10, 101, 10, 
 -	108, 10, 108, 10, 111, 10, 32, 10, 
 -	115, 10, 99, 10, 101, 117, 97, 110, 
 -	100, 111, 99, 101, 104, 110, 97, 114, 
 -	105, 111, 58, 10, 10, 10, 32, 35, 
 -	37, 42, 64, 65, 67, 68, 69, 70, 
 -	77, 81, 83, 9, 13, 10, 95, 10, 
 -	70, 10, 69, 10, 65, 10, 84, 10, 
 -	85, 10, 82, 10, 69, 10, 95, 10, 
 -	69, 10, 78, 10, 68, 10, 95, 10, 
 -	37, 10, 32, 10, 108, 10, 108, 10, 
 -	111, 10, 114, 10, 97, 10, 111, 10, 
 -	110, 10, 116, 10, 101, 10, 115, 10, 
 -	116, 10, 111, 10, 58, 10, 97, 10, 
 -	116, 10, 97, 101, 105, 111, 10, 117, 
 -	10, 110, 10, 122, 10, 105, 10, 111, 
 -	10, 110, 10, 97, 10, 108, 10, 105, 
 -	10, 116, -61, 10, -96, 10, 10, 117, 
 -	10, 97, 10, 110, 10, 100, 10, 111, 
 -	10, 99, 10, 101, 104, 10, 110, 10, 
 -	97, 10, 114, 10, 105, 10, 101, 10, 
 -	109, 10, 97, 10, 32, 10, 100, 10, 
 -	101, 10, 108, 10, 108, 10, 111, 10, 
 -	32, 10, 115, 10, 99, 10, 101, 101, 
 -	109, 97, 32, 100, 101, 108, 108, 111, 
 -	32, 115, 99, 101, 110, 97, 114, 105, 
 -	111, 58, 10, 10, 10, 32, 35, 37, 
 -	42, 64, 65, 68, 69, 70, 77, 81, 
 -	83, 9, 13, 10, 95, 10, 70, 10, 
 -	69, 10, 65, 10, 84, 10, 85, 10, 
 -	82, 10, 69, 10, 95, 10, 69, 10, 
 -	78, 10, 68, 10, 95, 10, 37, 10, 
 -	32, 10, 108, 10, 108, 10, 111, 10, 
 -	114, 10, 97, 10, 97, 10, 116, 10, 
 -	97, 101, 105, 111, 10, 117, 10, 110, 
 -	10, 122, 10, 105, 10, 111, 10, 110, 
 -	10, 97, 10, 108, 10, 105, 10, 116, 
 -	-61, 10, -96, 10, 10, 58, 10, 117, 
 -	10, 97, 10, 110, 10, 100, 10, 111, 
 -	10, 99, 10, 101, 10, 110, 10, 97, 
 -	10, 114, 10, 105, 10, 111, 32, 124, 
 -	9, 13, 10, 32, 92, 124, 9, 13, 
 -	10, 92, 124, 10, 92, 10, 32, 92, 
 -	124, 9, 13, 10, 32, 34, 35, 37, 
 -	42, 64, 65, 67, 68, 69, 70, 77, 
 -	81, 83, 124, 9, 13, 10, 108, 10, 
 -	108, 10, 111, 10, 114, 10, 97, 10, 
 -	97, 10, 116, 10, 97, 101, 105, 111, 
 -	10, 117, 10, 110, 10, 122, 10, 105, 
 -	10, 111, 10, 110, 10, 97, 10, 108, 
 -	10, 105, 10, 116, -61, 10, -96, 10, 
 -	10, 58, 10, 117, 10, 97, 10, 110, 
 -	10, 100, 10, 111, 10, 99, 10, 101, 
 -	104, 10, 110, 10, 97, 10, 114, 10, 
 -	105, 10, 111, 10, 101, 10, 109, 10, 
 -	97, 10, 32, 10, 100, 10, 101, 10, 
 -	108, 10, 108, 10, 111, 10, 32, 10, 
 -	115, 10, 99, 10, 101, 0
 -};
 -
 -static const char _lexer_single_lengths[] = {
 -	0, 17, 1, 1, 16, 1, 1, 2, 
 -	2, 3, 3, 3, 3, 2, 2, 2, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	2, 2, 3, 5, 3, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 13, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 16, 1, 1, 4, 
 -	2, 1, 1, 1, 1, 1, 1, 1, 
 -	5, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 9, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 3, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	1, 1, 1, 1, 1, 1, 2, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 14, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 5, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 3, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	13, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 5, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 4, 3, 2, 4, 16, 2, 
 -	2, 2, 2, 2, 2, 2, 5, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 3, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 0
 -};
 -
 -static const char _lexer_range_lengths[] = {
 -	0, 1, 0, 0, 1, 0, 0, 0, 
 -	0, 1, 1, 1, 1, 1, 1, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 1, 1, 1, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 1, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 1, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	1, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 1, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 1, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	1, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 1, 1, 0, 0, 1, 1, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0
 -};
 -
 -static const short _lexer_index_offsets[] = {
 -	0, 0, 19, 21, 23, 41, 43, 45, 
 -	48, 51, 56, 61, 66, 71, 75, 79, 
 -	82, 84, 86, 88, 90, 92, 94, 96, 
 -	98, 100, 102, 104, 106, 108, 110, 112, 
 -	114, 117, 120, 125, 132, 137, 139, 141, 
 -	143, 145, 147, 149, 151, 153, 155, 157, 
 -	159, 161, 163, 165, 167, 182, 185, 188, 
 -	191, 194, 197, 200, 203, 206, 209, 212, 
 -	215, 218, 221, 224, 227, 245, 247, 249, 
 -	254, 257, 259, 261, 263, 265, 267, 269, 
 -	271, 278, 281, 284, 287, 290, 293, 296, 
 -	299, 302, 305, 308, 311, 314, 317, 319, 
 -	321, 323, 325, 327, 329, 331, 333, 335, 
 -	337, 339, 341, 343, 345, 347, 358, 361, 
 -	364, 367, 370, 373, 376, 379, 382, 385, 
 -	388, 391, 394, 397, 400, 403, 406, 409, 
 -	412, 415, 418, 421, 424, 427, 430, 433, 
 -	436, 439, 442, 445, 448, 451, 454, 457, 
 -	460, 463, 466, 469, 472, 475, 478, 482, 
 -	485, 488, 491, 494, 497, 500, 503, 506, 
 -	509, 512, 515, 518, 521, 524, 527, 530, 
 -	533, 535, 537, 539, 541, 543, 545, 548, 
 -	550, 552, 554, 556, 558, 560, 562, 564, 
 -	580, 583, 586, 589, 592, 595, 598, 601, 
 -	604, 607, 610, 613, 616, 619, 622, 625, 
 -	628, 631, 634, 637, 640, 643, 646, 649, 
 -	652, 655, 658, 661, 664, 667, 670, 676, 
 -	679, 682, 685, 688, 691, 694, 697, 700, 
 -	703, 706, 709, 712, 715, 718, 721, 724, 
 -	727, 730, 734, 737, 740, 743, 746, 749, 
 -	752, 755, 758, 761, 764, 767, 770, 773, 
 -	776, 779, 782, 785, 787, 789, 791, 793, 
 -	795, 797, 799, 801, 803, 805, 807, 809, 
 -	811, 813, 815, 817, 819, 821, 823, 825, 
 -	827, 842, 845, 848, 851, 854, 857, 860, 
 -	863, 866, 869, 872, 875, 878, 881, 884, 
 -	887, 890, 893, 896, 899, 902, 905, 908, 
 -	914, 917, 920, 923, 926, 929, 932, 935, 
 -	938, 941, 944, 947, 950, 953, 956, 959, 
 -	962, 965, 968, 971, 974, 977, 980, 983, 
 -	986, 989, 993, 999, 1003, 1006, 1012, 1030, 
 -	1033, 1036, 1039, 1042, 1045, 1048, 1051, 1057, 
 -	1060, 1063, 1066, 1069, 1072, 1075, 1078, 1081, 
 -	1084, 1087, 1090, 1093, 1096, 1099, 1102, 1105, 
 -	1108, 1111, 1114, 1118, 1121, 1124, 1127, 1130, 
 -	1133, 1136, 1139, 1142, 1145, 1148, 1151, 1154, 
 -	1157, 1160, 1163, 1166, 1169, 1172
 -};
 -
 -static const short _lexer_trans_targs[] = {
 -	2, 4, 4, 5, 15, 17, 31, 34, 
 -	37, 42, 69, 72, 94, 41, 168, 173, 
 -	321, 4, 0, 3, 0, 4, 0, 4, 
 -	4, 5, 15, 17, 31, 34, 37, 42, 
 -	69, 72, 94, 41, 168, 173, 321, 4, 
 -	0, 6, 0, 7, 0, 9, 8, 8, 
 -	9, 8, 8, 10, 10, 11, 10, 10, 
 -	10, 10, 11, 10, 10, 10, 10, 12, 
 -	10, 10, 10, 10, 13, 10, 10, 4, 
 -	14, 14, 0, 4, 14, 14, 0, 4, 
 -	16, 15, 4, 0, 18, 0, 19, 0, 
 -	20, 0, 21, 0, 22, 0, 23, 0, 
 -	24, 0, 25, 0, 26, 0, 27, 0, 
 -	28, 0, 29, 0, 30, 0, 373, 0, 
 -	32, 0, 4, 16, 33, 4, 16, 33, 
 -	0, 0, 0, 0, 35, 36, 4, 36, 
 -	36, 34, 35, 35, 4, 36, 34, 36, 
 -	0, 38, 0, 39, 0, 40, 0, 41, 
 -	0, 31, 0, 43, 0, 44, 0, 45, 
 -	0, 46, 0, 47, 0, 48, 0, 49, 
 -	0, 50, 0, 52, 51, 52, 51, 52, 
 -	52, 4, 53, 67, 4, 327, 332, 67, 
 -	335, 331, 348, 353, 52, 51, 52, 54, 
 -	51, 52, 55, 51, 52, 56, 51, 52, 
 -	57, 51, 52, 58, 51, 52, 59, 51, 
 -	52, 60, 51, 52, 61, 51, 52, 62, 
 -	51, 52, 63, 51, 52, 64, 51, 52, 
 -	65, 51, 52, 66, 51, 52, 4, 51, 
 -	52, 68, 51, 4, 4, 5, 15, 17, 
 -	31, 34, 37, 42, 69, 72, 94, 41, 
 -	168, 173, 321, 4, 0, 70, 0, 71, 
 -	0, 31, 31, 31, 31, 0, 32, 73, 
 -	0, 74, 0, 75, 0, 76, 0, 77, 
 -	0, 78, 0, 80, 79, 80, 79, 80, 
 -	80, 4, 81, 4, 80, 79, 80, 82, 
 -	79, 80, 83, 79, 80, 84, 79, 80, 
 -	85, 79, 80, 86, 79, 80, 87, 79, 
 -	80, 88, 79, 80, 89, 79, 80, 90, 
 -	79, 80, 91, 79, 92, 80, 79, 93, 
 -	80, 79, 80, 68, 79, 95, 0, 96, 
 -	0, 97, 0, 98, 0, 99, 0, 100, 
 -	0, 101, 0, 102, 0, 103, 0, 104, 
 -	0, 105, 0, 106, 0, 107, 0, 109, 
 -	108, 109, 108, 109, 109, 4, 110, 4, 
 -	124, 132, 137, 149, 109, 108, 109, 111, 
 -	108, 109, 112, 108, 109, 113, 108, 109, 
 -	114, 108, 109, 115, 108, 109, 116, 108, 
 -	109, 117, 108, 109, 118, 108, 109, 119, 
 -	108, 109, 120, 108, 109, 121, 108, 109, 
 -	122, 108, 109, 123, 108, 109, 4, 108, 
 -	109, 125, 108, 109, 126, 108, 109, 127, 
 -	108, 109, 128, 108, 109, 129, 108, 109, 
 -	130, 108, 109, 131, 108, 109, 68, 108, 
 -	109, 133, 108, 109, 134, 108, 109, 135, 
 -	108, 109, 136, 108, 109, 131, 108, 109, 
 -	138, 108, 109, 139, 108, 109, 140, 108, 
 -	109, 141, 108, 109, 142, 108, 109, 143, 
 -	108, 109, 144, 108, 109, 145, 108, 109, 
 -	146, 108, 109, 147, 108, 148, 109, 108, 
 -	131, 109, 108, 109, 150, 108, 109, 151, 
 -	155, 108, 109, 152, 108, 109, 153, 108, 
 -	109, 154, 108, 109, 130, 108, 109, 156, 
 -	108, 109, 157, 108, 109, 158, 108, 109, 
 -	159, 108, 109, 160, 108, 109, 161, 108, 
 -	109, 162, 108, 109, 163, 108, 109, 164, 
 -	108, 109, 165, 108, 109, 166, 108, 109, 
 -	167, 108, 109, 151, 108, 169, 0, 170, 
 -	0, 171, 0, 172, 0, 31, 0, 174, 
 -	0, 175, 251, 0, 176, 0, 177, 0, 
 -	178, 0, 179, 0, 180, 0, 181, 0, 
 -	183, 182, 183, 182, 183, 183, 4, 184, 
 -	198, 4, 199, 204, 212, 198, 215, 203, 
 -	227, 232, 183, 182, 183, 185, 182, 183, 
 -	186, 182, 183, 187, 182, 183, 188, 182, 
 -	183, 189, 182, 183, 190, 182, 183, 191, 
 -	182, 183, 192, 182, 183, 193, 182, 183, 
 -	194, 182, 183, 195, 182, 183, 196, 182, 
 -	183, 197, 182, 183, 4, 182, 183, 68, 
 -	182, 183, 200, 182, 183, 201, 182, 183, 
 -	202, 182, 183, 203, 182, 183, 198, 182, 
 -	183, 205, 182, 183, 206, 182, 183, 207, 
 -	182, 183, 208, 182, 183, 209, 182, 183, 
 -	210, 182, 183, 211, 182, 183, 68, 182, 
 -	183, 213, 182, 183, 214, 182, 183, 198, 
 -	198, 198, 198, 182, 183, 216, 182, 183, 
 -	217, 182, 183, 218, 182, 183, 219, 182, 
 -	183, 220, 182, 183, 221, 182, 183, 222, 
 -	182, 183, 223, 182, 183, 224, 182, 183, 
 -	225, 182, 226, 183, 182, 211, 183, 182, 
 -	183, 228, 182, 183, 229, 182, 183, 230, 
 -	182, 183, 231, 182, 183, 198, 182, 183, 
 -	233, 182, 183, 234, 238, 182, 183, 235, 
 -	182, 183, 236, 182, 183, 237, 182, 183, 
 -	210, 182, 183, 239, 182, 183, 240, 182, 
 -	183, 241, 182, 183, 242, 182, 183, 243, 
 -	182, 183, 244, 182, 183, 245, 182, 183, 
 -	246, 182, 183, 247, 182, 183, 248, 182, 
 -	183, 249, 182, 183, 250, 182, 183, 234, 
 -	182, 252, 0, 253, 0, 254, 0, 255, 
 -	0, 256, 0, 257, 0, 258, 0, 259, 
 -	0, 260, 0, 261, 0, 262, 0, 263, 
 -	0, 264, 0, 265, 0, 266, 0, 267, 
 -	0, 268, 0, 269, 0, 270, 0, 272, 
 -	271, 272, 271, 272, 272, 4, 273, 287, 
 -	4, 288, 293, 287, 296, 292, 309, 314, 
 -	272, 271, 272, 274, 271, 272, 275, 271, 
 -	272, 276, 271, 272, 277, 271, 272, 278, 
 -	271, 272, 279, 271, 272, 280, 271, 272, 
 -	281, 271, 272, 282, 271, 272, 283, 271, 
 -	272, 284, 271, 272, 285, 271, 272, 286, 
 -	271, 272, 4, 271, 272, 68, 271, 272, 
 -	289, 271, 272, 290, 271, 272, 291, 271, 
 -	272, 292, 271, 272, 287, 271, 272, 294, 
 -	271, 272, 295, 271, 272, 287, 287, 287, 
 -	287, 271, 272, 297, 271, 272, 298, 271, 
 -	272, 299, 271, 272, 300, 271, 272, 301, 
 -	271, 272, 302, 271, 272, 303, 271, 272, 
 -	304, 271, 272, 305, 271, 272, 306, 271, 
 -	307, 272, 271, 308, 272, 271, 272, 68, 
 -	271, 272, 310, 271, 272, 311, 271, 272, 
 -	312, 271, 272, 313, 271, 272, 287, 271, 
 -	272, 315, 271, 272, 316, 271, 272, 317, 
 -	271, 272, 318, 271, 272, 319, 271, 272, 
 -	320, 271, 272, 308, 271, 321, 322, 321, 
 -	0, 326, 325, 324, 322, 325, 323, 0, 
 -	324, 322, 323, 0, 324, 323, 326, 325, 
 -	324, 322, 325, 323, 326, 326, 5, 15, 
 -	17, 31, 34, 37, 42, 69, 72, 94, 
 -	41, 168, 173, 321, 326, 0, 52, 328, 
 -	51, 52, 329, 51, 52, 330, 51, 52, 
 -	331, 51, 52, 67, 51, 52, 333, 51, 
 -	52, 334, 51, 52, 67, 67, 67, 67, 
 -	51, 52, 336, 51, 52, 337, 51, 52, 
 -	338, 51, 52, 339, 51, 52, 340, 51, 
 -	52, 341, 51, 52, 342, 51, 52, 343, 
 -	51, 52, 344, 51, 52, 345, 51, 346, 
 -	52, 51, 347, 52, 51, 52, 68, 51, 
 -	52, 349, 51, 52, 350, 51, 52, 351, 
 -	51, 52, 352, 51, 52, 67, 51, 52, 
 -	354, 51, 52, 355, 360, 51, 52, 356, 
 -	51, 52, 357, 51, 52, 358, 51, 52, 
 -	359, 51, 52, 347, 51, 52, 361, 51, 
 -	52, 362, 51, 52, 363, 51, 52, 364, 
 -	51, 52, 365, 51, 52, 366, 51, 52, 
 -	367, 51, 52, 368, 51, 52, 369, 51, 
 -	52, 370, 51, 52, 371, 51, 52, 372, 
 -	51, 52, 355, 51, 0, 0
 -};
 -
 -static const unsigned char _lexer_trans_actions[] = {
 -	0, 54, 0, 5, 1, 0, 29, 1, 
 -	29, 29, 29, 29, 29, 29, 29, 29, 
 -	35, 0, 43, 0, 43, 0, 43, 54, 
 -	0, 5, 1, 0, 29, 1, 29, 29, 
 -	29, 29, 29, 29, 29, 29, 35, 0, 
 -	43, 0, 43, 0, 43, 139, 48, 9, 
 -	106, 11, 0, 134, 45, 45, 45, 3, 
 -	122, 33, 33, 33, 0, 122, 33, 33, 
 -	33, 0, 122, 33, 0, 33, 0, 102, 
 -	7, 7, 43, 54, 0, 0, 43, 114, 
 -	25, 0, 54, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 149, 126, 57, 110, 23, 0, 
 -	43, 43, 43, 43, 0, 27, 118, 27, 
 -	27, 51, 27, 0, 54, 0, 1, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 144, 57, 54, 0, 54, 
 -	0, 72, 33, 84, 72, 84, 84, 84, 
 -	84, 84, 84, 84, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 15, 0, 
 -	54, 15, 0, 130, 31, 60, 57, 31, 
 -	63, 57, 63, 63, 63, 63, 63, 63, 
 -	63, 63, 66, 31, 43, 0, 43, 0, 
 -	43, 0, 0, 0, 0, 43, 0, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 144, 57, 54, 0, 54, 
 -	0, 81, 84, 81, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 0, 54, 0, 0, 
 -	54, 0, 54, 21, 0, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 144, 
 -	57, 54, 0, 54, 0, 69, 33, 69, 
 -	84, 84, 84, 84, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 13, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 13, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 0, 54, 0, 
 -	0, 54, 0, 54, 0, 0, 54, 0, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	144, 57, 54, 0, 54, 0, 75, 33, 
 -	84, 75, 84, 84, 84, 84, 84, 84, 
 -	84, 84, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 17, 0, 54, 17, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 17, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 0, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 0, 54, 0, 0, 54, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 144, 
 -	57, 54, 0, 54, 0, 78, 33, 84, 
 -	78, 84, 84, 84, 84, 84, 84, 84, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 19, 0, 54, 19, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 0, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	0, 54, 0, 0, 54, 0, 54, 19, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 0, 0, 0, 
 -	43, 54, 37, 37, 87, 37, 37, 43, 
 -	0, 39, 0, 43, 0, 0, 54, 0, 
 -	0, 39, 0, 0, 54, 0, 93, 90, 
 -	41, 96, 90, 96, 96, 96, 96, 96, 
 -	96, 96, 96, 99, 0, 43, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 0, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 0, 
 -	54, 0, 0, 54, 0, 54, 15, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 0, 0
 -};
 -
 -static const unsigned char _lexer_eof_actions[] = {
 -	0, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43
 -};
 -
 -static const int lexer_start = 1;
 -static const int lexer_first_final = 373;
 -static const int lexer_error = 0;
 -
 -static const int lexer_en_main = 1;
 -
 -
 -#line 258 "ragel/i18n/it.c.rl"
 -
 -static VALUE 
 -unindent(VALUE con, int start_col)
 -{
 -  VALUE re;
 -  /* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */
 -  char pat[32]; 
 -  snprintf(pat, 32, "^[\t ]{0,%d}", start_col); 
 -  re = rb_reg_regcomp(rb_str_new2(pat));
 -  rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2(""));
 -
 -  return Qnil;
 -
 -}
 -
 -static void 
 -store_kw_con(VALUE listener, const char * event_name, 
 -             const char * keyword_at, size_t keyword_length, 
 -             const char * at,         size_t length, 
 -             int current_line)
 -{
 -  VALUE con = Qnil, kw = Qnil;
 -  kw = ENCODED_STR_NEW(keyword_at, keyword_length);
 -  con = ENCODED_STR_NEW(at, length);
 -  rb_funcall(con, rb_intern("strip!"), 0);
 -  rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); 
 -}
 -
 -static void
 -store_multiline_kw_con(VALUE listener, const char * event_name,
 -                      const char * keyword_at, size_t keyword_length,
 -                      const char * at,         size_t length,
 -                      int current_line, int start_col)
 -{
 -  VALUE split;
 -  VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil;
 -
 -  kw = ENCODED_STR_NEW(keyword_at, keyword_length);
 -  con = ENCODED_STR_NEW(at, length);
 -
 -  unindent(con, start_col);
 -  
 -  split = rb_str_split(con, "\n");
 -
 -  name = rb_funcall(split, rb_intern("shift"), 0);
 -  desc = rb_ary_join(split, rb_str_new2( "\n" ));
 -
 -  if( name == Qnil ) 
 -  {
 -    name = rb_str_new2("");
 -  }
 -  if( rb_funcall(desc, rb_intern("size"), 0) == 0) 
 -  {
 -    desc = rb_str_new2("");
 -  }
 -  rb_funcall(name, rb_intern("strip!"), 0);
 -  rb_funcall(desc, rb_intern("rstrip!"), 0);
 -  rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); 
 -}
 -
 -static void 
 -store_attr(VALUE listener, const char * attr_type,
 -           const char * at, size_t length, 
 -           int line)
 -{
 -  VALUE val = ENCODED_STR_NEW(at, length);
 -  rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line));
 -}
 -static void 
 -store_docstring_content(VALUE listener, 
 -          int start_col, 
 -          const char *type_at, size_t type_length,
 -          const char *at, size_t length, 
 -          int current_line)
 -{
 -  VALUE re2;
 -  VALUE unescape_escaped_quotes;
 -  VALUE con = ENCODED_STR_NEW(at, length);
 -  VALUE con_type = ENCODED_STR_NEW(type_at, type_length);
 -
 -  unindent(con, start_col);
 -
 -  re2 = rb_reg_regcomp(rb_str_new2("\r\\Z"));
 -  unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\""));
 -  rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2(""));
 -  rb_funcall(con_type, rb_intern("strip!"), 0);
 -  rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\""));
 -  rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line));
 -}
 -static void 
 -raise_lexer_error(const char * at, int line)
 -{ 
 -  rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at);
 -}
 -
 -static void lexer_init(lexer_state *lexer) {
 -  lexer->content_start = 0;
 -  lexer->content_end = 0;
 -  lexer->content_len = 0;
 -  lexer->docstring_content_type_start = 0;
 -  lexer->docstring_content_type_end = 0;
 -  lexer->mark = 0;
 -  lexer->keyword_start = 0;
 -  lexer->keyword_end = 0;
 -  lexer->next_keyword_start = 0;
 -  lexer->line_number = 1;
 -  lexer->last_newline = 0;
 -  lexer->final_newline = 0;
 -  lexer->start_col = 0;
 -}
 -
 -static VALUE CLexer_alloc(VALUE klass)
 -{
 -  VALUE obj;
 -  lexer_state *lxr = ALLOC(lexer_state);
 -  lexer_init(lxr);
 -
 -  obj = Data_Wrap_Struct(klass, NULL, -1, lxr);
 -
 -  return obj;
 -}
 -
 -static VALUE CLexer_init(VALUE self, VALUE listener)
 -{
 -  lexer_state *lxr; 
 -  rb_iv_set(self, "@listener", listener);
 -  
 -  lxr = NULL;
 -  DATA_GET(self, lexer_state, lxr);
 -  lexer_init(lxr);
 -  
 -  return self;
 -}
 -
 -static VALUE CLexer_scan(VALUE self, VALUE input)
 -{
 -  VALUE input_copy;
 -  char *data;
 -  size_t len;
 -  VALUE listener = rb_iv_get(self, "@listener");
 -
 -  lexer_state *lexer;
 -  lexer = NULL;
 -  DATA_GET(self, lexer_state, lexer);
 -
 -  input_copy = rb_str_dup(input);
 -
 -  rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%"));
 -  data = RSTRING_PTR(input_copy);
 -  len = RSTRING_LEN(input_copy);
 -  
 -  if (len == 0) { 
 -    rb_raise(rb_eGherkinLexingError, "No content to lex.");
 -  } else {
 -
 -    const char *p, *pe, *eof;
 -    int cs = 0;
 -    
 -    VALUE current_row = Qnil;
 -
 -    p = data;
 -    pe = data + len;
 -    eof = pe;
 -    
 -    assert(*pe == '\0' && "pointer does not end on NULL");
 -    
 -    
 -#line 944 "ext/gherkin_lexer_it/gherkin_lexer_it.c"
 -	{
 -	cs = lexer_start;
 -	}
 -
 -#line 425 "ragel/i18n/it.c.rl"
 -    
 -#line 951 "ext/gherkin_lexer_it/gherkin_lexer_it.c"
 -	{
 -	int _klen;
 -	unsigned int _trans;
 -	const char *_acts;
 -	unsigned int _nacts;
 -	const char *_keys;
 -
 -	if ( p == pe )
 -		goto _test_eof;
 -	if ( cs == 0 )
 -		goto _out;
 -_resume:
 -	_keys = _lexer_trans_keys + _lexer_key_offsets[cs];
 -	_trans = _lexer_index_offsets[cs];
 -
 -	_klen = _lexer_single_lengths[cs];
 -	if ( _klen > 0 ) {
 -		const char *_lower = _keys;
 -		const char *_mid;
 -		const char *_upper = _keys + _klen - 1;
 -		while (1) {
 -			if ( _upper < _lower )
 -				break;
 -
 -			_mid = _lower + ((_upper-_lower) >> 1);
 -			if ( (*p) < *_mid )
 -				_upper = _mid - 1;
 -			else if ( (*p) > *_mid )
 -				_lower = _mid + 1;
 -			else {
 -				_trans += (unsigned int)(_mid - _keys);
 -				goto _match;
 -			}
 -		}
 -		_keys += _klen;
 -		_trans += _klen;
 -	}
 -
 -	_klen = _lexer_range_lengths[cs];
 -	if ( _klen > 0 ) {
 -		const char *_lower = _keys;
 -		const char *_mid;
 -		const char *_upper = _keys + (_klen<<1) - 2;
 -		while (1) {
 -			if ( _upper < _lower )
 -				break;
 -
 -			_mid = _lower + (((_upper-_lower) >> 1) & ~1);
 -			if ( (*p) < _mid[0] )
 -				_upper = _mid - 2;
 -			else if ( (*p) > _mid[1] )
 -				_lower = _mid + 2;
 -			else {
 -				_trans += (unsigned int)((_mid - _keys)>>1);
 -				goto _match;
 -			}
 -		}
 -		_trans += _klen;
 -	}
 -
 -_match:
 -	cs = _lexer_trans_targs[_trans];
 -
 -	if ( _lexer_trans_actions[_trans] == 0 )
 -		goto _again;
 -
 -	_acts = _lexer_actions + _lexer_trans_actions[_trans];
 -	_nacts = (unsigned int) *_acts++;
 -	while ( _nacts-- > 0 )
 -	{
 -		switch ( *_acts++ )
 -		{
 -	case 0:
 -#line 83 "ragel/i18n/it.c.rl"
 -	{
 -		MARK(content_start, p);
 -    lexer->current_line = lexer->line_number;
 -    lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2;
 -  }
 -	break;
 -	case 1:
 -#line 89 "ragel/i18n/it.c.rl"
 -	{
 -    MARK(content_start, p);
 -  }
 -	break;
 -	case 2:
 -#line 93 "ragel/i18n/it.c.rl"
 -	{
 -    lexer->current_line = lexer->line_number;
 -    lexer->start_col = p - data - lexer->last_newline;
 -  }
 -	break;
 -	case 3:
 -#line 98 "ragel/i18n/it.c.rl"
 -	{
 -    int len = LEN(content_start, PTR_TO(final_newline));
 -    int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end));
 -
 -    if (len < 0) len = 0;
 -    if (type_len < 0) len = 0;
 -
 -    store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line);
 -  }
 -	break;
 -	case 4:
 -#line 108 "ragel/i18n/it.c.rl"
 -	{ 
 -    MARK(docstring_content_type_start, p);
 -  }
 -	break;
 -	case 5:
 -#line 112 "ragel/i18n/it.c.rl"
 -	{ 
 -    MARK(docstring_content_type_end, p);
 -  }
 -	break;
 -	case 6:
 -#line 116 "ragel/i18n/it.c.rl"
 -	{
 -    STORE_KW_END_CON(feature);
 -  }
 -	break;
 -	case 7:
 -#line 120 "ragel/i18n/it.c.rl"
 -	{
 -    STORE_KW_END_CON(background);
 -  }
 -	break;
 -	case 8:
 -#line 124 "ragel/i18n/it.c.rl"
 -	{
 -    STORE_KW_END_CON(scenario);
 -  }
 -	break;
 -	case 9:
 -#line 128 "ragel/i18n/it.c.rl"
 -	{
 -    STORE_KW_END_CON(scenario_outline);
 -  }
 -	break;
 -	case 10:
 -#line 132 "ragel/i18n/it.c.rl"
 -	{
 -    STORE_KW_END_CON(examples);
 -  }
 -	break;
 -	case 11:
 -#line 136 "ragel/i18n/it.c.rl"
 -	{
 -    store_kw_con(listener, "step",
 -      PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
 -      PTR_TO(content_start), LEN(content_start, p), 
 -      lexer->current_line);
 -  }
 -	break;
 -	case 12:
 -#line 143 "ragel/i18n/it.c.rl"
 -	{
 -    STORE_ATTR(comment);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 13:
 -#line 148 "ragel/i18n/it.c.rl"
 -	{
 -    STORE_ATTR(tag);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 14:
 -#line 153 "ragel/i18n/it.c.rl"
 -	{
 -    lexer->line_number += 1;
 -    MARK(final_newline, p);
 -  }
 -	break;
 -	case 15:
 -#line 158 "ragel/i18n/it.c.rl"
 -	{
 -    MARK(last_newline, p + 1);
 -  }
 -	break;
 -	case 16:
 -#line 162 "ragel/i18n/it.c.rl"
 -	{
 -    if (lexer->mark == 0) {
 -      MARK(mark, p);
 -    }
 -  }
 -	break;
 -	case 17:
 -#line 168 "ragel/i18n/it.c.rl"
 -	{
 -    MARK(keyword_end, p);
 -    MARK(keyword_start, PTR_TO(mark));
 -    MARK(content_start, p + 1);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 18:
 -#line 175 "ragel/i18n/it.c.rl"
 -	{
 -    MARK(content_end, p);
 -  }
 -	break;
 -	case 19:
 -#line 179 "ragel/i18n/it.c.rl"
 -	{
 -    p = p - 1;
 -    lexer->current_line = lexer->line_number;
 -    current_row = rb_ary_new();
 -  }
 -	break;
 -	case 20:
 -#line 185 "ragel/i18n/it.c.rl"
 -	{
 -		MARK(content_start, p);
 -  }
 -	break;
 -	case 21:
 -#line 189 "ragel/i18n/it.c.rl"
 -	{
 -    VALUE re_pipe, re_newline, re_backslash;
 -    VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
 -    rb_funcall(con, rb_intern("strip!"), 0);
 -    re_pipe      = rb_reg_regcomp(rb_str_new2("\\\\\\|"));
 -    re_newline   = rb_reg_regcomp(rb_str_new2("\\\\n"));
 -    re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_pipe,      rb_str_new2("|"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_newline,   rb_str_new2("\n"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\"));
 -
 -    rb_ary_push(current_row, con);
 -  }
 -	break;
 -	case 22:
 -#line 203 "ragel/i18n/it.c.rl"
 -	{
 -    rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
 -  }
 -	break;
 -	case 23:
 -#line 207 "ragel/i18n/it.c.rl"
 -	{
 -    int line;
 -    if (cs < lexer_first_final) {
 -      size_t count = 0;
 -      VALUE newstr_val;
 -      char *newstr;
 -      int newstr_count = 0;        
 -      size_t len;
 -      const char *buff;
 -      if (lexer->last_newline != 0) {
 -        len = LEN(last_newline, eof);
 -        buff = PTR_TO(last_newline);
 -      } else {
 -        len = strlen(data);
 -        buff = data;
 -      }
 -
 -      /* Allocate as a ruby string so that it gets cleaned up by GC */
 -      newstr_val = rb_str_new(buff, len);
 -      newstr = RSTRING_PTR(newstr_val);
 -
 -
 -      for (count = 0; count < len; count++) {
 -        if(buff[count] == 10) {
 -          newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
 -          break;
 -        } else {
 -          if (buff[count] == '%') {
 -            newstr[newstr_count++] = buff[count];
 -            newstr[newstr_count] = buff[count];
 -          } else {
 -            newstr[newstr_count] = buff[count];
 -          }
 -        }
 -        newstr_count++;
 -      }
 -
 -      line = lexer->line_number;
 -      lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
 -      raise_lexer_error(newstr, line);
 -    } else {
 -      rb_funcall(listener, rb_intern("eof"), 0);
 -    }
 -  }
 -	break;
 -#line 1241 "ext/gherkin_lexer_it/gherkin_lexer_it.c"
 -		}
 -	}
 -
 -_again:
 -	if ( cs == 0 )
 -		goto _out;
 -	if ( ++p != pe )
 -		goto _resume;
 -	_test_eof: {}
 -	if ( p == eof )
 -	{
 -	const char *__acts = _lexer_actions + _lexer_eof_actions[cs];
 -	unsigned int __nacts = (unsigned int) *__acts++;
 -	while ( __nacts-- > 0 ) {
 -		switch ( *__acts++ ) {
 -	case 23:
 -#line 207 "ragel/i18n/it.c.rl"
 -	{
 -    int line;
 -    if (cs < lexer_first_final) {
 -      size_t count = 0;
 -      VALUE newstr_val;
 -      char *newstr;
 -      int newstr_count = 0;        
 -      size_t len;
 -      const char *buff;
 -      if (lexer->last_newline != 0) {
 -        len = LEN(last_newline, eof);
 -        buff = PTR_TO(last_newline);
 -      } else {
 -        len = strlen(data);
 -        buff = data;
 -      }
 -
 -      /* Allocate as a ruby string so that it gets cleaned up by GC */
 -      newstr_val = rb_str_new(buff, len);
 -      newstr = RSTRING_PTR(newstr_val);
 -
 -
 -      for (count = 0; count < len; count++) {
 -        if(buff[count] == 10) {
 -          newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
 -          break;
 -        } else {
 -          if (buff[count] == '%') {
 -            newstr[newstr_count++] = buff[count];
 -            newstr[newstr_count] = buff[count];
 -          } else {
 -            newstr[newstr_count] = buff[count];
 -          }
 -        }
 -        newstr_count++;
 -      }
 -
 -      line = lexer->line_number;
 -      lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
 -      raise_lexer_error(newstr, line);
 -    } else {
 -      rb_funcall(listener, rb_intern("eof"), 0);
 -    }
 -  }
 -	break;
 -#line 1304 "ext/gherkin_lexer_it/gherkin_lexer_it.c"
 -		}
 -	}
 -	}
 -
 -	_out: {}
 -	}
 -
 -#line 426 "ragel/i18n/it.c.rl"
 -
 -    assert(p <= pe && "data overflow after parsing execute");
 -    assert(lexer->content_start <= len && "content starts after data end");
 -    assert(lexer->mark < len && "mark is after data end");
 -    
 -    /* Reset lexer by re-initializing the whole thing */
 -    lexer_init(lexer);
 -
 -    if (cs == lexer_error) {
 -      rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails.");
 -    } else {
 -      return Qtrue;
 -    }
 -  }
 -}
 -
 -void Init_gherkin_lexer_it()
 -{
 -  mGherkin = rb_define_module("Gherkin");
 -  mGherkinLexer = rb_define_module_under(mGherkin, "Lexer");
 -  rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError"));
 -
 -  mCLexer = rb_define_module_under(mGherkin, "CLexer");
 -  cI18nLexer = rb_define_class_under(mCLexer, "It", rb_cObject);
 -  rb_define_alloc_func(cI18nLexer, CLexer_alloc);
 -  rb_define_method(cI18nLexer, "initialize", CLexer_init, 1);
 -  rb_define_method(cI18nLexer, "scan", CLexer_scan, 1);
 -}
 -
diff --cc ext/gherkin_lexer_ja/extconf.rb
index 0b49f61,0b49f61..0000000
deleted file mode 100644,100644
--- a/ext/gherkin_lexer_ja/extconf.rb
+++ /dev/null
@@@ -1,6 -1,6 +1,0 @@@
--require 'mkmf'
--CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags']
--$CFLAGS << ' -O0 -Wall' if CONFIG['CC'] =~ /gcc|clang/
--dir_config("gherkin_lexer_ja")
--have_library("c", "main")
--create_makefile("gherkin_lexer_ja")
diff --cc ext/gherkin_lexer_ja/gherkin_lexer_ja.c
index daf7eca,944b047..0000000
deleted file mode 100644,100644
--- a/ext/gherkin_lexer_ja/gherkin_lexer_ja.c
+++ /dev/null
@@@ -1,1699 -1,1699 +1,0 @@@
--
- #line 1 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ja.c.rl"
- #include <assert.h>
- #include <ruby.h>
- 
- #if defined(_WIN32)
- #include <stddef.h>
- #endif
- 
- #ifdef HAVE_RUBY_RE_H
- #include <ruby/re.h>
- #else
- #include <re.h>
- #endif
- 
- #ifdef HAVE_RUBY_ENCODING_H
- #include <ruby/encoding.h>
- #define ENCODED_STR_NEW(ptr, len) \
-     rb_enc_str_new(ptr, len, rb_utf8_encoding())
- #else
- #define ENCODED_STR_NEW(ptr, len) \
-     rb_str_new(ptr, len)
- #endif
- 
- #ifndef RSTRING_PTR
- #define RSTRING_PTR(s) (RSTRING(s)->ptr)
- #endif
- 
- #ifndef RSTRING_LEN
- #define RSTRING_LEN(s) (RSTRING(s)->len)
- #endif
- 
- #define DATA_GET(FROM, TYPE, NAME) \
-   Data_Get_Struct(FROM, TYPE, NAME); \
-   if (NAME == NULL) { \
-     rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \
-   }
-  
- typedef struct lexer_state {
-   int content_len;
-   int line_number;
-   int current_line;
-   int start_col;
-   size_t mark;
-   size_t keyword_start;
-   size_t keyword_end;
-   size_t next_keyword_start;
-   size_t content_start;
-   size_t content_end;
-   size_t docstring_content_type_start;
-   size_t docstring_content_type_end;
-   size_t query_start;
-   size_t last_newline;
-   size_t final_newline;
- } lexer_state;
- 
- static VALUE mGherkin;
- static VALUE mGherkinLexer;
- static VALUE mCLexer;
- static VALUE cI18nLexer;
- static VALUE rb_eGherkinLexingError;
- 
- #define LEN(AT, P) (P - data - lexer->AT)
- #define MARK(M, P) (lexer->M = (P) - data)
- #define PTR_TO(P) (data + lexer->P)
- 
- #define STORE_KW_END_CON(EVENT) \
-   store_multiline_kw_con(listener, # EVENT, \
-     PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \
-     PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \
-     lexer->current_line, lexer->start_col); \
-     if (lexer->content_end != 0) { \
-       p = PTR_TO(content_end - 1); \
-     } \
-     lexer->content_end = 0
- 
- #define STORE_ATTR(ATTR) \
-     store_attr(listener, # ATTR, \
-       PTR_TO(content_start), LEN(content_start, p), \
-       lexer->line_number)
- 
- 
- #line 254 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ja.c.rl"
- 
- 
- /** Data **/
- 
- #line 89 "ext/gherkin_lexer_ja/gherkin_lexer_ja.c"
- static const char _lexer_actions[] = {
- 	0, 1, 0, 1, 1, 1, 2, 1, 
- 	3, 1, 4, 1, 5, 1, 6, 1, 
- 	7, 1, 8, 1, 9, 1, 10, 1, 
- 	11, 1, 12, 1, 13, 1, 16, 1, 
- 	17, 1, 18, 1, 19, 1, 20, 1, 
- 	21, 1, 22, 1, 23, 2, 1, 18, 
- 	2, 4, 5, 2, 13, 0, 2, 14, 
- 	15, 2, 17, 0, 2, 17, 2, 2, 
- 	17, 16, 2, 17, 19, 2, 18, 6, 
- 	2, 18, 7, 2, 18, 8, 2, 18, 
- 	9, 2, 18, 10, 2, 18, 16, 2, 
- 	20, 21, 2, 22, 0, 2, 22, 2, 
- 	2, 22, 16, 2, 22, 19, 3, 3, 
- 	14, 15, 3, 5, 14, 15, 3, 11, 
- 	14, 15, 3, 12, 14, 15, 3, 13, 
- 	14, 15, 3, 14, 15, 18, 3, 17, 
- 	0, 11, 3, 17, 14, 15, 4, 1, 
- 	14, 15, 18, 4, 4, 5, 14, 15, 
- 	4, 17, 0, 14, 15, 5, 17, 0, 
- 	11, 14, 15
- };
- 
- static const short _lexer_key_offsets[] = {
- 	0, 0, 16, 19, 23, 24, 25, 26, 
- 	28, 30, 45, 47, 48, 49, 50, 51, 
- 	52, 53, 54, 55, 63, 65, 67, 69, 
- 	71, 73, 75, 77, 79, 81, 83, 85, 
- 	87, 89, 91, 93, 108, 109, 110, 111, 
- 	112, 113, 114, 115, 116, 117, 118, 119, 
- 	120, 121, 132, 135, 138, 140, 142, 144, 
- 	146, 148, 150, 152, 154, 156, 158, 160, 
- 	162, 164, 166, 168, 170, 172, 174, 176, 
- 	179, 182, 184, 186, 188, 190, 192, 194, 
- 	196, 198, 200, 202, 204, 206, 208, 210, 
- 	212, 214, 216, 218, 220, 222, 224, 226, 
- 	228, 230, 232, 234, 237, 239, 241, 243, 
- 	245, 247, 250, 252, 254, 256, 258, 260, 
- 	262, 264, 266, 268, 270, 272, 274, 276, 
- 	278, 280, 282, 284, 286, 288, 290, 292, 
- 	294, 296, 298, 300, 302, 304, 306, 308, 
- 	310, 312, 314, 316, 318, 320, 322, 324, 
- 	326, 328, 330, 332, 334, 336, 338, 340, 
- 	342, 344, 345, 346, 347, 348, 349, 350, 
- 	351, 352, 364, 368, 373, 375, 377, 379, 
- 	381, 383, 385, 387, 389, 391, 393, 395, 
- 	397, 399, 401, 403, 405, 407, 409, 412, 
- 	414, 416, 418, 420, 422, 424, 426, 428, 
- 	430, 433, 436, 438, 440, 442, 444, 446, 
- 	448, 450, 452, 454, 456, 458, 460, 462, 
- 	464, 466, 468, 470, 472, 474, 476, 478, 
- 	480, 482, 484, 486, 488, 490, 493, 495, 
- 	497, 499, 501, 503, 506, 508, 510, 512, 
- 	514, 516, 518, 520, 522, 524, 526, 528, 
- 	530, 532, 534, 536, 538, 540, 542, 544, 
- 	546, 548, 550, 552, 554, 556, 558, 560, 
- 	562, 564, 566, 568, 570, 572, 574, 576, 
- 	578, 580, 582, 584, 586, 588, 590, 592, 
- 	594, 596, 598, 600, 602, 603, 604, 606, 
- 	608, 613, 618, 623, 628, 632, 636, 638, 
- 	639, 640, 641, 642, 643, 644, 645, 646, 
- 	647, 648, 649, 650, 651, 652, 653, 654, 
- 	659, 666, 671, 675, 681, 684, 686, 692, 
- 	707, 709, 711, 713, 715, 717, 718, 719, 
- 	720, 721, 722, 723, 724, 725, 726, 727, 
- 	728, 729, 732, 733, 734, 735, 736, 737, 
- 	738, 739, 740, 741, 742, 743, 744, 745, 
- 	746, 747, 748, 749, 750, 752, 754, 755, 
- 	756, 757, 758, 759, 760, 761, 762, 763, 
- 	764, 765, 766, 767, 768, 769, 770, 771, 
- 	772, 773, 785, 789, 794, 796, 798, 800, 
- 	802, 804, 806, 808, 810, 812, 814, 816, 
- 	818, 820, 822, 824, 826, 828, 830, 833, 
- 	835, 837, 839, 841, 843, 845, 847, 849, 
- 	851, 853, 855, 857, 859, 861, 863, 865, 
- 	867, 869, 871, 873, 875, 877, 879, 881, 
- 	883, 885, 887, 889, 891, 893, 895, 897, 
- 	899, 901, 903, 905, 907, 909, 911, 913, 
- 	915, 917, 919, 921, 923, 925, 927, 929, 
- 	931, 933, 934, 935, 936, 937, 938, 939, 
- 	940, 941, 942, 943, 945, 946, 947, 948, 
- 	949, 950, 951, 952, 965, 969, 974, 976, 
- 	978, 980, 982, 984, 986, 988, 990, 992, 
- 	994, 996, 998, 1000, 1002, 1004, 1006, 1008, 
- 	1010, 1013, 1015, 1017, 1019, 1021, 1023, 1025, 
- 	1027, 1029, 1031, 1034, 1037, 1039, 1041, 1043, 
- 	1045, 1047, 1049, 1051, 1053, 1055, 1057, 1059, 
- 	1061, 1063, 1065, 1067, 1069, 1071, 1073, 1075, 
- 	1077, 1079, 1081, 1083, 1085, 1087, 1089, 1091, 
- 	1094, 1096, 1098, 1100, 1102, 1104, 1107, 1109, 
- 	1111, 1113, 1115, 1117, 1119, 1121, 1123, 1125, 
- 	1127, 1129, 1131, 1133, 1135, 1137, 1139, 1141, 
- 	1143, 1145, 1147, 1149, 1151, 1153, 1155, 1157, 
- 	1159, 1161, 1163, 1165, 1167, 1169, 1171, 1173, 
- 	1175, 1177, 1179, 1181, 1183, 1185, 1187, 1189, 
- 	1191, 1193, 1195, 1197, 1199, 1201, 1203, 1205, 
- 	1207, 1209, 1211, 1213, 1215, 1216, 1217, 1218, 
- 	1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 
- 	1227, 1228, 1229, 1230, 1231, 1232, 1233, 1234, 
- 	1235, 1236, 1237, 1238
- };
- 
- static const char _lexer_trans_keys[] = {
- 	-29, -28, -27, -26, -24, -17, 10, 32, 
- 	34, 35, 37, 42, 64, 124, 9, 13, 
- 	-127, -126, -125, -117, -105, -97, -86, -29, 
- 	-127, -92, 10, 13, 10, 13, -29, -28, 
- 	-27, -26, -24, 10, 32, 34, 35, 37, 
- 	42, 64, 124, 9, 13, -67, -66, -122, 
- 	-29, -127, -105, -117, 58, 10, 10, -29, 
- 	-26, 10, 32, 35, 124, 9, 13, -125, 
- 	10, -107, 10, -29, 10, -126, 10, -93, 
- 	10, -29, 10, -125, 10, -68, 10, -29, 
- 	10, -125, 10, -127, 10, -29, 10, -125, 
- 	10, -93, 10, 10, 58, -29, -28, -27, 
- 	-26, -24, 10, 32, 34, 35, 37, 42, 
- 	64, 124, 9, 13, -119, -115, -26, -113, 
- 	-112, -87, -97, -24, -125, -67, 58, 10, 
- 	10, -29, -28, -26, -24, 10, 32, 35, 
- 	37, 64, 9, 13, -126, -125, 10, -75, 
- 	-73, 10, -29, 10, -125, 10, -77, 10, 
- 	-29, 10, -125, 10, -105, 10, -29, 10, 
- 	-125, 10, -85, 10, 10, 58, -29, 10, 
- 	-125, 10, -118, 10, -29, 10, -125, 10, 
- 	-86, 10, -29, 10, -126, 10, -86, 10, 
- 	-29, 10, 58, -126, -125, 10, -94, 10, 
- 	-29, 10, -126, 10, -90, 10, -29, 10, 
- 	-125, 10, -120, 10, -29, 10, -125, 10, 
- 	-87, 10, -29, 10, -126, 10, -92, 10, 
- 	-29, 10, -125, 10, -77, 10, -122, 10, 
- 	-29, 10, -125, 10, -77, 10, -29, 10, 
- 	-125, 10, -105, 10, -29, 10, -125, 10, 
- 	-84, 10, -29, 10, 58, -125, 10, -68, 
- 	10, -29, 10, -125, 10, -120, 10, -122, 
- 	-107, 10, -29, 10, -125, 10, -77, 10, 
- 	-29, 10, -125, 10, -105, 10, -29, 10, 
- 	-125, 10, -84, 10, -29, 10, -126, 10, 
- 	-93, 10, -29, 10, -125, 10, -68, 10, 
- 	-29, 10, -125, 10, -127, 10, -29, 10, 
- 	-125, 10, -93, 10, -66, 10, -117, 10, 
- 	-87, 10, -97, 10, -24, 10, -125, 10, 
- 	-67, 10, -125, 10, -116, 10, -26, 10, 
- 	-103, 10, -81, 10, 10, 95, 10, 70, 
- 	10, 69, 10, 65, 10, 84, 10, 85, 
- 	10, 82, 10, 69, 10, 95, 10, 69, 
- 	10, 78, 10, 68, 10, 95, 10, 37, 
- 	-125, -116, -26, -103, -81, 58, 10, 10, 
- 	-29, -28, -27, -26, 10, 32, 35, 37, 
- 	42, 64, 9, 13, -127, -126, -125, 10, 
- 	-117, -105, -97, -86, 10, -29, 10, -127, 
- 	10, -92, 10, -29, 10, -127, 10, -117, 
- 	10, -29, 10, -127, 10, -105, 10, -29, 
- 	10, -127, 10, -96, 10, -29, 10, -126, 
- 	10, -119, 10, -29, 10, -127, 10, -80, 
- 	10, -126, -73, 10, -29, 10, -125, 10, 
- 	-118, 10, -29, 10, -125, 10, -86, 10, 
- 	-29, 10, -126, 10, -86, 10, -29, 10, 
- 	58, -126, -125, 10, -94, 10, -29, 10, 
- 	-126, 10, -90, 10, -29, 10, -125, 10, 
- 	-120, 10, -29, 10, -125, 10, -87, 10, 
- 	-29, 10, -126, 10, -92, 10, -29, 10, 
- 	-125, 10, -77, 10, 10, 58, -122, 10, 
- 	-29, 10, -125, 10, -77, 10, -29, 10, 
- 	-125, 10, -105, 10, -29, 10, -125, 10, 
- 	-84, 10, -29, 10, 58, -125, 10, -68, 
- 	10, -29, 10, -125, 10, -120, 10, -122, 
- 	-107, 10, -29, 10, -125, 10, -77, 10, 
- 	-29, 10, -125, 10, -105, 10, -29, 10, 
- 	-125, 10, -84, 10, -29, 10, -126, 10, 
- 	-93, 10, -29, 10, -125, 10, -68, 10, 
- 	-29, 10, -125, 10, -127, 10, -29, 10, 
- 	-125, 10, -93, 10, -67, 10, -122, 10, 
- 	-119, 10, -115, 10, -26, 10, -113, 10, 
- 	-112, 10, -87, 10, -97, 10, -24, 10, 
- 	-125, 10, -67, 10, 10, 95, 10, 70, 
- 	10, 69, 10, 65, 10, 84, 10, 85, 
- 	10, 82, 10, 69, 10, 95, 10, 69, 
- 	10, 78, 10, 68, 10, 95, 10, 37, 
- 	10, 32, 34, 34, 10, 13, 10, 13, 
- 	10, 32, 34, 9, 13, 10, 32, 34, 
- 	9, 13, 10, 32, 34, 9, 13, 10, 
- 	32, 34, 9, 13, 10, 32, 9, 13, 
- 	10, 32, 9, 13, 10, 13, 10, 95, 
- 	70, 69, 65, 84, 85, 82, 69, 95, 
- 	69, 78, 68, 95, 37, 32, 13, 32, 
- 	64, 9, 10, 9, 10, 13, 32, 64, 
- 	11, 12, 10, 32, 64, 9, 13, 32, 
- 	124, 9, 13, 10, 32, 92, 124, 9, 
- 	13, 10, 92, 124, 10, 92, 10, 32, 
- 	92, 124, 9, 13, -29, -28, -27, -26, 
- 	-24, 10, 32, 34, 35, 37, 42, 64, 
- 	124, 9, 13, -87, 10, -97, 10, -24, 
- 	10, -125, 10, -67, 10, -29, -127, -117, 
- 	-29, -127, -96, -29, -126, -119, -29, -127, 
- 	-80, -126, -75, -73, -29, -125, -77, -29, 
- 	-125, -105, -29, -125, -85, -29, -125, -118, 
- 	-29, -125, -86, -29, -126, -86, -29, 58, 
- 	-126, -125, -94, -29, -126, -90, -29, -125, 
- 	-120, -29, -125, -87, -29, -126, -92, -29, 
- 	-125, -77, 58, 10, 10, -29, -28, -27, 
- 	-26, 10, 32, 35, 37, 42, 64, 9, 
- 	13, -127, -126, -125, 10, -117, -105, -97, 
- 	-86, 10, -29, 10, -127, 10, -92, 10, 
- 	-29, 10, -127, 10, -117, 10, -29, 10, 
- 	-127, 10, -105, 10, -29, 10, -127, 10, 
- 	-96, 10, -29, 10, -126, 10, -119, 10, 
- 	-29, 10, -127, 10, -80, 10, -126, -73, 
- 	10, -29, 10, -125, 10, -118, 10, -29, 
- 	10, -125, 10, -86, 10, -29, 10, -126, 
- 	10, -86, 10, 10, 58, -107, 10, -29, 
- 	10, -126, 10, -93, 10, -29, 10, -125, 
- 	10, -68, 10, -29, 10, -125, 10, -127, 
- 	10, -29, 10, -125, 10, -93, 10, -67, 
- 	10, -122, 10, -119, 10, -115, 10, -26, 
- 	10, -113, 10, -112, 10, -87, 10, -97, 
- 	10, -24, 10, -125, 10, -67, 10, 10, 
- 	95, 10, 70, 10, 69, 10, 65, 10, 
- 	84, 10, 85, 10, 82, 10, 69, 10, 
- 	95, 10, 69, 10, 78, 10, 68, 10, 
- 	95, 10, 37, 10, 32, -122, -29, -125, 
- 	-77, -29, -125, -105, -29, -125, -84, -29, 
- 	58, -125, -68, -29, -125, -120, 10, 10, 
- 	-29, -28, -27, -26, -24, 10, 32, 35, 
- 	37, 42, 64, 9, 13, -127, -126, -125, 
- 	10, -117, -105, -97, -86, 10, -29, 10, 
- 	-127, 10, -92, 10, -29, 10, -127, 10, 
- 	-117, 10, -29, 10, -127, 10, -105, 10, 
- 	-29, 10, -127, 10, -96, 10, -29, 10, 
- 	-126, 10, -119, 10, -29, 10, -127, 10, 
- 	-80, 10, -126, -73, 10, -29, 10, -125, 
- 	10, -118, 10, -29, 10, -125, 10, -86, 
- 	10, -29, 10, -126, 10, -86, 10, -29, 
- 	10, 58, -126, -125, 10, -94, 10, -29, 
- 	10, -126, 10, -90, 10, -29, 10, -125, 
- 	10, -120, 10, -29, 10, -125, 10, -87, 
- 	10, -29, 10, -126, 10, -92, 10, -29, 
- 	10, -125, 10, -77, 10, 10, 58, -122, 
- 	10, -29, 10, -125, 10, -77, 10, -29, 
- 	10, -125, 10, -105, 10, -29, 10, -125, 
- 	10, -84, 10, -29, 10, 58, -125, 10, 
- 	-68, 10, -29, 10, -125, 10, -120, 10, 
- 	-122, -107, 10, -29, 10, -125, 10, -77, 
- 	10, -29, 10, -125, 10, -105, 10, -29, 
- 	10, -125, 10, -84, 10, -29, 10, -126, 
- 	10, -93, 10, -29, 10, -125, 10, -68, 
- 	10, -29, 10, -125, 10, -127, 10, -29, 
- 	10, -125, 10, -93, 10, -67, 10, -122, 
- 	10, -119, 10, -115, 10, -26, 10, -113, 
- 	10, -112, 10, -87, 10, -97, 10, -24, 
- 	10, -125, 10, -67, 10, -125, 10, -116, 
- 	10, -26, 10, -103, 10, -81, 10, 10, 
- 	95, 10, 70, 10, 69, 10, 65, 10, 
- 	84, 10, 85, 10, 82, 10, 69, 10, 
- 	95, 10, 69, 10, 78, 10, 68, 10, 
- 	95, 10, 37, 10, 32, -122, -107, -29, 
- 	-125, -77, -29, -125, -105, -29, -125, -84, 
- 	-29, -126, -93, -29, -125, -68, -29, -125, 
- 	-127, -29, -125, -93, -69, -65, 0
- };
- 
- static const char _lexer_single_lengths[] = {
- 	0, 14, 3, 4, 1, 1, 1, 2, 
- 	2, 13, 2, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 6, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 13, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 9, 3, 3, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 3, 
- 	3, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 3, 2, 2, 2, 2, 
- 	2, 3, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 10, 4, 5, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 3, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	3, 3, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 3, 2, 2, 
- 	2, 2, 2, 3, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 1, 1, 2, 2, 
- 	3, 3, 3, 3, 2, 2, 2, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 3, 
- 	5, 3, 2, 4, 3, 2, 4, 13, 
- 	2, 2, 2, 2, 2, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 3, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 2, 2, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 10, 4, 5, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 3, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 2, 1, 1, 1, 1, 
- 	1, 1, 1, 11, 4, 5, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	3, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 3, 3, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 3, 
- 	2, 2, 2, 2, 2, 3, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 0
- };
- 
- static const char _lexer_range_lengths[] = {
- 	0, 1, 0, 0, 0, 0, 0, 0, 
- 	0, 1, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 1, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 1, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 1, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 1, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	1, 1, 1, 1, 1, 1, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 1, 
- 	1, 1, 1, 1, 0, 0, 1, 1, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 1, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 1, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0
- };
- 
- static const short _lexer_index_offsets[] = {
- 	0, 0, 16, 20, 25, 27, 29, 31, 
- 	34, 37, 52, 55, 57, 59, 61, 63, 
- 	65, 67, 69, 71, 79, 82, 85, 88, 
- 	91, 94, 97, 100, 103, 106, 109, 112, 
- 	115, 118, 121, 124, 139, 141, 143, 145, 
- 	147, 149, 151, 153, 155, 157, 159, 161, 
- 	163, 165, 176, 180, 184, 187, 190, 193, 
- 	196, 199, 202, 205, 208, 211, 214, 217, 
- 	220, 223, 226, 229, 232, 235, 238, 241, 
- 	245, 249, 252, 255, 258, 261, 264, 267, 
- 	270, 273, 276, 279, 282, 285, 288, 291, 
- 	294, 297, 300, 303, 306, 309, 312, 315, 
- 	318, 321, 324, 327, 331, 334, 337, 340, 
- 	343, 346, 350, 353, 356, 359, 362, 365, 
- 	368, 371, 374, 377, 380, 383, 386, 389, 
- 	392, 395, 398, 401, 404, 407, 410, 413, 
- 	416, 419, 422, 425, 428, 431, 434, 437, 
- 	440, 443, 446, 449, 452, 455, 458, 461, 
- 	464, 467, 470, 473, 476, 479, 482, 485, 
- 	488, 491, 493, 495, 497, 499, 501, 503, 
- 	505, 507, 519, 524, 530, 533, 536, 539, 
- 	542, 545, 548, 551, 554, 557, 560, 563, 
- 	566, 569, 572, 575, 578, 581, 584, 588, 
- 	591, 594, 597, 600, 603, 606, 609, 612, 
- 	615, 619, 623, 626, 629, 632, 635, 638, 
- 	641, 644, 647, 650, 653, 656, 659, 662, 
- 	665, 668, 671, 674, 677, 680, 683, 686, 
- 	689, 692, 695, 698, 701, 704, 708, 711, 
- 	714, 717, 720, 723, 727, 730, 733, 736, 
- 	739, 742, 745, 748, 751, 754, 757, 760, 
- 	763, 766, 769, 772, 775, 778, 781, 784, 
- 	787, 790, 793, 796, 799, 802, 805, 808, 
- 	811, 814, 817, 820, 823, 826, 829, 832, 
- 	835, 838, 841, 844, 847, 850, 853, 856, 
- 	859, 862, 865, 868, 871, 873, 875, 878, 
- 	881, 886, 891, 896, 901, 905, 909, 912, 
- 	914, 916, 918, 920, 922, 924, 926, 928, 
- 	930, 932, 934, 936, 938, 940, 942, 944, 
- 	949, 956, 961, 965, 971, 975, 978, 984, 
- 	999, 1002, 1005, 1008, 1011, 1014, 1016, 1018, 
- 	1020, 1022, 1024, 1026, 1028, 1030, 1032, 1034, 
- 	1036, 1038, 1042, 1044, 1046, 1048, 1050, 1052, 
- 	1054, 1056, 1058, 1060, 1062, 1064, 1066, 1068, 
- 	1070, 1072, 1074, 1076, 1078, 1081, 1084, 1086, 
- 	1088, 1090, 1092, 1094, 1096, 1098, 1100, 1102, 
- 	1104, 1106, 1108, 1110, 1112, 1114, 1116, 1118, 
- 	1120, 1122, 1134, 1139, 1145, 1148, 1151, 1154, 
- 	1157, 1160, 1163, 1166, 1169, 1172, 1175, 1178, 
- 	1181, 1184, 1187, 1190, 1193, 1196, 1199, 1203, 
- 	1206, 1209, 1212, 1215, 1218, 1221, 1224, 1227, 
- 	1230, 1233, 1236, 1239, 1242, 1245, 1248, 1251, 
- 	1254, 1257, 1260, 1263, 1266, 1269, 1272, 1275, 
- 	1278, 1281, 1284, 1287, 1290, 1293, 1296, 1299, 
- 	1302, 1305, 1308, 1311, 1314, 1317, 1320, 1323, 
- 	1326, 1329, 1332, 1335, 1338, 1341, 1344, 1347, 
- 	1350, 1353, 1355, 1357, 1359, 1361, 1363, 1365, 
- 	1367, 1369, 1371, 1373, 1376, 1378, 1380, 1382, 
- 	1384, 1386, 1388, 1390, 1403, 1408, 1414, 1417, 
- 	1420, 1423, 1426, 1429, 1432, 1435, 1438, 1441, 
- 	1444, 1447, 1450, 1453, 1456, 1459, 1462, 1465, 
- 	1468, 1472, 1475, 1478, 1481, 1484, 1487, 1490, 
- 	1493, 1496, 1499, 1503, 1507, 1510, 1513, 1516, 
- 	1519, 1522, 1525, 1528, 1531, 1534, 1537, 1540, 
- 	1543, 1546, 1549, 1552, 1555, 1558, 1561, 1564, 
- 	1567, 1570, 1573, 1576, 1579, 1582, 1585, 1588, 
- 	1592, 1595, 1598, 1601, 1604, 1607, 1611, 1614, 
- 	1617, 1620, 1623, 1626, 1629, 1632, 1635, 1638, 
- 	1641, 1644, 1647, 1650, 1653, 1656, 1659, 1662, 
- 	1665, 1668, 1671, 1674, 1677, 1680, 1683, 1686, 
- 	1689, 1692, 1695, 1698, 1701, 1704, 1707, 1710, 
- 	1713, 1716, 1719, 1722, 1725, 1728, 1731, 1734, 
- 	1737, 1740, 1743, 1746, 1749, 1752, 1755, 1758, 
- 	1761, 1764, 1767, 1770, 1773, 1775, 1777, 1779, 
- 	1781, 1783, 1785, 1787, 1789, 1791, 1793, 1795, 
- 	1797, 1799, 1801, 1803, 1805, 1807, 1809, 1811, 
- 	1813, 1815, 1817, 1819
- };
- 
- static const short _lexer_trans_targs[] = {
- 	2, 10, 36, 41, 153, 601, 9, 9, 
- 	276, 286, 288, 302, 303, 306, 9, 0, 
- 	3, 329, 579, 0, 4, 317, 320, 323, 
- 	0, 5, 0, 6, 0, 7, 0, 9, 
- 	287, 8, 9, 287, 8, 2, 10, 36, 
- 	41, 153, 9, 9, 276, 286, 288, 302, 
- 	303, 306, 9, 0, 11, 15, 0, 12, 
- 	0, 13, 0, 14, 0, 7, 0, 16, 
- 	0, 17, 0, 19, 18, 19, 18, 20, 
- 	312, 19, 19, 9, 9, 19, 18, 21, 
- 	19, 18, 22, 19, 18, 23, 19, 18, 
- 	24, 19, 18, 25, 19, 18, 26, 19, 
- 	18, 27, 19, 18, 28, 19, 18, 29, 
- 	19, 18, 30, 19, 18, 31, 19, 18, 
- 	32, 19, 18, 33, 19, 18, 34, 19, 
- 	18, 19, 35, 18, 2, 10, 36, 41, 
- 	153, 9, 9, 276, 286, 288, 302, 303, 
- 	306, 9, 0, 37, 0, 38, 0, 39, 
- 	0, 40, 0, 7, 0, 42, 0, 43, 
- 	0, 44, 0, 45, 0, 46, 0, 47, 
- 	0, 49, 48, 49, 48, 50, 127, 129, 
- 	134, 49, 49, 9, 139, 9, 49, 48, 
- 	51, 105, 49, 48, 52, 62, 49, 48, 
- 	53, 49, 48, 54, 49, 48, 55, 49, 
- 	48, 56, 49, 48, 57, 49, 48, 58, 
- 	49, 48, 59, 49, 48, 60, 49, 48, 
- 	61, 49, 48, 49, 35, 48, 63, 49, 
- 	48, 64, 49, 48, 65, 49, 48, 66, 
- 	49, 48, 67, 49, 48, 68, 49, 48, 
- 	69, 49, 48, 70, 49, 48, 71, 49, 
- 	48, 72, 49, 35, 48, 73, 89, 49, 
- 	48, 74, 49, 48, 75, 49, 48, 76, 
- 	49, 48, 77, 49, 48, 78, 49, 48, 
- 	79, 49, 48, 80, 49, 48, 81, 49, 
- 	48, 82, 49, 48, 83, 49, 48, 84, 
- 	49, 48, 85, 49, 48, 86, 49, 48, 
- 	87, 49, 48, 88, 49, 48, 61, 49, 
- 	48, 90, 49, 48, 91, 49, 48, 92, 
- 	49, 48, 93, 49, 48, 94, 49, 48, 
- 	95, 49, 48, 96, 49, 48, 97, 49, 
- 	48, 98, 49, 48, 99, 49, 48, 100, 
- 	49, 35, 48, 101, 49, 48, 102, 49, 
- 	48, 103, 49, 48, 104, 49, 48, 61, 
- 	49, 48, 106, 115, 49, 48, 107, 49, 
- 	48, 108, 49, 48, 109, 49, 48, 110, 
- 	49, 48, 111, 49, 48, 112, 49, 48, 
- 	113, 49, 48, 114, 49, 48, 61, 49, 
- 	48, 116, 49, 48, 117, 49, 48, 118, 
- 	49, 48, 119, 49, 48, 120, 49, 48, 
- 	121, 49, 48, 122, 49, 48, 123, 49, 
- 	48, 124, 49, 48, 125, 49, 48, 126, 
- 	49, 48, 61, 49, 48, 128, 49, 48, 
- 	61, 49, 48, 130, 49, 48, 131, 49, 
- 	48, 132, 49, 48, 133, 49, 48, 61, 
- 	49, 48, 135, 49, 48, 136, 49, 48, 
- 	137, 49, 48, 138, 49, 48, 61, 49, 
- 	48, 49, 140, 48, 49, 141, 48, 49, 
- 	142, 48, 49, 143, 48, 49, 144, 48, 
- 	49, 145, 48, 49, 146, 48, 49, 147, 
- 	48, 49, 148, 48, 49, 149, 48, 49, 
- 	150, 48, 49, 151, 48, 49, 152, 48, 
- 	49, 9, 48, 154, 0, 155, 0, 156, 
- 	0, 157, 0, 158, 0, 159, 0, 161, 
- 	160, 161, 160, 162, 249, 251, 256, 161, 
- 	161, 9, 261, 275, 9, 161, 160, 163, 
- 	182, 227, 161, 160, 164, 167, 173, 176, 
- 	161, 160, 165, 161, 160, 166, 161, 160, 
- 	35, 161, 160, 168, 161, 160, 169, 161, 
- 	160, 170, 161, 160, 171, 161, 160, 172, 
- 	161, 160, 35, 161, 160, 174, 161, 160, 
- 	175, 161, 160, 170, 161, 160, 177, 161, 
- 	160, 178, 161, 160, 179, 161, 160, 180, 
- 	161, 160, 181, 161, 160, 35, 161, 160, 
- 	170, 183, 161, 160, 184, 161, 160, 185, 
- 	161, 160, 186, 161, 160, 187, 161, 160, 
- 	188, 161, 160, 189, 161, 160, 190, 161, 
- 	160, 191, 161, 160, 192, 161, 160, 193, 
- 	161, 35, 160, 194, 211, 161, 160, 195, 
- 	161, 160, 196, 161, 160, 197, 161, 160, 
- 	198, 161, 160, 199, 161, 160, 200, 161, 
- 	160, 201, 161, 160, 202, 161, 160, 203, 
- 	161, 160, 204, 161, 160, 205, 161, 160, 
- 	206, 161, 160, 207, 161, 160, 208, 161, 
- 	160, 209, 161, 160, 210, 161, 160, 161, 
- 	35, 160, 212, 161, 160, 213, 161, 160, 
- 	214, 161, 160, 215, 161, 160, 216, 161, 
- 	160, 217, 161, 160, 218, 161, 160, 219, 
- 	161, 160, 220, 161, 160, 221, 161, 160, 
- 	222, 161, 35, 160, 223, 161, 160, 224, 
- 	161, 160, 225, 161, 160, 226, 161, 160, 
- 	210, 161, 160, 228, 237, 161, 160, 229, 
- 	161, 160, 230, 161, 160, 231, 161, 160, 
- 	232, 161, 160, 233, 161, 160, 234, 161, 
- 	160, 235, 161, 160, 236, 161, 160, 210, 
- 	161, 160, 238, 161, 160, 239, 161, 160, 
- 	240, 161, 160, 241, 161, 160, 242, 161, 
- 	160, 243, 161, 160, 244, 161, 160, 245, 
- 	161, 160, 246, 161, 160, 247, 161, 160, 
- 	248, 161, 160, 210, 161, 160, 250, 161, 
- 	160, 170, 161, 160, 252, 161, 160, 253, 
- 	161, 160, 254, 161, 160, 255, 161, 160, 
- 	35, 161, 160, 257, 161, 160, 258, 161, 
- 	160, 259, 161, 160, 260, 161, 160, 210, 
- 	161, 160, 161, 262, 160, 161, 263, 160, 
- 	161, 264, 160, 161, 265, 160, 161, 266, 
- 	160, 161, 267, 160, 161, 268, 160, 161, 
- 	269, 160, 161, 270, 160, 161, 271, 160, 
- 	161, 272, 160, 161, 273, 160, 161, 274, 
- 	160, 161, 9, 160, 161, 35, 160, 277, 
- 	0, 278, 0, 280, 279, 279, 280, 279, 
- 	279, 281, 281, 282, 281, 281, 281, 281, 
- 	282, 281, 281, 281, 281, 283, 281, 281, 
- 	281, 281, 284, 281, 281, 9, 285, 285, 
- 	0, 9, 285, 285, 0, 9, 287, 286, 
- 	9, 0, 289, 0, 290, 0, 291, 0, 
- 	292, 0, 293, 0, 294, 0, 295, 0, 
- 	296, 0, 297, 0, 298, 0, 299, 0, 
- 	300, 0, 301, 0, 603, 0, 7, 0, 
- 	0, 0, 0, 0, 304, 305, 9, 305, 
- 	305, 303, 304, 304, 9, 305, 303, 305, 
- 	0, 306, 307, 306, 0, 311, 310, 309, 
- 	307, 310, 308, 0, 309, 307, 308, 0, 
- 	309, 308, 311, 310, 309, 307, 310, 308, 
- 	2, 10, 36, 41, 153, 311, 311, 276, 
- 	286, 288, 302, 303, 306, 311, 0, 313, 
- 	19, 18, 314, 19, 18, 315, 19, 18, 
- 	316, 19, 18, 34, 19, 18, 318, 0, 
- 	319, 0, 12, 0, 321, 0, 322, 0, 
- 	12, 0, 324, 0, 325, 0, 326, 0, 
- 	327, 0, 328, 0, 7, 0, 12, 330, 
- 	339, 0, 331, 0, 332, 0, 333, 0, 
- 	334, 0, 335, 0, 336, 0, 337, 0, 
- 	338, 0, 16, 0, 340, 0, 341, 0, 
- 	342, 0, 343, 0, 344, 0, 345, 0, 
- 	346, 0, 347, 0, 348, 0, 349, 457, 
- 	0, 350, 441, 0, 351, 0, 352, 0, 
- 	353, 0, 354, 0, 355, 0, 356, 0, 
- 	357, 0, 358, 0, 359, 0, 360, 0, 
- 	361, 0, 362, 0, 363, 0, 364, 0, 
- 	365, 0, 366, 0, 367, 0, 369, 368, 
- 	369, 368, 370, 414, 416, 421, 369, 369, 
- 	9, 426, 440, 9, 369, 368, 371, 390, 
- 	401, 369, 368, 372, 375, 381, 384, 369, 
- 	368, 373, 369, 368, 374, 369, 368, 35, 
- 	369, 368, 376, 369, 368, 377, 369, 368, 
- 	378, 369, 368, 379, 369, 368, 380, 369, 
- 	368, 35, 369, 368, 382, 369, 368, 383, 
- 	369, 368, 378, 369, 368, 385, 369, 368, 
- 	386, 369, 368, 387, 369, 368, 388, 369, 
- 	368, 389, 369, 368, 35, 369, 368, 378, 
- 	391, 369, 368, 392, 369, 368, 393, 369, 
- 	368, 394, 369, 368, 395, 369, 368, 396, 
- 	369, 368, 397, 369, 368, 398, 369, 368, 
- 	399, 369, 368, 400, 369, 368, 369, 35, 
- 	368, 402, 369, 368, 403, 369, 368, 404, 
- 	369, 368, 405, 369, 368, 406, 369, 368, 
- 	407, 369, 368, 408, 369, 368, 409, 369, 
- 	368, 410, 369, 368, 411, 369, 368, 412, 
- 	369, 368, 413, 369, 368, 400, 369, 368, 
- 	415, 369, 368, 378, 369, 368, 417, 369, 
- 	368, 418, 369, 368, 419, 369, 368, 420, 
- 	369, 368, 35, 369, 368, 422, 369, 368, 
- 	423, 369, 368, 424, 369, 368, 425, 369, 
- 	368, 400, 369, 368, 369, 427, 368, 369, 
- 	428, 368, 369, 429, 368, 369, 430, 368, 
- 	369, 431, 368, 369, 432, 368, 369, 433, 
- 	368, 369, 434, 368, 369, 435, 368, 369, 
- 	436, 368, 369, 437, 368, 369, 438, 368, 
- 	369, 439, 368, 369, 9, 368, 369, 35, 
- 	368, 442, 0, 443, 0, 444, 0, 445, 
- 	0, 446, 0, 447, 0, 448, 0, 449, 
- 	0, 450, 0, 451, 0, 452, 367, 0, 
- 	453, 0, 454, 0, 455, 0, 456, 0, 
- 	366, 0, 459, 458, 459, 458, 460, 547, 
- 	549, 554, 559, 459, 459, 9, 564, 578, 
- 	9, 459, 458, 461, 480, 525, 459, 458, 
- 	462, 465, 471, 474, 459, 458, 463, 459, 
- 	458, 464, 459, 458, 35, 459, 458, 466, 
- 	459, 458, 467, 459, 458, 468, 459, 458, 
- 	469, 459, 458, 470, 459, 458, 35, 459, 
- 	458, 472, 459, 458, 473, 459, 458, 468, 
- 	459, 458, 475, 459, 458, 476, 459, 458, 
- 	477, 459, 458, 478, 459, 458, 479, 459, 
- 	458, 35, 459, 458, 468, 481, 459, 458, 
- 	482, 459, 458, 483, 459, 458, 484, 459, 
- 	458, 485, 459, 458, 486, 459, 458, 487, 
- 	459, 458, 488, 459, 458, 489, 459, 458, 
- 	490, 459, 458, 491, 459, 35, 458, 492, 
- 	509, 459, 458, 493, 459, 458, 494, 459, 
- 	458, 495, 459, 458, 496, 459, 458, 497, 
- 	459, 458, 498, 459, 458, 499, 459, 458, 
- 	500, 459, 458, 501, 459, 458, 502, 459, 
- 	458, 503, 459, 458, 504, 459, 458, 505, 
- 	459, 458, 506, 459, 458, 507, 459, 458, 
- 	508, 459, 458, 459, 35, 458, 510, 459, 
- 	458, 511, 459, 458, 512, 459, 458, 513, 
- 	459, 458, 514, 459, 458, 515, 459, 458, 
- 	516, 459, 458, 517, 459, 458, 518, 459, 
- 	458, 519, 459, 458, 520, 459, 35, 458, 
- 	521, 459, 458, 522, 459, 458, 523, 459, 
- 	458, 524, 459, 458, 508, 459, 458, 526, 
- 	535, 459, 458, 527, 459, 458, 528, 459, 
- 	458, 529, 459, 458, 530, 459, 458, 531, 
- 	459, 458, 532, 459, 458, 533, 459, 458, 
- 	534, 459, 458, 508, 459, 458, 536, 459, 
- 	458, 537, 459, 458, 538, 459, 458, 539, 
- 	459, 458, 540, 459, 458, 541, 459, 458, 
- 	542, 459, 458, 543, 459, 458, 544, 459, 
- 	458, 545, 459, 458, 546, 459, 458, 508, 
- 	459, 458, 548, 459, 458, 468, 459, 458, 
- 	550, 459, 458, 551, 459, 458, 552, 459, 
- 	458, 553, 459, 458, 35, 459, 458, 555, 
- 	459, 458, 556, 459, 458, 557, 459, 458, 
- 	558, 459, 458, 508, 459, 458, 560, 459, 
- 	458, 561, 459, 458, 562, 459, 458, 563, 
- 	459, 458, 508, 459, 458, 459, 565, 458, 
- 	459, 566, 458, 459, 567, 458, 459, 568, 
- 	458, 459, 569, 458, 459, 570, 458, 459, 
- 	571, 458, 459, 572, 458, 459, 573, 458, 
- 	459, 574, 458, 459, 575, 458, 459, 576, 
- 	458, 459, 577, 458, 459, 9, 458, 459, 
- 	35, 458, 580, 589, 0, 581, 0, 582, 
- 	0, 583, 0, 584, 0, 585, 0, 586, 
- 	0, 587, 0, 588, 0, 366, 0, 590, 
- 	0, 591, 0, 592, 0, 593, 0, 594, 
- 	0, 595, 0, 596, 0, 597, 0, 598, 
- 	0, 599, 0, 600, 0, 46, 0, 602, 
- 	0, 9, 0, 0, 0
- };
- 
- static const unsigned char _lexer_trans_actions[] = {
- 	29, 29, 29, 29, 29, 0, 54, 0, 
- 	5, 1, 0, 29, 1, 35, 0, 43, 
- 	0, 0, 0, 43, 0, 0, 0, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 149, 
- 	126, 57, 110, 23, 0, 29, 29, 29, 
- 	29, 29, 54, 0, 5, 1, 0, 29, 
- 	1, 35, 0, 43, 0, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 144, 57, 54, 0, 84, 
- 	84, 54, 0, 81, 81, 0, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 54, 21, 0, 63, 63, 63, 63, 
- 	63, 130, 31, 60, 57, 31, 63, 57, 
- 	66, 31, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 144, 57, 54, 0, 84, 84, 84, 
- 	84, 54, 0, 69, 33, 69, 0, 0, 
- 	0, 0, 54, 0, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 54, 13, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 13, 0, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 13, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 13, 0, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 144, 
- 	57, 54, 0, 84, 84, 84, 84, 54, 
- 	0, 72, 33, 84, 72, 0, 0, 0, 
- 	0, 0, 54, 0, 0, 0, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	15, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 15, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 15, 54, 0, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 15, 0, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 54, 
- 	15, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 15, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	15, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 15, 0, 54, 15, 0, 0, 
- 	43, 0, 43, 139, 48, 9, 106, 11, 
- 	0, 134, 45, 45, 45, 3, 122, 33, 
- 	33, 33, 0, 122, 33, 33, 33, 0, 
- 	122, 33, 0, 33, 0, 102, 7, 7, 
- 	43, 54, 0, 0, 43, 114, 25, 0, 
- 	54, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	43, 43, 43, 43, 0, 27, 118, 27, 
- 	27, 51, 27, 0, 54, 0, 1, 0, 
- 	43, 0, 0, 0, 43, 54, 37, 37, 
- 	87, 37, 37, 43, 0, 39, 0, 43, 
- 	0, 0, 54, 0, 0, 39, 0, 0, 
- 	96, 96, 96, 96, 96, 54, 0, 93, 
- 	90, 41, 96, 90, 99, 0, 43, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 0, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 0, 
- 	43, 0, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 144, 57, 
- 	54, 0, 84, 84, 84, 84, 54, 0, 
- 	78, 33, 84, 78, 0, 0, 0, 0, 
- 	0, 54, 0, 0, 0, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 19, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 19, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 19, 54, 0, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 54, 19, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 19, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 19, 0, 54, 19, 
- 	0, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 144, 57, 54, 0, 84, 84, 
- 	84, 84, 84, 54, 0, 75, 33, 84, 
- 	75, 0, 0, 0, 0, 0, 54, 0, 
- 	0, 0, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 17, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 17, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 17, 54, 0, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 17, 0, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 54, 17, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 17, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 17, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 17, 0, 54, 
- 	17, 0, 0, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 0
- };
- 
- static const unsigned char _lexer_eof_actions[] = {
- 	0, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43
- };
- 
- static const int lexer_start = 1;
- static const int lexer_first_final = 603;
- static const int lexer_error = 0;
- 
- static const int lexer_en_main = 1;
- 
- 
- #line 258 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ja.c.rl"
- 
- static VALUE 
- unindent(VALUE con, int start_col)
- {
-   VALUE re;
-   // Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters
-   char pat[32]; 
-   snprintf(pat, 32, "^[\t ]{0,%d}", start_col); 
-   re = rb_reg_regcomp(rb_str_new2(pat));
-   rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2(""));
- 
-   return Qnil;
- 
- }
- 
- static void 
- store_kw_con(VALUE listener, const char * event_name, 
-              const char * keyword_at, size_t keyword_length, 
-              const char * at,         size_t length, 
-              int current_line)
- {
-   VALUE con = Qnil, kw = Qnil;
-   kw = ENCODED_STR_NEW(keyword_at, keyword_length);
-   con = ENCODED_STR_NEW(at, length);
-   rb_funcall(con, rb_intern("strip!"), 0);
-   rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); 
- }
- 
- static void
- store_multiline_kw_con(VALUE listener, const char * event_name,
-                       const char * keyword_at, size_t keyword_length,
-                       const char * at,         size_t length,
-                       int current_line, int start_col)
- {
-   VALUE split;
-   VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil;
- 
-   kw = ENCODED_STR_NEW(keyword_at, keyword_length);
-   con = ENCODED_STR_NEW(at, length);
- 
-   unindent(con, start_col);
-   
-   split = rb_str_split(con, "\n");
- 
-   name = rb_funcall(split, rb_intern("shift"), 0);
-   desc = rb_ary_join(split, rb_str_new2( "\n" ));
- 
-   if( name == Qnil ) 
-   {
-     name = rb_str_new2("");
-   }
-   if( rb_funcall(desc, rb_intern("size"), 0) == 0) 
-   {
-     desc = rb_str_new2("");
-   }
-   rb_funcall(name, rb_intern("strip!"), 0);
-   rb_funcall(desc, rb_intern("rstrip!"), 0);
-   rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); 
- }
- 
- static void 
- store_attr(VALUE listener, const char * attr_type,
-            const char * at, size_t length, 
-            int line)
- {
-   VALUE val = ENCODED_STR_NEW(at, length);
-   rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line));
- }
- static void 
- store_docstring_content(VALUE listener, 
-           int start_col, 
-           const char *type_at, size_t type_length,
-           const char *at, size_t length, 
-           int current_line)
- {
-   VALUE re2;
-   VALUE unescape_escaped_quotes;
-   VALUE con = ENCODED_STR_NEW(at, length);
-   VALUE con_type = ENCODED_STR_NEW(type_at, type_length);
- 
-   unindent(con, start_col);
- 
-   re2 = rb_reg_regcomp(rb_str_new2("\r\\Z"));
-   unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\""));
-   rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2(""));
-   rb_funcall(con_type, rb_intern("strip!"), 0);
-   rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\""));
-   rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line));
- }
- static void 
- raise_lexer_error(const char * at, int line)
- { 
-   rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at);
- }
- 
- static void lexer_init(lexer_state *lexer) {
-   lexer->content_start = 0;
-   lexer->content_end = 0;
-   lexer->content_len = 0;
-   lexer->docstring_content_type_start = 0;
-   lexer->docstring_content_type_end = 0;
-   lexer->mark = 0;
-   lexer->keyword_start = 0;
-   lexer->keyword_end = 0;
-   lexer->next_keyword_start = 0;
-   lexer->line_number = 1;
-   lexer->last_newline = 0;
-   lexer->final_newline = 0;
-   lexer->start_col = 0;
- }
- 
- static VALUE CLexer_alloc(VALUE klass)
- {
-   VALUE obj;
-   lexer_state *lxr = ALLOC(lexer_state);
-   lexer_init(lxr);
- 
-   obj = Data_Wrap_Struct(klass, NULL, -1, lxr);
- 
-   return obj;
- }
- 
- static VALUE CLexer_init(VALUE self, VALUE listener)
- {
-   lexer_state *lxr; 
-   rb_iv_set(self, "@listener", listener);
-   
-   lxr = NULL;
-   DATA_GET(self, lexer_state, lxr);
-   lexer_init(lxr);
-   
-   return self;
- }
- 
- static VALUE CLexer_scan(VALUE self, VALUE input)
- {
-   VALUE input_copy;
-   char *data;
-   size_t len;
-   VALUE listener = rb_iv_get(self, "@listener");
- 
-   lexer_state *lexer;
-   lexer = NULL;
-   DATA_GET(self, lexer_state, lexer);
- 
-   input_copy = rb_str_dup(input);
- 
-   rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%"));
-   data = RSTRING_PTR(input_copy);
-   len = RSTRING_LEN(input_copy);
-   
-   if (len == 0) { 
-     rb_raise(rb_eGherkinLexingError, "No content to lex.");
-   } else {
- 
-     const char *p, *pe, *eof;
-     int cs = 0;
-     
-     VALUE current_row = Qnil;
- 
-     p = data;
-     pe = data + len;
-     eof = pe;
-     
-     assert(*pe == '\0' && "pointer does not end on NULL");
-     
-     
- #line 1303 "ext/gherkin_lexer_ja/gherkin_lexer_ja.c"
- 	{
- 	cs = lexer_start;
- 	}
- 
- #line 425 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ja.c.rl"
-     
- #line 1310 "ext/gherkin_lexer_ja/gherkin_lexer_ja.c"
- 	{
- 	int _klen;
- 	unsigned int _trans;
- 	const char *_acts;
- 	unsigned int _nacts;
- 	const char *_keys;
- 
- 	if ( p == pe )
- 		goto _test_eof;
- 	if ( cs == 0 )
- 		goto _out;
- _resume:
- 	_keys = _lexer_trans_keys + _lexer_key_offsets[cs];
- 	_trans = _lexer_index_offsets[cs];
- 
- 	_klen = _lexer_single_lengths[cs];
- 	if ( _klen > 0 ) {
- 		const char *_lower = _keys;
- 		const char *_mid;
- 		const char *_upper = _keys + _klen - 1;
- 		while (1) {
- 			if ( _upper < _lower )
- 				break;
- 
- 			_mid = _lower + ((_upper-_lower) >> 1);
- 			if ( (*p) < *_mid )
- 				_upper = _mid - 1;
- 			else if ( (*p) > *_mid )
- 				_lower = _mid + 1;
- 			else {
- 				_trans += (_mid - _keys);
- 				goto _match;
- 			}
- 		}
- 		_keys += _klen;
- 		_trans += _klen;
- 	}
- 
- 	_klen = _lexer_range_lengths[cs];
- 	if ( _klen > 0 ) {
- 		const char *_lower = _keys;
- 		const char *_mid;
- 		const char *_upper = _keys + (_klen<<1) - 2;
- 		while (1) {
- 			if ( _upper < _lower )
- 				break;
- 
- 			_mid = _lower + (((_upper-_lower) >> 1) & ~1);
- 			if ( (*p) < _mid[0] )
- 				_upper = _mid - 2;
- 			else if ( (*p) > _mid[1] )
- 				_lower = _mid + 2;
- 			else {
- 				_trans += ((_mid - _keys)>>1);
- 				goto _match;
- 			}
- 		}
- 		_trans += _klen;
- 	}
- 
- _match:
- 	cs = _lexer_trans_targs[_trans];
- 
- 	if ( _lexer_trans_actions[_trans] == 0 )
- 		goto _again;
- 
- 	_acts = _lexer_actions + _lexer_trans_actions[_trans];
- 	_nacts = (unsigned int) *_acts++;
- 	while ( _nacts-- > 0 )
- 	{
- 		switch ( *_acts++ )
- 		{
- 	case 0:
- #line 83 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ja.c.rl"
- 	{
- 		MARK(content_start, p);
-     lexer->current_line = lexer->line_number;
-     lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2;
-   }
- 	break;
- 	case 1:
- #line 89 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ja.c.rl"
- 	{
-     MARK(content_start, p);
-   }
- 	break;
- 	case 2:
- #line 93 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ja.c.rl"
- 	{
-     lexer->current_line = lexer->line_number;
-     lexer->start_col = p - data - lexer->last_newline;
-   }
- 	break;
- 	case 3:
- #line 98 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ja.c.rl"
- 	{
-     int len = LEN(content_start, PTR_TO(final_newline));
-     int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end));
- 
-     if (len < 0) len = 0;
-     if (type_len < 0) len = 0;
- 
-     store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line);
-   }
- 	break;
- 	case 4:
- #line 108 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ja.c.rl"
- 	{ 
-     MARK(docstring_content_type_start, p);
-   }
- 	break;
- 	case 5:
- #line 112 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ja.c.rl"
- 	{ 
-     MARK(docstring_content_type_end, p);
-   }
- 	break;
- 	case 6:
- #line 116 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ja.c.rl"
- 	{
-     STORE_KW_END_CON(feature);
-   }
- 	break;
- 	case 7:
- #line 120 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ja.c.rl"
- 	{
-     STORE_KW_END_CON(background);
-   }
- 	break;
- 	case 8:
- #line 124 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ja.c.rl"
- 	{
-     STORE_KW_END_CON(scenario);
-   }
- 	break;
- 	case 9:
- #line 128 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ja.c.rl"
- 	{
-     STORE_KW_END_CON(scenario_outline);
-   }
- 	break;
- 	case 10:
- #line 132 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ja.c.rl"
- 	{
-     STORE_KW_END_CON(examples);
-   }
- 	break;
- 	case 11:
- #line 136 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ja.c.rl"
- 	{
-     store_kw_con(listener, "step",
-       PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-       PTR_TO(content_start), LEN(content_start, p), 
-       lexer->current_line);
-   }
- 	break;
- 	case 12:
- #line 143 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ja.c.rl"
- 	{
-     STORE_ATTR(comment);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 13:
- #line 148 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ja.c.rl"
- 	{
-     STORE_ATTR(tag);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 14:
- #line 153 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ja.c.rl"
- 	{
-     lexer->line_number += 1;
-     MARK(final_newline, p);
-   }
- 	break;
- 	case 15:
- #line 158 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ja.c.rl"
- 	{
-     MARK(last_newline, p + 1);
-   }
- 	break;
- 	case 16:
- #line 162 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ja.c.rl"
- 	{
-     if (lexer->mark == 0) {
-       MARK(mark, p);
-     }
-   }
- 	break;
- 	case 17:
- #line 168 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ja.c.rl"
- 	{
-     MARK(keyword_end, p);
-     MARK(keyword_start, PTR_TO(mark));
-     MARK(content_start, p + 1);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 18:
- #line 175 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ja.c.rl"
- 	{
-     MARK(content_end, p);
-   }
- 	break;
- 	case 19:
- #line 179 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ja.c.rl"
- 	{
-     p = p - 1;
-     lexer->current_line = lexer->line_number;
-     current_row = rb_ary_new();
-   }
- 	break;
- 	case 20:
- #line 185 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ja.c.rl"
- 	{
- 		MARK(content_start, p);
-   }
- 	break;
- 	case 21:
- #line 189 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ja.c.rl"
- 	{
-     VALUE re_pipe, re_newline, re_backslash;
-     VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
-     rb_funcall(con, rb_intern("strip!"), 0);
-     re_pipe      = rb_reg_regcomp(rb_str_new2("\\\\\\|"));
-     re_newline   = rb_reg_regcomp(rb_str_new2("\\\\n"));
-     re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_pipe,      rb_str_new2("|"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_newline,   rb_str_new2("\n"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\"));
- 
-     rb_ary_push(current_row, con);
-   }
- 	break;
- 	case 22:
- #line 203 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ja.c.rl"
- 	{
-     rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
-   }
- 	break;
- 	case 23:
- #line 207 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ja.c.rl"
- 	{
-     int line;
-     if (cs < lexer_first_final) {
-       size_t count = 0;
-       VALUE newstr_val;
-       char *newstr;
-       int newstr_count = 0;        
-       size_t len;
-       const char *buff;
-       if (lexer->last_newline != 0) {
-         len = LEN(last_newline, eof);
-         buff = PTR_TO(last_newline);
-       } else {
-         len = strlen(data);
-         buff = data;
-       }
- 
-       // Allocate as a ruby string so that it gets cleaned up by GC
-       newstr_val = rb_str_new(buff, len);
-       newstr = RSTRING_PTR(newstr_val);
- 
- 
-       for (count = 0; count < len; count++) {
-         if(buff[count] == 10) {
-           newstr[newstr_count] = '\0'; // terminate new string at first newline found
-           break;
-         } else {
-           if (buff[count] == '%') {
-             newstr[newstr_count++] = buff[count];
-             newstr[newstr_count] = buff[count];
-           } else {
-             newstr[newstr_count] = buff[count];
-           }
-         }
-         newstr_count++;
-       }
- 
-       line = lexer->line_number;
-       lexer_init(lexer); // Re-initialize so we can scan again with the same lexer
-       raise_lexer_error(newstr, line);
-     } else {
-       rb_funcall(listener, rb_intern("eof"), 0);
-     }
-   }
- 	break;
- #line 1600 "ext/gherkin_lexer_ja/gherkin_lexer_ja.c"
- 		}
- 	}
- 
- _again:
- 	if ( cs == 0 )
- 		goto _out;
- 	if ( ++p != pe )
- 		goto _resume;
- 	_test_eof: {}
- 	if ( p == eof )
- 	{
- 	const char *__acts = _lexer_actions + _lexer_eof_actions[cs];
- 	unsigned int __nacts = (unsigned int) *__acts++;
- 	while ( __nacts-- > 0 ) {
- 		switch ( *__acts++ ) {
- 	case 23:
- #line 207 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ja.c.rl"
- 	{
-     int line;
-     if (cs < lexer_first_final) {
-       size_t count = 0;
-       VALUE newstr_val;
-       char *newstr;
-       int newstr_count = 0;        
-       size_t len;
-       const char *buff;
-       if (lexer->last_newline != 0) {
-         len = LEN(last_newline, eof);
-         buff = PTR_TO(last_newline);
-       } else {
-         len = strlen(data);
-         buff = data;
-       }
- 
-       // Allocate as a ruby string so that it gets cleaned up by GC
-       newstr_val = rb_str_new(buff, len);
-       newstr = RSTRING_PTR(newstr_val);
- 
- 
-       for (count = 0; count < len; count++) {
-         if(buff[count] == 10) {
-           newstr[newstr_count] = '\0'; // terminate new string at first newline found
-           break;
-         } else {
-           if (buff[count] == '%') {
-             newstr[newstr_count++] = buff[count];
-             newstr[newstr_count] = buff[count];
-           } else {
-             newstr[newstr_count] = buff[count];
-           }
-         }
-         newstr_count++;
-       }
- 
-       line = lexer->line_number;
-       lexer_init(lexer); // Re-initialize so we can scan again with the same lexer
-       raise_lexer_error(newstr, line);
-     } else {
-       rb_funcall(listener, rb_intern("eof"), 0);
-     }
-   }
- 	break;
- #line 1663 "ext/gherkin_lexer_ja/gherkin_lexer_ja.c"
- 		}
- 	}
- 	}
- 
- 	_out: {}
- 	}
- 
- #line 426 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ja.c.rl"
- 
-     assert(p <= pe && "data overflow after parsing execute");
-     assert(lexer->content_start <= len && "content starts after data end");
-     assert(lexer->mark < len && "mark is after data end");
-     
-     // Reset lexer by re-initializing the whole thing
-     lexer_init(lexer);
- 
-     if (cs == lexer_error) {
-       rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails.");
-     } else {
-       return Qtrue;
-     }
-   }
- }
- 
- void Init_gherkin_lexer_ja()
- {
-   mGherkin = rb_define_module("Gherkin");
-   mGherkinLexer = rb_define_module_under(mGherkin, "Lexer");
-   rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError"));
- 
-   mCLexer = rb_define_module_under(mGherkin, "CLexer");
-   cI18nLexer = rb_define_class_under(mCLexer, "Ja", rb_cObject);
-   rb_define_alloc_func(cI18nLexer, CLexer_alloc);
-   rb_define_method(cI18nLexer, "initialize", CLexer_init, 1);
-   rb_define_method(cI18nLexer, "scan", CLexer_scan, 1);
- }
- 
 -#line 1 "ragel/i18n/ja.c.rl"
 -#include <assert.h>
 -#include <ruby.h>
 -
 -#if defined(_WIN32)
 -#include <stddef.h>
 -#endif
 -
 -#ifdef HAVE_RUBY_RE_H
 -#include <ruby/re.h>
 -#else
 -#include <re.h>
 -#endif
 -
 -#ifdef HAVE_RUBY_ENCODING_H
 -#include <ruby/encoding.h>
 -#define ENCODED_STR_NEW(ptr, len) \
 -    rb_enc_str_new(ptr, len, rb_utf8_encoding())
 -#else
 -#define ENCODED_STR_NEW(ptr, len) \
 -    rb_str_new(ptr, len)
 -#endif
 -
 -#ifndef RSTRING_PTR
 -#define RSTRING_PTR(s) (RSTRING(s)->ptr)
 -#endif
 -
 -#ifndef RSTRING_LEN
 -#define RSTRING_LEN(s) (RSTRING(s)->len)
 -#endif
 -
 -#define DATA_GET(FROM, TYPE, NAME) \
 -  Data_Get_Struct(FROM, TYPE, NAME); \
 -  if (NAME == NULL) { \
 -    rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \
 -  }
 - 
 -typedef struct lexer_state {
 -  int content_len;
 -  int line_number;
 -  int current_line;
 -  int start_col;
 -  size_t mark;
 -  size_t keyword_start;
 -  size_t keyword_end;
 -  size_t next_keyword_start;
 -  size_t content_start;
 -  size_t content_end;
 -  size_t docstring_content_type_start;
 -  size_t docstring_content_type_end;
 -  size_t query_start;
 -  size_t last_newline;
 -  size_t final_newline;
 -} lexer_state;
 -
 -static VALUE mGherkin;
 -static VALUE mGherkinLexer;
 -static VALUE mCLexer;
 -static VALUE cI18nLexer;
 -static VALUE rb_eGherkinLexingError;
 -
 -#define LEN(AT, P) (P - data - lexer->AT)
 -#define MARK(M, P) (lexer->M = (P) - data)
 -#define PTR_TO(P) (data + lexer->P)
 -
 -#define STORE_KW_END_CON(EVENT) \
 -  store_multiline_kw_con(listener, # EVENT, \
 -    PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \
 -    PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \
 -    lexer->current_line, lexer->start_col); \
 -    if (lexer->content_end != 0) { \
 -      p = PTR_TO(content_end - 1); \
 -    } \
 -    lexer->content_end = 0
 -
 -#define STORE_ATTR(ATTR) \
 -    store_attr(listener, # ATTR, \
 -      PTR_TO(content_start), LEN(content_start, p), \
 -      lexer->line_number)
 -
 -
 -#line 254 "ragel/i18n/ja.c.rl"
 -
 -
 -/** Data **/
 -
 -#line 89 "ext/gherkin_lexer_ja/gherkin_lexer_ja.c"
 -static const char _lexer_actions[] = {
 -	0, 1, 0, 1, 1, 1, 2, 1, 
 -	3, 1, 4, 1, 5, 1, 6, 1, 
 -	7, 1, 8, 1, 9, 1, 10, 1, 
 -	11, 1, 12, 1, 13, 1, 16, 1, 
 -	17, 1, 18, 1, 19, 1, 20, 1, 
 -	21, 1, 22, 1, 23, 2, 1, 18, 
 -	2, 4, 5, 2, 13, 0, 2, 14, 
 -	15, 2, 17, 0, 2, 17, 2, 2, 
 -	17, 16, 2, 17, 19, 2, 18, 6, 
 -	2, 18, 7, 2, 18, 8, 2, 18, 
 -	9, 2, 18, 10, 2, 18, 16, 2, 
 -	20, 21, 2, 22, 0, 2, 22, 2, 
 -	2, 22, 16, 2, 22, 19, 3, 3, 
 -	14, 15, 3, 5, 14, 15, 3, 11, 
 -	14, 15, 3, 12, 14, 15, 3, 13, 
 -	14, 15, 3, 14, 15, 18, 3, 17, 
 -	0, 11, 3, 17, 14, 15, 4, 1, 
 -	14, 15, 18, 4, 4, 5, 14, 15, 
 -	4, 17, 0, 14, 15, 5, 17, 0, 
 -	11, 14, 15
 -};
 -
 -static const short _lexer_key_offsets[] = {
 -	0, 0, 16, 19, 23, 24, 25, 26, 
 -	28, 30, 45, 47, 48, 49, 50, 51, 
 -	52, 53, 54, 55, 63, 65, 67, 69, 
 -	71, 73, 75, 77, 79, 81, 83, 85, 
 -	87, 89, 91, 93, 108, 109, 110, 111, 
 -	112, 113, 114, 115, 116, 117, 118, 119, 
 -	120, 121, 132, 135, 138, 140, 142, 144, 
 -	146, 148, 150, 152, 154, 156, 158, 160, 
 -	162, 164, 166, 168, 170, 172, 174, 176, 
 -	179, 182, 184, 186, 188, 190, 192, 194, 
 -	196, 198, 200, 202, 204, 206, 208, 210, 
 -	212, 214, 216, 218, 220, 222, 224, 226, 
 -	228, 230, 232, 234, 237, 239, 241, 243, 
 -	245, 247, 250, 252, 254, 256, 258, 260, 
 -	262, 264, 266, 268, 270, 272, 274, 276, 
 -	278, 280, 282, 284, 286, 288, 290, 292, 
 -	294, 296, 298, 300, 302, 304, 306, 308, 
 -	310, 312, 314, 316, 318, 320, 322, 324, 
 -	326, 328, 330, 332, 334, 336, 338, 340, 
 -	342, 344, 345, 346, 347, 348, 349, 350, 
 -	351, 352, 364, 368, 373, 375, 377, 379, 
 -	381, 383, 385, 387, 389, 391, 393, 395, 
 -	397, 399, 401, 403, 405, 407, 409, 412, 
 -	414, 416, 418, 420, 422, 424, 426, 428, 
 -	430, 433, 436, 438, 440, 442, 444, 446, 
 -	448, 450, 452, 454, 456, 458, 460, 462, 
 -	464, 466, 468, 470, 472, 474, 476, 478, 
 -	480, 482, 484, 486, 488, 490, 493, 495, 
 -	497, 499, 501, 503, 506, 508, 510, 512, 
 -	514, 516, 518, 520, 522, 524, 526, 528, 
 -	530, 532, 534, 536, 538, 540, 542, 544, 
 -	546, 548, 550, 552, 554, 556, 558, 560, 
 -	562, 564, 566, 568, 570, 572, 574, 576, 
 -	578, 580, 582, 584, 586, 588, 590, 592, 
 -	594, 596, 598, 600, 602, 603, 604, 606, 
 -	608, 613, 618, 623, 628, 632, 636, 638, 
 -	639, 640, 641, 642, 643, 644, 645, 646, 
 -	647, 648, 649, 650, 651, 652, 653, 654, 
 -	659, 666, 671, 675, 681, 684, 686, 692, 
 -	707, 709, 711, 713, 715, 717, 718, 719, 
 -	720, 721, 722, 723, 724, 725, 726, 727, 
 -	728, 729, 732, 733, 734, 735, 736, 737, 
 -	738, 739, 740, 741, 742, 743, 744, 745, 
 -	746, 747, 748, 749, 750, 752, 754, 755, 
 -	756, 757, 758, 759, 760, 761, 762, 763, 
 -	764, 765, 766, 767, 768, 769, 770, 771, 
 -	772, 773, 785, 789, 794, 796, 798, 800, 
 -	802, 804, 806, 808, 810, 812, 814, 816, 
 -	818, 820, 822, 824, 826, 828, 830, 833, 
 -	835, 837, 839, 841, 843, 845, 847, 849, 
 -	851, 853, 855, 857, 859, 861, 863, 865, 
 -	867, 869, 871, 873, 875, 877, 879, 881, 
 -	883, 885, 887, 889, 891, 893, 895, 897, 
 -	899, 901, 903, 905, 907, 909, 911, 913, 
 -	915, 917, 919, 921, 923, 925, 927, 929, 
 -	931, 933, 934, 935, 936, 937, 938, 939, 
 -	940, 941, 942, 943, 945, 946, 947, 948, 
 -	949, 950, 951, 952, 965, 969, 974, 976, 
 -	978, 980, 982, 984, 986, 988, 990, 992, 
 -	994, 996, 998, 1000, 1002, 1004, 1006, 1008, 
 -	1010, 1013, 1015, 1017, 1019, 1021, 1023, 1025, 
 -	1027, 1029, 1031, 1034, 1037, 1039, 1041, 1043, 
 -	1045, 1047, 1049, 1051, 1053, 1055, 1057, 1059, 
 -	1061, 1063, 1065, 1067, 1069, 1071, 1073, 1075, 
 -	1077, 1079, 1081, 1083, 1085, 1087, 1089, 1091, 
 -	1094, 1096, 1098, 1100, 1102, 1104, 1107, 1109, 
 -	1111, 1113, 1115, 1117, 1119, 1121, 1123, 1125, 
 -	1127, 1129, 1131, 1133, 1135, 1137, 1139, 1141, 
 -	1143, 1145, 1147, 1149, 1151, 1153, 1155, 1157, 
 -	1159, 1161, 1163, 1165, 1167, 1169, 1171, 1173, 
 -	1175, 1177, 1179, 1181, 1183, 1185, 1187, 1189, 
 -	1191, 1193, 1195, 1197, 1199, 1201, 1203, 1205, 
 -	1207, 1209, 1211, 1213, 1215, 1216, 1217, 1218, 
 -	1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 
 -	1227, 1228, 1229, 1230, 1231, 1232, 1233, 1234, 
 -	1235, 1236, 1237, 1238
 -};
 -
 -static const char _lexer_trans_keys[] = {
 -	-29, -28, -27, -26, -24, -17, 10, 32, 
 -	34, 35, 37, 42, 64, 124, 9, 13, 
 -	-127, -126, -125, -117, -105, -97, -86, -29, 
 -	-127, -92, 10, 13, 10, 13, -29, -28, 
 -	-27, -26, -24, 10, 32, 34, 35, 37, 
 -	42, 64, 124, 9, 13, -67, -66, -122, 
 -	-29, -127, -105, -117, 58, 10, 10, -29, 
 -	-26, 10, 32, 35, 124, 9, 13, -125, 
 -	10, -107, 10, -29, 10, -126, 10, -93, 
 -	10, -29, 10, -125, 10, -68, 10, -29, 
 -	10, -125, 10, -127, 10, -29, 10, -125, 
 -	10, -93, 10, 10, 58, -29, -28, -27, 
 -	-26, -24, 10, 32, 34, 35, 37, 42, 
 -	64, 124, 9, 13, -119, -115, -26, -113, 
 -	-112, -87, -97, -24, -125, -67, 58, 10, 
 -	10, -29, -28, -26, -24, 10, 32, 35, 
 -	37, 64, 9, 13, -126, -125, 10, -75, 
 -	-73, 10, -29, 10, -125, 10, -77, 10, 
 -	-29, 10, -125, 10, -105, 10, -29, 10, 
 -	-125, 10, -85, 10, 10, 58, -29, 10, 
 -	-125, 10, -118, 10, -29, 10, -125, 10, 
 -	-86, 10, -29, 10, -126, 10, -86, 10, 
 -	-29, 10, 58, -126, -125, 10, -94, 10, 
 -	-29, 10, -126, 10, -90, 10, -29, 10, 
 -	-125, 10, -120, 10, -29, 10, -125, 10, 
 -	-87, 10, -29, 10, -126, 10, -92, 10, 
 -	-29, 10, -125, 10, -77, 10, -122, 10, 
 -	-29, 10, -125, 10, -77, 10, -29, 10, 
 -	-125, 10, -105, 10, -29, 10, -125, 10, 
 -	-84, 10, -29, 10, 58, -125, 10, -68, 
 -	10, -29, 10, -125, 10, -120, 10, -122, 
 -	-107, 10, -29, 10, -125, 10, -77, 10, 
 -	-29, 10, -125, 10, -105, 10, -29, 10, 
 -	-125, 10, -84, 10, -29, 10, -126, 10, 
 -	-93, 10, -29, 10, -125, 10, -68, 10, 
 -	-29, 10, -125, 10, -127, 10, -29, 10, 
 -	-125, 10, -93, 10, -66, 10, -117, 10, 
 -	-87, 10, -97, 10, -24, 10, -125, 10, 
 -	-67, 10, -125, 10, -116, 10, -26, 10, 
 -	-103, 10, -81, 10, 10, 95, 10, 70, 
 -	10, 69, 10, 65, 10, 84, 10, 85, 
 -	10, 82, 10, 69, 10, 95, 10, 69, 
 -	10, 78, 10, 68, 10, 95, 10, 37, 
 -	-125, -116, -26, -103, -81, 58, 10, 10, 
 -	-29, -28, -27, -26, 10, 32, 35, 37, 
 -	42, 64, 9, 13, -127, -126, -125, 10, 
 -	-117, -105, -97, -86, 10, -29, 10, -127, 
 -	10, -92, 10, -29, 10, -127, 10, -117, 
 -	10, -29, 10, -127, 10, -105, 10, -29, 
 -	10, -127, 10, -96, 10, -29, 10, -126, 
 -	10, -119, 10, -29, 10, -127, 10, -80, 
 -	10, -126, -73, 10, -29, 10, -125, 10, 
 -	-118, 10, -29, 10, -125, 10, -86, 10, 
 -	-29, 10, -126, 10, -86, 10, -29, 10, 
 -	58, -126, -125, 10, -94, 10, -29, 10, 
 -	-126, 10, -90, 10, -29, 10, -125, 10, 
 -	-120, 10, -29, 10, -125, 10, -87, 10, 
 -	-29, 10, -126, 10, -92, 10, -29, 10, 
 -	-125, 10, -77, 10, 10, 58, -122, 10, 
 -	-29, 10, -125, 10, -77, 10, -29, 10, 
 -	-125, 10, -105, 10, -29, 10, -125, 10, 
 -	-84, 10, -29, 10, 58, -125, 10, -68, 
 -	10, -29, 10, -125, 10, -120, 10, -122, 
 -	-107, 10, -29, 10, -125, 10, -77, 10, 
 -	-29, 10, -125, 10, -105, 10, -29, 10, 
 -	-125, 10, -84, 10, -29, 10, -126, 10, 
 -	-93, 10, -29, 10, -125, 10, -68, 10, 
 -	-29, 10, -125, 10, -127, 10, -29, 10, 
 -	-125, 10, -93, 10, -67, 10, -122, 10, 
 -	-119, 10, -115, 10, -26, 10, -113, 10, 
 -	-112, 10, -87, 10, -97, 10, -24, 10, 
 -	-125, 10, -67, 10, 10, 95, 10, 70, 
 -	10, 69, 10, 65, 10, 84, 10, 85, 
 -	10, 82, 10, 69, 10, 95, 10, 69, 
 -	10, 78, 10, 68, 10, 95, 10, 37, 
 -	10, 32, 34, 34, 10, 13, 10, 13, 
 -	10, 32, 34, 9, 13, 10, 32, 34, 
 -	9, 13, 10, 32, 34, 9, 13, 10, 
 -	32, 34, 9, 13, 10, 32, 9, 13, 
 -	10, 32, 9, 13, 10, 13, 10, 95, 
 -	70, 69, 65, 84, 85, 82, 69, 95, 
 -	69, 78, 68, 95, 37, 32, 13, 32, 
 -	64, 9, 10, 9, 10, 13, 32, 64, 
 -	11, 12, 10, 32, 64, 9, 13, 32, 
 -	124, 9, 13, 10, 32, 92, 124, 9, 
 -	13, 10, 92, 124, 10, 92, 10, 32, 
 -	92, 124, 9, 13, -29, -28, -27, -26, 
 -	-24, 10, 32, 34, 35, 37, 42, 64, 
 -	124, 9, 13, -87, 10, -97, 10, -24, 
 -	10, -125, 10, -67, 10, -29, -127, -117, 
 -	-29, -127, -96, -29, -126, -119, -29, -127, 
 -	-80, -126, -75, -73, -29, -125, -77, -29, 
 -	-125, -105, -29, -125, -85, -29, -125, -118, 
 -	-29, -125, -86, -29, -126, -86, -29, 58, 
 -	-126, -125, -94, -29, -126, -90, -29, -125, 
 -	-120, -29, -125, -87, -29, -126, -92, -29, 
 -	-125, -77, 58, 10, 10, -29, -28, -27, 
 -	-26, 10, 32, 35, 37, 42, 64, 9, 
 -	13, -127, -126, -125, 10, -117, -105, -97, 
 -	-86, 10, -29, 10, -127, 10, -92, 10, 
 -	-29, 10, -127, 10, -117, 10, -29, 10, 
 -	-127, 10, -105, 10, -29, 10, -127, 10, 
 -	-96, 10, -29, 10, -126, 10, -119, 10, 
 -	-29, 10, -127, 10, -80, 10, -126, -73, 
 -	10, -29, 10, -125, 10, -118, 10, -29, 
 -	10, -125, 10, -86, 10, -29, 10, -126, 
 -	10, -86, 10, 10, 58, -107, 10, -29, 
 -	10, -126, 10, -93, 10, -29, 10, -125, 
 -	10, -68, 10, -29, 10, -125, 10, -127, 
 -	10, -29, 10, -125, 10, -93, 10, -67, 
 -	10, -122, 10, -119, 10, -115, 10, -26, 
 -	10, -113, 10, -112, 10, -87, 10, -97, 
 -	10, -24, 10, -125, 10, -67, 10, 10, 
 -	95, 10, 70, 10, 69, 10, 65, 10, 
 -	84, 10, 85, 10, 82, 10, 69, 10, 
 -	95, 10, 69, 10, 78, 10, 68, 10, 
 -	95, 10, 37, 10, 32, -122, -29, -125, 
 -	-77, -29, -125, -105, -29, -125, -84, -29, 
 -	58, -125, -68, -29, -125, -120, 10, 10, 
 -	-29, -28, -27, -26, -24, 10, 32, 35, 
 -	37, 42, 64, 9, 13, -127, -126, -125, 
 -	10, -117, -105, -97, -86, 10, -29, 10, 
 -	-127, 10, -92, 10, -29, 10, -127, 10, 
 -	-117, 10, -29, 10, -127, 10, -105, 10, 
 -	-29, 10, -127, 10, -96, 10, -29, 10, 
 -	-126, 10, -119, 10, -29, 10, -127, 10, 
 -	-80, 10, -126, -73, 10, -29, 10, -125, 
 -	10, -118, 10, -29, 10, -125, 10, -86, 
 -	10, -29, 10, -126, 10, -86, 10, -29, 
 -	10, 58, -126, -125, 10, -94, 10, -29, 
 -	10, -126, 10, -90, 10, -29, 10, -125, 
 -	10, -120, 10, -29, 10, -125, 10, -87, 
 -	10, -29, 10, -126, 10, -92, 10, -29, 
 -	10, -125, 10, -77, 10, 10, 58, -122, 
 -	10, -29, 10, -125, 10, -77, 10, -29, 
 -	10, -125, 10, -105, 10, -29, 10, -125, 
 -	10, -84, 10, -29, 10, 58, -125, 10, 
 -	-68, 10, -29, 10, -125, 10, -120, 10, 
 -	-122, -107, 10, -29, 10, -125, 10, -77, 
 -	10, -29, 10, -125, 10, -105, 10, -29, 
 -	10, -125, 10, -84, 10, -29, 10, -126, 
 -	10, -93, 10, -29, 10, -125, 10, -68, 
 -	10, -29, 10, -125, 10, -127, 10, -29, 
 -	10, -125, 10, -93, 10, -67, 10, -122, 
 -	10, -119, 10, -115, 10, -26, 10, -113, 
 -	10, -112, 10, -87, 10, -97, 10, -24, 
 -	10, -125, 10, -67, 10, -125, 10, -116, 
 -	10, -26, 10, -103, 10, -81, 10, 10, 
 -	95, 10, 70, 10, 69, 10, 65, 10, 
 -	84, 10, 85, 10, 82, 10, 69, 10, 
 -	95, 10, 69, 10, 78, 10, 68, 10, 
 -	95, 10, 37, 10, 32, -122, -107, -29, 
 -	-125, -77, -29, -125, -105, -29, -125, -84, 
 -	-29, -126, -93, -29, -125, -68, -29, -125, 
 -	-127, -29, -125, -93, -69, -65, 0
 -};
 -
 -static const char _lexer_single_lengths[] = {
 -	0, 14, 3, 4, 1, 1, 1, 2, 
 -	2, 13, 2, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 6, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 13, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 9, 3, 3, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 3, 
 -	3, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 3, 2, 2, 2, 2, 
 -	2, 3, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 10, 4, 5, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 3, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	3, 3, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 3, 2, 2, 
 -	2, 2, 2, 3, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 1, 1, 2, 2, 
 -	3, 3, 3, 3, 2, 2, 2, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 3, 
 -	5, 3, 2, 4, 3, 2, 4, 13, 
 -	2, 2, 2, 2, 2, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 3, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 2, 2, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 10, 4, 5, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 3, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 2, 1, 1, 1, 1, 
 -	1, 1, 1, 11, 4, 5, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	3, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 3, 3, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 3, 
 -	2, 2, 2, 2, 2, 3, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 0
 -};
 -
 -static const char _lexer_range_lengths[] = {
 -	0, 1, 0, 0, 0, 0, 0, 0, 
 -	0, 1, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 1, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 1, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 1, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 1, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	1, 1, 1, 1, 1, 1, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 1, 
 -	1, 1, 1, 1, 0, 0, 1, 1, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 1, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 1, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0
 -};
 -
 -static const short _lexer_index_offsets[] = {
 -	0, 0, 16, 20, 25, 27, 29, 31, 
 -	34, 37, 52, 55, 57, 59, 61, 63, 
 -	65, 67, 69, 71, 79, 82, 85, 88, 
 -	91, 94, 97, 100, 103, 106, 109, 112, 
 -	115, 118, 121, 124, 139, 141, 143, 145, 
 -	147, 149, 151, 153, 155, 157, 159, 161, 
 -	163, 165, 176, 180, 184, 187, 190, 193, 
 -	196, 199, 202, 205, 208, 211, 214, 217, 
 -	220, 223, 226, 229, 232, 235, 238, 241, 
 -	245, 249, 252, 255, 258, 261, 264, 267, 
 -	270, 273, 276, 279, 282, 285, 288, 291, 
 -	294, 297, 300, 303, 306, 309, 312, 315, 
 -	318, 321, 324, 327, 331, 334, 337, 340, 
 -	343, 346, 350, 353, 356, 359, 362, 365, 
 -	368, 371, 374, 377, 380, 383, 386, 389, 
 -	392, 395, 398, 401, 404, 407, 410, 413, 
 -	416, 419, 422, 425, 428, 431, 434, 437, 
 -	440, 443, 446, 449, 452, 455, 458, 461, 
 -	464, 467, 470, 473, 476, 479, 482, 485, 
 -	488, 491, 493, 495, 497, 499, 501, 503, 
 -	505, 507, 519, 524, 530, 533, 536, 539, 
 -	542, 545, 548, 551, 554, 557, 560, 563, 
 -	566, 569, 572, 575, 578, 581, 584, 588, 
 -	591, 594, 597, 600, 603, 606, 609, 612, 
 -	615, 619, 623, 626, 629, 632, 635, 638, 
 -	641, 644, 647, 650, 653, 656, 659, 662, 
 -	665, 668, 671, 674, 677, 680, 683, 686, 
 -	689, 692, 695, 698, 701, 704, 708, 711, 
 -	714, 717, 720, 723, 727, 730, 733, 736, 
 -	739, 742, 745, 748, 751, 754, 757, 760, 
 -	763, 766, 769, 772, 775, 778, 781, 784, 
 -	787, 790, 793, 796, 799, 802, 805, 808, 
 -	811, 814, 817, 820, 823, 826, 829, 832, 
 -	835, 838, 841, 844, 847, 850, 853, 856, 
 -	859, 862, 865, 868, 871, 873, 875, 878, 
 -	881, 886, 891, 896, 901, 905, 909, 912, 
 -	914, 916, 918, 920, 922, 924, 926, 928, 
 -	930, 932, 934, 936, 938, 940, 942, 944, 
 -	949, 956, 961, 965, 971, 975, 978, 984, 
 -	999, 1002, 1005, 1008, 1011, 1014, 1016, 1018, 
 -	1020, 1022, 1024, 1026, 1028, 1030, 1032, 1034, 
 -	1036, 1038, 1042, 1044, 1046, 1048, 1050, 1052, 
 -	1054, 1056, 1058, 1060, 1062, 1064, 1066, 1068, 
 -	1070, 1072, 1074, 1076, 1078, 1081, 1084, 1086, 
 -	1088, 1090, 1092, 1094, 1096, 1098, 1100, 1102, 
 -	1104, 1106, 1108, 1110, 1112, 1114, 1116, 1118, 
 -	1120, 1122, 1134, 1139, 1145, 1148, 1151, 1154, 
 -	1157, 1160, 1163, 1166, 1169, 1172, 1175, 1178, 
 -	1181, 1184, 1187, 1190, 1193, 1196, 1199, 1203, 
 -	1206, 1209, 1212, 1215, 1218, 1221, 1224, 1227, 
 -	1230, 1233, 1236, 1239, 1242, 1245, 1248, 1251, 
 -	1254, 1257, 1260, 1263, 1266, 1269, 1272, 1275, 
 -	1278, 1281, 1284, 1287, 1290, 1293, 1296, 1299, 
 -	1302, 1305, 1308, 1311, 1314, 1317, 1320, 1323, 
 -	1326, 1329, 1332, 1335, 1338, 1341, 1344, 1347, 
 -	1350, 1353, 1355, 1357, 1359, 1361, 1363, 1365, 
 -	1367, 1369, 1371, 1373, 1376, 1378, 1380, 1382, 
 -	1384, 1386, 1388, 1390, 1403, 1408, 1414, 1417, 
 -	1420, 1423, 1426, 1429, 1432, 1435, 1438, 1441, 
 -	1444, 1447, 1450, 1453, 1456, 1459, 1462, 1465, 
 -	1468, 1472, 1475, 1478, 1481, 1484, 1487, 1490, 
 -	1493, 1496, 1499, 1503, 1507, 1510, 1513, 1516, 
 -	1519, 1522, 1525, 1528, 1531, 1534, 1537, 1540, 
 -	1543, 1546, 1549, 1552, 1555, 1558, 1561, 1564, 
 -	1567, 1570, 1573, 1576, 1579, 1582, 1585, 1588, 
 -	1592, 1595, 1598, 1601, 1604, 1607, 1611, 1614, 
 -	1617, 1620, 1623, 1626, 1629, 1632, 1635, 1638, 
 -	1641, 1644, 1647, 1650, 1653, 1656, 1659, 1662, 
 -	1665, 1668, 1671, 1674, 1677, 1680, 1683, 1686, 
 -	1689, 1692, 1695, 1698, 1701, 1704, 1707, 1710, 
 -	1713, 1716, 1719, 1722, 1725, 1728, 1731, 1734, 
 -	1737, 1740, 1743, 1746, 1749, 1752, 1755, 1758, 
 -	1761, 1764, 1767, 1770, 1773, 1775, 1777, 1779, 
 -	1781, 1783, 1785, 1787, 1789, 1791, 1793, 1795, 
 -	1797, 1799, 1801, 1803, 1805, 1807, 1809, 1811, 
 -	1813, 1815, 1817, 1819
 -};
 -
 -static const short _lexer_trans_targs[] = {
 -	2, 10, 36, 41, 153, 601, 9, 9, 
 -	276, 286, 288, 302, 303, 306, 9, 0, 
 -	3, 329, 579, 0, 4, 317, 320, 323, 
 -	0, 5, 0, 6, 0, 7, 0, 9, 
 -	287, 8, 9, 287, 8, 2, 10, 36, 
 -	41, 153, 9, 9, 276, 286, 288, 302, 
 -	303, 306, 9, 0, 11, 15, 0, 12, 
 -	0, 13, 0, 14, 0, 7, 0, 16, 
 -	0, 17, 0, 19, 18, 19, 18, 20, 
 -	312, 19, 19, 9, 9, 19, 18, 21, 
 -	19, 18, 22, 19, 18, 23, 19, 18, 
 -	24, 19, 18, 25, 19, 18, 26, 19, 
 -	18, 27, 19, 18, 28, 19, 18, 29, 
 -	19, 18, 30, 19, 18, 31, 19, 18, 
 -	32, 19, 18, 33, 19, 18, 34, 19, 
 -	18, 19, 35, 18, 2, 10, 36, 41, 
 -	153, 9, 9, 276, 286, 288, 302, 303, 
 -	306, 9, 0, 37, 0, 38, 0, 39, 
 -	0, 40, 0, 7, 0, 42, 0, 43, 
 -	0, 44, 0, 45, 0, 46, 0, 47, 
 -	0, 49, 48, 49, 48, 50, 127, 129, 
 -	134, 49, 49, 9, 139, 9, 49, 48, 
 -	51, 105, 49, 48, 52, 62, 49, 48, 
 -	53, 49, 48, 54, 49, 48, 55, 49, 
 -	48, 56, 49, 48, 57, 49, 48, 58, 
 -	49, 48, 59, 49, 48, 60, 49, 48, 
 -	61, 49, 48, 49, 35, 48, 63, 49, 
 -	48, 64, 49, 48, 65, 49, 48, 66, 
 -	49, 48, 67, 49, 48, 68, 49, 48, 
 -	69, 49, 48, 70, 49, 48, 71, 49, 
 -	48, 72, 49, 35, 48, 73, 89, 49, 
 -	48, 74, 49, 48, 75, 49, 48, 76, 
 -	49, 48, 77, 49, 48, 78, 49, 48, 
 -	79, 49, 48, 80, 49, 48, 81, 49, 
 -	48, 82, 49, 48, 83, 49, 48, 84, 
 -	49, 48, 85, 49, 48, 86, 49, 48, 
 -	87, 49, 48, 88, 49, 48, 61, 49, 
 -	48, 90, 49, 48, 91, 49, 48, 92, 
 -	49, 48, 93, 49, 48, 94, 49, 48, 
 -	95, 49, 48, 96, 49, 48, 97, 49, 
 -	48, 98, 49, 48, 99, 49, 48, 100, 
 -	49, 35, 48, 101, 49, 48, 102, 49, 
 -	48, 103, 49, 48, 104, 49, 48, 61, 
 -	49, 48, 106, 115, 49, 48, 107, 49, 
 -	48, 108, 49, 48, 109, 49, 48, 110, 
 -	49, 48, 111, 49, 48, 112, 49, 48, 
 -	113, 49, 48, 114, 49, 48, 61, 49, 
 -	48, 116, 49, 48, 117, 49, 48, 118, 
 -	49, 48, 119, 49, 48, 120, 49, 48, 
 -	121, 49, 48, 122, 49, 48, 123, 49, 
 -	48, 124, 49, 48, 125, 49, 48, 126, 
 -	49, 48, 61, 49, 48, 128, 49, 48, 
 -	61, 49, 48, 130, 49, 48, 131, 49, 
 -	48, 132, 49, 48, 133, 49, 48, 61, 
 -	49, 48, 135, 49, 48, 136, 49, 48, 
 -	137, 49, 48, 138, 49, 48, 61, 49, 
 -	48, 49, 140, 48, 49, 141, 48, 49, 
 -	142, 48, 49, 143, 48, 49, 144, 48, 
 -	49, 145, 48, 49, 146, 48, 49, 147, 
 -	48, 49, 148, 48, 49, 149, 48, 49, 
 -	150, 48, 49, 151, 48, 49, 152, 48, 
 -	49, 9, 48, 154, 0, 155, 0, 156, 
 -	0, 157, 0, 158, 0, 159, 0, 161, 
 -	160, 161, 160, 162, 249, 251, 256, 161, 
 -	161, 9, 261, 275, 9, 161, 160, 163, 
 -	182, 227, 161, 160, 164, 167, 173, 176, 
 -	161, 160, 165, 161, 160, 166, 161, 160, 
 -	35, 161, 160, 168, 161, 160, 169, 161, 
 -	160, 170, 161, 160, 171, 161, 160, 172, 
 -	161, 160, 35, 161, 160, 174, 161, 160, 
 -	175, 161, 160, 170, 161, 160, 177, 161, 
 -	160, 178, 161, 160, 179, 161, 160, 180, 
 -	161, 160, 181, 161, 160, 35, 161, 160, 
 -	170, 183, 161, 160, 184, 161, 160, 185, 
 -	161, 160, 186, 161, 160, 187, 161, 160, 
 -	188, 161, 160, 189, 161, 160, 190, 161, 
 -	160, 191, 161, 160, 192, 161, 160, 193, 
 -	161, 35, 160, 194, 211, 161, 160, 195, 
 -	161, 160, 196, 161, 160, 197, 161, 160, 
 -	198, 161, 160, 199, 161, 160, 200, 161, 
 -	160, 201, 161, 160, 202, 161, 160, 203, 
 -	161, 160, 204, 161, 160, 205, 161, 160, 
 -	206, 161, 160, 207, 161, 160, 208, 161, 
 -	160, 209, 161, 160, 210, 161, 160, 161, 
 -	35, 160, 212, 161, 160, 213, 161, 160, 
 -	214, 161, 160, 215, 161, 160, 216, 161, 
 -	160, 217, 161, 160, 218, 161, 160, 219, 
 -	161, 160, 220, 161, 160, 221, 161, 160, 
 -	222, 161, 35, 160, 223, 161, 160, 224, 
 -	161, 160, 225, 161, 160, 226, 161, 160, 
 -	210, 161, 160, 228, 237, 161, 160, 229, 
 -	161, 160, 230, 161, 160, 231, 161, 160, 
 -	232, 161, 160, 233, 161, 160, 234, 161, 
 -	160, 235, 161, 160, 236, 161, 160, 210, 
 -	161, 160, 238, 161, 160, 239, 161, 160, 
 -	240, 161, 160, 241, 161, 160, 242, 161, 
 -	160, 243, 161, 160, 244, 161, 160, 245, 
 -	161, 160, 246, 161, 160, 247, 161, 160, 
 -	248, 161, 160, 210, 161, 160, 250, 161, 
 -	160, 170, 161, 160, 252, 161, 160, 253, 
 -	161, 160, 254, 161, 160, 255, 161, 160, 
 -	35, 161, 160, 257, 161, 160, 258, 161, 
 -	160, 259, 161, 160, 260, 161, 160, 210, 
 -	161, 160, 161, 262, 160, 161, 263, 160, 
 -	161, 264, 160, 161, 265, 160, 161, 266, 
 -	160, 161, 267, 160, 161, 268, 160, 161, 
 -	269, 160, 161, 270, 160, 161, 271, 160, 
 -	161, 272, 160, 161, 273, 160, 161, 274, 
 -	160, 161, 9, 160, 161, 35, 160, 277, 
 -	0, 278, 0, 280, 279, 279, 280, 279, 
 -	279, 281, 281, 282, 281, 281, 281, 281, 
 -	282, 281, 281, 281, 281, 283, 281, 281, 
 -	281, 281, 284, 281, 281, 9, 285, 285, 
 -	0, 9, 285, 285, 0, 9, 287, 286, 
 -	9, 0, 289, 0, 290, 0, 291, 0, 
 -	292, 0, 293, 0, 294, 0, 295, 0, 
 -	296, 0, 297, 0, 298, 0, 299, 0, 
 -	300, 0, 301, 0, 603, 0, 7, 0, 
 -	0, 0, 0, 0, 304, 305, 9, 305, 
 -	305, 303, 304, 304, 9, 305, 303, 305, 
 -	0, 306, 307, 306, 0, 311, 310, 309, 
 -	307, 310, 308, 0, 309, 307, 308, 0, 
 -	309, 308, 311, 310, 309, 307, 310, 308, 
 -	2, 10, 36, 41, 153, 311, 311, 276, 
 -	286, 288, 302, 303, 306, 311, 0, 313, 
 -	19, 18, 314, 19, 18, 315, 19, 18, 
 -	316, 19, 18, 34, 19, 18, 318, 0, 
 -	319, 0, 12, 0, 321, 0, 322, 0, 
 -	12, 0, 324, 0, 325, 0, 326, 0, 
 -	327, 0, 328, 0, 7, 0, 12, 330, 
 -	339, 0, 331, 0, 332, 0, 333, 0, 
 -	334, 0, 335, 0, 336, 0, 337, 0, 
 -	338, 0, 16, 0, 340, 0, 341, 0, 
 -	342, 0, 343, 0, 344, 0, 345, 0, 
 -	346, 0, 347, 0, 348, 0, 349, 457, 
 -	0, 350, 441, 0, 351, 0, 352, 0, 
 -	353, 0, 354, 0, 355, 0, 356, 0, 
 -	357, 0, 358, 0, 359, 0, 360, 0, 
 -	361, 0, 362, 0, 363, 0, 364, 0, 
 -	365, 0, 366, 0, 367, 0, 369, 368, 
 -	369, 368, 370, 414, 416, 421, 369, 369, 
 -	9, 426, 440, 9, 369, 368, 371, 390, 
 -	401, 369, 368, 372, 375, 381, 384, 369, 
 -	368, 373, 369, 368, 374, 369, 368, 35, 
 -	369, 368, 376, 369, 368, 377, 369, 368, 
 -	378, 369, 368, 379, 369, 368, 380, 369, 
 -	368, 35, 369, 368, 382, 369, 368, 383, 
 -	369, 368, 378, 369, 368, 385, 369, 368, 
 -	386, 369, 368, 387, 369, 368, 388, 369, 
 -	368, 389, 369, 368, 35, 369, 368, 378, 
 -	391, 369, 368, 392, 369, 368, 393, 369, 
 -	368, 394, 369, 368, 395, 369, 368, 396, 
 -	369, 368, 397, 369, 368, 398, 369, 368, 
 -	399, 369, 368, 400, 369, 368, 369, 35, 
 -	368, 402, 369, 368, 403, 369, 368, 404, 
 -	369, 368, 405, 369, 368, 406, 369, 368, 
 -	407, 369, 368, 408, 369, 368, 409, 369, 
 -	368, 410, 369, 368, 411, 369, 368, 412, 
 -	369, 368, 413, 369, 368, 400, 369, 368, 
 -	415, 369, 368, 378, 369, 368, 417, 369, 
 -	368, 418, 369, 368, 419, 369, 368, 420, 
 -	369, 368, 35, 369, 368, 422, 369, 368, 
 -	423, 369, 368, 424, 369, 368, 425, 369, 
 -	368, 400, 369, 368, 369, 427, 368, 369, 
 -	428, 368, 369, 429, 368, 369, 430, 368, 
 -	369, 431, 368, 369, 432, 368, 369, 433, 
 -	368, 369, 434, 368, 369, 435, 368, 369, 
 -	436, 368, 369, 437, 368, 369, 438, 368, 
 -	369, 439, 368, 369, 9, 368, 369, 35, 
 -	368, 442, 0, 443, 0, 444, 0, 445, 
 -	0, 446, 0, 447, 0, 448, 0, 449, 
 -	0, 450, 0, 451, 0, 452, 367, 0, 
 -	453, 0, 454, 0, 455, 0, 456, 0, 
 -	366, 0, 459, 458, 459, 458, 460, 547, 
 -	549, 554, 559, 459, 459, 9, 564, 578, 
 -	9, 459, 458, 461, 480, 525, 459, 458, 
 -	462, 465, 471, 474, 459, 458, 463, 459, 
 -	458, 464, 459, 458, 35, 459, 458, 466, 
 -	459, 458, 467, 459, 458, 468, 459, 458, 
 -	469, 459, 458, 470, 459, 458, 35, 459, 
 -	458, 472, 459, 458, 473, 459, 458, 468, 
 -	459, 458, 475, 459, 458, 476, 459, 458, 
 -	477, 459, 458, 478, 459, 458, 479, 459, 
 -	458, 35, 459, 458, 468, 481, 459, 458, 
 -	482, 459, 458, 483, 459, 458, 484, 459, 
 -	458, 485, 459, 458, 486, 459, 458, 487, 
 -	459, 458, 488, 459, 458, 489, 459, 458, 
 -	490, 459, 458, 491, 459, 35, 458, 492, 
 -	509, 459, 458, 493, 459, 458, 494, 459, 
 -	458, 495, 459, 458, 496, 459, 458, 497, 
 -	459, 458, 498, 459, 458, 499, 459, 458, 
 -	500, 459, 458, 501, 459, 458, 502, 459, 
 -	458, 503, 459, 458, 504, 459, 458, 505, 
 -	459, 458, 506, 459, 458, 507, 459, 458, 
 -	508, 459, 458, 459, 35, 458, 510, 459, 
 -	458, 511, 459, 458, 512, 459, 458, 513, 
 -	459, 458, 514, 459, 458, 515, 459, 458, 
 -	516, 459, 458, 517, 459, 458, 518, 459, 
 -	458, 519, 459, 458, 520, 459, 35, 458, 
 -	521, 459, 458, 522, 459, 458, 523, 459, 
 -	458, 524, 459, 458, 508, 459, 458, 526, 
 -	535, 459, 458, 527, 459, 458, 528, 459, 
 -	458, 529, 459, 458, 530, 459, 458, 531, 
 -	459, 458, 532, 459, 458, 533, 459, 458, 
 -	534, 459, 458, 508, 459, 458, 536, 459, 
 -	458, 537, 459, 458, 538, 459, 458, 539, 
 -	459, 458, 540, 459, 458, 541, 459, 458, 
 -	542, 459, 458, 543, 459, 458, 544, 459, 
 -	458, 545, 459, 458, 546, 459, 458, 508, 
 -	459, 458, 548, 459, 458, 468, 459, 458, 
 -	550, 459, 458, 551, 459, 458, 552, 459, 
 -	458, 553, 459, 458, 35, 459, 458, 555, 
 -	459, 458, 556, 459, 458, 557, 459, 458, 
 -	558, 459, 458, 508, 459, 458, 560, 459, 
 -	458, 561, 459, 458, 562, 459, 458, 563, 
 -	459, 458, 508, 459, 458, 459, 565, 458, 
 -	459, 566, 458, 459, 567, 458, 459, 568, 
 -	458, 459, 569, 458, 459, 570, 458, 459, 
 -	571, 458, 459, 572, 458, 459, 573, 458, 
 -	459, 574, 458, 459, 575, 458, 459, 576, 
 -	458, 459, 577, 458, 459, 9, 458, 459, 
 -	35, 458, 580, 589, 0, 581, 0, 582, 
 -	0, 583, 0, 584, 0, 585, 0, 586, 
 -	0, 587, 0, 588, 0, 366, 0, 590, 
 -	0, 591, 0, 592, 0, 593, 0, 594, 
 -	0, 595, 0, 596, 0, 597, 0, 598, 
 -	0, 599, 0, 600, 0, 46, 0, 602, 
 -	0, 9, 0, 0, 0
 -};
 -
 -static const unsigned char _lexer_trans_actions[] = {
 -	29, 29, 29, 29, 29, 0, 54, 0, 
 -	5, 1, 0, 29, 1, 35, 0, 43, 
 -	0, 0, 0, 43, 0, 0, 0, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 149, 
 -	126, 57, 110, 23, 0, 29, 29, 29, 
 -	29, 29, 54, 0, 5, 1, 0, 29, 
 -	1, 35, 0, 43, 0, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 144, 57, 54, 0, 84, 
 -	84, 54, 0, 81, 81, 0, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 54, 21, 0, 63, 63, 63, 63, 
 -	63, 130, 31, 60, 57, 31, 63, 57, 
 -	66, 31, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 144, 57, 54, 0, 84, 84, 84, 
 -	84, 54, 0, 69, 33, 69, 0, 0, 
 -	0, 0, 54, 0, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 54, 13, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 13, 0, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 13, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 13, 0, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 144, 
 -	57, 54, 0, 84, 84, 84, 84, 54, 
 -	0, 72, 33, 84, 72, 0, 0, 0, 
 -	0, 0, 54, 0, 0, 0, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	15, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 15, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 15, 54, 0, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 15, 0, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 54, 
 -	15, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 15, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	15, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 15, 0, 54, 15, 0, 0, 
 -	43, 0, 43, 139, 48, 9, 106, 11, 
 -	0, 134, 45, 45, 45, 3, 122, 33, 
 -	33, 33, 0, 122, 33, 33, 33, 0, 
 -	122, 33, 0, 33, 0, 102, 7, 7, 
 -	43, 54, 0, 0, 43, 114, 25, 0, 
 -	54, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	43, 43, 43, 43, 0, 27, 118, 27, 
 -	27, 51, 27, 0, 54, 0, 1, 0, 
 -	43, 0, 0, 0, 43, 54, 37, 37, 
 -	87, 37, 37, 43, 0, 39, 0, 43, 
 -	0, 0, 54, 0, 0, 39, 0, 0, 
 -	96, 96, 96, 96, 96, 54, 0, 93, 
 -	90, 41, 96, 90, 99, 0, 43, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 0, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 0, 
 -	43, 0, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 144, 57, 
 -	54, 0, 84, 84, 84, 84, 54, 0, 
 -	78, 33, 84, 78, 0, 0, 0, 0, 
 -	0, 54, 0, 0, 0, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 19, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 19, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 19, 54, 0, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 54, 19, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 19, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 19, 0, 54, 19, 
 -	0, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 144, 57, 54, 0, 84, 84, 
 -	84, 84, 84, 54, 0, 75, 33, 84, 
 -	75, 0, 0, 0, 0, 0, 54, 0, 
 -	0, 0, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 17, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 17, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 17, 54, 0, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 17, 0, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 54, 17, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 17, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 17, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 17, 0, 54, 
 -	17, 0, 0, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 0
 -};
 -
 -static const unsigned char _lexer_eof_actions[] = {
 -	0, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43
 -};
 -
 -static const int lexer_start = 1;
 -static const int lexer_first_final = 603;
 -static const int lexer_error = 0;
 -
 -static const int lexer_en_main = 1;
 -
 -
 -#line 258 "ragel/i18n/ja.c.rl"
 -
 -static VALUE 
 -unindent(VALUE con, int start_col)
 -{
 -  VALUE re;
 -  /* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */
 -  char pat[32]; 
 -  snprintf(pat, 32, "^[\t ]{0,%d}", start_col); 
 -  re = rb_reg_regcomp(rb_str_new2(pat));
 -  rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2(""));
 -
 -  return Qnil;
 -
 -}
 -
 -static void 
 -store_kw_con(VALUE listener, const char * event_name, 
 -             const char * keyword_at, size_t keyword_length, 
 -             const char * at,         size_t length, 
 -             int current_line)
 -{
 -  VALUE con = Qnil, kw = Qnil;
 -  kw = ENCODED_STR_NEW(keyword_at, keyword_length);
 -  con = ENCODED_STR_NEW(at, length);
 -  rb_funcall(con, rb_intern("strip!"), 0);
 -  rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); 
 -}
 -
 -static void
 -store_multiline_kw_con(VALUE listener, const char * event_name,
 -                      const char * keyword_at, size_t keyword_length,
 -                      const char * at,         size_t length,
 -                      int current_line, int start_col)
 -{
 -  VALUE split;
 -  VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil;
 -
 -  kw = ENCODED_STR_NEW(keyword_at, keyword_length);
 -  con = ENCODED_STR_NEW(at, length);
 -
 -  unindent(con, start_col);
 -  
 -  split = rb_str_split(con, "\n");
 -
 -  name = rb_funcall(split, rb_intern("shift"), 0);
 -  desc = rb_ary_join(split, rb_str_new2( "\n" ));
 -
 -  if( name == Qnil ) 
 -  {
 -    name = rb_str_new2("");
 -  }
 -  if( rb_funcall(desc, rb_intern("size"), 0) == 0) 
 -  {
 -    desc = rb_str_new2("");
 -  }
 -  rb_funcall(name, rb_intern("strip!"), 0);
 -  rb_funcall(desc, rb_intern("rstrip!"), 0);
 -  rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); 
 -}
 -
 -static void 
 -store_attr(VALUE listener, const char * attr_type,
 -           const char * at, size_t length, 
 -           int line)
 -{
 -  VALUE val = ENCODED_STR_NEW(at, length);
 -  rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line));
 -}
 -static void 
 -store_docstring_content(VALUE listener, 
 -          int start_col, 
 -          const char *type_at, size_t type_length,
 -          const char *at, size_t length, 
 -          int current_line)
 -{
 -  VALUE re2;
 -  VALUE unescape_escaped_quotes;
 -  VALUE con = ENCODED_STR_NEW(at, length);
 -  VALUE con_type = ENCODED_STR_NEW(type_at, type_length);
 -
 -  unindent(con, start_col);
 -
 -  re2 = rb_reg_regcomp(rb_str_new2("\r\\Z"));
 -  unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\""));
 -  rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2(""));
 -  rb_funcall(con_type, rb_intern("strip!"), 0);
 -  rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\""));
 -  rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line));
 -}
 -static void 
 -raise_lexer_error(const char * at, int line)
 -{ 
 -  rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at);
 -}
 -
 -static void lexer_init(lexer_state *lexer) {
 -  lexer->content_start = 0;
 -  lexer->content_end = 0;
 -  lexer->content_len = 0;
 -  lexer->docstring_content_type_start = 0;
 -  lexer->docstring_content_type_end = 0;
 -  lexer->mark = 0;
 -  lexer->keyword_start = 0;
 -  lexer->keyword_end = 0;
 -  lexer->next_keyword_start = 0;
 -  lexer->line_number = 1;
 -  lexer->last_newline = 0;
 -  lexer->final_newline = 0;
 -  lexer->start_col = 0;
 -}
 -
 -static VALUE CLexer_alloc(VALUE klass)
 -{
 -  VALUE obj;
 -  lexer_state *lxr = ALLOC(lexer_state);
 -  lexer_init(lxr);
 -
 -  obj = Data_Wrap_Struct(klass, NULL, -1, lxr);
 -
 -  return obj;
 -}
 -
 -static VALUE CLexer_init(VALUE self, VALUE listener)
 -{
 -  lexer_state *lxr; 
 -  rb_iv_set(self, "@listener", listener);
 -  
 -  lxr = NULL;
 -  DATA_GET(self, lexer_state, lxr);
 -  lexer_init(lxr);
 -  
 -  return self;
 -}
 -
 -static VALUE CLexer_scan(VALUE self, VALUE input)
 -{
 -  VALUE input_copy;
 -  char *data;
 -  size_t len;
 -  VALUE listener = rb_iv_get(self, "@listener");
 -
 -  lexer_state *lexer;
 -  lexer = NULL;
 -  DATA_GET(self, lexer_state, lexer);
 -
 -  input_copy = rb_str_dup(input);
 -
 -  rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%"));
 -  data = RSTRING_PTR(input_copy);
 -  len = RSTRING_LEN(input_copy);
 -  
 -  if (len == 0) { 
 -    rb_raise(rb_eGherkinLexingError, "No content to lex.");
 -  } else {
 -
 -    const char *p, *pe, *eof;
 -    int cs = 0;
 -    
 -    VALUE current_row = Qnil;
 -
 -    p = data;
 -    pe = data + len;
 -    eof = pe;
 -    
 -    assert(*pe == '\0' && "pointer does not end on NULL");
 -    
 -    
 -#line 1303 "ext/gherkin_lexer_ja/gherkin_lexer_ja.c"
 -	{
 -	cs = lexer_start;
 -	}
 -
 -#line 425 "ragel/i18n/ja.c.rl"
 -    
 -#line 1310 "ext/gherkin_lexer_ja/gherkin_lexer_ja.c"
 -	{
 -	int _klen;
 -	unsigned int _trans;
 -	const char *_acts;
 -	unsigned int _nacts;
 -	const char *_keys;
 -
 -	if ( p == pe )
 -		goto _test_eof;
 -	if ( cs == 0 )
 -		goto _out;
 -_resume:
 -	_keys = _lexer_trans_keys + _lexer_key_offsets[cs];
 -	_trans = _lexer_index_offsets[cs];
 -
 -	_klen = _lexer_single_lengths[cs];
 -	if ( _klen > 0 ) {
 -		const char *_lower = _keys;
 -		const char *_mid;
 -		const char *_upper = _keys + _klen - 1;
 -		while (1) {
 -			if ( _upper < _lower )
 -				break;
 -
 -			_mid = _lower + ((_upper-_lower) >> 1);
 -			if ( (*p) < *_mid )
 -				_upper = _mid - 1;
 -			else if ( (*p) > *_mid )
 -				_lower = _mid + 1;
 -			else {
 -				_trans += (unsigned int)(_mid - _keys);
 -				goto _match;
 -			}
 -		}
 -		_keys += _klen;
 -		_trans += _klen;
 -	}
 -
 -	_klen = _lexer_range_lengths[cs];
 -	if ( _klen > 0 ) {
 -		const char *_lower = _keys;
 -		const char *_mid;
 -		const char *_upper = _keys + (_klen<<1) - 2;
 -		while (1) {
 -			if ( _upper < _lower )
 -				break;
 -
 -			_mid = _lower + (((_upper-_lower) >> 1) & ~1);
 -			if ( (*p) < _mid[0] )
 -				_upper = _mid - 2;
 -			else if ( (*p) > _mid[1] )
 -				_lower = _mid + 2;
 -			else {
 -				_trans += (unsigned int)((_mid - _keys)>>1);
 -				goto _match;
 -			}
 -		}
 -		_trans += _klen;
 -	}
 -
 -_match:
 -	cs = _lexer_trans_targs[_trans];
 -
 -	if ( _lexer_trans_actions[_trans] == 0 )
 -		goto _again;
 -
 -	_acts = _lexer_actions + _lexer_trans_actions[_trans];
 -	_nacts = (unsigned int) *_acts++;
 -	while ( _nacts-- > 0 )
 -	{
 -		switch ( *_acts++ )
 -		{
 -	case 0:
 -#line 83 "ragel/i18n/ja.c.rl"
 -	{
 -		MARK(content_start, p);
 -    lexer->current_line = lexer->line_number;
 -    lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2;
 -  }
 -	break;
 -	case 1:
 -#line 89 "ragel/i18n/ja.c.rl"
 -	{
 -    MARK(content_start, p);
 -  }
 -	break;
 -	case 2:
 -#line 93 "ragel/i18n/ja.c.rl"
 -	{
 -    lexer->current_line = lexer->line_number;
 -    lexer->start_col = p - data - lexer->last_newline;
 -  }
 -	break;
 -	case 3:
 -#line 98 "ragel/i18n/ja.c.rl"
 -	{
 -    int len = LEN(content_start, PTR_TO(final_newline));
 -    int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end));
 -
 -    if (len < 0) len = 0;
 -    if (type_len < 0) len = 0;
 -
 -    store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line);
 -  }
 -	break;
 -	case 4:
 -#line 108 "ragel/i18n/ja.c.rl"
 -	{ 
 -    MARK(docstring_content_type_start, p);
 -  }
 -	break;
 -	case 5:
 -#line 112 "ragel/i18n/ja.c.rl"
 -	{ 
 -    MARK(docstring_content_type_end, p);
 -  }
 -	break;
 -	case 6:
 -#line 116 "ragel/i18n/ja.c.rl"
 -	{
 -    STORE_KW_END_CON(feature);
 -  }
 -	break;
 -	case 7:
 -#line 120 "ragel/i18n/ja.c.rl"
 -	{
 -    STORE_KW_END_CON(background);
 -  }
 -	break;
 -	case 8:
 -#line 124 "ragel/i18n/ja.c.rl"
 -	{
 -    STORE_KW_END_CON(scenario);
 -  }
 -	break;
 -	case 9:
 -#line 128 "ragel/i18n/ja.c.rl"
 -	{
 -    STORE_KW_END_CON(scenario_outline);
 -  }
 -	break;
 -	case 10:
 -#line 132 "ragel/i18n/ja.c.rl"
 -	{
 -    STORE_KW_END_CON(examples);
 -  }
 -	break;
 -	case 11:
 -#line 136 "ragel/i18n/ja.c.rl"
 -	{
 -    store_kw_con(listener, "step",
 -      PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
 -      PTR_TO(content_start), LEN(content_start, p), 
 -      lexer->current_line);
 -  }
 -	break;
 -	case 12:
 -#line 143 "ragel/i18n/ja.c.rl"
 -	{
 -    STORE_ATTR(comment);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 13:
 -#line 148 "ragel/i18n/ja.c.rl"
 -	{
 -    STORE_ATTR(tag);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 14:
 -#line 153 "ragel/i18n/ja.c.rl"
 -	{
 -    lexer->line_number += 1;
 -    MARK(final_newline, p);
 -  }
 -	break;
 -	case 15:
 -#line 158 "ragel/i18n/ja.c.rl"
 -	{
 -    MARK(last_newline, p + 1);
 -  }
 -	break;
 -	case 16:
 -#line 162 "ragel/i18n/ja.c.rl"
 -	{
 -    if (lexer->mark == 0) {
 -      MARK(mark, p);
 -    }
 -  }
 -	break;
 -	case 17:
 -#line 168 "ragel/i18n/ja.c.rl"
 -	{
 -    MARK(keyword_end, p);
 -    MARK(keyword_start, PTR_TO(mark));
 -    MARK(content_start, p + 1);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 18:
 -#line 175 "ragel/i18n/ja.c.rl"
 -	{
 -    MARK(content_end, p);
 -  }
 -	break;
 -	case 19:
 -#line 179 "ragel/i18n/ja.c.rl"
 -	{
 -    p = p - 1;
 -    lexer->current_line = lexer->line_number;
 -    current_row = rb_ary_new();
 -  }
 -	break;
 -	case 20:
 -#line 185 "ragel/i18n/ja.c.rl"
 -	{
 -		MARK(content_start, p);
 -  }
 -	break;
 -	case 21:
 -#line 189 "ragel/i18n/ja.c.rl"
 -	{
 -    VALUE re_pipe, re_newline, re_backslash;
 -    VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
 -    rb_funcall(con, rb_intern("strip!"), 0);
 -    re_pipe      = rb_reg_regcomp(rb_str_new2("\\\\\\|"));
 -    re_newline   = rb_reg_regcomp(rb_str_new2("\\\\n"));
 -    re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_pipe,      rb_str_new2("|"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_newline,   rb_str_new2("\n"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\"));
 -
 -    rb_ary_push(current_row, con);
 -  }
 -	break;
 -	case 22:
 -#line 203 "ragel/i18n/ja.c.rl"
 -	{
 -    rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
 -  }
 -	break;
 -	case 23:
 -#line 207 "ragel/i18n/ja.c.rl"
 -	{
 -    int line;
 -    if (cs < lexer_first_final) {
 -      size_t count = 0;
 -      VALUE newstr_val;
 -      char *newstr;
 -      int newstr_count = 0;        
 -      size_t len;
 -      const char *buff;
 -      if (lexer->last_newline != 0) {
 -        len = LEN(last_newline, eof);
 -        buff = PTR_TO(last_newline);
 -      } else {
 -        len = strlen(data);
 -        buff = data;
 -      }
 -
 -      /* Allocate as a ruby string so that it gets cleaned up by GC */
 -      newstr_val = rb_str_new(buff, len);
 -      newstr = RSTRING_PTR(newstr_val);
 -
 -
 -      for (count = 0; count < len; count++) {
 -        if(buff[count] == 10) {
 -          newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
 -          break;
 -        } else {
 -          if (buff[count] == '%') {
 -            newstr[newstr_count++] = buff[count];
 -            newstr[newstr_count] = buff[count];
 -          } else {
 -            newstr[newstr_count] = buff[count];
 -          }
 -        }
 -        newstr_count++;
 -      }
 -
 -      line = lexer->line_number;
 -      lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
 -      raise_lexer_error(newstr, line);
 -    } else {
 -      rb_funcall(listener, rb_intern("eof"), 0);
 -    }
 -  }
 -	break;
 -#line 1600 "ext/gherkin_lexer_ja/gherkin_lexer_ja.c"
 -		}
 -	}
 -
 -_again:
 -	if ( cs == 0 )
 -		goto _out;
 -	if ( ++p != pe )
 -		goto _resume;
 -	_test_eof: {}
 -	if ( p == eof )
 -	{
 -	const char *__acts = _lexer_actions + _lexer_eof_actions[cs];
 -	unsigned int __nacts = (unsigned int) *__acts++;
 -	while ( __nacts-- > 0 ) {
 -		switch ( *__acts++ ) {
 -	case 23:
 -#line 207 "ragel/i18n/ja.c.rl"
 -	{
 -    int line;
 -    if (cs < lexer_first_final) {
 -      size_t count = 0;
 -      VALUE newstr_val;
 -      char *newstr;
 -      int newstr_count = 0;        
 -      size_t len;
 -      const char *buff;
 -      if (lexer->last_newline != 0) {
 -        len = LEN(last_newline, eof);
 -        buff = PTR_TO(last_newline);
 -      } else {
 -        len = strlen(data);
 -        buff = data;
 -      }
 -
 -      /* Allocate as a ruby string so that it gets cleaned up by GC */
 -      newstr_val = rb_str_new(buff, len);
 -      newstr = RSTRING_PTR(newstr_val);
 -
 -
 -      for (count = 0; count < len; count++) {
 -        if(buff[count] == 10) {
 -          newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
 -          break;
 -        } else {
 -          if (buff[count] == '%') {
 -            newstr[newstr_count++] = buff[count];
 -            newstr[newstr_count] = buff[count];
 -          } else {
 -            newstr[newstr_count] = buff[count];
 -          }
 -        }
 -        newstr_count++;
 -      }
 -
 -      line = lexer->line_number;
 -      lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
 -      raise_lexer_error(newstr, line);
 -    } else {
 -      rb_funcall(listener, rb_intern("eof"), 0);
 -    }
 -  }
 -	break;
 -#line 1663 "ext/gherkin_lexer_ja/gherkin_lexer_ja.c"
 -		}
 -	}
 -	}
 -
 -	_out: {}
 -	}
 -
 -#line 426 "ragel/i18n/ja.c.rl"
 -
 -    assert(p <= pe && "data overflow after parsing execute");
 -    assert(lexer->content_start <= len && "content starts after data end");
 -    assert(lexer->mark < len && "mark is after data end");
 -    
 -    /* Reset lexer by re-initializing the whole thing */
 -    lexer_init(lexer);
 -
 -    if (cs == lexer_error) {
 -      rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails.");
 -    } else {
 -      return Qtrue;
 -    }
 -  }
 -}
 -
 -void Init_gherkin_lexer_ja()
 -{
 -  mGherkin = rb_define_module("Gherkin");
 -  mGherkinLexer = rb_define_module_under(mGherkin, "Lexer");
 -  rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError"));
 -
 -  mCLexer = rb_define_module_under(mGherkin, "CLexer");
 -  cI18nLexer = rb_define_class_under(mCLexer, "Ja", rb_cObject);
 -  rb_define_alloc_func(cI18nLexer, CLexer_alloc);
 -  rb_define_method(cI18nLexer, "initialize", CLexer_init, 1);
 -  rb_define_method(cI18nLexer, "scan", CLexer_scan, 1);
 -}
 -
diff --cc ext/gherkin_lexer_ko/extconf.rb
index 31dfba2,31dfba2..0000000
deleted file mode 100644,100644
--- a/ext/gherkin_lexer_ko/extconf.rb
+++ /dev/null
@@@ -1,6 -1,6 +1,0 @@@
--require 'mkmf'
--CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags']
--$CFLAGS << ' -O0 -Wall' if CONFIG['CC'] =~ /gcc|clang/
--dir_config("gherkin_lexer_ko")
--have_library("c", "main")
--create_makefile("gherkin_lexer_ko")
diff --cc ext/gherkin_lexer_ko/gherkin_lexer_ko.c
index fcba3e0,91e9fd7..0000000
deleted file mode 100644,100644
--- a/ext/gherkin_lexer_ko/gherkin_lexer_ko.c
+++ /dev/null
@@@ -1,1360 -1,1360 +1,0 @@@
--
- #line 1 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ko.c.rl"
- #include <assert.h>
- #include <ruby.h>
- 
- #if defined(_WIN32)
- #include <stddef.h>
- #endif
- 
- #ifdef HAVE_RUBY_RE_H
- #include <ruby/re.h>
- #else
- #include <re.h>
- #endif
- 
- #ifdef HAVE_RUBY_ENCODING_H
- #include <ruby/encoding.h>
- #define ENCODED_STR_NEW(ptr, len) \
-     rb_enc_str_new(ptr, len, rb_utf8_encoding())
- #else
- #define ENCODED_STR_NEW(ptr, len) \
-     rb_str_new(ptr, len)
- #endif
- 
- #ifndef RSTRING_PTR
- #define RSTRING_PTR(s) (RSTRING(s)->ptr)
- #endif
- 
- #ifndef RSTRING_LEN
- #define RSTRING_LEN(s) (RSTRING(s)->len)
- #endif
- 
- #define DATA_GET(FROM, TYPE, NAME) \
-   Data_Get_Struct(FROM, TYPE, NAME); \
-   if (NAME == NULL) { \
-     rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \
-   }
-  
- typedef struct lexer_state {
-   int content_len;
-   int line_number;
-   int current_line;
-   int start_col;
-   size_t mark;
-   size_t keyword_start;
-   size_t keyword_end;
-   size_t next_keyword_start;
-   size_t content_start;
-   size_t content_end;
-   size_t docstring_content_type_start;
-   size_t docstring_content_type_end;
-   size_t query_start;
-   size_t last_newline;
-   size_t final_newline;
- } lexer_state;
- 
- static VALUE mGherkin;
- static VALUE mGherkinLexer;
- static VALUE mCLexer;
- static VALUE cI18nLexer;
- static VALUE rb_eGherkinLexingError;
- 
- #define LEN(AT, P) (P - data - lexer->AT)
- #define MARK(M, P) (lexer->M = (P) - data)
- #define PTR_TO(P) (data + lexer->P)
- 
- #define STORE_KW_END_CON(EVENT) \
-   store_multiline_kw_con(listener, # EVENT, \
-     PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \
-     PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \
-     lexer->current_line, lexer->start_col); \
-     if (lexer->content_end != 0) { \
-       p = PTR_TO(content_end - 1); \
-     } \
-     lexer->content_end = 0
- 
- #define STORE_ATTR(ATTR) \
-     store_attr(listener, # ATTR, \
-       PTR_TO(content_start), LEN(content_start, p), \
-       lexer->line_number)
- 
- 
- #line 254 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ko.c.rl"
- 
- 
- /** Data **/
- 
- #line 89 "ext/gherkin_lexer_ko/gherkin_lexer_ko.c"
- static const char _lexer_actions[] = {
- 	0, 1, 0, 1, 1, 1, 2, 1, 
- 	3, 1, 4, 1, 5, 1, 6, 1, 
- 	7, 1, 8, 1, 9, 1, 10, 1, 
- 	11, 1, 12, 1, 13, 1, 16, 1, 
- 	17, 1, 18, 1, 19, 1, 20, 1, 
- 	21, 1, 22, 1, 23, 2, 1, 18, 
- 	2, 4, 5, 2, 13, 0, 2, 14, 
- 	15, 2, 17, 0, 2, 17, 2, 2, 
- 	17, 16, 2, 17, 19, 2, 18, 6, 
- 	2, 18, 7, 2, 18, 8, 2, 18, 
- 	9, 2, 18, 10, 2, 18, 16, 2, 
- 	20, 21, 2, 22, 0, 2, 22, 2, 
- 	2, 22, 16, 2, 22, 19, 3, 3, 
- 	14, 15, 3, 5, 14, 15, 3, 11, 
- 	14, 15, 3, 12, 14, 15, 3, 13, 
- 	14, 15, 3, 14, 15, 18, 3, 17, 
- 	0, 11, 3, 17, 14, 15, 4, 1, 
- 	14, 15, 18, 4, 4, 5, 14, 15, 
- 	4, 17, 0, 14, 15, 5, 17, 0, 
- 	11, 14, 15
- };
- 
- static const short _lexer_key_offsets[] = {
- 	0, 0, 15, 17, 18, 19, 21, 22, 
- 	23, 24, 25, 27, 29, 43, 47, 48, 
- 	49, 50, 52, 53, 54, 55, 56, 57, 
- 	58, 59, 60, 61, 62, 63, 64, 65, 
- 	77, 80, 82, 84, 87, 89, 91, 93, 
- 	95, 109, 112, 113, 114, 115, 116, 117, 
- 	118, 119, 120, 121, 122, 124, 125, 126, 
- 	127, 128, 129, 130, 131, 132, 133, 145, 
- 	148, 150, 152, 155, 157, 159, 161, 163, 
- 	165, 167, 169, 171, 173, 175, 177, 179, 
- 	181, 185, 187, 189, 191, 194, 196, 198, 
- 	200, 202, 204, 206, 209, 211, 213, 215, 
- 	217, 219, 221, 223, 225, 227, 229, 231, 
- 	233, 235, 237, 239, 241, 243, 245, 247, 
- 	249, 251, 253, 255, 257, 259, 261, 263, 
- 	265, 267, 269, 271, 273, 275, 277, 279, 
- 	281, 282, 283, 295, 298, 300, 302, 305, 
- 	307, 309, 311, 313, 315, 317, 319, 321, 
- 	323, 325, 327, 329, 331, 336, 338, 340, 
- 	342, 345, 347, 349, 351, 353, 355, 357, 
- 	359, 361, 363, 365, 368, 370, 372, 374, 
- 	376, 378, 380, 382, 384, 386, 388, 391, 
- 	393, 395, 397, 399, 401, 403, 405, 407, 
- 	409, 411, 413, 415, 417, 419, 421, 423, 
- 	425, 427, 429, 431, 433, 435, 437, 439, 
- 	441, 443, 445, 447, 449, 451, 453, 455, 
- 	456, 457, 458, 459, 466, 468, 470, 472, 
- 	474, 476, 478, 479, 480, 481, 482, 483, 
- 	484, 485, 486, 487, 488, 489, 490, 491, 
- 	493, 495, 500, 505, 510, 515, 519, 523, 
- 	525, 526, 527, 528, 529, 530, 531, 532, 
- 	533, 534, 535, 536, 537, 538, 539, 540, 
- 	541, 546, 553, 558, 562, 568, 571, 573, 
- 	579, 593, 595, 597, 599, 601, 603, 605, 
- 	607, 609, 611, 615, 617, 619, 621, 624, 
- 	626, 628, 630, 632, 634, 636, 639, 641, 
- 	643, 645, 647, 649, 651, 653, 655, 657, 
- 	659, 662, 664, 666, 668, 670, 672, 674, 
- 	676, 678, 680, 682, 684, 686, 688, 690, 
- 	692, 694, 696, 698, 700, 702, 704, 706, 
- 	708, 710, 712, 714, 716, 718, 720, 722, 
- 	724, 726, 727, 728, 729, 730, 731, 732, 
- 	733, 734, 735, 736, 737, 747, 749, 751, 
- 	753, 755, 757, 759, 761, 763, 765, 767, 
- 	769, 772, 774, 776, 778, 780, 782, 784, 
- 	786, 788, 790, 792, 795, 797, 799, 801, 
- 	803, 805, 807, 809, 811, 813, 815, 817, 
- 	819, 821, 823, 825, 827, 829, 831, 833, 
- 	835, 837, 838, 839
- };
- 
- static const char _lexer_trans_keys[] = {
- 	-22, -21, -20, -19, -17, 10, 32, 34, 
- 	35, 37, 42, 64, 124, 9, 13, -73, 
- 	-72, -72, -21, -97, -90, -84, -21, -87, 
- 	-76, 10, 13, 10, 13, -22, -21, -20, 
- 	-19, 10, 32, 34, 35, 37, 42, 64, 
- 	124, 9, 13, -117, -89, -88, -80, -88, 
- 	-116, -20, -107, -99, -67, -68, -68, -20, 
- 	-96, -128, -80, -22, -78, -67, 58, 10, 
- 	10, -22, -21, -20, -19, 10, 32, 35, 
- 	37, 42, 64, 9, 13, -73, -72, 10, 
- 	-72, 10, -21, 10, -97, -90, 10, -84, 
- 	10, -21, 10, -87, 10, -76, 10, -22, 
- 	-21, -20, -19, 10, 32, 34, 35, 37, 
- 	42, 64, 124, 9, 13, -117, -104, -95, 
- 	-100, -21, -126, -104, -21, -90, -84, -20, 
- 	-104, -92, 32, 58, -22, -80, -100, -20, 
- 	-102, -108, 58, 10, 10, -22, -21, -20, 
- 	-19, 10, 32, 35, 37, 42, 64, 9, 
- 	13, -73, -72, 10, -72, 10, -21, 10, 
- 	-97, -90, 10, -84, 10, -21, 10, -87, 
- 	10, -76, 10, -84, 10, -22, 10, -77, 
- 	10, -96, 10, -80, 10, -21, 10, -118, 
- 	10, -91, 10, 10, 58, -117, -89, -88, 
- 	10, -88, 10, -116, 10, -20, 10, -107, 
- 	-99, 10, -67, 10, -68, 10, -68, 10, 
- 	-20, 10, -96, 10, -128, 10, -117, -95, 
- 	10, -100, 10, -21, 10, -126, 10, -104, 
- 	10, -21, 10, -90, 10, -84, 10, -20, 
- 	10, -104, 10, -92, 10, -80, 10, -22, 
- 	10, -79, 10, -107, 10, -104, 10, -20, 
- 	10, -89, 10, -128, 10, -21, 10, -89, 
- 	10, -116, 10, 10, 95, 10, 70, 10, 
- 	69, 10, 65, 10, 84, 10, 85, 10, 
- 	82, 10, 69, 10, 95, 10, 69, 10, 
- 	78, 10, 68, 10, 95, 10, 37, 10, 
- 	32, 10, 10, -22, -21, -20, -19, 10, 
- 	32, 35, 37, 42, 64, 9, 13, -73, 
- 	-72, 10, -72, 10, -21, 10, -97, -90, 
- 	10, -84, 10, -21, 10, -87, 10, -76, 
- 	10, -84, 10, -22, 10, -77, 10, -96, 
- 	10, -80, 10, -21, 10, -118, 10, -91, 
- 	10, 10, 58, -117, -89, -88, -80, 10, 
- 	-88, 10, -116, 10, -20, 10, -107, -99, 
- 	10, -67, 10, -68, 10, -68, 10, -20, 
- 	10, -96, 10, -128, 10, -80, 10, -22, 
- 	10, -78, 10, -67, 10, -117, -95, 10, 
- 	-100, 10, -21, 10, -126, 10, -104, 10, 
- 	-21, 10, -90, 10, -84, 10, -20, 10, 
- 	-104, 10, -92, 10, 10, 32, 58, -22, 
- 	10, -80, 10, -100, 10, -20, 10, -102, 
- 	10, -108, 10, -80, 10, -22, 10, -79, 
- 	10, -107, 10, -104, 10, -20, 10, -89, 
- 	10, -128, 10, -21, 10, -89, 10, -116, 
- 	10, 10, 95, 10, 70, 10, 69, 10, 
- 	65, 10, 84, 10, 85, 10, 82, 10, 
- 	69, 10, 95, 10, 69, 10, 78, 10, 
- 	68, 10, 95, 10, 37, 10, 32, -120, 
- 	58, 10, 10, -22, 10, 32, 35, 124, 
- 	9, 13, -72, 10, -80, 10, -21, 10, 
- 	-118, 10, -91, 10, 10, 58, -80, -22, 
- 	-79, -107, -104, -20, -89, -128, -21, -89, 
- 	-116, 34, 34, 10, 13, 10, 13, 10, 
- 	32, 34, 9, 13, 10, 32, 34, 9, 
- 	13, 10, 32, 34, 9, 13, 10, 32, 
- 	34, 9, 13, 10, 32, 9, 13, 10, 
- 	32, 9, 13, 10, 13, 10, 95, 70, 
- 	69, 65, 84, 85, 82, 69, 95, 69, 
- 	78, 68, 95, 37, 32, 13, 32, 64, 
- 	9, 10, 9, 10, 13, 32, 64, 11, 
- 	12, 10, 32, 64, 9, 13, 32, 124, 
- 	9, 13, 10, 32, 92, 124, 9, 13, 
- 	10, 92, 124, 10, 92, 10, 32, 92, 
- 	124, 9, 13, -22, -21, -20, -19, 10, 
- 	32, 34, 35, 37, 42, 64, 124, 9, 
- 	13, -84, 10, -22, 10, -77, 10, -96, 
- 	10, -80, 10, -21, 10, -118, 10, -91, 
- 	10, 10, 58, -117, -89, -88, 10, -88, 
- 	10, -116, 10, -20, 10, -107, -99, 10, 
- 	-67, 10, -68, 10, -68, 10, -20, 10, 
- 	-96, 10, -128, 10, -117, -95, 10, -100, 
- 	10, -21, 10, -126, 10, -104, 10, -21, 
- 	10, -90, 10, -84, 10, -20, 10, -104, 
- 	10, -92, 10, 10, 32, 58, -22, 10, 
- 	-80, 10, -100, 10, -20, 10, -102, 10, 
- 	-108, 10, -80, 10, -22, 10, -79, 10, 
- 	-107, 10, -104, 10, -20, 10, -89, 10, 
- 	-128, 10, -21, 10, -89, 10, -116, 10, 
- 	10, 95, 10, 70, 10, 69, 10, 65, 
- 	10, 84, 10, 85, 10, 82, 10, 69, 
- 	10, 95, 10, 69, 10, 78, 10, 68, 
- 	10, 95, 10, 37, 10, 32, -84, -22, 
- 	-77, -96, -80, -21, -118, -91, 58, 10, 
- 	10, -22, -21, -20, 10, 32, 35, 37, 
- 	64, 9, 13, -72, 10, -80, 10, -21, 
- 	10, -118, 10, -91, 10, 10, 58, -80, 
- 	10, -80, 10, -22, 10, -78, 10, -67, 
- 	10, -117, -104, 10, -100, 10, -21, 10, 
- 	-126, 10, -104, 10, -21, 10, -90, 10, 
- 	-84, 10, -20, 10, -104, 10, -92, 10, 
- 	10, 32, 58, -22, 10, -80, 10, -100, 
- 	10, -20, 10, -102, 10, -108, 10, -120, 
- 	10, 10, 95, 10, 70, 10, 69, 10, 
- 	65, 10, 84, 10, 85, 10, 82, 10, 
- 	69, 10, 95, 10, 69, 10, 78, 10, 
- 	68, 10, 95, 10, 37, -69, -65, 0
- };
- 
- static const char _lexer_single_lengths[] = {
- 	0, 13, 2, 1, 1, 2, 1, 1, 
- 	1, 1, 2, 2, 12, 4, 1, 1, 
- 	1, 2, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 10, 
- 	3, 2, 2, 3, 2, 2, 2, 2, 
- 	12, 3, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 2, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 10, 3, 
- 	2, 2, 3, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	4, 2, 2, 2, 3, 2, 2, 2, 
- 	2, 2, 2, 3, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	1, 1, 10, 3, 2, 2, 3, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 5, 2, 2, 2, 
- 	3, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 3, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 3, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 1, 
- 	1, 1, 1, 5, 2, 2, 2, 2, 
- 	2, 2, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 2, 
- 	2, 3, 3, 3, 3, 2, 2, 2, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	3, 5, 3, 2, 4, 3, 2, 4, 
- 	12, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 4, 2, 2, 2, 3, 2, 
- 	2, 2, 2, 2, 2, 3, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	3, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 8, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	3, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 3, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 1, 1, 0
- };
- 
- static const char _lexer_range_lengths[] = {
- 	0, 1, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 1, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 1, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	1, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 1, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 1, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 1, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 1, 1, 1, 1, 1, 1, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	1, 1, 1, 1, 1, 0, 0, 1, 
- 	1, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 1, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0
- };
- 
- static const short _lexer_index_offsets[] = {
- 	0, 0, 15, 18, 20, 22, 25, 27, 
- 	29, 31, 33, 36, 39, 53, 58, 60, 
- 	62, 64, 67, 69, 71, 73, 75, 77, 
- 	79, 81, 83, 85, 87, 89, 91, 93, 
- 	105, 109, 112, 115, 119, 122, 125, 128, 
- 	131, 145, 149, 151, 153, 155, 157, 159, 
- 	161, 163, 165, 167, 169, 172, 174, 176, 
- 	178, 180, 182, 184, 186, 188, 190, 202, 
- 	206, 209, 212, 216, 219, 222, 225, 228, 
- 	231, 234, 237, 240, 243, 246, 249, 252, 
- 	255, 260, 263, 266, 269, 273, 276, 279, 
- 	282, 285, 288, 291, 295, 298, 301, 304, 
- 	307, 310, 313, 316, 319, 322, 325, 328, 
- 	331, 334, 337, 340, 343, 346, 349, 352, 
- 	355, 358, 361, 364, 367, 370, 373, 376, 
- 	379, 382, 385, 388, 391, 394, 397, 400, 
- 	403, 405, 407, 419, 423, 426, 429, 433, 
- 	436, 439, 442, 445, 448, 451, 454, 457, 
- 	460, 463, 466, 469, 472, 478, 481, 484, 
- 	487, 491, 494, 497, 500, 503, 506, 509, 
- 	512, 515, 518, 521, 525, 528, 531, 534, 
- 	537, 540, 543, 546, 549, 552, 555, 559, 
- 	562, 565, 568, 571, 574, 577, 580, 583, 
- 	586, 589, 592, 595, 598, 601, 604, 607, 
- 	610, 613, 616, 619, 622, 625, 628, 631, 
- 	634, 637, 640, 643, 646, 649, 652, 655, 
- 	657, 659, 661, 663, 670, 673, 676, 679, 
- 	682, 685, 688, 690, 692, 694, 696, 698, 
- 	700, 702, 704, 706, 708, 710, 712, 714, 
- 	717, 720, 725, 730, 735, 740, 744, 748, 
- 	751, 753, 755, 757, 759, 761, 763, 765, 
- 	767, 769, 771, 773, 775, 777, 779, 781, 
- 	783, 788, 795, 800, 804, 810, 814, 817, 
- 	823, 837, 840, 843, 846, 849, 852, 855, 
- 	858, 861, 864, 869, 872, 875, 878, 882, 
- 	885, 888, 891, 894, 897, 900, 904, 907, 
- 	910, 913, 916, 919, 922, 925, 928, 931, 
- 	934, 938, 941, 944, 947, 950, 953, 956, 
- 	959, 962, 965, 968, 971, 974, 977, 980, 
- 	983, 986, 989, 992, 995, 998, 1001, 1004, 
- 	1007, 1010, 1013, 1016, 1019, 1022, 1025, 1028, 
- 	1031, 1034, 1036, 1038, 1040, 1042, 1044, 1046, 
- 	1048, 1050, 1052, 1054, 1056, 1066, 1069, 1072, 
- 	1075, 1078, 1081, 1084, 1087, 1090, 1093, 1096, 
- 	1099, 1103, 1106, 1109, 1112, 1115, 1118, 1121, 
- 	1124, 1127, 1130, 1133, 1137, 1140, 1143, 1146, 
- 	1149, 1152, 1155, 1158, 1161, 1164, 1167, 1170, 
- 	1173, 1176, 1179, 1182, 1185, 1188, 1191, 1194, 
- 	1197, 1200, 1202, 1204
- };
- 
- static const short _lexer_trans_targs[] = {
- 	2, 13, 41, 221, 385, 12, 12, 229, 
- 	239, 241, 255, 256, 259, 12, 0, 3, 
- 	333, 0, 4, 0, 5, 0, 6, 329, 
- 	0, 7, 0, 8, 0, 9, 0, 10, 
- 	0, 12, 240, 11, 12, 240, 11, 2, 
- 	13, 41, 221, 12, 12, 229, 239, 241, 
- 	255, 256, 259, 12, 0, 14, 15, 20, 
- 	24, 0, 10, 0, 16, 0, 17, 0, 
- 	18, 19, 0, 10, 0, 10, 0, 21, 
- 	0, 22, 0, 23, 0, 10, 0, 25, 
- 	0, 26, 0, 27, 0, 28, 0, 29, 
- 	0, 31, 30, 31, 30, 32, 274, 285, 
- 	306, 31, 31, 12, 314, 328, 12, 31, 
- 	30, 33, 269, 31, 30, 34, 31, 30, 
- 	35, 31, 30, 36, 265, 31, 30, 37, 
- 	31, 30, 38, 31, 30, 39, 31, 30, 
- 	40, 31, 30, 2, 13, 41, 221, 12, 
- 	12, 229, 239, 241, 255, 256, 259, 12, 
- 	0, 42, 207, 218, 0, 43, 0, 44, 
- 	0, 45, 0, 46, 0, 47, 0, 48, 
- 	0, 49, 0, 50, 0, 51, 0, 52, 
- 	0, 53, 128, 0, 54, 0, 55, 0, 
- 	56, 0, 57, 0, 58, 0, 59, 0, 
- 	60, 0, 62, 61, 62, 61, 63, 80, 
- 	91, 105, 62, 62, 12, 113, 127, 12, 
- 	62, 61, 64, 75, 62, 61, 65, 62, 
- 	61, 66, 62, 61, 67, 71, 62, 61, 
- 	68, 62, 61, 69, 62, 61, 70, 62, 
- 	61, 40, 62, 61, 72, 62, 61, 73, 
- 	62, 61, 74, 62, 61, 40, 62, 61, 
- 	76, 62, 61, 77, 62, 61, 78, 62, 
- 	61, 79, 62, 61, 62, 40, 61, 81, 
- 	82, 87, 62, 61, 40, 62, 61, 83, 
- 	62, 61, 84, 62, 61, 85, 86, 62, 
- 	61, 40, 62, 61, 40, 62, 61, 88, 
- 	62, 61, 89, 62, 61, 90, 62, 61, 
- 	40, 62, 61, 92, 102, 62, 61, 93, 
- 	62, 61, 94, 62, 61, 95, 62, 61, 
- 	96, 62, 61, 97, 62, 61, 98, 62, 
- 	61, 99, 62, 61, 100, 62, 61, 101, 
- 	62, 61, 79, 62, 61, 103, 62, 61, 
- 	104, 62, 61, 70, 62, 61, 106, 62, 
- 	61, 107, 62, 61, 108, 62, 61, 109, 
- 	62, 61, 110, 62, 61, 111, 62, 61, 
- 	112, 62, 61, 40, 62, 61, 62, 114, 
- 	61, 62, 115, 61, 62, 116, 61, 62, 
- 	117, 61, 62, 118, 61, 62, 119, 61, 
- 	62, 120, 61, 62, 121, 61, 62, 122, 
- 	61, 62, 123, 61, 62, 124, 61, 62, 
- 	125, 61, 62, 126, 61, 62, 12, 61, 
- 	62, 40, 61, 130, 129, 130, 129, 131, 
- 	148, 163, 184, 130, 130, 12, 192, 206, 
- 	12, 130, 129, 132, 143, 130, 129, 133, 
- 	130, 129, 134, 130, 129, 135, 139, 130, 
- 	129, 136, 130, 129, 137, 130, 129, 138, 
- 	130, 129, 40, 130, 129, 140, 130, 129, 
- 	141, 130, 129, 142, 130, 129, 40, 130, 
- 	129, 144, 130, 129, 145, 130, 129, 146, 
- 	130, 129, 147, 130, 129, 130, 40, 129, 
- 	149, 150, 155, 159, 130, 129, 40, 130, 
- 	129, 151, 130, 129, 152, 130, 129, 153, 
- 	154, 130, 129, 40, 130, 129, 40, 130, 
- 	129, 156, 130, 129, 157, 130, 129, 158, 
- 	130, 129, 40, 130, 129, 160, 130, 129, 
- 	161, 130, 129, 162, 130, 129, 147, 130, 
- 	129, 164, 181, 130, 129, 165, 130, 129, 
- 	166, 130, 129, 167, 130, 129, 168, 130, 
- 	129, 169, 130, 129, 170, 130, 129, 171, 
- 	130, 129, 172, 130, 129, 173, 130, 129, 
- 	174, 130, 129, 130, 175, 40, 129, 176, 
- 	130, 129, 177, 130, 129, 178, 130, 129, 
- 	179, 130, 129, 180, 130, 129, 147, 130, 
- 	129, 182, 130, 129, 183, 130, 129, 138, 
- 	130, 129, 185, 130, 129, 186, 130, 129, 
- 	187, 130, 129, 188, 130, 129, 189, 130, 
- 	129, 190, 130, 129, 191, 130, 129, 40, 
- 	130, 129, 130, 193, 129, 130, 194, 129, 
- 	130, 195, 129, 130, 196, 129, 130, 197, 
- 	129, 130, 198, 129, 130, 199, 129, 130, 
- 	200, 129, 130, 201, 129, 130, 202, 129, 
- 	130, 203, 129, 130, 204, 129, 130, 205, 
- 	129, 130, 12, 129, 130, 40, 129, 208, 
- 	0, 209, 0, 211, 210, 211, 210, 212, 
- 	211, 211, 12, 12, 211, 210, 213, 211, 
- 	210, 214, 211, 210, 215, 211, 210, 216, 
- 	211, 210, 217, 211, 210, 211, 40, 210, 
- 	219, 0, 220, 0, 9, 0, 222, 0, 
- 	223, 0, 224, 0, 225, 0, 226, 0, 
- 	227, 0, 228, 0, 10, 0, 230, 0, 
- 	231, 0, 233, 232, 232, 233, 232, 232, 
- 	234, 234, 235, 234, 234, 234, 234, 235, 
- 	234, 234, 234, 234, 236, 234, 234, 234, 
- 	234, 237, 234, 234, 12, 238, 238, 0, 
- 	12, 238, 238, 0, 12, 240, 239, 12, 
- 	0, 242, 0, 243, 0, 244, 0, 245, 
- 	0, 246, 0, 247, 0, 248, 0, 249, 
- 	0, 250, 0, 251, 0, 252, 0, 253, 
- 	0, 254, 0, 387, 0, 10, 0, 0, 
- 	0, 0, 0, 257, 258, 12, 258, 258, 
- 	256, 257, 257, 12, 258, 256, 258, 0, 
- 	259, 260, 259, 0, 264, 263, 262, 260, 
- 	263, 261, 0, 262, 260, 261, 0, 262, 
- 	261, 264, 263, 262, 260, 263, 261, 2, 
- 	13, 41, 221, 264, 264, 229, 239, 241, 
- 	255, 256, 259, 264, 0, 266, 31, 30, 
- 	267, 31, 30, 268, 31, 30, 40, 31, 
- 	30, 270, 31, 30, 271, 31, 30, 272, 
- 	31, 30, 273, 31, 30, 31, 40, 30, 
- 	275, 276, 281, 31, 30, 40, 31, 30, 
- 	277, 31, 30, 278, 31, 30, 279, 280, 
- 	31, 30, 40, 31, 30, 40, 31, 30, 
- 	282, 31, 30, 283, 31, 30, 284, 31, 
- 	30, 40, 31, 30, 286, 303, 31, 30, 
- 	287, 31, 30, 288, 31, 30, 289, 31, 
- 	30, 290, 31, 30, 291, 31, 30, 292, 
- 	31, 30, 293, 31, 30, 294, 31, 30, 
- 	295, 31, 30, 296, 31, 30, 31, 297, 
- 	40, 30, 298, 31, 30, 299, 31, 30, 
- 	300, 31, 30, 301, 31, 30, 302, 31, 
- 	30, 273, 31, 30, 304, 31, 30, 305, 
- 	31, 30, 39, 31, 30, 307, 31, 30, 
- 	308, 31, 30, 309, 31, 30, 310, 31, 
- 	30, 311, 31, 30, 312, 31, 30, 313, 
- 	31, 30, 40, 31, 30, 31, 315, 30, 
- 	31, 316, 30, 31, 317, 30, 31, 318, 
- 	30, 31, 319, 30, 31, 320, 30, 31, 
- 	321, 30, 31, 322, 30, 31, 323, 30, 
- 	31, 324, 30, 31, 325, 30, 31, 326, 
- 	30, 31, 327, 30, 31, 12, 30, 31, 
- 	40, 30, 330, 0, 331, 0, 332, 0, 
- 	10, 0, 334, 0, 335, 0, 336, 0, 
- 	337, 0, 338, 0, 340, 339, 340, 339, 
- 	341, 347, 352, 340, 340, 12, 371, 12, 
- 	340, 339, 342, 340, 339, 343, 340, 339, 
- 	344, 340, 339, 345, 340, 339, 346, 340, 
- 	339, 340, 40, 339, 348, 340, 339, 349, 
- 	340, 339, 350, 340, 339, 351, 340, 339, 
- 	346, 340, 339, 353, 370, 340, 339, 354, 
- 	340, 339, 355, 340, 339, 356, 340, 339, 
- 	357, 340, 339, 358, 340, 339, 359, 340, 
- 	339, 360, 340, 339, 361, 340, 339, 362, 
- 	340, 339, 363, 340, 339, 340, 364, 40, 
- 	339, 365, 340, 339, 366, 340, 339, 367, 
- 	340, 339, 368, 340, 339, 369, 340, 339, 
- 	346, 340, 339, 346, 340, 339, 340, 372, 
- 	339, 340, 373, 339, 340, 374, 339, 340, 
- 	375, 339, 340, 376, 339, 340, 377, 339, 
- 	340, 378, 339, 340, 379, 339, 340, 380, 
- 	339, 340, 381, 339, 340, 382, 339, 340, 
- 	383, 339, 340, 384, 339, 340, 12, 339, 
- 	386, 0, 12, 0, 0, 0
- };
- 
- static const unsigned char _lexer_trans_actions[] = {
- 	29, 29, 29, 29, 0, 54, 0, 5, 
- 	1, 0, 29, 1, 35, 0, 43, 0, 
- 	0, 43, 0, 43, 0, 43, 0, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 149, 126, 57, 110, 23, 0, 29, 
- 	29, 29, 29, 54, 0, 5, 1, 0, 
- 	29, 1, 35, 0, 43, 0, 0, 0, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 144, 57, 54, 0, 84, 84, 84, 
- 	84, 54, 0, 72, 33, 84, 72, 0, 
- 	0, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	15, 54, 0, 63, 63, 63, 63, 130, 
- 	31, 60, 57, 31, 63, 57, 66, 31, 
- 	43, 0, 0, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 144, 57, 54, 0, 84, 84, 
- 	84, 84, 54, 0, 78, 33, 84, 78, 
- 	0, 0, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 19, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 19, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 54, 19, 0, 0, 
- 	0, 0, 54, 0, 19, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 0, 54, 
- 	0, 19, 54, 0, 19, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	19, 54, 0, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 19, 54, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 19, 0, 
- 	54, 19, 0, 144, 57, 54, 0, 84, 
- 	84, 84, 84, 54, 0, 75, 33, 84, 
- 	75, 0, 0, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 17, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 17, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 54, 17, 0, 
- 	0, 0, 0, 0, 54, 0, 17, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	0, 54, 0, 17, 54, 0, 17, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 17, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 54, 0, 17, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 17, 
- 	54, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 17, 0, 54, 17, 0, 0, 
- 	43, 0, 43, 144, 57, 54, 0, 84, 
- 	54, 0, 81, 81, 0, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 54, 21, 0, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 139, 48, 9, 106, 11, 0, 
- 	134, 45, 45, 45, 3, 122, 33, 33, 
- 	33, 0, 122, 33, 33, 33, 0, 122, 
- 	33, 0, 33, 0, 102, 7, 7, 43, 
- 	54, 0, 0, 43, 114, 25, 0, 54, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 43, 
- 	43, 43, 43, 0, 27, 118, 27, 27, 
- 	51, 27, 0, 54, 0, 1, 0, 43, 
- 	0, 0, 0, 43, 54, 37, 37, 87, 
- 	37, 37, 43, 0, 39, 0, 43, 0, 
- 	0, 54, 0, 0, 39, 0, 0, 96, 
- 	96, 96, 96, 54, 0, 93, 90, 41, 
- 	96, 90, 99, 0, 43, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 15, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 54, 15, 0, 
- 	0, 0, 0, 54, 0, 15, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 0, 
- 	54, 0, 15, 54, 0, 15, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 15, 54, 0, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 54, 0, 
- 	15, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 15, 54, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 15, 0, 54, 
- 	15, 0, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 144, 57, 54, 0, 
- 	84, 84, 84, 54, 0, 69, 33, 69, 
- 	0, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 54, 13, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 54, 0, 13, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 13, 0, 
- 	0, 43, 0, 43, 0, 0
- };
- 
- static const unsigned char _lexer_eof_actions[] = {
- 	0, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43
- };
- 
- static const int lexer_start = 1;
- static const int lexer_first_final = 387;
- static const int lexer_error = 0;
- 
- static const int lexer_en_main = 1;
- 
- 
- #line 258 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ko.c.rl"
- 
- static VALUE 
- unindent(VALUE con, int start_col)
- {
-   VALUE re;
-   // Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters
-   char pat[32]; 
-   snprintf(pat, 32, "^[\t ]{0,%d}", start_col); 
-   re = rb_reg_regcomp(rb_str_new2(pat));
-   rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2(""));
- 
-   return Qnil;
- 
- }
- 
- static void 
- store_kw_con(VALUE listener, const char * event_name, 
-              const char * keyword_at, size_t keyword_length, 
-              const char * at,         size_t length, 
-              int current_line)
- {
-   VALUE con = Qnil, kw = Qnil;
-   kw = ENCODED_STR_NEW(keyword_at, keyword_length);
-   con = ENCODED_STR_NEW(at, length);
-   rb_funcall(con, rb_intern("strip!"), 0);
-   rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); 
- }
- 
- static void
- store_multiline_kw_con(VALUE listener, const char * event_name,
-                       const char * keyword_at, size_t keyword_length,
-                       const char * at,         size_t length,
-                       int current_line, int start_col)
- {
-   VALUE split;
-   VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil;
- 
-   kw = ENCODED_STR_NEW(keyword_at, keyword_length);
-   con = ENCODED_STR_NEW(at, length);
- 
-   unindent(con, start_col);
-   
-   split = rb_str_split(con, "\n");
- 
-   name = rb_funcall(split, rb_intern("shift"), 0);
-   desc = rb_ary_join(split, rb_str_new2( "\n" ));
- 
-   if( name == Qnil ) 
-   {
-     name = rb_str_new2("");
-   }
-   if( rb_funcall(desc, rb_intern("size"), 0) == 0) 
-   {
-     desc = rb_str_new2("");
-   }
-   rb_funcall(name, rb_intern("strip!"), 0);
-   rb_funcall(desc, rb_intern("rstrip!"), 0);
-   rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); 
- }
- 
- static void 
- store_attr(VALUE listener, const char * attr_type,
-            const char * at, size_t length, 
-            int line)
- {
-   VALUE val = ENCODED_STR_NEW(at, length);
-   rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line));
- }
- static void 
- store_docstring_content(VALUE listener, 
-           int start_col, 
-           const char *type_at, size_t type_length,
-           const char *at, size_t length, 
-           int current_line)
- {
-   VALUE re2;
-   VALUE unescape_escaped_quotes;
-   VALUE con = ENCODED_STR_NEW(at, length);
-   VALUE con_type = ENCODED_STR_NEW(type_at, type_length);
- 
-   unindent(con, start_col);
- 
-   re2 = rb_reg_regcomp(rb_str_new2("\r\\Z"));
-   unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\""));
-   rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2(""));
-   rb_funcall(con_type, rb_intern("strip!"), 0);
-   rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\""));
-   rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line));
- }
- static void 
- raise_lexer_error(const char * at, int line)
- { 
-   rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at);
- }
- 
- static void lexer_init(lexer_state *lexer) {
-   lexer->content_start = 0;
-   lexer->content_end = 0;
-   lexer->content_len = 0;
-   lexer->docstring_content_type_start = 0;
-   lexer->docstring_content_type_end = 0;
-   lexer->mark = 0;
-   lexer->keyword_start = 0;
-   lexer->keyword_end = 0;
-   lexer->next_keyword_start = 0;
-   lexer->line_number = 1;
-   lexer->last_newline = 0;
-   lexer->final_newline = 0;
-   lexer->start_col = 0;
- }
- 
- static VALUE CLexer_alloc(VALUE klass)
- {
-   VALUE obj;
-   lexer_state *lxr = ALLOC(lexer_state);
-   lexer_init(lxr);
- 
-   obj = Data_Wrap_Struct(klass, NULL, -1, lxr);
- 
-   return obj;
- }
- 
- static VALUE CLexer_init(VALUE self, VALUE listener)
- {
-   lexer_state *lxr; 
-   rb_iv_set(self, "@listener", listener);
-   
-   lxr = NULL;
-   DATA_GET(self, lexer_state, lxr);
-   lexer_init(lxr);
-   
-   return self;
- }
- 
- static VALUE CLexer_scan(VALUE self, VALUE input)
- {
-   VALUE input_copy;
-   char *data;
-   size_t len;
-   VALUE listener = rb_iv_get(self, "@listener");
- 
-   lexer_state *lexer;
-   lexer = NULL;
-   DATA_GET(self, lexer_state, lexer);
- 
-   input_copy = rb_str_dup(input);
- 
-   rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%"));
-   data = RSTRING_PTR(input_copy);
-   len = RSTRING_LEN(input_copy);
-   
-   if (len == 0) { 
-     rb_raise(rb_eGherkinLexingError, "No content to lex.");
-   } else {
- 
-     const char *p, *pe, *eof;
-     int cs = 0;
-     
-     VALUE current_row = Qnil;
- 
-     p = data;
-     pe = data + len;
-     eof = pe;
-     
-     assert(*pe == '\0' && "pointer does not end on NULL");
-     
-     
- #line 964 "ext/gherkin_lexer_ko/gherkin_lexer_ko.c"
- 	{
- 	cs = lexer_start;
- 	}
- 
- #line 425 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ko.c.rl"
-     
- #line 971 "ext/gherkin_lexer_ko/gherkin_lexer_ko.c"
- 	{
- 	int _klen;
- 	unsigned int _trans;
- 	const char *_acts;
- 	unsigned int _nacts;
- 	const char *_keys;
- 
- 	if ( p == pe )
- 		goto _test_eof;
- 	if ( cs == 0 )
- 		goto _out;
- _resume:
- 	_keys = _lexer_trans_keys + _lexer_key_offsets[cs];
- 	_trans = _lexer_index_offsets[cs];
- 
- 	_klen = _lexer_single_lengths[cs];
- 	if ( _klen > 0 ) {
- 		const char *_lower = _keys;
- 		const char *_mid;
- 		const char *_upper = _keys + _klen - 1;
- 		while (1) {
- 			if ( _upper < _lower )
- 				break;
- 
- 			_mid = _lower + ((_upper-_lower) >> 1);
- 			if ( (*p) < *_mid )
- 				_upper = _mid - 1;
- 			else if ( (*p) > *_mid )
- 				_lower = _mid + 1;
- 			else {
- 				_trans += (_mid - _keys);
- 				goto _match;
- 			}
- 		}
- 		_keys += _klen;
- 		_trans += _klen;
- 	}
- 
- 	_klen = _lexer_range_lengths[cs];
- 	if ( _klen > 0 ) {
- 		const char *_lower = _keys;
- 		const char *_mid;
- 		const char *_upper = _keys + (_klen<<1) - 2;
- 		while (1) {
- 			if ( _upper < _lower )
- 				break;
- 
- 			_mid = _lower + (((_upper-_lower) >> 1) & ~1);
- 			if ( (*p) < _mid[0] )
- 				_upper = _mid - 2;
- 			else if ( (*p) > _mid[1] )
- 				_lower = _mid + 2;
- 			else {
- 				_trans += ((_mid - _keys)>>1);
- 				goto _match;
- 			}
- 		}
- 		_trans += _klen;
- 	}
- 
- _match:
- 	cs = _lexer_trans_targs[_trans];
- 
- 	if ( _lexer_trans_actions[_trans] == 0 )
- 		goto _again;
- 
- 	_acts = _lexer_actions + _lexer_trans_actions[_trans];
- 	_nacts = (unsigned int) *_acts++;
- 	while ( _nacts-- > 0 )
- 	{
- 		switch ( *_acts++ )
- 		{
- 	case 0:
- #line 83 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ko.c.rl"
- 	{
- 		MARK(content_start, p);
-     lexer->current_line = lexer->line_number;
-     lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2;
-   }
- 	break;
- 	case 1:
- #line 89 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ko.c.rl"
- 	{
-     MARK(content_start, p);
-   }
- 	break;
- 	case 2:
- #line 93 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ko.c.rl"
- 	{
-     lexer->current_line = lexer->line_number;
-     lexer->start_col = p - data - lexer->last_newline;
-   }
- 	break;
- 	case 3:
- #line 98 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ko.c.rl"
- 	{
-     int len = LEN(content_start, PTR_TO(final_newline));
-     int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end));
- 
-     if (len < 0) len = 0;
-     if (type_len < 0) len = 0;
- 
-     store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line);
-   }
- 	break;
- 	case 4:
- #line 108 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ko.c.rl"
- 	{ 
-     MARK(docstring_content_type_start, p);
-   }
- 	break;
- 	case 5:
- #line 112 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ko.c.rl"
- 	{ 
-     MARK(docstring_content_type_end, p);
-   }
- 	break;
- 	case 6:
- #line 116 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ko.c.rl"
- 	{
-     STORE_KW_END_CON(feature);
-   }
- 	break;
- 	case 7:
- #line 120 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ko.c.rl"
- 	{
-     STORE_KW_END_CON(background);
-   }
- 	break;
- 	case 8:
- #line 124 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ko.c.rl"
- 	{
-     STORE_KW_END_CON(scenario);
-   }
- 	break;
- 	case 9:
- #line 128 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ko.c.rl"
- 	{
-     STORE_KW_END_CON(scenario_outline);
-   }
- 	break;
- 	case 10:
- #line 132 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ko.c.rl"
- 	{
-     STORE_KW_END_CON(examples);
-   }
- 	break;
- 	case 11:
- #line 136 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ko.c.rl"
- 	{
-     store_kw_con(listener, "step",
-       PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-       PTR_TO(content_start), LEN(content_start, p), 
-       lexer->current_line);
-   }
- 	break;
- 	case 12:
- #line 143 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ko.c.rl"
- 	{
-     STORE_ATTR(comment);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 13:
- #line 148 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ko.c.rl"
- 	{
-     STORE_ATTR(tag);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 14:
- #line 153 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ko.c.rl"
- 	{
-     lexer->line_number += 1;
-     MARK(final_newline, p);
-   }
- 	break;
- 	case 15:
- #line 158 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ko.c.rl"
- 	{
-     MARK(last_newline, p + 1);
-   }
- 	break;
- 	case 16:
- #line 162 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ko.c.rl"
- 	{
-     if (lexer->mark == 0) {
-       MARK(mark, p);
-     }
-   }
- 	break;
- 	case 17:
- #line 168 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ko.c.rl"
- 	{
-     MARK(keyword_end, p);
-     MARK(keyword_start, PTR_TO(mark));
-     MARK(content_start, p + 1);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 18:
- #line 175 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ko.c.rl"
- 	{
-     MARK(content_end, p);
-   }
- 	break;
- 	case 19:
- #line 179 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ko.c.rl"
- 	{
-     p = p - 1;
-     lexer->current_line = lexer->line_number;
-     current_row = rb_ary_new();
-   }
- 	break;
- 	case 20:
- #line 185 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ko.c.rl"
- 	{
- 		MARK(content_start, p);
-   }
- 	break;
- 	case 21:
- #line 189 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ko.c.rl"
- 	{
-     VALUE re_pipe, re_newline, re_backslash;
-     VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
-     rb_funcall(con, rb_intern("strip!"), 0);
-     re_pipe      = rb_reg_regcomp(rb_str_new2("\\\\\\|"));
-     re_newline   = rb_reg_regcomp(rb_str_new2("\\\\n"));
-     re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_pipe,      rb_str_new2("|"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_newline,   rb_str_new2("\n"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\"));
- 
-     rb_ary_push(current_row, con);
-   }
- 	break;
- 	case 22:
- #line 203 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ko.c.rl"
- 	{
-     rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
-   }
- 	break;
- 	case 23:
- #line 207 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ko.c.rl"
- 	{
-     int line;
-     if (cs < lexer_first_final) {
-       size_t count = 0;
-       VALUE newstr_val;
-       char *newstr;
-       int newstr_count = 0;        
-       size_t len;
-       const char *buff;
-       if (lexer->last_newline != 0) {
-         len = LEN(last_newline, eof);
-         buff = PTR_TO(last_newline);
-       } else {
-         len = strlen(data);
-         buff = data;
-       }
- 
-       // Allocate as a ruby string so that it gets cleaned up by GC
-       newstr_val = rb_str_new(buff, len);
-       newstr = RSTRING_PTR(newstr_val);
- 
- 
-       for (count = 0; count < len; count++) {
-         if(buff[count] == 10) {
-           newstr[newstr_count] = '\0'; // terminate new string at first newline found
-           break;
-         } else {
-           if (buff[count] == '%') {
-             newstr[newstr_count++] = buff[count];
-             newstr[newstr_count] = buff[count];
-           } else {
-             newstr[newstr_count] = buff[count];
-           }
-         }
-         newstr_count++;
-       }
- 
-       line = lexer->line_number;
-       lexer_init(lexer); // Re-initialize so we can scan again with the same lexer
-       raise_lexer_error(newstr, line);
-     } else {
-       rb_funcall(listener, rb_intern("eof"), 0);
-     }
-   }
- 	break;
- #line 1261 "ext/gherkin_lexer_ko/gherkin_lexer_ko.c"
- 		}
- 	}
- 
- _again:
- 	if ( cs == 0 )
- 		goto _out;
- 	if ( ++p != pe )
- 		goto _resume;
- 	_test_eof: {}
- 	if ( p == eof )
- 	{
- 	const char *__acts = _lexer_actions + _lexer_eof_actions[cs];
- 	unsigned int __nacts = (unsigned int) *__acts++;
- 	while ( __nacts-- > 0 ) {
- 		switch ( *__acts++ ) {
- 	case 23:
- #line 207 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ko.c.rl"
- 	{
-     int line;
-     if (cs < lexer_first_final) {
-       size_t count = 0;
-       VALUE newstr_val;
-       char *newstr;
-       int newstr_count = 0;        
-       size_t len;
-       const char *buff;
-       if (lexer->last_newline != 0) {
-         len = LEN(last_newline, eof);
-         buff = PTR_TO(last_newline);
-       } else {
-         len = strlen(data);
-         buff = data;
-       }
- 
-       // Allocate as a ruby string so that it gets cleaned up by GC
-       newstr_val = rb_str_new(buff, len);
-       newstr = RSTRING_PTR(newstr_val);
- 
- 
-       for (count = 0; count < len; count++) {
-         if(buff[count] == 10) {
-           newstr[newstr_count] = '\0'; // terminate new string at first newline found
-           break;
-         } else {
-           if (buff[count] == '%') {
-             newstr[newstr_count++] = buff[count];
-             newstr[newstr_count] = buff[count];
-           } else {
-             newstr[newstr_count] = buff[count];
-           }
-         }
-         newstr_count++;
-       }
- 
-       line = lexer->line_number;
-       lexer_init(lexer); // Re-initialize so we can scan again with the same lexer
-       raise_lexer_error(newstr, line);
-     } else {
-       rb_funcall(listener, rb_intern("eof"), 0);
-     }
-   }
- 	break;
- #line 1324 "ext/gherkin_lexer_ko/gherkin_lexer_ko.c"
- 		}
- 	}
- 	}
- 
- 	_out: {}
- 	}
- 
- #line 426 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ko.c.rl"
- 
-     assert(p <= pe && "data overflow after parsing execute");
-     assert(lexer->content_start <= len && "content starts after data end");
-     assert(lexer->mark < len && "mark is after data end");
-     
-     // Reset lexer by re-initializing the whole thing
-     lexer_init(lexer);
- 
-     if (cs == lexer_error) {
-       rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails.");
-     } else {
-       return Qtrue;
-     }
-   }
- }
- 
- void Init_gherkin_lexer_ko()
- {
-   mGherkin = rb_define_module("Gherkin");
-   mGherkinLexer = rb_define_module_under(mGherkin, "Lexer");
-   rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError"));
- 
-   mCLexer = rb_define_module_under(mGherkin, "CLexer");
-   cI18nLexer = rb_define_class_under(mCLexer, "Ko", rb_cObject);
-   rb_define_alloc_func(cI18nLexer, CLexer_alloc);
-   rb_define_method(cI18nLexer, "initialize", CLexer_init, 1);
-   rb_define_method(cI18nLexer, "scan", CLexer_scan, 1);
- }
- 
 -#line 1 "ragel/i18n/ko.c.rl"
 -#include <assert.h>
 -#include <ruby.h>
 -
 -#if defined(_WIN32)
 -#include <stddef.h>
 -#endif
 -
 -#ifdef HAVE_RUBY_RE_H
 -#include <ruby/re.h>
 -#else
 -#include <re.h>
 -#endif
 -
 -#ifdef HAVE_RUBY_ENCODING_H
 -#include <ruby/encoding.h>
 -#define ENCODED_STR_NEW(ptr, len) \
 -    rb_enc_str_new(ptr, len, rb_utf8_encoding())
 -#else
 -#define ENCODED_STR_NEW(ptr, len) \
 -    rb_str_new(ptr, len)
 -#endif
 -
 -#ifndef RSTRING_PTR
 -#define RSTRING_PTR(s) (RSTRING(s)->ptr)
 -#endif
 -
 -#ifndef RSTRING_LEN
 -#define RSTRING_LEN(s) (RSTRING(s)->len)
 -#endif
 -
 -#define DATA_GET(FROM, TYPE, NAME) \
 -  Data_Get_Struct(FROM, TYPE, NAME); \
 -  if (NAME == NULL) { \
 -    rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \
 -  }
 - 
 -typedef struct lexer_state {
 -  int content_len;
 -  int line_number;
 -  int current_line;
 -  int start_col;
 -  size_t mark;
 -  size_t keyword_start;
 -  size_t keyword_end;
 -  size_t next_keyword_start;
 -  size_t content_start;
 -  size_t content_end;
 -  size_t docstring_content_type_start;
 -  size_t docstring_content_type_end;
 -  size_t query_start;
 -  size_t last_newline;
 -  size_t final_newline;
 -} lexer_state;
 -
 -static VALUE mGherkin;
 -static VALUE mGherkinLexer;
 -static VALUE mCLexer;
 -static VALUE cI18nLexer;
 -static VALUE rb_eGherkinLexingError;
 -
 -#define LEN(AT, P) (P - data - lexer->AT)
 -#define MARK(M, P) (lexer->M = (P) - data)
 -#define PTR_TO(P) (data + lexer->P)
 -
 -#define STORE_KW_END_CON(EVENT) \
 -  store_multiline_kw_con(listener, # EVENT, \
 -    PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \
 -    PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \
 -    lexer->current_line, lexer->start_col); \
 -    if (lexer->content_end != 0) { \
 -      p = PTR_TO(content_end - 1); \
 -    } \
 -    lexer->content_end = 0
 -
 -#define STORE_ATTR(ATTR) \
 -    store_attr(listener, # ATTR, \
 -      PTR_TO(content_start), LEN(content_start, p), \
 -      lexer->line_number)
 -
 -
 -#line 254 "ragel/i18n/ko.c.rl"
 -
 -
 -/** Data **/
 -
 -#line 89 "ext/gherkin_lexer_ko/gherkin_lexer_ko.c"
 -static const char _lexer_actions[] = {
 -	0, 1, 0, 1, 1, 1, 2, 1, 
 -	3, 1, 4, 1, 5, 1, 6, 1, 
 -	7, 1, 8, 1, 9, 1, 10, 1, 
 -	11, 1, 12, 1, 13, 1, 16, 1, 
 -	17, 1, 18, 1, 19, 1, 20, 1, 
 -	21, 1, 22, 1, 23, 2, 1, 18, 
 -	2, 4, 5, 2, 13, 0, 2, 14, 
 -	15, 2, 17, 0, 2, 17, 2, 2, 
 -	17, 16, 2, 17, 19, 2, 18, 6, 
 -	2, 18, 7, 2, 18, 8, 2, 18, 
 -	9, 2, 18, 10, 2, 18, 16, 2, 
 -	20, 21, 2, 22, 0, 2, 22, 2, 
 -	2, 22, 16, 2, 22, 19, 3, 3, 
 -	14, 15, 3, 5, 14, 15, 3, 11, 
 -	14, 15, 3, 12, 14, 15, 3, 13, 
 -	14, 15, 3, 14, 15, 18, 3, 17, 
 -	0, 11, 3, 17, 14, 15, 4, 1, 
 -	14, 15, 18, 4, 4, 5, 14, 15, 
 -	4, 17, 0, 14, 15, 5, 17, 0, 
 -	11, 14, 15
 -};
 -
 -static const short _lexer_key_offsets[] = {
 -	0, 0, 15, 17, 18, 19, 21, 22, 
 -	23, 24, 25, 27, 29, 43, 47, 48, 
 -	49, 50, 52, 53, 54, 55, 56, 57, 
 -	58, 59, 60, 61, 62, 63, 64, 65, 
 -	77, 80, 82, 84, 87, 89, 91, 93, 
 -	95, 109, 112, 113, 114, 115, 116, 117, 
 -	118, 119, 120, 121, 122, 124, 125, 126, 
 -	127, 128, 129, 130, 131, 132, 133, 145, 
 -	148, 150, 152, 155, 157, 159, 161, 163, 
 -	165, 167, 169, 171, 173, 175, 177, 179, 
 -	181, 185, 187, 189, 191, 194, 196, 198, 
 -	200, 202, 204, 206, 209, 211, 213, 215, 
 -	217, 219, 221, 223, 225, 227, 229, 231, 
 -	233, 235, 237, 239, 241, 243, 245, 247, 
 -	249, 251, 253, 255, 257, 259, 261, 263, 
 -	265, 267, 269, 271, 273, 275, 277, 279, 
 -	281, 282, 283, 295, 298, 300, 302, 305, 
 -	307, 309, 311, 313, 315, 317, 319, 321, 
 -	323, 325, 327, 329, 331, 336, 338, 340, 
 -	342, 345, 347, 349, 351, 353, 355, 357, 
 -	359, 361, 363, 365, 368, 370, 372, 374, 
 -	376, 378, 380, 382, 384, 386, 388, 391, 
 -	393, 395, 397, 399, 401, 403, 405, 407, 
 -	409, 411, 413, 415, 417, 419, 421, 423, 
 -	425, 427, 429, 431, 433, 435, 437, 439, 
 -	441, 443, 445, 447, 449, 451, 453, 455, 
 -	456, 457, 458, 459, 466, 468, 470, 472, 
 -	474, 476, 478, 479, 480, 481, 482, 483, 
 -	484, 485, 486, 487, 488, 489, 490, 491, 
 -	493, 495, 500, 505, 510, 515, 519, 523, 
 -	525, 526, 527, 528, 529, 530, 531, 532, 
 -	533, 534, 535, 536, 537, 538, 539, 540, 
 -	541, 546, 553, 558, 562, 568, 571, 573, 
 -	579, 593, 595, 597, 599, 601, 603, 605, 
 -	607, 609, 611, 615, 617, 619, 621, 624, 
 -	626, 628, 630, 632, 634, 636, 639, 641, 
 -	643, 645, 647, 649, 651, 653, 655, 657, 
 -	659, 662, 664, 666, 668, 670, 672, 674, 
 -	676, 678, 680, 682, 684, 686, 688, 690, 
 -	692, 694, 696, 698, 700, 702, 704, 706, 
 -	708, 710, 712, 714, 716, 718, 720, 722, 
 -	724, 726, 727, 728, 729, 730, 731, 732, 
 -	733, 734, 735, 736, 737, 747, 749, 751, 
 -	753, 755, 757, 759, 761, 763, 765, 767, 
 -	769, 772, 774, 776, 778, 780, 782, 784, 
 -	786, 788, 790, 792, 795, 797, 799, 801, 
 -	803, 805, 807, 809, 811, 813, 815, 817, 
 -	819, 821, 823, 825, 827, 829, 831, 833, 
 -	835, 837, 838, 839
 -};
 -
 -static const char _lexer_trans_keys[] = {
 -	-22, -21, -20, -19, -17, 10, 32, 34, 
 -	35, 37, 42, 64, 124, 9, 13, -73, 
 -	-72, -72, -21, -97, -90, -84, -21, -87, 
 -	-76, 10, 13, 10, 13, -22, -21, -20, 
 -	-19, 10, 32, 34, 35, 37, 42, 64, 
 -	124, 9, 13, -117, -89, -88, -80, -88, 
 -	-116, -20, -107, -99, -67, -68, -68, -20, 
 -	-96, -128, -80, -22, -78, -67, 58, 10, 
 -	10, -22, -21, -20, -19, 10, 32, 35, 
 -	37, 42, 64, 9, 13, -73, -72, 10, 
 -	-72, 10, -21, 10, -97, -90, 10, -84, 
 -	10, -21, 10, -87, 10, -76, 10, -22, 
 -	-21, -20, -19, 10, 32, 34, 35, 37, 
 -	42, 64, 124, 9, 13, -117, -104, -95, 
 -	-100, -21, -126, -104, -21, -90, -84, -20, 
 -	-104, -92, 32, 58, -22, -80, -100, -20, 
 -	-102, -108, 58, 10, 10, -22, -21, -20, 
 -	-19, 10, 32, 35, 37, 42, 64, 9, 
 -	13, -73, -72, 10, -72, 10, -21, 10, 
 -	-97, -90, 10, -84, 10, -21, 10, -87, 
 -	10, -76, 10, -84, 10, -22, 10, -77, 
 -	10, -96, 10, -80, 10, -21, 10, -118, 
 -	10, -91, 10, 10, 58, -117, -89, -88, 
 -	10, -88, 10, -116, 10, -20, 10, -107, 
 -	-99, 10, -67, 10, -68, 10, -68, 10, 
 -	-20, 10, -96, 10, -128, 10, -117, -95, 
 -	10, -100, 10, -21, 10, -126, 10, -104, 
 -	10, -21, 10, -90, 10, -84, 10, -20, 
 -	10, -104, 10, -92, 10, -80, 10, -22, 
 -	10, -79, 10, -107, 10, -104, 10, -20, 
 -	10, -89, 10, -128, 10, -21, 10, -89, 
 -	10, -116, 10, 10, 95, 10, 70, 10, 
 -	69, 10, 65, 10, 84, 10, 85, 10, 
 -	82, 10, 69, 10, 95, 10, 69, 10, 
 -	78, 10, 68, 10, 95, 10, 37, 10, 
 -	32, 10, 10, -22, -21, -20, -19, 10, 
 -	32, 35, 37, 42, 64, 9, 13, -73, 
 -	-72, 10, -72, 10, -21, 10, -97, -90, 
 -	10, -84, 10, -21, 10, -87, 10, -76, 
 -	10, -84, 10, -22, 10, -77, 10, -96, 
 -	10, -80, 10, -21, 10, -118, 10, -91, 
 -	10, 10, 58, -117, -89, -88, -80, 10, 
 -	-88, 10, -116, 10, -20, 10, -107, -99, 
 -	10, -67, 10, -68, 10, -68, 10, -20, 
 -	10, -96, 10, -128, 10, -80, 10, -22, 
 -	10, -78, 10, -67, 10, -117, -95, 10, 
 -	-100, 10, -21, 10, -126, 10, -104, 10, 
 -	-21, 10, -90, 10, -84, 10, -20, 10, 
 -	-104, 10, -92, 10, 10, 32, 58, -22, 
 -	10, -80, 10, -100, 10, -20, 10, -102, 
 -	10, -108, 10, -80, 10, -22, 10, -79, 
 -	10, -107, 10, -104, 10, -20, 10, -89, 
 -	10, -128, 10, -21, 10, -89, 10, -116, 
 -	10, 10, 95, 10, 70, 10, 69, 10, 
 -	65, 10, 84, 10, 85, 10, 82, 10, 
 -	69, 10, 95, 10, 69, 10, 78, 10, 
 -	68, 10, 95, 10, 37, 10, 32, -120, 
 -	58, 10, 10, -22, 10, 32, 35, 124, 
 -	9, 13, -72, 10, -80, 10, -21, 10, 
 -	-118, 10, -91, 10, 10, 58, -80, -22, 
 -	-79, -107, -104, -20, -89, -128, -21, -89, 
 -	-116, 34, 34, 10, 13, 10, 13, 10, 
 -	32, 34, 9, 13, 10, 32, 34, 9, 
 -	13, 10, 32, 34, 9, 13, 10, 32, 
 -	34, 9, 13, 10, 32, 9, 13, 10, 
 -	32, 9, 13, 10, 13, 10, 95, 70, 
 -	69, 65, 84, 85, 82, 69, 95, 69, 
 -	78, 68, 95, 37, 32, 13, 32, 64, 
 -	9, 10, 9, 10, 13, 32, 64, 11, 
 -	12, 10, 32, 64, 9, 13, 32, 124, 
 -	9, 13, 10, 32, 92, 124, 9, 13, 
 -	10, 92, 124, 10, 92, 10, 32, 92, 
 -	124, 9, 13, -22, -21, -20, -19, 10, 
 -	32, 34, 35, 37, 42, 64, 124, 9, 
 -	13, -84, 10, -22, 10, -77, 10, -96, 
 -	10, -80, 10, -21, 10, -118, 10, -91, 
 -	10, 10, 58, -117, -89, -88, 10, -88, 
 -	10, -116, 10, -20, 10, -107, -99, 10, 
 -	-67, 10, -68, 10, -68, 10, -20, 10, 
 -	-96, 10, -128, 10, -117, -95, 10, -100, 
 -	10, -21, 10, -126, 10, -104, 10, -21, 
 -	10, -90, 10, -84, 10, -20, 10, -104, 
 -	10, -92, 10, 10, 32, 58, -22, 10, 
 -	-80, 10, -100, 10, -20, 10, -102, 10, 
 -	-108, 10, -80, 10, -22, 10, -79, 10, 
 -	-107, 10, -104, 10, -20, 10, -89, 10, 
 -	-128, 10, -21, 10, -89, 10, -116, 10, 
 -	10, 95, 10, 70, 10, 69, 10, 65, 
 -	10, 84, 10, 85, 10, 82, 10, 69, 
 -	10, 95, 10, 69, 10, 78, 10, 68, 
 -	10, 95, 10, 37, 10, 32, -84, -22, 
 -	-77, -96, -80, -21, -118, -91, 58, 10, 
 -	10, -22, -21, -20, 10, 32, 35, 37, 
 -	64, 9, 13, -72, 10, -80, 10, -21, 
 -	10, -118, 10, -91, 10, 10, 58, -80, 
 -	10, -80, 10, -22, 10, -78, 10, -67, 
 -	10, -117, -104, 10, -100, 10, -21, 10, 
 -	-126, 10, -104, 10, -21, 10, -90, 10, 
 -	-84, 10, -20, 10, -104, 10, -92, 10, 
 -	10, 32, 58, -22, 10, -80, 10, -100, 
 -	10, -20, 10, -102, 10, -108, 10, -120, 
 -	10, 10, 95, 10, 70, 10, 69, 10, 
 -	65, 10, 84, 10, 85, 10, 82, 10, 
 -	69, 10, 95, 10, 69, 10, 78, 10, 
 -	68, 10, 95, 10, 37, -69, -65, 0
 -};
 -
 -static const char _lexer_single_lengths[] = {
 -	0, 13, 2, 1, 1, 2, 1, 1, 
 -	1, 1, 2, 2, 12, 4, 1, 1, 
 -	1, 2, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 10, 
 -	3, 2, 2, 3, 2, 2, 2, 2, 
 -	12, 3, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 2, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 10, 3, 
 -	2, 2, 3, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	4, 2, 2, 2, 3, 2, 2, 2, 
 -	2, 2, 2, 3, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	1, 1, 10, 3, 2, 2, 3, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 5, 2, 2, 2, 
 -	3, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 3, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 3, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 1, 
 -	1, 1, 1, 5, 2, 2, 2, 2, 
 -	2, 2, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 2, 
 -	2, 3, 3, 3, 3, 2, 2, 2, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	3, 5, 3, 2, 4, 3, 2, 4, 
 -	12, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 4, 2, 2, 2, 3, 2, 
 -	2, 2, 2, 2, 2, 3, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	3, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 8, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	3, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 3, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 1, 1, 0
 -};
 -
 -static const char _lexer_range_lengths[] = {
 -	0, 1, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 1, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 1, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	1, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 1, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 1, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 1, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 1, 1, 1, 1, 1, 1, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	1, 1, 1, 1, 1, 0, 0, 1, 
 -	1, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 1, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0
 -};
 -
 -static const short _lexer_index_offsets[] = {
 -	0, 0, 15, 18, 20, 22, 25, 27, 
 -	29, 31, 33, 36, 39, 53, 58, 60, 
 -	62, 64, 67, 69, 71, 73, 75, 77, 
 -	79, 81, 83, 85, 87, 89, 91, 93, 
 -	105, 109, 112, 115, 119, 122, 125, 128, 
 -	131, 145, 149, 151, 153, 155, 157, 159, 
 -	161, 163, 165, 167, 169, 172, 174, 176, 
 -	178, 180, 182, 184, 186, 188, 190, 202, 
 -	206, 209, 212, 216, 219, 222, 225, 228, 
 -	231, 234, 237, 240, 243, 246, 249, 252, 
 -	255, 260, 263, 266, 269, 273, 276, 279, 
 -	282, 285, 288, 291, 295, 298, 301, 304, 
 -	307, 310, 313, 316, 319, 322, 325, 328, 
 -	331, 334, 337, 340, 343, 346, 349, 352, 
 -	355, 358, 361, 364, 367, 370, 373, 376, 
 -	379, 382, 385, 388, 391, 394, 397, 400, 
 -	403, 405, 407, 419, 423, 426, 429, 433, 
 -	436, 439, 442, 445, 448, 451, 454, 457, 
 -	460, 463, 466, 469, 472, 478, 481, 484, 
 -	487, 491, 494, 497, 500, 503, 506, 509, 
 -	512, 515, 518, 521, 525, 528, 531, 534, 
 -	537, 540, 543, 546, 549, 552, 555, 559, 
 -	562, 565, 568, 571, 574, 577, 580, 583, 
 -	586, 589, 592, 595, 598, 601, 604, 607, 
 -	610, 613, 616, 619, 622, 625, 628, 631, 
 -	634, 637, 640, 643, 646, 649, 652, 655, 
 -	657, 659, 661, 663, 670, 673, 676, 679, 
 -	682, 685, 688, 690, 692, 694, 696, 698, 
 -	700, 702, 704, 706, 708, 710, 712, 714, 
 -	717, 720, 725, 730, 735, 740, 744, 748, 
 -	751, 753, 755, 757, 759, 761, 763, 765, 
 -	767, 769, 771, 773, 775, 777, 779, 781, 
 -	783, 788, 795, 800, 804, 810, 814, 817, 
 -	823, 837, 840, 843, 846, 849, 852, 855, 
 -	858, 861, 864, 869, 872, 875, 878, 882, 
 -	885, 888, 891, 894, 897, 900, 904, 907, 
 -	910, 913, 916, 919, 922, 925, 928, 931, 
 -	934, 938, 941, 944, 947, 950, 953, 956, 
 -	959, 962, 965, 968, 971, 974, 977, 980, 
 -	983, 986, 989, 992, 995, 998, 1001, 1004, 
 -	1007, 1010, 1013, 1016, 1019, 1022, 1025, 1028, 
 -	1031, 1034, 1036, 1038, 1040, 1042, 1044, 1046, 
 -	1048, 1050, 1052, 1054, 1056, 1066, 1069, 1072, 
 -	1075, 1078, 1081, 1084, 1087, 1090, 1093, 1096, 
 -	1099, 1103, 1106, 1109, 1112, 1115, 1118, 1121, 
 -	1124, 1127, 1130, 1133, 1137, 1140, 1143, 1146, 
 -	1149, 1152, 1155, 1158, 1161, 1164, 1167, 1170, 
 -	1173, 1176, 1179, 1182, 1185, 1188, 1191, 1194, 
 -	1197, 1200, 1202, 1204
 -};
 -
 -static const short _lexer_trans_targs[] = {
 -	2, 13, 41, 221, 385, 12, 12, 229, 
 -	239, 241, 255, 256, 259, 12, 0, 3, 
 -	333, 0, 4, 0, 5, 0, 6, 329, 
 -	0, 7, 0, 8, 0, 9, 0, 10, 
 -	0, 12, 240, 11, 12, 240, 11, 2, 
 -	13, 41, 221, 12, 12, 229, 239, 241, 
 -	255, 256, 259, 12, 0, 14, 15, 20, 
 -	24, 0, 10, 0, 16, 0, 17, 0, 
 -	18, 19, 0, 10, 0, 10, 0, 21, 
 -	0, 22, 0, 23, 0, 10, 0, 25, 
 -	0, 26, 0, 27, 0, 28, 0, 29, 
 -	0, 31, 30, 31, 30, 32, 274, 285, 
 -	306, 31, 31, 12, 314, 328, 12, 31, 
 -	30, 33, 269, 31, 30, 34, 31, 30, 
 -	35, 31, 30, 36, 265, 31, 30, 37, 
 -	31, 30, 38, 31, 30, 39, 31, 30, 
 -	40, 31, 30, 2, 13, 41, 221, 12, 
 -	12, 229, 239, 241, 255, 256, 259, 12, 
 -	0, 42, 207, 218, 0, 43, 0, 44, 
 -	0, 45, 0, 46, 0, 47, 0, 48, 
 -	0, 49, 0, 50, 0, 51, 0, 52, 
 -	0, 53, 128, 0, 54, 0, 55, 0, 
 -	56, 0, 57, 0, 58, 0, 59, 0, 
 -	60, 0, 62, 61, 62, 61, 63, 80, 
 -	91, 105, 62, 62, 12, 113, 127, 12, 
 -	62, 61, 64, 75, 62, 61, 65, 62, 
 -	61, 66, 62, 61, 67, 71, 62, 61, 
 -	68, 62, 61, 69, 62, 61, 70, 62, 
 -	61, 40, 62, 61, 72, 62, 61, 73, 
 -	62, 61, 74, 62, 61, 40, 62, 61, 
 -	76, 62, 61, 77, 62, 61, 78, 62, 
 -	61, 79, 62, 61, 62, 40, 61, 81, 
 -	82, 87, 62, 61, 40, 62, 61, 83, 
 -	62, 61, 84, 62, 61, 85, 86, 62, 
 -	61, 40, 62, 61, 40, 62, 61, 88, 
 -	62, 61, 89, 62, 61, 90, 62, 61, 
 -	40, 62, 61, 92, 102, 62, 61, 93, 
 -	62, 61, 94, 62, 61, 95, 62, 61, 
 -	96, 62, 61, 97, 62, 61, 98, 62, 
 -	61, 99, 62, 61, 100, 62, 61, 101, 
 -	62, 61, 79, 62, 61, 103, 62, 61, 
 -	104, 62, 61, 70, 62, 61, 106, 62, 
 -	61, 107, 62, 61, 108, 62, 61, 109, 
 -	62, 61, 110, 62, 61, 111, 62, 61, 
 -	112, 62, 61, 40, 62, 61, 62, 114, 
 -	61, 62, 115, 61, 62, 116, 61, 62, 
 -	117, 61, 62, 118, 61, 62, 119, 61, 
 -	62, 120, 61, 62, 121, 61, 62, 122, 
 -	61, 62, 123, 61, 62, 124, 61, 62, 
 -	125, 61, 62, 126, 61, 62, 12, 61, 
 -	62, 40, 61, 130, 129, 130, 129, 131, 
 -	148, 163, 184, 130, 130, 12, 192, 206, 
 -	12, 130, 129, 132, 143, 130, 129, 133, 
 -	130, 129, 134, 130, 129, 135, 139, 130, 
 -	129, 136, 130, 129, 137, 130, 129, 138, 
 -	130, 129, 40, 130, 129, 140, 130, 129, 
 -	141, 130, 129, 142, 130, 129, 40, 130, 
 -	129, 144, 130, 129, 145, 130, 129, 146, 
 -	130, 129, 147, 130, 129, 130, 40, 129, 
 -	149, 150, 155, 159, 130, 129, 40, 130, 
 -	129, 151, 130, 129, 152, 130, 129, 153, 
 -	154, 130, 129, 40, 130, 129, 40, 130, 
 -	129, 156, 130, 129, 157, 130, 129, 158, 
 -	130, 129, 40, 130, 129, 160, 130, 129, 
 -	161, 130, 129, 162, 130, 129, 147, 130, 
 -	129, 164, 181, 130, 129, 165, 130, 129, 
 -	166, 130, 129, 167, 130, 129, 168, 130, 
 -	129, 169, 130, 129, 170, 130, 129, 171, 
 -	130, 129, 172, 130, 129, 173, 130, 129, 
 -	174, 130, 129, 130, 175, 40, 129, 176, 
 -	130, 129, 177, 130, 129, 178, 130, 129, 
 -	179, 130, 129, 180, 130, 129, 147, 130, 
 -	129, 182, 130, 129, 183, 130, 129, 138, 
 -	130, 129, 185, 130, 129, 186, 130, 129, 
 -	187, 130, 129, 188, 130, 129, 189, 130, 
 -	129, 190, 130, 129, 191, 130, 129, 40, 
 -	130, 129, 130, 193, 129, 130, 194, 129, 
 -	130, 195, 129, 130, 196, 129, 130, 197, 
 -	129, 130, 198, 129, 130, 199, 129, 130, 
 -	200, 129, 130, 201, 129, 130, 202, 129, 
 -	130, 203, 129, 130, 204, 129, 130, 205, 
 -	129, 130, 12, 129, 130, 40, 129, 208, 
 -	0, 209, 0, 211, 210, 211, 210, 212, 
 -	211, 211, 12, 12, 211, 210, 213, 211, 
 -	210, 214, 211, 210, 215, 211, 210, 216, 
 -	211, 210, 217, 211, 210, 211, 40, 210, 
 -	219, 0, 220, 0, 9, 0, 222, 0, 
 -	223, 0, 224, 0, 225, 0, 226, 0, 
 -	227, 0, 228, 0, 10, 0, 230, 0, 
 -	231, 0, 233, 232, 232, 233, 232, 232, 
 -	234, 234, 235, 234, 234, 234, 234, 235, 
 -	234, 234, 234, 234, 236, 234, 234, 234, 
 -	234, 237, 234, 234, 12, 238, 238, 0, 
 -	12, 238, 238, 0, 12, 240, 239, 12, 
 -	0, 242, 0, 243, 0, 244, 0, 245, 
 -	0, 246, 0, 247, 0, 248, 0, 249, 
 -	0, 250, 0, 251, 0, 252, 0, 253, 
 -	0, 254, 0, 387, 0, 10, 0, 0, 
 -	0, 0, 0, 257, 258, 12, 258, 258, 
 -	256, 257, 257, 12, 258, 256, 258, 0, 
 -	259, 260, 259, 0, 264, 263, 262, 260, 
 -	263, 261, 0, 262, 260, 261, 0, 262, 
 -	261, 264, 263, 262, 260, 263, 261, 2, 
 -	13, 41, 221, 264, 264, 229, 239, 241, 
 -	255, 256, 259, 264, 0, 266, 31, 30, 
 -	267, 31, 30, 268, 31, 30, 40, 31, 
 -	30, 270, 31, 30, 271, 31, 30, 272, 
 -	31, 30, 273, 31, 30, 31, 40, 30, 
 -	275, 276, 281, 31, 30, 40, 31, 30, 
 -	277, 31, 30, 278, 31, 30, 279, 280, 
 -	31, 30, 40, 31, 30, 40, 31, 30, 
 -	282, 31, 30, 283, 31, 30, 284, 31, 
 -	30, 40, 31, 30, 286, 303, 31, 30, 
 -	287, 31, 30, 288, 31, 30, 289, 31, 
 -	30, 290, 31, 30, 291, 31, 30, 292, 
 -	31, 30, 293, 31, 30, 294, 31, 30, 
 -	295, 31, 30, 296, 31, 30, 31, 297, 
 -	40, 30, 298, 31, 30, 299, 31, 30, 
 -	300, 31, 30, 301, 31, 30, 302, 31, 
 -	30, 273, 31, 30, 304, 31, 30, 305, 
 -	31, 30, 39, 31, 30, 307, 31, 30, 
 -	308, 31, 30, 309, 31, 30, 310, 31, 
 -	30, 311, 31, 30, 312, 31, 30, 313, 
 -	31, 30, 40, 31, 30, 31, 315, 30, 
 -	31, 316, 30, 31, 317, 30, 31, 318, 
 -	30, 31, 319, 30, 31, 320, 30, 31, 
 -	321, 30, 31, 322, 30, 31, 323, 30, 
 -	31, 324, 30, 31, 325, 30, 31, 326, 
 -	30, 31, 327, 30, 31, 12, 30, 31, 
 -	40, 30, 330, 0, 331, 0, 332, 0, 
 -	10, 0, 334, 0, 335, 0, 336, 0, 
 -	337, 0, 338, 0, 340, 339, 340, 339, 
 -	341, 347, 352, 340, 340, 12, 371, 12, 
 -	340, 339, 342, 340, 339, 343, 340, 339, 
 -	344, 340, 339, 345, 340, 339, 346, 340, 
 -	339, 340, 40, 339, 348, 340, 339, 349, 
 -	340, 339, 350, 340, 339, 351, 340, 339, 
 -	346, 340, 339, 353, 370, 340, 339, 354, 
 -	340, 339, 355, 340, 339, 356, 340, 339, 
 -	357, 340, 339, 358, 340, 339, 359, 340, 
 -	339, 360, 340, 339, 361, 340, 339, 362, 
 -	340, 339, 363, 340, 339, 340, 364, 40, 
 -	339, 365, 340, 339, 366, 340, 339, 367, 
 -	340, 339, 368, 340, 339, 369, 340, 339, 
 -	346, 340, 339, 346, 340, 339, 340, 372, 
 -	339, 340, 373, 339, 340, 374, 339, 340, 
 -	375, 339, 340, 376, 339, 340, 377, 339, 
 -	340, 378, 339, 340, 379, 339, 340, 380, 
 -	339, 340, 381, 339, 340, 382, 339, 340, 
 -	383, 339, 340, 384, 339, 340, 12, 339, 
 -	386, 0, 12, 0, 0, 0
 -};
 -
 -static const unsigned char _lexer_trans_actions[] = {
 -	29, 29, 29, 29, 0, 54, 0, 5, 
 -	1, 0, 29, 1, 35, 0, 43, 0, 
 -	0, 43, 0, 43, 0, 43, 0, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 149, 126, 57, 110, 23, 0, 29, 
 -	29, 29, 29, 54, 0, 5, 1, 0, 
 -	29, 1, 35, 0, 43, 0, 0, 0, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 144, 57, 54, 0, 84, 84, 84, 
 -	84, 54, 0, 72, 33, 84, 72, 0, 
 -	0, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	15, 54, 0, 63, 63, 63, 63, 130, 
 -	31, 60, 57, 31, 63, 57, 66, 31, 
 -	43, 0, 0, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 144, 57, 54, 0, 84, 84, 
 -	84, 84, 54, 0, 78, 33, 84, 78, 
 -	0, 0, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 19, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 19, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 54, 19, 0, 0, 
 -	0, 0, 54, 0, 19, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 0, 54, 
 -	0, 19, 54, 0, 19, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	19, 54, 0, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 19, 54, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 19, 0, 
 -	54, 19, 0, 144, 57, 54, 0, 84, 
 -	84, 84, 84, 54, 0, 75, 33, 84, 
 -	75, 0, 0, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 17, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 17, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 54, 17, 0, 
 -	0, 0, 0, 0, 54, 0, 17, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	0, 54, 0, 17, 54, 0, 17, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 17, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 54, 0, 17, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 17, 
 -	54, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 17, 0, 54, 17, 0, 0, 
 -	43, 0, 43, 144, 57, 54, 0, 84, 
 -	54, 0, 81, 81, 0, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 54, 21, 0, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 139, 48, 9, 106, 11, 0, 
 -	134, 45, 45, 45, 3, 122, 33, 33, 
 -	33, 0, 122, 33, 33, 33, 0, 122, 
 -	33, 0, 33, 0, 102, 7, 7, 43, 
 -	54, 0, 0, 43, 114, 25, 0, 54, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 43, 
 -	43, 43, 43, 0, 27, 118, 27, 27, 
 -	51, 27, 0, 54, 0, 1, 0, 43, 
 -	0, 0, 0, 43, 54, 37, 37, 87, 
 -	37, 37, 43, 0, 39, 0, 43, 0, 
 -	0, 54, 0, 0, 39, 0, 0, 96, 
 -	96, 96, 96, 54, 0, 93, 90, 41, 
 -	96, 90, 99, 0, 43, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 15, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 54, 15, 0, 
 -	0, 0, 0, 54, 0, 15, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 0, 
 -	54, 0, 15, 54, 0, 15, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 15, 54, 0, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 54, 0, 
 -	15, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 15, 54, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 15, 0, 54, 
 -	15, 0, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 144, 57, 54, 0, 
 -	84, 84, 84, 54, 0, 69, 33, 69, 
 -	0, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 54, 13, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 54, 0, 13, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 13, 0, 
 -	0, 43, 0, 43, 0, 0
 -};
 -
 -static const unsigned char _lexer_eof_actions[] = {
 -	0, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43
 -};
 -
 -static const int lexer_start = 1;
 -static const int lexer_first_final = 387;
 -static const int lexer_error = 0;
 -
 -static const int lexer_en_main = 1;
 -
 -
 -#line 258 "ragel/i18n/ko.c.rl"
 -
 -static VALUE 
 -unindent(VALUE con, int start_col)
 -{
 -  VALUE re;
 -  /* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */
 -  char pat[32]; 
 -  snprintf(pat, 32, "^[\t ]{0,%d}", start_col); 
 -  re = rb_reg_regcomp(rb_str_new2(pat));
 -  rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2(""));
 -
 -  return Qnil;
 -
 -}
 -
 -static void 
 -store_kw_con(VALUE listener, const char * event_name, 
 -             const char * keyword_at, size_t keyword_length, 
 -             const char * at,         size_t length, 
 -             int current_line)
 -{
 -  VALUE con = Qnil, kw = Qnil;
 -  kw = ENCODED_STR_NEW(keyword_at, keyword_length);
 -  con = ENCODED_STR_NEW(at, length);
 -  rb_funcall(con, rb_intern("strip!"), 0);
 -  rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); 
 -}
 -
 -static void
 -store_multiline_kw_con(VALUE listener, const char * event_name,
 -                      const char * keyword_at, size_t keyword_length,
 -                      const char * at,         size_t length,
 -                      int current_line, int start_col)
 -{
 -  VALUE split;
 -  VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil;
 -
 -  kw = ENCODED_STR_NEW(keyword_at, keyword_length);
 -  con = ENCODED_STR_NEW(at, length);
 -
 -  unindent(con, start_col);
 -  
 -  split = rb_str_split(con, "\n");
 -
 -  name = rb_funcall(split, rb_intern("shift"), 0);
 -  desc = rb_ary_join(split, rb_str_new2( "\n" ));
 -
 -  if( name == Qnil ) 
 -  {
 -    name = rb_str_new2("");
 -  }
 -  if( rb_funcall(desc, rb_intern("size"), 0) == 0) 
 -  {
 -    desc = rb_str_new2("");
 -  }
 -  rb_funcall(name, rb_intern("strip!"), 0);
 -  rb_funcall(desc, rb_intern("rstrip!"), 0);
 -  rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); 
 -}
 -
 -static void 
 -store_attr(VALUE listener, const char * attr_type,
 -           const char * at, size_t length, 
 -           int line)
 -{
 -  VALUE val = ENCODED_STR_NEW(at, length);
 -  rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line));
 -}
 -static void 
 -store_docstring_content(VALUE listener, 
 -          int start_col, 
 -          const char *type_at, size_t type_length,
 -          const char *at, size_t length, 
 -          int current_line)
 -{
 -  VALUE re2;
 -  VALUE unescape_escaped_quotes;
 -  VALUE con = ENCODED_STR_NEW(at, length);
 -  VALUE con_type = ENCODED_STR_NEW(type_at, type_length);
 -
 -  unindent(con, start_col);
 -
 -  re2 = rb_reg_regcomp(rb_str_new2("\r\\Z"));
 -  unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\""));
 -  rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2(""));
 -  rb_funcall(con_type, rb_intern("strip!"), 0);
 -  rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\""));
 -  rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line));
 -}
 -static void 
 -raise_lexer_error(const char * at, int line)
 -{ 
 -  rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at);
 -}
 -
 -static void lexer_init(lexer_state *lexer) {
 -  lexer->content_start = 0;
 -  lexer->content_end = 0;
 -  lexer->content_len = 0;
 -  lexer->docstring_content_type_start = 0;
 -  lexer->docstring_content_type_end = 0;
 -  lexer->mark = 0;
 -  lexer->keyword_start = 0;
 -  lexer->keyword_end = 0;
 -  lexer->next_keyword_start = 0;
 -  lexer->line_number = 1;
 -  lexer->last_newline = 0;
 -  lexer->final_newline = 0;
 -  lexer->start_col = 0;
 -}
 -
 -static VALUE CLexer_alloc(VALUE klass)
 -{
 -  VALUE obj;
 -  lexer_state *lxr = ALLOC(lexer_state);
 -  lexer_init(lxr);
 -
 -  obj = Data_Wrap_Struct(klass, NULL, -1, lxr);
 -
 -  return obj;
 -}
 -
 -static VALUE CLexer_init(VALUE self, VALUE listener)
 -{
 -  lexer_state *lxr; 
 -  rb_iv_set(self, "@listener", listener);
 -  
 -  lxr = NULL;
 -  DATA_GET(self, lexer_state, lxr);
 -  lexer_init(lxr);
 -  
 -  return self;
 -}
 -
 -static VALUE CLexer_scan(VALUE self, VALUE input)
 -{
 -  VALUE input_copy;
 -  char *data;
 -  size_t len;
 -  VALUE listener = rb_iv_get(self, "@listener");
 -
 -  lexer_state *lexer;
 -  lexer = NULL;
 -  DATA_GET(self, lexer_state, lexer);
 -
 -  input_copy = rb_str_dup(input);
 -
 -  rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%"));
 -  data = RSTRING_PTR(input_copy);
 -  len = RSTRING_LEN(input_copy);
 -  
 -  if (len == 0) { 
 -    rb_raise(rb_eGherkinLexingError, "No content to lex.");
 -  } else {
 -
 -    const char *p, *pe, *eof;
 -    int cs = 0;
 -    
 -    VALUE current_row = Qnil;
 -
 -    p = data;
 -    pe = data + len;
 -    eof = pe;
 -    
 -    assert(*pe == '\0' && "pointer does not end on NULL");
 -    
 -    
 -#line 964 "ext/gherkin_lexer_ko/gherkin_lexer_ko.c"
 -	{
 -	cs = lexer_start;
 -	}
 -
 -#line 425 "ragel/i18n/ko.c.rl"
 -    
 -#line 971 "ext/gherkin_lexer_ko/gherkin_lexer_ko.c"
 -	{
 -	int _klen;
 -	unsigned int _trans;
 -	const char *_acts;
 -	unsigned int _nacts;
 -	const char *_keys;
 -
 -	if ( p == pe )
 -		goto _test_eof;
 -	if ( cs == 0 )
 -		goto _out;
 -_resume:
 -	_keys = _lexer_trans_keys + _lexer_key_offsets[cs];
 -	_trans = _lexer_index_offsets[cs];
 -
 -	_klen = _lexer_single_lengths[cs];
 -	if ( _klen > 0 ) {
 -		const char *_lower = _keys;
 -		const char *_mid;
 -		const char *_upper = _keys + _klen - 1;
 -		while (1) {
 -			if ( _upper < _lower )
 -				break;
 -
 -			_mid = _lower + ((_upper-_lower) >> 1);
 -			if ( (*p) < *_mid )
 -				_upper = _mid - 1;
 -			else if ( (*p) > *_mid )
 -				_lower = _mid + 1;
 -			else {
 -				_trans += (unsigned int)(_mid - _keys);
 -				goto _match;
 -			}
 -		}
 -		_keys += _klen;
 -		_trans += _klen;
 -	}
 -
 -	_klen = _lexer_range_lengths[cs];
 -	if ( _klen > 0 ) {
 -		const char *_lower = _keys;
 -		const char *_mid;
 -		const char *_upper = _keys + (_klen<<1) - 2;
 -		while (1) {
 -			if ( _upper < _lower )
 -				break;
 -
 -			_mid = _lower + (((_upper-_lower) >> 1) & ~1);
 -			if ( (*p) < _mid[0] )
 -				_upper = _mid - 2;
 -			else if ( (*p) > _mid[1] )
 -				_lower = _mid + 2;
 -			else {
 -				_trans += (unsigned int)((_mid - _keys)>>1);
 -				goto _match;
 -			}
 -		}
 -		_trans += _klen;
 -	}
 -
 -_match:
 -	cs = _lexer_trans_targs[_trans];
 -
 -	if ( _lexer_trans_actions[_trans] == 0 )
 -		goto _again;
 -
 -	_acts = _lexer_actions + _lexer_trans_actions[_trans];
 -	_nacts = (unsigned int) *_acts++;
 -	while ( _nacts-- > 0 )
 -	{
 -		switch ( *_acts++ )
 -		{
 -	case 0:
 -#line 83 "ragel/i18n/ko.c.rl"
 -	{
 -		MARK(content_start, p);
 -    lexer->current_line = lexer->line_number;
 -    lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2;
 -  }
 -	break;
 -	case 1:
 -#line 89 "ragel/i18n/ko.c.rl"
 -	{
 -    MARK(content_start, p);
 -  }
 -	break;
 -	case 2:
 -#line 93 "ragel/i18n/ko.c.rl"
 -	{
 -    lexer->current_line = lexer->line_number;
 -    lexer->start_col = p - data - lexer->last_newline;
 -  }
 -	break;
 -	case 3:
 -#line 98 "ragel/i18n/ko.c.rl"
 -	{
 -    int len = LEN(content_start, PTR_TO(final_newline));
 -    int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end));
 -
 -    if (len < 0) len = 0;
 -    if (type_len < 0) len = 0;
 -
 -    store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line);
 -  }
 -	break;
 -	case 4:
 -#line 108 "ragel/i18n/ko.c.rl"
 -	{ 
 -    MARK(docstring_content_type_start, p);
 -  }
 -	break;
 -	case 5:
 -#line 112 "ragel/i18n/ko.c.rl"
 -	{ 
 -    MARK(docstring_content_type_end, p);
 -  }
 -	break;
 -	case 6:
 -#line 116 "ragel/i18n/ko.c.rl"
 -	{
 -    STORE_KW_END_CON(feature);
 -  }
 -	break;
 -	case 7:
 -#line 120 "ragel/i18n/ko.c.rl"
 -	{
 -    STORE_KW_END_CON(background);
 -  }
 -	break;
 -	case 8:
 -#line 124 "ragel/i18n/ko.c.rl"
 -	{
 -    STORE_KW_END_CON(scenario);
 -  }
 -	break;
 -	case 9:
 -#line 128 "ragel/i18n/ko.c.rl"
 -	{
 -    STORE_KW_END_CON(scenario_outline);
 -  }
 -	break;
 -	case 10:
 -#line 132 "ragel/i18n/ko.c.rl"
 -	{
 -    STORE_KW_END_CON(examples);
 -  }
 -	break;
 -	case 11:
 -#line 136 "ragel/i18n/ko.c.rl"
 -	{
 -    store_kw_con(listener, "step",
 -      PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
 -      PTR_TO(content_start), LEN(content_start, p), 
 -      lexer->current_line);
 -  }
 -	break;
 -	case 12:
 -#line 143 "ragel/i18n/ko.c.rl"
 -	{
 -    STORE_ATTR(comment);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 13:
 -#line 148 "ragel/i18n/ko.c.rl"
 -	{
 -    STORE_ATTR(tag);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 14:
 -#line 153 "ragel/i18n/ko.c.rl"
 -	{
 -    lexer->line_number += 1;
 -    MARK(final_newline, p);
 -  }
 -	break;
 -	case 15:
 -#line 158 "ragel/i18n/ko.c.rl"
 -	{
 -    MARK(last_newline, p + 1);
 -  }
 -	break;
 -	case 16:
 -#line 162 "ragel/i18n/ko.c.rl"
 -	{
 -    if (lexer->mark == 0) {
 -      MARK(mark, p);
 -    }
 -  }
 -	break;
 -	case 17:
 -#line 168 "ragel/i18n/ko.c.rl"
 -	{
 -    MARK(keyword_end, p);
 -    MARK(keyword_start, PTR_TO(mark));
 -    MARK(content_start, p + 1);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 18:
 -#line 175 "ragel/i18n/ko.c.rl"
 -	{
 -    MARK(content_end, p);
 -  }
 -	break;
 -	case 19:
 -#line 179 "ragel/i18n/ko.c.rl"
 -	{
 -    p = p - 1;
 -    lexer->current_line = lexer->line_number;
 -    current_row = rb_ary_new();
 -  }
 -	break;
 -	case 20:
 -#line 185 "ragel/i18n/ko.c.rl"
 -	{
 -		MARK(content_start, p);
 -  }
 -	break;
 -	case 21:
 -#line 189 "ragel/i18n/ko.c.rl"
 -	{
 -    VALUE re_pipe, re_newline, re_backslash;
 -    VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
 -    rb_funcall(con, rb_intern("strip!"), 0);
 -    re_pipe      = rb_reg_regcomp(rb_str_new2("\\\\\\|"));
 -    re_newline   = rb_reg_regcomp(rb_str_new2("\\\\n"));
 -    re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_pipe,      rb_str_new2("|"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_newline,   rb_str_new2("\n"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\"));
 -
 -    rb_ary_push(current_row, con);
 -  }
 -	break;
 -	case 22:
 -#line 203 "ragel/i18n/ko.c.rl"
 -	{
 -    rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
 -  }
 -	break;
 -	case 23:
 -#line 207 "ragel/i18n/ko.c.rl"
 -	{
 -    int line;
 -    if (cs < lexer_first_final) {
 -      size_t count = 0;
 -      VALUE newstr_val;
 -      char *newstr;
 -      int newstr_count = 0;        
 -      size_t len;
 -      const char *buff;
 -      if (lexer->last_newline != 0) {
 -        len = LEN(last_newline, eof);
 -        buff = PTR_TO(last_newline);
 -      } else {
 -        len = strlen(data);
 -        buff = data;
 -      }
 -
 -      /* Allocate as a ruby string so that it gets cleaned up by GC */
 -      newstr_val = rb_str_new(buff, len);
 -      newstr = RSTRING_PTR(newstr_val);
 -
 -
 -      for (count = 0; count < len; count++) {
 -        if(buff[count] == 10) {
 -          newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
 -          break;
 -        } else {
 -          if (buff[count] == '%') {
 -            newstr[newstr_count++] = buff[count];
 -            newstr[newstr_count] = buff[count];
 -          } else {
 -            newstr[newstr_count] = buff[count];
 -          }
 -        }
 -        newstr_count++;
 -      }
 -
 -      line = lexer->line_number;
 -      lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
 -      raise_lexer_error(newstr, line);
 -    } else {
 -      rb_funcall(listener, rb_intern("eof"), 0);
 -    }
 -  }
 -	break;
 -#line 1261 "ext/gherkin_lexer_ko/gherkin_lexer_ko.c"
 -		}
 -	}
 -
 -_again:
 -	if ( cs == 0 )
 -		goto _out;
 -	if ( ++p != pe )
 -		goto _resume;
 -	_test_eof: {}
 -	if ( p == eof )
 -	{
 -	const char *__acts = _lexer_actions + _lexer_eof_actions[cs];
 -	unsigned int __nacts = (unsigned int) *__acts++;
 -	while ( __nacts-- > 0 ) {
 -		switch ( *__acts++ ) {
 -	case 23:
 -#line 207 "ragel/i18n/ko.c.rl"
 -	{
 -    int line;
 -    if (cs < lexer_first_final) {
 -      size_t count = 0;
 -      VALUE newstr_val;
 -      char *newstr;
 -      int newstr_count = 0;        
 -      size_t len;
 -      const char *buff;
 -      if (lexer->last_newline != 0) {
 -        len = LEN(last_newline, eof);
 -        buff = PTR_TO(last_newline);
 -      } else {
 -        len = strlen(data);
 -        buff = data;
 -      }
 -
 -      /* Allocate as a ruby string so that it gets cleaned up by GC */
 -      newstr_val = rb_str_new(buff, len);
 -      newstr = RSTRING_PTR(newstr_val);
 -
 -
 -      for (count = 0; count < len; count++) {
 -        if(buff[count] == 10) {
 -          newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
 -          break;
 -        } else {
 -          if (buff[count] == '%') {
 -            newstr[newstr_count++] = buff[count];
 -            newstr[newstr_count] = buff[count];
 -          } else {
 -            newstr[newstr_count] = buff[count];
 -          }
 -        }
 -        newstr_count++;
 -      }
 -
 -      line = lexer->line_number;
 -      lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
 -      raise_lexer_error(newstr, line);
 -    } else {
 -      rb_funcall(listener, rb_intern("eof"), 0);
 -    }
 -  }
 -	break;
 -#line 1324 "ext/gherkin_lexer_ko/gherkin_lexer_ko.c"
 -		}
 -	}
 -	}
 -
 -	_out: {}
 -	}
 -
 -#line 426 "ragel/i18n/ko.c.rl"
 -
 -    assert(p <= pe && "data overflow after parsing execute");
 -    assert(lexer->content_start <= len && "content starts after data end");
 -    assert(lexer->mark < len && "mark is after data end");
 -    
 -    /* Reset lexer by re-initializing the whole thing */
 -    lexer_init(lexer);
 -
 -    if (cs == lexer_error) {
 -      rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails.");
 -    } else {
 -      return Qtrue;
 -    }
 -  }
 -}
 -
 -void Init_gherkin_lexer_ko()
 -{
 -  mGherkin = rb_define_module("Gherkin");
 -  mGherkinLexer = rb_define_module_under(mGherkin, "Lexer");
 -  rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError"));
 -
 -  mCLexer = rb_define_module_under(mGherkin, "CLexer");
 -  cI18nLexer = rb_define_class_under(mCLexer, "Ko", rb_cObject);
 -  rb_define_alloc_func(cI18nLexer, CLexer_alloc);
 -  rb_define_method(cI18nLexer, "initialize", CLexer_init, 1);
 -  rb_define_method(cI18nLexer, "scan", CLexer_scan, 1);
 -}
 -
diff --cc ext/gherkin_lexer_lt/extconf.rb
index 23c050d,23c050d..0000000
deleted file mode 100644,100644
--- a/ext/gherkin_lexer_lt/extconf.rb
+++ /dev/null
@@@ -1,6 -1,6 +1,0 @@@
--require 'mkmf'
--CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags']
--$CFLAGS << ' -O0 -Wall' if CONFIG['CC'] =~ /gcc|clang/
--dir_config("gherkin_lexer_lt")
--have_library("c", "main")
--create_makefile("gherkin_lexer_lt")
diff --cc ext/gherkin_lexer_lt/gherkin_lexer_lt.c
index 0bdc0c0,32e51c8..0000000
deleted file mode 100644,100644
--- a/ext/gherkin_lexer_lt/gherkin_lexer_lt.c
+++ /dev/null
@@@ -1,1296 -1,1296 +1,0 @@@
--
- #line 1 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/lt.c.rl"
- #include <assert.h>
- #include <ruby.h>
- 
- #if defined(_WIN32)
- #include <stddef.h>
- #endif
- 
- #ifdef HAVE_RUBY_RE_H
- #include <ruby/re.h>
- #else
- #include <re.h>
- #endif
- 
- #ifdef HAVE_RUBY_ENCODING_H
- #include <ruby/encoding.h>
- #define ENCODED_STR_NEW(ptr, len) \
-     rb_enc_str_new(ptr, len, rb_utf8_encoding())
- #else
- #define ENCODED_STR_NEW(ptr, len) \
-     rb_str_new(ptr, len)
- #endif
- 
- #ifndef RSTRING_PTR
- #define RSTRING_PTR(s) (RSTRING(s)->ptr)
- #endif
- 
- #ifndef RSTRING_LEN
- #define RSTRING_LEN(s) (RSTRING(s)->len)
- #endif
- 
- #define DATA_GET(FROM, TYPE, NAME) \
-   Data_Get_Struct(FROM, TYPE, NAME); \
-   if (NAME == NULL) { \
-     rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \
-   }
-  
- typedef struct lexer_state {
-   int content_len;
-   int line_number;
-   int current_line;
-   int start_col;
-   size_t mark;
-   size_t keyword_start;
-   size_t keyword_end;
-   size_t next_keyword_start;
-   size_t content_start;
-   size_t content_end;
-   size_t docstring_content_type_start;
-   size_t docstring_content_type_end;
-   size_t query_start;
-   size_t last_newline;
-   size_t final_newline;
- } lexer_state;
- 
- static VALUE mGherkin;
- static VALUE mGherkinLexer;
- static VALUE mCLexer;
- static VALUE cI18nLexer;
- static VALUE rb_eGherkinLexingError;
- 
- #define LEN(AT, P) (P - data - lexer->AT)
- #define MARK(M, P) (lexer->M = (P) - data)
- #define PTR_TO(P) (data + lexer->P)
- 
- #define STORE_KW_END_CON(EVENT) \
-   store_multiline_kw_con(listener, # EVENT, \
-     PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \
-     PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \
-     lexer->current_line, lexer->start_col); \
-     if (lexer->content_end != 0) { \
-       p = PTR_TO(content_end - 1); \
-     } \
-     lexer->content_end = 0
- 
- #define STORE_ATTR(ATTR) \
-     store_attr(listener, # ATTR, \
-       PTR_TO(content_start), LEN(content_start, p), \
-       lexer->line_number)
- 
- 
- #line 254 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/lt.c.rl"
- 
- 
- /** Data **/
- 
- #line 89 "ext/gherkin_lexer_lt/gherkin_lexer_lt.c"
- static const char _lexer_actions[] = {
- 	0, 1, 0, 1, 1, 1, 2, 1, 
- 	3, 1, 4, 1, 5, 1, 6, 1, 
- 	7, 1, 8, 1, 9, 1, 10, 1, 
- 	11, 1, 12, 1, 13, 1, 16, 1, 
- 	17, 1, 18, 1, 19, 1, 20, 1, 
- 	21, 1, 22, 1, 23, 2, 1, 18, 
- 	2, 4, 5, 2, 13, 0, 2, 14, 
- 	15, 2, 17, 0, 2, 17, 2, 2, 
- 	17, 16, 2, 17, 19, 2, 18, 6, 
- 	2, 18, 7, 2, 18, 8, 2, 18, 
- 	9, 2, 18, 10, 2, 18, 16, 2, 
- 	20, 21, 2, 22, 0, 2, 22, 2, 
- 	2, 22, 16, 2, 22, 19, 3, 3, 
- 	14, 15, 3, 5, 14, 15, 3, 11, 
- 	14, 15, 3, 12, 14, 15, 3, 13, 
- 	14, 15, 3, 14, 15, 18, 3, 17, 
- 	0, 11, 3, 17, 14, 15, 4, 1, 
- 	14, 15, 18, 4, 4, 5, 14, 15, 
- 	4, 17, 0, 14, 15, 5, 17, 0, 
- 	11, 14, 15
- };
- 
- static const short _lexer_key_offsets[] = {
- 	0, 0, 19, 20, 21, 39, 40, 41, 
- 	43, 45, 50, 55, 60, 65, 69, 73, 
- 	75, 76, 77, 78, 79, 80, 81, 82, 
- 	83, 84, 85, 86, 87, 88, 89, 90, 
- 	91, 93, 95, 100, 107, 112, 113, 114, 
- 	115, 116, 117, 118, 119, 121, 122, 123, 
- 	124, 125, 126, 127, 128, 129, 130, 131, 
- 	132, 133, 147, 149, 151, 153, 155, 157, 
- 	159, 161, 163, 165, 167, 169, 171, 173, 
- 	175, 177, 195, 196, 197, 198, 199, 200, 
- 	201, 202, 203, 204, 205, 206, 207, 208, 
- 	215, 217, 219, 221, 223, 225, 227, 229, 
- 	231, 232, 233, 234, 235, 236, 237, 238, 
- 	239, 250, 252, 254, 256, 258, 260, 262, 
- 	264, 266, 268, 270, 272, 274, 276, 278, 
- 	280, 282, 284, 286, 288, 290, 292, 294, 
- 	296, 298, 300, 302, 304, 306, 308, 310, 
- 	312, 314, 316, 318, 321, 323, 325, 327, 
- 	329, 331, 333, 335, 337, 339, 341, 343, 
- 	346, 349, 351, 353, 355, 357, 359, 361, 
- 	363, 365, 367, 369, 371, 373, 375, 377, 
- 	379, 380, 381, 382, 383, 384, 385, 387, 
- 	389, 390, 391, 392, 393, 394, 395, 396, 
- 	397, 398, 399, 400, 401, 402, 403, 417, 
- 	419, 421, 423, 425, 427, 429, 431, 433, 
- 	435, 437, 439, 441, 443, 445, 447, 449, 
- 	451, 453, 455, 457, 459, 461, 463, 465, 
- 	468, 470, 472, 474, 476, 478, 480, 482, 
- 	484, 486, 488, 490, 492, 494, 496, 498, 
- 	500, 501, 502, 503, 504, 518, 520, 522, 
- 	524, 526, 528, 530, 532, 534, 536, 538, 
- 	540, 542, 544, 546, 548, 550, 552, 554, 
- 	556, 558, 560, 562, 565, 567, 569, 571, 
- 	573, 575, 577, 579, 581, 583, 585, 588, 
- 	590, 592, 594, 596, 598, 600, 602, 604, 
- 	606, 608, 610, 613, 615, 617, 619, 621, 
- 	623, 625, 627, 629, 631, 633, 635, 637, 
- 	638, 639, 640, 641, 642, 643, 644, 645, 
- 	649, 655, 658, 660, 666, 684, 686, 688, 
- 	690, 692, 694, 696, 698, 700, 702, 705, 
- 	707, 709, 711, 713, 715, 717, 719, 721, 
- 	723, 725, 727, 729, 732, 734, 736, 738, 
- 	740, 742, 744, 746, 748, 750, 752, 754, 
- 	756, 758, 760
- };
- 
- static const char _lexer_trans_keys[] = {
- 	-17, 10, 32, 34, 35, 37, 42, 64, 
- 	66, 68, 73, 75, 80, 83, 84, 86, 
- 	124, 9, 13, -69, -65, 10, 32, 34, 
- 	35, 37, 42, 64, 66, 68, 73, 75, 
- 	80, 83, 84, 86, 124, 9, 13, 34, 
- 	34, 10, 13, 10, 13, 10, 32, 34, 
- 	9, 13, 10, 32, 34, 9, 13, 10, 
- 	32, 34, 9, 13, 10, 32, 34, 9, 
- 	13, 10, 32, 9, 13, 10, 32, 9, 
- 	13, 10, 13, 10, 95, 70, 69, 65, 
- 	84, 85, 82, 69, 95, 69, 78, 68, 
- 	95, 37, 32, 10, 13, 10, 13, 13, 
- 	32, 64, 9, 10, 9, 10, 13, 32, 
- 	64, 11, 12, 10, 32, 64, 9, 13, 
- 	101, 116, 117, 111, 116, 97, 114, 97, 
- 	111, 105, 110, 116, 101, 107, 115, 116, 
- 	97, 115, 58, 10, 10, 10, 32, 35, 
- 	37, 42, 64, 66, 68, 73, 75, 83, 
- 	84, 9, 13, 10, 95, 10, 70, 10, 
- 	69, 10, 65, 10, 84, 10, 85, 10, 
- 	82, 10, 69, 10, 95, 10, 69, 10, 
- 	78, 10, 68, 10, 95, 10, 37, 10, 
- 	32, 10, 32, 34, 35, 37, 42, 64, 
- 	66, 68, 73, 75, 80, 83, 84, 86, 
- 	124, 9, 13, 97, 118, 121, 122, 100, 
- 	-59, -66, 105, 97, 105, 58, 10, 10, 
- 	10, 32, 35, 83, 124, 9, 13, 10, 
- 	97, 10, 118, 10, 121, 10, 98, -60, 
- 	10, -105, 10, 10, 58, 97, 99, 118, 
- 	121, 98, -60, -105, 58, 10, 10, 10, 
- 	32, 35, 37, 64, 75, 80, 83, 86, 
- 	9, 13, 10, 95, 10, 70, 10, 69, 
- 	10, 65, 10, 84, 10, 85, 10, 82, 
- 	10, 69, 10, 95, 10, 69, 10, 78, 
- 	10, 68, 10, 95, 10, 37, 10, 111, 
- 	10, 110, 10, 116, 10, 101, 10, 107, 
- 	10, 115, 10, 116, 10, 97, 10, 115, 
- 	10, 58, 10, 97, 10, 118, 10, 121, 
- 	10, 122, 10, 100, -59, 10, -66, 10, 
- 	10, 105, 10, 97, 10, 105, 10, 97, 
- 	99, 10, 118, 10, 121, 10, 98, -60, 
- 	10, -105, 10, 10, 101, 10, 110, 10, 
- 	97, 10, 114, 10, 105, 10, 106, 10, 
- 	97, 117, 10, 105, 117, 10, 115, 10, 
- 	32, -59, 10, -95, 10, 10, 97, 10, 
- 	98, 10, 108, 10, 111, 10, 110, 10, 
- 	97, 10, 114, 10, 105, 10, 97, 10, 
- 	110, 10, 116, 101, 110, 97, 114, 105, 
- 	106, 97, 117, 105, 117, 115, 32, -59, 
- 	-95, 97, 98, 108, 111, 110, 97, 115, 
- 	58, 10, 10, 10, 32, 35, 37, 42, 
- 	64, 66, 68, 73, 75, 83, 84, 9, 
- 	13, 10, 95, 10, 70, 10, 69, 10, 
- 	65, 10, 84, 10, 85, 10, 82, 10, 
- 	69, 10, 95, 10, 69, 10, 78, 10, 
- 	68, 10, 95, 10, 37, 10, 32, 10, 
- 	101, 10, 116, 10, 117, 10, 111, 10, 
- 	116, 10, 97, 10, 114, 10, 97, 10, 
- 	105, 10, 97, 99, 10, 118, 10, 121, 
- 	10, 98, -60, 10, -105, 10, 10, 58, 
- 	10, 101, 10, 110, 10, 97, 10, 114, 
- 	10, 105, 10, 106, 10, 117, 10, 115, 
- 	10, 97, 10, 100, 115, 58, 10, 10, 
- 	10, 32, 35, 37, 42, 64, 66, 68, 
- 	73, 75, 83, 84, 9, 13, 10, 95, 
- 	10, 70, 10, 69, 10, 65, 10, 84, 
- 	10, 85, 10, 82, 10, 69, 10, 95, 
- 	10, 69, 10, 78, 10, 68, 10, 95, 
- 	10, 37, 10, 32, 10, 101, 10, 116, 
- 	10, 117, 10, 111, 10, 116, 10, 97, 
- 	10, 114, 10, 97, 111, 10, 105, 10, 
- 	110, 10, 116, 10, 101, 10, 107, 10, 
- 	115, 10, 116, 10, 97, 10, 115, 10, 
- 	58, 10, 97, 99, 10, 118, 10, 121, 
- 	10, 98, -60, 10, -105, 10, 10, 101, 
- 	10, 110, 10, 97, 10, 114, 10, 105, 
- 	10, 106, 10, 97, 117, 10, 117, 10, 
- 	115, 10, 32, -59, 10, -95, 10, 10, 
- 	97, 10, 98, 10, 108, 10, 111, 10, 
- 	110, 10, 97, 10, 100, 97, 100, 97, 
- 	114, 105, 97, 110, 116, 32, 124, 9, 
- 	13, 10, 32, 92, 124, 9, 13, 10, 
- 	92, 124, 10, 92, 10, 32, 92, 124, 
- 	9, 13, 10, 32, 34, 35, 37, 42, 
- 	64, 66, 68, 73, 75, 80, 83, 84, 
- 	86, 124, 9, 13, 10, 101, 10, 116, 
- 	10, 117, 10, 111, 10, 116, 10, 97, 
- 	10, 114, 10, 97, 10, 105, 10, 97, 
- 	99, 10, 118, 10, 121, 10, 98, -60, 
- 	10, -105, 10, 10, 58, 10, 101, 10, 
- 	110, 10, 97, 10, 114, 10, 105, 10, 
- 	106, 10, 97, 117, 10, 117, 10, 115, 
- 	10, 32, -59, 10, -95, 10, 10, 97, 
- 	10, 98, 10, 108, 10, 111, 10, 110, 
- 	10, 97, 10, 115, 10, 97, 10, 100, 
- 	0
- };
- 
- static const char _lexer_single_lengths[] = {
- 	0, 17, 1, 1, 16, 1, 1, 2, 
- 	2, 3, 3, 3, 3, 2, 2, 2, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	2, 2, 3, 5, 3, 1, 1, 1, 
- 	1, 1, 1, 1, 2, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 12, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 16, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 5, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	9, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 3, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 3, 
- 	3, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	1, 1, 1, 1, 1, 1, 2, 2, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 12, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 3, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	1, 1, 1, 1, 12, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 3, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 3, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 3, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 2, 
- 	4, 3, 2, 4, 16, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 3, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 3, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 0
- };
- 
- static const char _lexer_range_lengths[] = {
- 	0, 1, 0, 0, 1, 0, 0, 0, 
- 	0, 1, 1, 1, 1, 1, 1, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 1, 1, 1, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 1, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 1, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 1, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	1, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 1, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 1, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 1, 
- 	1, 0, 0, 1, 1, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0
- };
- 
- static const short _lexer_index_offsets[] = {
- 	0, 0, 19, 21, 23, 41, 43, 45, 
- 	48, 51, 56, 61, 66, 71, 75, 79, 
- 	82, 84, 86, 88, 90, 92, 94, 96, 
- 	98, 100, 102, 104, 106, 108, 110, 112, 
- 	114, 117, 120, 125, 132, 137, 139, 141, 
- 	143, 145, 147, 149, 151, 154, 156, 158, 
- 	160, 162, 164, 166, 168, 170, 172, 174, 
- 	176, 178, 192, 195, 198, 201, 204, 207, 
- 	210, 213, 216, 219, 222, 225, 228, 231, 
- 	234, 237, 255, 257, 259, 261, 263, 265, 
- 	267, 269, 271, 273, 275, 277, 279, 281, 
- 	288, 291, 294, 297, 300, 303, 306, 309, 
- 	312, 314, 316, 318, 320, 322, 324, 326, 
- 	328, 339, 342, 345, 348, 351, 354, 357, 
- 	360, 363, 366, 369, 372, 375, 378, 381, 
- 	384, 387, 390, 393, 396, 399, 402, 405, 
- 	408, 411, 414, 417, 420, 423, 426, 429, 
- 	432, 435, 438, 441, 445, 448, 451, 454, 
- 	457, 460, 463, 466, 469, 472, 475, 478, 
- 	482, 486, 489, 492, 495, 498, 501, 504, 
- 	507, 510, 513, 516, 519, 522, 525, 528, 
- 	531, 533, 535, 537, 539, 541, 543, 546, 
- 	549, 551, 553, 555, 557, 559, 561, 563, 
- 	565, 567, 569, 571, 573, 575, 577, 591, 
- 	594, 597, 600, 603, 606, 609, 612, 615, 
- 	618, 621, 624, 627, 630, 633, 636, 639, 
- 	642, 645, 648, 651, 654, 657, 660, 663, 
- 	667, 670, 673, 676, 679, 682, 685, 688, 
- 	691, 694, 697, 700, 703, 706, 709, 712, 
- 	715, 717, 719, 721, 723, 737, 740, 743, 
- 	746, 749, 752, 755, 758, 761, 764, 767, 
- 	770, 773, 776, 779, 782, 785, 788, 791, 
- 	794, 797, 800, 803, 807, 810, 813, 816, 
- 	819, 822, 825, 828, 831, 834, 837, 841, 
- 	844, 847, 850, 853, 856, 859, 862, 865, 
- 	868, 871, 874, 878, 881, 884, 887, 890, 
- 	893, 896, 899, 902, 905, 908, 911, 914, 
- 	916, 918, 920, 922, 924, 926, 928, 930, 
- 	934, 940, 944, 947, 953, 971, 974, 977, 
- 	980, 983, 986, 989, 992, 995, 998, 1002, 
- 	1005, 1008, 1011, 1014, 1017, 1020, 1023, 1026, 
- 	1029, 1032, 1035, 1038, 1042, 1045, 1048, 1051, 
- 	1054, 1057, 1060, 1063, 1066, 1069, 1072, 1075, 
- 	1078, 1081, 1084
- };
- 
- static const short _lexer_trans_targs[] = {
- 	2, 4, 4, 5, 15, 17, 31, 34, 
- 	37, 39, 43, 44, 74, 95, 295, 297, 
- 	303, 4, 0, 3, 0, 4, 0, 4, 
- 	4, 5, 15, 17, 31, 34, 37, 39, 
- 	43, 44, 74, 95, 295, 297, 303, 4, 
- 	0, 6, 0, 7, 0, 9, 8, 8, 
- 	9, 8, 8, 10, 10, 11, 10, 10, 
- 	10, 10, 11, 10, 10, 10, 10, 12, 
- 	10, 10, 10, 10, 13, 10, 10, 4, 
- 	14, 14, 0, 4, 14, 14, 0, 4, 
- 	16, 15, 4, 0, 18, 0, 19, 0, 
- 	20, 0, 21, 0, 22, 0, 23, 0, 
- 	24, 0, 25, 0, 26, 0, 27, 0, 
- 	28, 0, 29, 0, 30, 0, 346, 0, 
- 	32, 0, 4, 16, 33, 4, 16, 33, 
- 	0, 0, 0, 0, 35, 36, 4, 36, 
- 	36, 34, 35, 35, 4, 36, 34, 36, 
- 	0, 38, 0, 31, 0, 40, 0, 41, 
- 	0, 42, 0, 31, 0, 31, 0, 45, 
- 	46, 0, 31, 0, 47, 0, 48, 0, 
- 	49, 0, 50, 0, 51, 0, 52, 0, 
- 	53, 0, 54, 0, 55, 0, 57, 56, 
- 	57, 56, 57, 57, 4, 58, 72, 4, 
- 	309, 311, 315, 316, 318, 344, 57, 56, 
- 	57, 59, 56, 57, 60, 56, 57, 61, 
- 	56, 57, 62, 56, 57, 63, 56, 57, 
- 	64, 56, 57, 65, 56, 57, 66, 56, 
- 	57, 67, 56, 57, 68, 56, 57, 69, 
- 	56, 57, 70, 56, 57, 71, 56, 57, 
- 	4, 56, 57, 73, 56, 4, 4, 5, 
- 	15, 17, 31, 34, 37, 39, 43, 44, 
- 	74, 95, 295, 297, 303, 4, 0, 75, 
- 	0, 76, 0, 77, 0, 78, 0, 79, 
- 	0, 80, 0, 81, 0, 82, 0, 83, 
- 	0, 84, 0, 85, 0, 87, 86, 87, 
- 	86, 87, 87, 4, 88, 4, 87, 86, 
- 	87, 89, 86, 87, 90, 86, 87, 91, 
- 	86, 87, 92, 86, 93, 87, 86, 94, 
- 	87, 86, 87, 73, 86, 96, 168, 0, 
- 	97, 0, 98, 0, 99, 0, 100, 0, 
- 	101, 0, 102, 0, 104, 103, 104, 103, 
- 	104, 104, 4, 105, 4, 119, 129, 139, 
- 	162, 104, 103, 104, 106, 103, 104, 107, 
- 	103, 104, 108, 103, 104, 109, 103, 104, 
- 	110, 103, 104, 111, 103, 104, 112, 103, 
- 	104, 113, 103, 104, 114, 103, 104, 115, 
- 	103, 104, 116, 103, 104, 117, 103, 104, 
- 	118, 103, 104, 4, 103, 104, 120, 103, 
- 	104, 121, 103, 104, 122, 103, 104, 123, 
- 	103, 104, 124, 103, 104, 125, 103, 104, 
- 	126, 103, 104, 127, 103, 104, 128, 103, 
- 	104, 73, 103, 104, 130, 103, 104, 131, 
- 	103, 104, 132, 103, 104, 133, 103, 104, 
- 	134, 103, 135, 104, 103, 136, 104, 103, 
- 	104, 137, 103, 104, 138, 103, 104, 128, 
- 	103, 104, 140, 145, 103, 104, 141, 103, 
- 	104, 142, 103, 104, 143, 103, 144, 104, 
- 	103, 128, 104, 103, 104, 146, 103, 104, 
- 	147, 103, 104, 148, 103, 104, 149, 103, 
- 	104, 150, 103, 104, 151, 103, 104, 152, 
- 	127, 103, 104, 128, 153, 103, 104, 154, 
- 	103, 104, 155, 103, 156, 104, 103, 157, 
- 	104, 103, 104, 158, 103, 104, 159, 103, 
- 	104, 160, 103, 104, 161, 103, 104, 126, 
- 	103, 104, 163, 103, 104, 164, 103, 104, 
- 	165, 103, 104, 166, 103, 104, 167, 103, 
- 	104, 137, 103, 169, 0, 170, 0, 171, 
- 	0, 172, 0, 173, 0, 174, 0, 175, 
- 	232, 0, 84, 176, 0, 177, 0, 178, 
- 	0, 179, 0, 180, 0, 181, 0, 182, 
- 	0, 183, 0, 184, 0, 185, 0, 186, 
- 	0, 187, 0, 188, 0, 190, 189, 190, 
- 	189, 190, 190, 4, 191, 205, 4, 206, 
- 	208, 212, 213, 215, 230, 190, 189, 190, 
- 	192, 189, 190, 193, 189, 190, 194, 189, 
- 	190, 195, 189, 190, 196, 189, 190, 197, 
- 	189, 190, 198, 189, 190, 199, 189, 190, 
- 	200, 189, 190, 201, 189, 190, 202, 189, 
- 	190, 203, 189, 190, 204, 189, 190, 4, 
- 	189, 190, 73, 189, 190, 207, 189, 190, 
- 	205, 189, 190, 209, 189, 190, 210, 189, 
- 	190, 211, 189, 190, 205, 189, 190, 205, 
- 	189, 190, 214, 189, 190, 205, 189, 190, 
- 	216, 222, 189, 190, 217, 189, 190, 218, 
- 	189, 190, 219, 189, 220, 190, 189, 221, 
- 	190, 189, 190, 73, 189, 190, 223, 189, 
- 	190, 224, 189, 190, 225, 189, 190, 226, 
- 	189, 190, 227, 189, 190, 228, 189, 190, 
- 	229, 189, 190, 221, 189, 190, 231, 189, 
- 	190, 211, 189, 233, 0, 234, 0, 236, 
- 	235, 236, 235, 236, 236, 4, 237, 251, 
- 	4, 252, 254, 258, 259, 270, 293, 236, 
- 	235, 236, 238, 235, 236, 239, 235, 236, 
- 	240, 235, 236, 241, 235, 236, 242, 235, 
- 	236, 243, 235, 236, 244, 235, 236, 245, 
- 	235, 236, 246, 235, 236, 247, 235, 236, 
- 	248, 235, 236, 249, 235, 236, 250, 235, 
- 	236, 4, 235, 236, 73, 235, 236, 253, 
- 	235, 236, 251, 235, 236, 255, 235, 236, 
- 	256, 235, 236, 257, 235, 236, 251, 235, 
- 	236, 251, 235, 236, 260, 261, 235, 236, 
- 	251, 235, 236, 262, 235, 236, 263, 235, 
- 	236, 264, 235, 236, 265, 235, 236, 266, 
- 	235, 236, 267, 235, 236, 268, 235, 236, 
- 	269, 235, 236, 73, 235, 236, 271, 276, 
- 	235, 236, 272, 235, 236, 273, 235, 236, 
- 	274, 235, 275, 236, 235, 269, 236, 235, 
- 	236, 277, 235, 236, 278, 235, 236, 279, 
- 	235, 236, 280, 235, 236, 281, 235, 236, 
- 	282, 235, 236, 283, 268, 235, 236, 284, 
- 	235, 236, 285, 235, 236, 286, 235, 287, 
- 	236, 235, 288, 236, 235, 236, 289, 235, 
- 	236, 290, 235, 236, 291, 235, 236, 292, 
- 	235, 236, 267, 235, 236, 294, 235, 236, 
- 	257, 235, 296, 0, 42, 0, 298, 0, 
- 	299, 0, 300, 0, 301, 0, 302, 0, 
- 	82, 0, 303, 304, 303, 0, 308, 307, 
- 	306, 304, 307, 305, 0, 306, 304, 305, 
- 	0, 306, 305, 308, 307, 306, 304, 307, 
- 	305, 308, 308, 5, 15, 17, 31, 34, 
- 	37, 39, 43, 44, 74, 95, 295, 297, 
- 	303, 308, 0, 57, 310, 56, 57, 72, 
- 	56, 57, 312, 56, 57, 313, 56, 57, 
- 	314, 56, 57, 72, 56, 57, 72, 56, 
- 	57, 317, 56, 57, 72, 56, 57, 319, 
- 	325, 56, 57, 320, 56, 57, 321, 56, 
- 	57, 322, 56, 323, 57, 56, 324, 57, 
- 	56, 57, 73, 56, 57, 326, 56, 57, 
- 	327, 56, 57, 328, 56, 57, 329, 56, 
- 	57, 330, 56, 57, 331, 56, 57, 332, 
- 	343, 56, 57, 333, 56, 57, 334, 56, 
- 	57, 335, 56, 336, 57, 56, 337, 57, 
- 	56, 57, 338, 56, 57, 339, 56, 57, 
- 	340, 56, 57, 341, 56, 57, 342, 56, 
- 	57, 343, 56, 57, 324, 56, 57, 345, 
- 	56, 57, 314, 56, 0, 0
- };
- 
- static const unsigned char _lexer_trans_actions[] = {
- 	0, 54, 0, 5, 1, 0, 29, 1, 
- 	29, 29, 29, 29, 29, 29, 29, 29, 
- 	35, 0, 43, 0, 43, 0, 43, 54, 
- 	0, 5, 1, 0, 29, 1, 29, 29, 
- 	29, 29, 29, 29, 29, 29, 35, 0, 
- 	43, 0, 43, 0, 43, 139, 48, 9, 
- 	106, 11, 0, 134, 45, 45, 45, 3, 
- 	122, 33, 33, 33, 0, 122, 33, 33, 
- 	33, 0, 122, 33, 0, 33, 0, 102, 
- 	7, 7, 43, 54, 0, 0, 43, 114, 
- 	25, 0, 54, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 149, 126, 57, 110, 23, 0, 
- 	43, 43, 43, 43, 0, 27, 118, 27, 
- 	27, 51, 27, 0, 54, 0, 1, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 144, 57, 
- 	54, 0, 54, 0, 72, 33, 84, 72, 
- 	84, 84, 84, 84, 84, 84, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	15, 0, 54, 15, 0, 130, 31, 60, 
- 	57, 31, 63, 57, 63, 63, 63, 63, 
- 	63, 63, 63, 63, 66, 31, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 144, 57, 54, 
- 	0, 54, 0, 81, 84, 81, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 0, 54, 0, 0, 
- 	54, 0, 54, 21, 0, 0, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 144, 57, 54, 0, 
- 	54, 0, 69, 33, 69, 84, 84, 84, 
- 	84, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 13, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 13, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 0, 54, 0, 0, 54, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 0, 54, 
- 	0, 0, 54, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 0, 54, 0, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 0, 54, 0, 0, 
- 	54, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	0, 43, 0, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 144, 57, 54, 
- 	0, 54, 0, 78, 33, 84, 78, 84, 
- 	84, 84, 84, 84, 84, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 19, 
- 	0, 54, 19, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 0, 54, 0, 0, 
- 	54, 0, 54, 19, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 0, 43, 0, 43, 144, 
- 	57, 54, 0, 54, 0, 75, 33, 84, 
- 	75, 84, 84, 84, 84, 84, 84, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 17, 0, 54, 17, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 17, 0, 54, 0, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 0, 54, 0, 0, 54, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 0, 
- 	54, 0, 0, 54, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 0, 0, 43, 54, 37, 
- 	37, 87, 37, 37, 43, 0, 39, 0, 
- 	43, 0, 0, 54, 0, 0, 39, 0, 
- 	0, 54, 0, 93, 90, 41, 96, 90, 
- 	96, 96, 96, 96, 96, 96, 96, 96, 
- 	99, 0, 43, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 0, 54, 0, 0, 54, 
- 	0, 54, 15, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 0, 54, 0, 0, 54, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 0, 0
- };
- 
- static const unsigned char _lexer_eof_actions[] = {
- 	0, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43
- };
- 
- static const int lexer_start = 1;
- static const int lexer_first_final = 346;
- static const int lexer_error = 0;
- 
- static const int lexer_en_main = 1;
- 
- 
- #line 258 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/lt.c.rl"
- 
- static VALUE 
- unindent(VALUE con, int start_col)
- {
-   VALUE re;
-   // Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters
-   char pat[32]; 
-   snprintf(pat, 32, "^[\t ]{0,%d}", start_col); 
-   re = rb_reg_regcomp(rb_str_new2(pat));
-   rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2(""));
- 
-   return Qnil;
- 
- }
- 
- static void 
- store_kw_con(VALUE listener, const char * event_name, 
-              const char * keyword_at, size_t keyword_length, 
-              const char * at,         size_t length, 
-              int current_line)
- {
-   VALUE con = Qnil, kw = Qnil;
-   kw = ENCODED_STR_NEW(keyword_at, keyword_length);
-   con = ENCODED_STR_NEW(at, length);
-   rb_funcall(con, rb_intern("strip!"), 0);
-   rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); 
- }
- 
- static void
- store_multiline_kw_con(VALUE listener, const char * event_name,
-                       const char * keyword_at, size_t keyword_length,
-                       const char * at,         size_t length,
-                       int current_line, int start_col)
- {
-   VALUE split;
-   VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil;
- 
-   kw = ENCODED_STR_NEW(keyword_at, keyword_length);
-   con = ENCODED_STR_NEW(at, length);
- 
-   unindent(con, start_col);
-   
-   split = rb_str_split(con, "\n");
- 
-   name = rb_funcall(split, rb_intern("shift"), 0);
-   desc = rb_ary_join(split, rb_str_new2( "\n" ));
- 
-   if( name == Qnil ) 
-   {
-     name = rb_str_new2("");
-   }
-   if( rb_funcall(desc, rb_intern("size"), 0) == 0) 
-   {
-     desc = rb_str_new2("");
-   }
-   rb_funcall(name, rb_intern("strip!"), 0);
-   rb_funcall(desc, rb_intern("rstrip!"), 0);
-   rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); 
- }
- 
- static void 
- store_attr(VALUE listener, const char * attr_type,
-            const char * at, size_t length, 
-            int line)
- {
-   VALUE val = ENCODED_STR_NEW(at, length);
-   rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line));
- }
- static void 
- store_docstring_content(VALUE listener, 
-           int start_col, 
-           const char *type_at, size_t type_length,
-           const char *at, size_t length, 
-           int current_line)
- {
-   VALUE re2;
-   VALUE unescape_escaped_quotes;
-   VALUE con = ENCODED_STR_NEW(at, length);
-   VALUE con_type = ENCODED_STR_NEW(type_at, type_length);
- 
-   unindent(con, start_col);
- 
-   re2 = rb_reg_regcomp(rb_str_new2("\r\\Z"));
-   unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\""));
-   rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2(""));
-   rb_funcall(con_type, rb_intern("strip!"), 0);
-   rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\""));
-   rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line));
- }
- static void 
- raise_lexer_error(const char * at, int line)
- { 
-   rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at);
- }
- 
- static void lexer_init(lexer_state *lexer) {
-   lexer->content_start = 0;
-   lexer->content_end = 0;
-   lexer->content_len = 0;
-   lexer->docstring_content_type_start = 0;
-   lexer->docstring_content_type_end = 0;
-   lexer->mark = 0;
-   lexer->keyword_start = 0;
-   lexer->keyword_end = 0;
-   lexer->next_keyword_start = 0;
-   lexer->line_number = 1;
-   lexer->last_newline = 0;
-   lexer->final_newline = 0;
-   lexer->start_col = 0;
- }
- 
- static VALUE CLexer_alloc(VALUE klass)
- {
-   VALUE obj;
-   lexer_state *lxr = ALLOC(lexer_state);
-   lexer_init(lxr);
- 
-   obj = Data_Wrap_Struct(klass, NULL, -1, lxr);
- 
-   return obj;
- }
- 
- static VALUE CLexer_init(VALUE self, VALUE listener)
- {
-   lexer_state *lxr; 
-   rb_iv_set(self, "@listener", listener);
-   
-   lxr = NULL;
-   DATA_GET(self, lexer_state, lxr);
-   lexer_init(lxr);
-   
-   return self;
- }
- 
- static VALUE CLexer_scan(VALUE self, VALUE input)
- {
-   VALUE input_copy;
-   char *data;
-   size_t len;
-   VALUE listener = rb_iv_get(self, "@listener");
- 
-   lexer_state *lexer;
-   lexer = NULL;
-   DATA_GET(self, lexer_state, lexer);
- 
-   input_copy = rb_str_dup(input);
- 
-   rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%"));
-   data = RSTRING_PTR(input_copy);
-   len = RSTRING_LEN(input_copy);
-   
-   if (len == 0) { 
-     rb_raise(rb_eGherkinLexingError, "No content to lex.");
-   } else {
- 
-     const char *p, *pe, *eof;
-     int cs = 0;
-     
-     VALUE current_row = Qnil;
- 
-     p = data;
-     pe = data + len;
-     eof = pe;
-     
-     assert(*pe == '\0' && "pointer does not end on NULL");
-     
-     
- #line 900 "ext/gherkin_lexer_lt/gherkin_lexer_lt.c"
- 	{
- 	cs = lexer_start;
- 	}
- 
- #line 425 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/lt.c.rl"
-     
- #line 907 "ext/gherkin_lexer_lt/gherkin_lexer_lt.c"
- 	{
- 	int _klen;
- 	unsigned int _trans;
- 	const char *_acts;
- 	unsigned int _nacts;
- 	const char *_keys;
- 
- 	if ( p == pe )
- 		goto _test_eof;
- 	if ( cs == 0 )
- 		goto _out;
- _resume:
- 	_keys = _lexer_trans_keys + _lexer_key_offsets[cs];
- 	_trans = _lexer_index_offsets[cs];
- 
- 	_klen = _lexer_single_lengths[cs];
- 	if ( _klen > 0 ) {
- 		const char *_lower = _keys;
- 		const char *_mid;
- 		const char *_upper = _keys + _klen - 1;
- 		while (1) {
- 			if ( _upper < _lower )
- 				break;
- 
- 			_mid = _lower + ((_upper-_lower) >> 1);
- 			if ( (*p) < *_mid )
- 				_upper = _mid - 1;
- 			else if ( (*p) > *_mid )
- 				_lower = _mid + 1;
- 			else {
- 				_trans += (_mid - _keys);
- 				goto _match;
- 			}
- 		}
- 		_keys += _klen;
- 		_trans += _klen;
- 	}
- 
- 	_klen = _lexer_range_lengths[cs];
- 	if ( _klen > 0 ) {
- 		const char *_lower = _keys;
- 		const char *_mid;
- 		const char *_upper = _keys + (_klen<<1) - 2;
- 		while (1) {
- 			if ( _upper < _lower )
- 				break;
- 
- 			_mid = _lower + (((_upper-_lower) >> 1) & ~1);
- 			if ( (*p) < _mid[0] )
- 				_upper = _mid - 2;
- 			else if ( (*p) > _mid[1] )
- 				_lower = _mid + 2;
- 			else {
- 				_trans += ((_mid - _keys)>>1);
- 				goto _match;
- 			}
- 		}
- 		_trans += _klen;
- 	}
- 
- _match:
- 	cs = _lexer_trans_targs[_trans];
- 
- 	if ( _lexer_trans_actions[_trans] == 0 )
- 		goto _again;
- 
- 	_acts = _lexer_actions + _lexer_trans_actions[_trans];
- 	_nacts = (unsigned int) *_acts++;
- 	while ( _nacts-- > 0 )
- 	{
- 		switch ( *_acts++ )
- 		{
- 	case 0:
- #line 83 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/lt.c.rl"
- 	{
- 		MARK(content_start, p);
-     lexer->current_line = lexer->line_number;
-     lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2;
-   }
- 	break;
- 	case 1:
- #line 89 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/lt.c.rl"
- 	{
-     MARK(content_start, p);
-   }
- 	break;
- 	case 2:
- #line 93 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/lt.c.rl"
- 	{
-     lexer->current_line = lexer->line_number;
-     lexer->start_col = p - data - lexer->last_newline;
-   }
- 	break;
- 	case 3:
- #line 98 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/lt.c.rl"
- 	{
-     int len = LEN(content_start, PTR_TO(final_newline));
-     int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end));
- 
-     if (len < 0) len = 0;
-     if (type_len < 0) len = 0;
- 
-     store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line);
-   }
- 	break;
- 	case 4:
- #line 108 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/lt.c.rl"
- 	{ 
-     MARK(docstring_content_type_start, p);
-   }
- 	break;
- 	case 5:
- #line 112 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/lt.c.rl"
- 	{ 
-     MARK(docstring_content_type_end, p);
-   }
- 	break;
- 	case 6:
- #line 116 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/lt.c.rl"
- 	{
-     STORE_KW_END_CON(feature);
-   }
- 	break;
- 	case 7:
- #line 120 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/lt.c.rl"
- 	{
-     STORE_KW_END_CON(background);
-   }
- 	break;
- 	case 8:
- #line 124 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/lt.c.rl"
- 	{
-     STORE_KW_END_CON(scenario);
-   }
- 	break;
- 	case 9:
- #line 128 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/lt.c.rl"
- 	{
-     STORE_KW_END_CON(scenario_outline);
-   }
- 	break;
- 	case 10:
- #line 132 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/lt.c.rl"
- 	{
-     STORE_KW_END_CON(examples);
-   }
- 	break;
- 	case 11:
- #line 136 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/lt.c.rl"
- 	{
-     store_kw_con(listener, "step",
-       PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-       PTR_TO(content_start), LEN(content_start, p), 
-       lexer->current_line);
-   }
- 	break;
- 	case 12:
- #line 143 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/lt.c.rl"
- 	{
-     STORE_ATTR(comment);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 13:
- #line 148 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/lt.c.rl"
- 	{
-     STORE_ATTR(tag);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 14:
- #line 153 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/lt.c.rl"
- 	{
-     lexer->line_number += 1;
-     MARK(final_newline, p);
-   }
- 	break;
- 	case 15:
- #line 158 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/lt.c.rl"
- 	{
-     MARK(last_newline, p + 1);
-   }
- 	break;
- 	case 16:
- #line 162 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/lt.c.rl"
- 	{
-     if (lexer->mark == 0) {
-       MARK(mark, p);
-     }
-   }
- 	break;
- 	case 17:
- #line 168 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/lt.c.rl"
- 	{
-     MARK(keyword_end, p);
-     MARK(keyword_start, PTR_TO(mark));
-     MARK(content_start, p + 1);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 18:
- #line 175 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/lt.c.rl"
- 	{
-     MARK(content_end, p);
-   }
- 	break;
- 	case 19:
- #line 179 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/lt.c.rl"
- 	{
-     p = p - 1;
-     lexer->current_line = lexer->line_number;
-     current_row = rb_ary_new();
-   }
- 	break;
- 	case 20:
- #line 185 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/lt.c.rl"
- 	{
- 		MARK(content_start, p);
-   }
- 	break;
- 	case 21:
- #line 189 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/lt.c.rl"
- 	{
-     VALUE re_pipe, re_newline, re_backslash;
-     VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
-     rb_funcall(con, rb_intern("strip!"), 0);
-     re_pipe      = rb_reg_regcomp(rb_str_new2("\\\\\\|"));
-     re_newline   = rb_reg_regcomp(rb_str_new2("\\\\n"));
-     re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_pipe,      rb_str_new2("|"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_newline,   rb_str_new2("\n"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\"));
- 
-     rb_ary_push(current_row, con);
-   }
- 	break;
- 	case 22:
- #line 203 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/lt.c.rl"
- 	{
-     rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
-   }
- 	break;
- 	case 23:
- #line 207 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/lt.c.rl"
- 	{
-     int line;
-     if (cs < lexer_first_final) {
-       size_t count = 0;
-       VALUE newstr_val;
-       char *newstr;
-       int newstr_count = 0;        
-       size_t len;
-       const char *buff;
-       if (lexer->last_newline != 0) {
-         len = LEN(last_newline, eof);
-         buff = PTR_TO(last_newline);
-       } else {
-         len = strlen(data);
-         buff = data;
-       }
- 
-       // Allocate as a ruby string so that it gets cleaned up by GC
-       newstr_val = rb_str_new(buff, len);
-       newstr = RSTRING_PTR(newstr_val);
- 
- 
-       for (count = 0; count < len; count++) {
-         if(buff[count] == 10) {
-           newstr[newstr_count] = '\0'; // terminate new string at first newline found
-           break;
-         } else {
-           if (buff[count] == '%') {
-             newstr[newstr_count++] = buff[count];
-             newstr[newstr_count] = buff[count];
-           } else {
-             newstr[newstr_count] = buff[count];
-           }
-         }
-         newstr_count++;
-       }
- 
-       line = lexer->line_number;
-       lexer_init(lexer); // Re-initialize so we can scan again with the same lexer
-       raise_lexer_error(newstr, line);
-     } else {
-       rb_funcall(listener, rb_intern("eof"), 0);
-     }
-   }
- 	break;
- #line 1197 "ext/gherkin_lexer_lt/gherkin_lexer_lt.c"
- 		}
- 	}
- 
- _again:
- 	if ( cs == 0 )
- 		goto _out;
- 	if ( ++p != pe )
- 		goto _resume;
- 	_test_eof: {}
- 	if ( p == eof )
- 	{
- 	const char *__acts = _lexer_actions + _lexer_eof_actions[cs];
- 	unsigned int __nacts = (unsigned int) *__acts++;
- 	while ( __nacts-- > 0 ) {
- 		switch ( *__acts++ ) {
- 	case 23:
- #line 207 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/lt.c.rl"
- 	{
-     int line;
-     if (cs < lexer_first_final) {
-       size_t count = 0;
-       VALUE newstr_val;
-       char *newstr;
-       int newstr_count = 0;        
-       size_t len;
-       const char *buff;
-       if (lexer->last_newline != 0) {
-         len = LEN(last_newline, eof);
-         buff = PTR_TO(last_newline);
-       } else {
-         len = strlen(data);
-         buff = data;
-       }
- 
-       // Allocate as a ruby string so that it gets cleaned up by GC
-       newstr_val = rb_str_new(buff, len);
-       newstr = RSTRING_PTR(newstr_val);
- 
- 
-       for (count = 0; count < len; count++) {
-         if(buff[count] == 10) {
-           newstr[newstr_count] = '\0'; // terminate new string at first newline found
-           break;
-         } else {
-           if (buff[count] == '%') {
-             newstr[newstr_count++] = buff[count];
-             newstr[newstr_count] = buff[count];
-           } else {
-             newstr[newstr_count] = buff[count];
-           }
-         }
-         newstr_count++;
-       }
- 
-       line = lexer->line_number;
-       lexer_init(lexer); // Re-initialize so we can scan again with the same lexer
-       raise_lexer_error(newstr, line);
-     } else {
-       rb_funcall(listener, rb_intern("eof"), 0);
-     }
-   }
- 	break;
- #line 1260 "ext/gherkin_lexer_lt/gherkin_lexer_lt.c"
- 		}
- 	}
- 	}
- 
- 	_out: {}
- 	}
- 
- #line 426 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/lt.c.rl"
- 
-     assert(p <= pe && "data overflow after parsing execute");
-     assert(lexer->content_start <= len && "content starts after data end");
-     assert(lexer->mark < len && "mark is after data end");
-     
-     // Reset lexer by re-initializing the whole thing
-     lexer_init(lexer);
- 
-     if (cs == lexer_error) {
-       rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails.");
-     } else {
-       return Qtrue;
-     }
-   }
- }
- 
- void Init_gherkin_lexer_lt()
- {
-   mGherkin = rb_define_module("Gherkin");
-   mGherkinLexer = rb_define_module_under(mGherkin, "Lexer");
-   rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError"));
- 
-   mCLexer = rb_define_module_under(mGherkin, "CLexer");
-   cI18nLexer = rb_define_class_under(mCLexer, "Lt", rb_cObject);
-   rb_define_alloc_func(cI18nLexer, CLexer_alloc);
-   rb_define_method(cI18nLexer, "initialize", CLexer_init, 1);
-   rb_define_method(cI18nLexer, "scan", CLexer_scan, 1);
- }
- 
 -#line 1 "ragel/i18n/lt.c.rl"
 -#include <assert.h>
 -#include <ruby.h>
 -
 -#if defined(_WIN32)
 -#include <stddef.h>
 -#endif
 -
 -#ifdef HAVE_RUBY_RE_H
 -#include <ruby/re.h>
 -#else
 -#include <re.h>
 -#endif
 -
 -#ifdef HAVE_RUBY_ENCODING_H
 -#include <ruby/encoding.h>
 -#define ENCODED_STR_NEW(ptr, len) \
 -    rb_enc_str_new(ptr, len, rb_utf8_encoding())
 -#else
 -#define ENCODED_STR_NEW(ptr, len) \
 -    rb_str_new(ptr, len)
 -#endif
 -
 -#ifndef RSTRING_PTR
 -#define RSTRING_PTR(s) (RSTRING(s)->ptr)
 -#endif
 -
 -#ifndef RSTRING_LEN
 -#define RSTRING_LEN(s) (RSTRING(s)->len)
 -#endif
 -
 -#define DATA_GET(FROM, TYPE, NAME) \
 -  Data_Get_Struct(FROM, TYPE, NAME); \
 -  if (NAME == NULL) { \
 -    rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \
 -  }
 - 
 -typedef struct lexer_state {
 -  int content_len;
 -  int line_number;
 -  int current_line;
 -  int start_col;
 -  size_t mark;
 -  size_t keyword_start;
 -  size_t keyword_end;
 -  size_t next_keyword_start;
 -  size_t content_start;
 -  size_t content_end;
 -  size_t docstring_content_type_start;
 -  size_t docstring_content_type_end;
 -  size_t query_start;
 -  size_t last_newline;
 -  size_t final_newline;
 -} lexer_state;
 -
 -static VALUE mGherkin;
 -static VALUE mGherkinLexer;
 -static VALUE mCLexer;
 -static VALUE cI18nLexer;
 -static VALUE rb_eGherkinLexingError;
 -
 -#define LEN(AT, P) (P - data - lexer->AT)
 -#define MARK(M, P) (lexer->M = (P) - data)
 -#define PTR_TO(P) (data + lexer->P)
 -
 -#define STORE_KW_END_CON(EVENT) \
 -  store_multiline_kw_con(listener, # EVENT, \
 -    PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \
 -    PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \
 -    lexer->current_line, lexer->start_col); \
 -    if (lexer->content_end != 0) { \
 -      p = PTR_TO(content_end - 1); \
 -    } \
 -    lexer->content_end = 0
 -
 -#define STORE_ATTR(ATTR) \
 -    store_attr(listener, # ATTR, \
 -      PTR_TO(content_start), LEN(content_start, p), \
 -      lexer->line_number)
 -
 -
 -#line 254 "ragel/i18n/lt.c.rl"
 -
 -
 -/** Data **/
 -
 -#line 89 "ext/gherkin_lexer_lt/gherkin_lexer_lt.c"
 -static const char _lexer_actions[] = {
 -	0, 1, 0, 1, 1, 1, 2, 1, 
 -	3, 1, 4, 1, 5, 1, 6, 1, 
 -	7, 1, 8, 1, 9, 1, 10, 1, 
 -	11, 1, 12, 1, 13, 1, 16, 1, 
 -	17, 1, 18, 1, 19, 1, 20, 1, 
 -	21, 1, 22, 1, 23, 2, 1, 18, 
 -	2, 4, 5, 2, 13, 0, 2, 14, 
 -	15, 2, 17, 0, 2, 17, 2, 2, 
 -	17, 16, 2, 17, 19, 2, 18, 6, 
 -	2, 18, 7, 2, 18, 8, 2, 18, 
 -	9, 2, 18, 10, 2, 18, 16, 2, 
 -	20, 21, 2, 22, 0, 2, 22, 2, 
 -	2, 22, 16, 2, 22, 19, 3, 3, 
 -	14, 15, 3, 5, 14, 15, 3, 11, 
 -	14, 15, 3, 12, 14, 15, 3, 13, 
 -	14, 15, 3, 14, 15, 18, 3, 17, 
 -	0, 11, 3, 17, 14, 15, 4, 1, 
 -	14, 15, 18, 4, 4, 5, 14, 15, 
 -	4, 17, 0, 14, 15, 5, 17, 0, 
 -	11, 14, 15
 -};
 -
 -static const short _lexer_key_offsets[] = {
 -	0, 0, 19, 20, 21, 39, 40, 41, 
 -	43, 45, 50, 55, 60, 65, 69, 73, 
 -	75, 76, 77, 78, 79, 80, 81, 82, 
 -	83, 84, 85, 86, 87, 88, 89, 90, 
 -	91, 93, 95, 100, 107, 112, 113, 114, 
 -	115, 116, 117, 118, 119, 121, 122, 123, 
 -	124, 125, 126, 127, 128, 129, 130, 131, 
 -	132, 133, 147, 149, 151, 153, 155, 157, 
 -	159, 161, 163, 165, 167, 169, 171, 173, 
 -	175, 177, 195, 196, 197, 198, 199, 200, 
 -	201, 202, 203, 204, 205, 206, 207, 208, 
 -	215, 217, 219, 221, 223, 225, 227, 229, 
 -	231, 232, 233, 234, 235, 236, 237, 238, 
 -	239, 250, 252, 254, 256, 258, 260, 262, 
 -	264, 266, 268, 270, 272, 274, 276, 278, 
 -	280, 282, 284, 286, 288, 290, 292, 294, 
 -	296, 298, 300, 302, 304, 306, 308, 310, 
 -	312, 314, 316, 318, 321, 323, 325, 327, 
 -	329, 331, 333, 335, 337, 339, 341, 343, 
 -	346, 349, 351, 353, 355, 357, 359, 361, 
 -	363, 365, 367, 369, 371, 373, 375, 377, 
 -	379, 380, 381, 382, 383, 384, 385, 387, 
 -	389, 390, 391, 392, 393, 394, 395, 396, 
 -	397, 398, 399, 400, 401, 402, 403, 417, 
 -	419, 421, 423, 425, 427, 429, 431, 433, 
 -	435, 437, 439, 441, 443, 445, 447, 449, 
 -	451, 453, 455, 457, 459, 461, 463, 465, 
 -	468, 470, 472, 474, 476, 478, 480, 482, 
 -	484, 486, 488, 490, 492, 494, 496, 498, 
 -	500, 501, 502, 503, 504, 518, 520, 522, 
 -	524, 526, 528, 530, 532, 534, 536, 538, 
 -	540, 542, 544, 546, 548, 550, 552, 554, 
 -	556, 558, 560, 562, 565, 567, 569, 571, 
 -	573, 575, 577, 579, 581, 583, 585, 588, 
 -	590, 592, 594, 596, 598, 600, 602, 604, 
 -	606, 608, 610, 613, 615, 617, 619, 621, 
 -	623, 625, 627, 629, 631, 633, 635, 637, 
 -	638, 639, 640, 641, 642, 643, 644, 645, 
 -	649, 655, 658, 660, 666, 684, 686, 688, 
 -	690, 692, 694, 696, 698, 700, 702, 705, 
 -	707, 709, 711, 713, 715, 717, 719, 721, 
 -	723, 725, 727, 729, 732, 734, 736, 738, 
 -	740, 742, 744, 746, 748, 750, 752, 754, 
 -	756, 758, 760
 -};
 -
 -static const char _lexer_trans_keys[] = {
 -	-17, 10, 32, 34, 35, 37, 42, 64, 
 -	66, 68, 73, 75, 80, 83, 84, 86, 
 -	124, 9, 13, -69, -65, 10, 32, 34, 
 -	35, 37, 42, 64, 66, 68, 73, 75, 
 -	80, 83, 84, 86, 124, 9, 13, 34, 
 -	34, 10, 13, 10, 13, 10, 32, 34, 
 -	9, 13, 10, 32, 34, 9, 13, 10, 
 -	32, 34, 9, 13, 10, 32, 34, 9, 
 -	13, 10, 32, 9, 13, 10, 32, 9, 
 -	13, 10, 13, 10, 95, 70, 69, 65, 
 -	84, 85, 82, 69, 95, 69, 78, 68, 
 -	95, 37, 32, 10, 13, 10, 13, 13, 
 -	32, 64, 9, 10, 9, 10, 13, 32, 
 -	64, 11, 12, 10, 32, 64, 9, 13, 
 -	101, 116, 117, 111, 116, 97, 114, 97, 
 -	111, 105, 110, 116, 101, 107, 115, 116, 
 -	97, 115, 58, 10, 10, 10, 32, 35, 
 -	37, 42, 64, 66, 68, 73, 75, 83, 
 -	84, 9, 13, 10, 95, 10, 70, 10, 
 -	69, 10, 65, 10, 84, 10, 85, 10, 
 -	82, 10, 69, 10, 95, 10, 69, 10, 
 -	78, 10, 68, 10, 95, 10, 37, 10, 
 -	32, 10, 32, 34, 35, 37, 42, 64, 
 -	66, 68, 73, 75, 80, 83, 84, 86, 
 -	124, 9, 13, 97, 118, 121, 122, 100, 
 -	-59, -66, 105, 97, 105, 58, 10, 10, 
 -	10, 32, 35, 83, 124, 9, 13, 10, 
 -	97, 10, 118, 10, 121, 10, 98, -60, 
 -	10, -105, 10, 10, 58, 97, 99, 118, 
 -	121, 98, -60, -105, 58, 10, 10, 10, 
 -	32, 35, 37, 64, 75, 80, 83, 86, 
 -	9, 13, 10, 95, 10, 70, 10, 69, 
 -	10, 65, 10, 84, 10, 85, 10, 82, 
 -	10, 69, 10, 95, 10, 69, 10, 78, 
 -	10, 68, 10, 95, 10, 37, 10, 111, 
 -	10, 110, 10, 116, 10, 101, 10, 107, 
 -	10, 115, 10, 116, 10, 97, 10, 115, 
 -	10, 58, 10, 97, 10, 118, 10, 121, 
 -	10, 122, 10, 100, -59, 10, -66, 10, 
 -	10, 105, 10, 97, 10, 105, 10, 97, 
 -	99, 10, 118, 10, 121, 10, 98, -60, 
 -	10, -105, 10, 10, 101, 10, 110, 10, 
 -	97, 10, 114, 10, 105, 10, 106, 10, 
 -	97, 117, 10, 105, 117, 10, 115, 10, 
 -	32, -59, 10, -95, 10, 10, 97, 10, 
 -	98, 10, 108, 10, 111, 10, 110, 10, 
 -	97, 10, 114, 10, 105, 10, 97, 10, 
 -	110, 10, 116, 101, 110, 97, 114, 105, 
 -	106, 97, 117, 105, 117, 115, 32, -59, 
 -	-95, 97, 98, 108, 111, 110, 97, 115, 
 -	58, 10, 10, 10, 32, 35, 37, 42, 
 -	64, 66, 68, 73, 75, 83, 84, 9, 
 -	13, 10, 95, 10, 70, 10, 69, 10, 
 -	65, 10, 84, 10, 85, 10, 82, 10, 
 -	69, 10, 95, 10, 69, 10, 78, 10, 
 -	68, 10, 95, 10, 37, 10, 32, 10, 
 -	101, 10, 116, 10, 117, 10, 111, 10, 
 -	116, 10, 97, 10, 114, 10, 97, 10, 
 -	105, 10, 97, 99, 10, 118, 10, 121, 
 -	10, 98, -60, 10, -105, 10, 10, 58, 
 -	10, 101, 10, 110, 10, 97, 10, 114, 
 -	10, 105, 10, 106, 10, 117, 10, 115, 
 -	10, 97, 10, 100, 115, 58, 10, 10, 
 -	10, 32, 35, 37, 42, 64, 66, 68, 
 -	73, 75, 83, 84, 9, 13, 10, 95, 
 -	10, 70, 10, 69, 10, 65, 10, 84, 
 -	10, 85, 10, 82, 10, 69, 10, 95, 
 -	10, 69, 10, 78, 10, 68, 10, 95, 
 -	10, 37, 10, 32, 10, 101, 10, 116, 
 -	10, 117, 10, 111, 10, 116, 10, 97, 
 -	10, 114, 10, 97, 111, 10, 105, 10, 
 -	110, 10, 116, 10, 101, 10, 107, 10, 
 -	115, 10, 116, 10, 97, 10, 115, 10, 
 -	58, 10, 97, 99, 10, 118, 10, 121, 
 -	10, 98, -60, 10, -105, 10, 10, 101, 
 -	10, 110, 10, 97, 10, 114, 10, 105, 
 -	10, 106, 10, 97, 117, 10, 117, 10, 
 -	115, 10, 32, -59, 10, -95, 10, 10, 
 -	97, 10, 98, 10, 108, 10, 111, 10, 
 -	110, 10, 97, 10, 100, 97, 100, 97, 
 -	114, 105, 97, 110, 116, 32, 124, 9, 
 -	13, 10, 32, 92, 124, 9, 13, 10, 
 -	92, 124, 10, 92, 10, 32, 92, 124, 
 -	9, 13, 10, 32, 34, 35, 37, 42, 
 -	64, 66, 68, 73, 75, 80, 83, 84, 
 -	86, 124, 9, 13, 10, 101, 10, 116, 
 -	10, 117, 10, 111, 10, 116, 10, 97, 
 -	10, 114, 10, 97, 10, 105, 10, 97, 
 -	99, 10, 118, 10, 121, 10, 98, -60, 
 -	10, -105, 10, 10, 58, 10, 101, 10, 
 -	110, 10, 97, 10, 114, 10, 105, 10, 
 -	106, 10, 97, 117, 10, 117, 10, 115, 
 -	10, 32, -59, 10, -95, 10, 10, 97, 
 -	10, 98, 10, 108, 10, 111, 10, 110, 
 -	10, 97, 10, 115, 10, 97, 10, 100, 
 -	0
 -};
 -
 -static const char _lexer_single_lengths[] = {
 -	0, 17, 1, 1, 16, 1, 1, 2, 
 -	2, 3, 3, 3, 3, 2, 2, 2, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	2, 2, 3, 5, 3, 1, 1, 1, 
 -	1, 1, 1, 1, 2, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 12, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 16, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 5, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	9, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 3, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 3, 
 -	3, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	1, 1, 1, 1, 1, 1, 2, 2, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 12, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 3, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	1, 1, 1, 1, 12, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 3, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 3, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 3, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 2, 
 -	4, 3, 2, 4, 16, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 3, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 3, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 0
 -};
 -
 -static const char _lexer_range_lengths[] = {
 -	0, 1, 0, 0, 1, 0, 0, 0, 
 -	0, 1, 1, 1, 1, 1, 1, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 1, 1, 1, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 1, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 1, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 1, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	1, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 1, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 1, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 1, 
 -	1, 0, 0, 1, 1, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0
 -};
 -
 -static const short _lexer_index_offsets[] = {
 -	0, 0, 19, 21, 23, 41, 43, 45, 
 -	48, 51, 56, 61, 66, 71, 75, 79, 
 -	82, 84, 86, 88, 90, 92, 94, 96, 
 -	98, 100, 102, 104, 106, 108, 110, 112, 
 -	114, 117, 120, 125, 132, 137, 139, 141, 
 -	143, 145, 147, 149, 151, 154, 156, 158, 
 -	160, 162, 164, 166, 168, 170, 172, 174, 
 -	176, 178, 192, 195, 198, 201, 204, 207, 
 -	210, 213, 216, 219, 222, 225, 228, 231, 
 -	234, 237, 255, 257, 259, 261, 263, 265, 
 -	267, 269, 271, 273, 275, 277, 279, 281, 
 -	288, 291, 294, 297, 300, 303, 306, 309, 
 -	312, 314, 316, 318, 320, 322, 324, 326, 
 -	328, 339, 342, 345, 348, 351, 354, 357, 
 -	360, 363, 366, 369, 372, 375, 378, 381, 
 -	384, 387, 390, 393, 396, 399, 402, 405, 
 -	408, 411, 414, 417, 420, 423, 426, 429, 
 -	432, 435, 438, 441, 445, 448, 451, 454, 
 -	457, 460, 463, 466, 469, 472, 475, 478, 
 -	482, 486, 489, 492, 495, 498, 501, 504, 
 -	507, 510, 513, 516, 519, 522, 525, 528, 
 -	531, 533, 535, 537, 539, 541, 543, 546, 
 -	549, 551, 553, 555, 557, 559, 561, 563, 
 -	565, 567, 569, 571, 573, 575, 577, 591, 
 -	594, 597, 600, 603, 606, 609, 612, 615, 
 -	618, 621, 624, 627, 630, 633, 636, 639, 
 -	642, 645, 648, 651, 654, 657, 660, 663, 
 -	667, 670, 673, 676, 679, 682, 685, 688, 
 -	691, 694, 697, 700, 703, 706, 709, 712, 
 -	715, 717, 719, 721, 723, 737, 740, 743, 
 -	746, 749, 752, 755, 758, 761, 764, 767, 
 -	770, 773, 776, 779, 782, 785, 788, 791, 
 -	794, 797, 800, 803, 807, 810, 813, 816, 
 -	819, 822, 825, 828, 831, 834, 837, 841, 
 -	844, 847, 850, 853, 856, 859, 862, 865, 
 -	868, 871, 874, 878, 881, 884, 887, 890, 
 -	893, 896, 899, 902, 905, 908, 911, 914, 
 -	916, 918, 920, 922, 924, 926, 928, 930, 
 -	934, 940, 944, 947, 953, 971, 974, 977, 
 -	980, 983, 986, 989, 992, 995, 998, 1002, 
 -	1005, 1008, 1011, 1014, 1017, 1020, 1023, 1026, 
 -	1029, 1032, 1035, 1038, 1042, 1045, 1048, 1051, 
 -	1054, 1057, 1060, 1063, 1066, 1069, 1072, 1075, 
 -	1078, 1081, 1084
 -};
 -
 -static const short _lexer_trans_targs[] = {
 -	2, 4, 4, 5, 15, 17, 31, 34, 
 -	37, 39, 43, 44, 74, 95, 295, 297, 
 -	303, 4, 0, 3, 0, 4, 0, 4, 
 -	4, 5, 15, 17, 31, 34, 37, 39, 
 -	43, 44, 74, 95, 295, 297, 303, 4, 
 -	0, 6, 0, 7, 0, 9, 8, 8, 
 -	9, 8, 8, 10, 10, 11, 10, 10, 
 -	10, 10, 11, 10, 10, 10, 10, 12, 
 -	10, 10, 10, 10, 13, 10, 10, 4, 
 -	14, 14, 0, 4, 14, 14, 0, 4, 
 -	16, 15, 4, 0, 18, 0, 19, 0, 
 -	20, 0, 21, 0, 22, 0, 23, 0, 
 -	24, 0, 25, 0, 26, 0, 27, 0, 
 -	28, 0, 29, 0, 30, 0, 346, 0, 
 -	32, 0, 4, 16, 33, 4, 16, 33, 
 -	0, 0, 0, 0, 35, 36, 4, 36, 
 -	36, 34, 35, 35, 4, 36, 34, 36, 
 -	0, 38, 0, 31, 0, 40, 0, 41, 
 -	0, 42, 0, 31, 0, 31, 0, 45, 
 -	46, 0, 31, 0, 47, 0, 48, 0, 
 -	49, 0, 50, 0, 51, 0, 52, 0, 
 -	53, 0, 54, 0, 55, 0, 57, 56, 
 -	57, 56, 57, 57, 4, 58, 72, 4, 
 -	309, 311, 315, 316, 318, 344, 57, 56, 
 -	57, 59, 56, 57, 60, 56, 57, 61, 
 -	56, 57, 62, 56, 57, 63, 56, 57, 
 -	64, 56, 57, 65, 56, 57, 66, 56, 
 -	57, 67, 56, 57, 68, 56, 57, 69, 
 -	56, 57, 70, 56, 57, 71, 56, 57, 
 -	4, 56, 57, 73, 56, 4, 4, 5, 
 -	15, 17, 31, 34, 37, 39, 43, 44, 
 -	74, 95, 295, 297, 303, 4, 0, 75, 
 -	0, 76, 0, 77, 0, 78, 0, 79, 
 -	0, 80, 0, 81, 0, 82, 0, 83, 
 -	0, 84, 0, 85, 0, 87, 86, 87, 
 -	86, 87, 87, 4, 88, 4, 87, 86, 
 -	87, 89, 86, 87, 90, 86, 87, 91, 
 -	86, 87, 92, 86, 93, 87, 86, 94, 
 -	87, 86, 87, 73, 86, 96, 168, 0, 
 -	97, 0, 98, 0, 99, 0, 100, 0, 
 -	101, 0, 102, 0, 104, 103, 104, 103, 
 -	104, 104, 4, 105, 4, 119, 129, 139, 
 -	162, 104, 103, 104, 106, 103, 104, 107, 
 -	103, 104, 108, 103, 104, 109, 103, 104, 
 -	110, 103, 104, 111, 103, 104, 112, 103, 
 -	104, 113, 103, 104, 114, 103, 104, 115, 
 -	103, 104, 116, 103, 104, 117, 103, 104, 
 -	118, 103, 104, 4, 103, 104, 120, 103, 
 -	104, 121, 103, 104, 122, 103, 104, 123, 
 -	103, 104, 124, 103, 104, 125, 103, 104, 
 -	126, 103, 104, 127, 103, 104, 128, 103, 
 -	104, 73, 103, 104, 130, 103, 104, 131, 
 -	103, 104, 132, 103, 104, 133, 103, 104, 
 -	134, 103, 135, 104, 103, 136, 104, 103, 
 -	104, 137, 103, 104, 138, 103, 104, 128, 
 -	103, 104, 140, 145, 103, 104, 141, 103, 
 -	104, 142, 103, 104, 143, 103, 144, 104, 
 -	103, 128, 104, 103, 104, 146, 103, 104, 
 -	147, 103, 104, 148, 103, 104, 149, 103, 
 -	104, 150, 103, 104, 151, 103, 104, 152, 
 -	127, 103, 104, 128, 153, 103, 104, 154, 
 -	103, 104, 155, 103, 156, 104, 103, 157, 
 -	104, 103, 104, 158, 103, 104, 159, 103, 
 -	104, 160, 103, 104, 161, 103, 104, 126, 
 -	103, 104, 163, 103, 104, 164, 103, 104, 
 -	165, 103, 104, 166, 103, 104, 167, 103, 
 -	104, 137, 103, 169, 0, 170, 0, 171, 
 -	0, 172, 0, 173, 0, 174, 0, 175, 
 -	232, 0, 84, 176, 0, 177, 0, 178, 
 -	0, 179, 0, 180, 0, 181, 0, 182, 
 -	0, 183, 0, 184, 0, 185, 0, 186, 
 -	0, 187, 0, 188, 0, 190, 189, 190, 
 -	189, 190, 190, 4, 191, 205, 4, 206, 
 -	208, 212, 213, 215, 230, 190, 189, 190, 
 -	192, 189, 190, 193, 189, 190, 194, 189, 
 -	190, 195, 189, 190, 196, 189, 190, 197, 
 -	189, 190, 198, 189, 190, 199, 189, 190, 
 -	200, 189, 190, 201, 189, 190, 202, 189, 
 -	190, 203, 189, 190, 204, 189, 190, 4, 
 -	189, 190, 73, 189, 190, 207, 189, 190, 
 -	205, 189, 190, 209, 189, 190, 210, 189, 
 -	190, 211, 189, 190, 205, 189, 190, 205, 
 -	189, 190, 214, 189, 190, 205, 189, 190, 
 -	216, 222, 189, 190, 217, 189, 190, 218, 
 -	189, 190, 219, 189, 220, 190, 189, 221, 
 -	190, 189, 190, 73, 189, 190, 223, 189, 
 -	190, 224, 189, 190, 225, 189, 190, 226, 
 -	189, 190, 227, 189, 190, 228, 189, 190, 
 -	229, 189, 190, 221, 189, 190, 231, 189, 
 -	190, 211, 189, 233, 0, 234, 0, 236, 
 -	235, 236, 235, 236, 236, 4, 237, 251, 
 -	4, 252, 254, 258, 259, 270, 293, 236, 
 -	235, 236, 238, 235, 236, 239, 235, 236, 
 -	240, 235, 236, 241, 235, 236, 242, 235, 
 -	236, 243, 235, 236, 244, 235, 236, 245, 
 -	235, 236, 246, 235, 236, 247, 235, 236, 
 -	248, 235, 236, 249, 235, 236, 250, 235, 
 -	236, 4, 235, 236, 73, 235, 236, 253, 
 -	235, 236, 251, 235, 236, 255, 235, 236, 
 -	256, 235, 236, 257, 235, 236, 251, 235, 
 -	236, 251, 235, 236, 260, 261, 235, 236, 
 -	251, 235, 236, 262, 235, 236, 263, 235, 
 -	236, 264, 235, 236, 265, 235, 236, 266, 
 -	235, 236, 267, 235, 236, 268, 235, 236, 
 -	269, 235, 236, 73, 235, 236, 271, 276, 
 -	235, 236, 272, 235, 236, 273, 235, 236, 
 -	274, 235, 275, 236, 235, 269, 236, 235, 
 -	236, 277, 235, 236, 278, 235, 236, 279, 
 -	235, 236, 280, 235, 236, 281, 235, 236, 
 -	282, 235, 236, 283, 268, 235, 236, 284, 
 -	235, 236, 285, 235, 236, 286, 235, 287, 
 -	236, 235, 288, 236, 235, 236, 289, 235, 
 -	236, 290, 235, 236, 291, 235, 236, 292, 
 -	235, 236, 267, 235, 236, 294, 235, 236, 
 -	257, 235, 296, 0, 42, 0, 298, 0, 
 -	299, 0, 300, 0, 301, 0, 302, 0, 
 -	82, 0, 303, 304, 303, 0, 308, 307, 
 -	306, 304, 307, 305, 0, 306, 304, 305, 
 -	0, 306, 305, 308, 307, 306, 304, 307, 
 -	305, 308, 308, 5, 15, 17, 31, 34, 
 -	37, 39, 43, 44, 74, 95, 295, 297, 
 -	303, 308, 0, 57, 310, 56, 57, 72, 
 -	56, 57, 312, 56, 57, 313, 56, 57, 
 -	314, 56, 57, 72, 56, 57, 72, 56, 
 -	57, 317, 56, 57, 72, 56, 57, 319, 
 -	325, 56, 57, 320, 56, 57, 321, 56, 
 -	57, 322, 56, 323, 57, 56, 324, 57, 
 -	56, 57, 73, 56, 57, 326, 56, 57, 
 -	327, 56, 57, 328, 56, 57, 329, 56, 
 -	57, 330, 56, 57, 331, 56, 57, 332, 
 -	343, 56, 57, 333, 56, 57, 334, 56, 
 -	57, 335, 56, 336, 57, 56, 337, 57, 
 -	56, 57, 338, 56, 57, 339, 56, 57, 
 -	340, 56, 57, 341, 56, 57, 342, 56, 
 -	57, 343, 56, 57, 324, 56, 57, 345, 
 -	56, 57, 314, 56, 0, 0
 -};
 -
 -static const unsigned char _lexer_trans_actions[] = {
 -	0, 54, 0, 5, 1, 0, 29, 1, 
 -	29, 29, 29, 29, 29, 29, 29, 29, 
 -	35, 0, 43, 0, 43, 0, 43, 54, 
 -	0, 5, 1, 0, 29, 1, 29, 29, 
 -	29, 29, 29, 29, 29, 29, 35, 0, 
 -	43, 0, 43, 0, 43, 139, 48, 9, 
 -	106, 11, 0, 134, 45, 45, 45, 3, 
 -	122, 33, 33, 33, 0, 122, 33, 33, 
 -	33, 0, 122, 33, 0, 33, 0, 102, 
 -	7, 7, 43, 54, 0, 0, 43, 114, 
 -	25, 0, 54, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 149, 126, 57, 110, 23, 0, 
 -	43, 43, 43, 43, 0, 27, 118, 27, 
 -	27, 51, 27, 0, 54, 0, 1, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 144, 57, 
 -	54, 0, 54, 0, 72, 33, 84, 72, 
 -	84, 84, 84, 84, 84, 84, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	15, 0, 54, 15, 0, 130, 31, 60, 
 -	57, 31, 63, 57, 63, 63, 63, 63, 
 -	63, 63, 63, 63, 66, 31, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 144, 57, 54, 
 -	0, 54, 0, 81, 84, 81, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 0, 54, 0, 0, 
 -	54, 0, 54, 21, 0, 0, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 144, 57, 54, 0, 
 -	54, 0, 69, 33, 69, 84, 84, 84, 
 -	84, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 13, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 13, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 0, 54, 0, 0, 54, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 0, 54, 
 -	0, 0, 54, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 0, 54, 0, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 0, 54, 0, 0, 
 -	54, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	0, 43, 0, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 144, 57, 54, 
 -	0, 54, 0, 78, 33, 84, 78, 84, 
 -	84, 84, 84, 84, 84, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 19, 
 -	0, 54, 19, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 0, 54, 0, 0, 
 -	54, 0, 54, 19, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 0, 43, 0, 43, 144, 
 -	57, 54, 0, 54, 0, 75, 33, 84, 
 -	75, 84, 84, 84, 84, 84, 84, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 17, 0, 54, 17, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 17, 0, 54, 0, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 0, 54, 0, 0, 54, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 0, 
 -	54, 0, 0, 54, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 0, 0, 43, 54, 37, 
 -	37, 87, 37, 37, 43, 0, 39, 0, 
 -	43, 0, 0, 54, 0, 0, 39, 0, 
 -	0, 54, 0, 93, 90, 41, 96, 90, 
 -	96, 96, 96, 96, 96, 96, 96, 96, 
 -	99, 0, 43, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 0, 54, 0, 0, 54, 
 -	0, 54, 15, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 0, 54, 0, 0, 54, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 0, 0
 -};
 -
 -static const unsigned char _lexer_eof_actions[] = {
 -	0, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43
 -};
 -
 -static const int lexer_start = 1;
 -static const int lexer_first_final = 346;
 -static const int lexer_error = 0;
 -
 -static const int lexer_en_main = 1;
 -
 -
 -#line 258 "ragel/i18n/lt.c.rl"
 -
 -static VALUE 
 -unindent(VALUE con, int start_col)
 -{
 -  VALUE re;
 -  /* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */
 -  char pat[32]; 
 -  snprintf(pat, 32, "^[\t ]{0,%d}", start_col); 
 -  re = rb_reg_regcomp(rb_str_new2(pat));
 -  rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2(""));
 -
 -  return Qnil;
 -
 -}
 -
 -static void 
 -store_kw_con(VALUE listener, const char * event_name, 
 -             const char * keyword_at, size_t keyword_length, 
 -             const char * at,         size_t length, 
 -             int current_line)
 -{
 -  VALUE con = Qnil, kw = Qnil;
 -  kw = ENCODED_STR_NEW(keyword_at, keyword_length);
 -  con = ENCODED_STR_NEW(at, length);
 -  rb_funcall(con, rb_intern("strip!"), 0);
 -  rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); 
 -}
 -
 -static void
 -store_multiline_kw_con(VALUE listener, const char * event_name,
 -                      const char * keyword_at, size_t keyword_length,
 -                      const char * at,         size_t length,
 -                      int current_line, int start_col)
 -{
 -  VALUE split;
 -  VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil;
 -
 -  kw = ENCODED_STR_NEW(keyword_at, keyword_length);
 -  con = ENCODED_STR_NEW(at, length);
 -
 -  unindent(con, start_col);
 -  
 -  split = rb_str_split(con, "\n");
 -
 -  name = rb_funcall(split, rb_intern("shift"), 0);
 -  desc = rb_ary_join(split, rb_str_new2( "\n" ));
 -
 -  if( name == Qnil ) 
 -  {
 -    name = rb_str_new2("");
 -  }
 -  if( rb_funcall(desc, rb_intern("size"), 0) == 0) 
 -  {
 -    desc = rb_str_new2("");
 -  }
 -  rb_funcall(name, rb_intern("strip!"), 0);
 -  rb_funcall(desc, rb_intern("rstrip!"), 0);
 -  rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); 
 -}
 -
 -static void 
 -store_attr(VALUE listener, const char * attr_type,
 -           const char * at, size_t length, 
 -           int line)
 -{
 -  VALUE val = ENCODED_STR_NEW(at, length);
 -  rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line));
 -}
 -static void 
 -store_docstring_content(VALUE listener, 
 -          int start_col, 
 -          const char *type_at, size_t type_length,
 -          const char *at, size_t length, 
 -          int current_line)
 -{
 -  VALUE re2;
 -  VALUE unescape_escaped_quotes;
 -  VALUE con = ENCODED_STR_NEW(at, length);
 -  VALUE con_type = ENCODED_STR_NEW(type_at, type_length);
 -
 -  unindent(con, start_col);
 -
 -  re2 = rb_reg_regcomp(rb_str_new2("\r\\Z"));
 -  unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\""));
 -  rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2(""));
 -  rb_funcall(con_type, rb_intern("strip!"), 0);
 -  rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\""));
 -  rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line));
 -}
 -static void 
 -raise_lexer_error(const char * at, int line)
 -{ 
 -  rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at);
 -}
 -
 -static void lexer_init(lexer_state *lexer) {
 -  lexer->content_start = 0;
 -  lexer->content_end = 0;
 -  lexer->content_len = 0;
 -  lexer->docstring_content_type_start = 0;
 -  lexer->docstring_content_type_end = 0;
 -  lexer->mark = 0;
 -  lexer->keyword_start = 0;
 -  lexer->keyword_end = 0;
 -  lexer->next_keyword_start = 0;
 -  lexer->line_number = 1;
 -  lexer->last_newline = 0;
 -  lexer->final_newline = 0;
 -  lexer->start_col = 0;
 -}
 -
 -static VALUE CLexer_alloc(VALUE klass)
 -{
 -  VALUE obj;
 -  lexer_state *lxr = ALLOC(lexer_state);
 -  lexer_init(lxr);
 -
 -  obj = Data_Wrap_Struct(klass, NULL, -1, lxr);
 -
 -  return obj;
 -}
 -
 -static VALUE CLexer_init(VALUE self, VALUE listener)
 -{
 -  lexer_state *lxr; 
 -  rb_iv_set(self, "@listener", listener);
 -  
 -  lxr = NULL;
 -  DATA_GET(self, lexer_state, lxr);
 -  lexer_init(lxr);
 -  
 -  return self;
 -}
 -
 -static VALUE CLexer_scan(VALUE self, VALUE input)
 -{
 -  VALUE input_copy;
 -  char *data;
 -  size_t len;
 -  VALUE listener = rb_iv_get(self, "@listener");
 -
 -  lexer_state *lexer;
 -  lexer = NULL;
 -  DATA_GET(self, lexer_state, lexer);
 -
 -  input_copy = rb_str_dup(input);
 -
 -  rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%"));
 -  data = RSTRING_PTR(input_copy);
 -  len = RSTRING_LEN(input_copy);
 -  
 -  if (len == 0) { 
 -    rb_raise(rb_eGherkinLexingError, "No content to lex.");
 -  } else {
 -
 -    const char *p, *pe, *eof;
 -    int cs = 0;
 -    
 -    VALUE current_row = Qnil;
 -
 -    p = data;
 -    pe = data + len;
 -    eof = pe;
 -    
 -    assert(*pe == '\0' && "pointer does not end on NULL");
 -    
 -    
 -#line 900 "ext/gherkin_lexer_lt/gherkin_lexer_lt.c"
 -	{
 -	cs = lexer_start;
 -	}
 -
 -#line 425 "ragel/i18n/lt.c.rl"
 -    
 -#line 907 "ext/gherkin_lexer_lt/gherkin_lexer_lt.c"
 -	{
 -	int _klen;
 -	unsigned int _trans;
 -	const char *_acts;
 -	unsigned int _nacts;
 -	const char *_keys;
 -
 -	if ( p == pe )
 -		goto _test_eof;
 -	if ( cs == 0 )
 -		goto _out;
 -_resume:
 -	_keys = _lexer_trans_keys + _lexer_key_offsets[cs];
 -	_trans = _lexer_index_offsets[cs];
 -
 -	_klen = _lexer_single_lengths[cs];
 -	if ( _klen > 0 ) {
 -		const char *_lower = _keys;
 -		const char *_mid;
 -		const char *_upper = _keys + _klen - 1;
 -		while (1) {
 -			if ( _upper < _lower )
 -				break;
 -
 -			_mid = _lower + ((_upper-_lower) >> 1);
 -			if ( (*p) < *_mid )
 -				_upper = _mid - 1;
 -			else if ( (*p) > *_mid )
 -				_lower = _mid + 1;
 -			else {
 -				_trans += (unsigned int)(_mid - _keys);
 -				goto _match;
 -			}
 -		}
 -		_keys += _klen;
 -		_trans += _klen;
 -	}
 -
 -	_klen = _lexer_range_lengths[cs];
 -	if ( _klen > 0 ) {
 -		const char *_lower = _keys;
 -		const char *_mid;
 -		const char *_upper = _keys + (_klen<<1) - 2;
 -		while (1) {
 -			if ( _upper < _lower )
 -				break;
 -
 -			_mid = _lower + (((_upper-_lower) >> 1) & ~1);
 -			if ( (*p) < _mid[0] )
 -				_upper = _mid - 2;
 -			else if ( (*p) > _mid[1] )
 -				_lower = _mid + 2;
 -			else {
 -				_trans += (unsigned int)((_mid - _keys)>>1);
 -				goto _match;
 -			}
 -		}
 -		_trans += _klen;
 -	}
 -
 -_match:
 -	cs = _lexer_trans_targs[_trans];
 -
 -	if ( _lexer_trans_actions[_trans] == 0 )
 -		goto _again;
 -
 -	_acts = _lexer_actions + _lexer_trans_actions[_trans];
 -	_nacts = (unsigned int) *_acts++;
 -	while ( _nacts-- > 0 )
 -	{
 -		switch ( *_acts++ )
 -		{
 -	case 0:
 -#line 83 "ragel/i18n/lt.c.rl"
 -	{
 -		MARK(content_start, p);
 -    lexer->current_line = lexer->line_number;
 -    lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2;
 -  }
 -	break;
 -	case 1:
 -#line 89 "ragel/i18n/lt.c.rl"
 -	{
 -    MARK(content_start, p);
 -  }
 -	break;
 -	case 2:
 -#line 93 "ragel/i18n/lt.c.rl"
 -	{
 -    lexer->current_line = lexer->line_number;
 -    lexer->start_col = p - data - lexer->last_newline;
 -  }
 -	break;
 -	case 3:
 -#line 98 "ragel/i18n/lt.c.rl"
 -	{
 -    int len = LEN(content_start, PTR_TO(final_newline));
 -    int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end));
 -
 -    if (len < 0) len = 0;
 -    if (type_len < 0) len = 0;
 -
 -    store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line);
 -  }
 -	break;
 -	case 4:
 -#line 108 "ragel/i18n/lt.c.rl"
 -	{ 
 -    MARK(docstring_content_type_start, p);
 -  }
 -	break;
 -	case 5:
 -#line 112 "ragel/i18n/lt.c.rl"
 -	{ 
 -    MARK(docstring_content_type_end, p);
 -  }
 -	break;
 -	case 6:
 -#line 116 "ragel/i18n/lt.c.rl"
 -	{
 -    STORE_KW_END_CON(feature);
 -  }
 -	break;
 -	case 7:
 -#line 120 "ragel/i18n/lt.c.rl"
 -	{
 -    STORE_KW_END_CON(background);
 -  }
 -	break;
 -	case 8:
 -#line 124 "ragel/i18n/lt.c.rl"
 -	{
 -    STORE_KW_END_CON(scenario);
 -  }
 -	break;
 -	case 9:
 -#line 128 "ragel/i18n/lt.c.rl"
 -	{
 -    STORE_KW_END_CON(scenario_outline);
 -  }
 -	break;
 -	case 10:
 -#line 132 "ragel/i18n/lt.c.rl"
 -	{
 -    STORE_KW_END_CON(examples);
 -  }
 -	break;
 -	case 11:
 -#line 136 "ragel/i18n/lt.c.rl"
 -	{
 -    store_kw_con(listener, "step",
 -      PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
 -      PTR_TO(content_start), LEN(content_start, p), 
 -      lexer->current_line);
 -  }
 -	break;
 -	case 12:
 -#line 143 "ragel/i18n/lt.c.rl"
 -	{
 -    STORE_ATTR(comment);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 13:
 -#line 148 "ragel/i18n/lt.c.rl"
 -	{
 -    STORE_ATTR(tag);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 14:
 -#line 153 "ragel/i18n/lt.c.rl"
 -	{
 -    lexer->line_number += 1;
 -    MARK(final_newline, p);
 -  }
 -	break;
 -	case 15:
 -#line 158 "ragel/i18n/lt.c.rl"
 -	{
 -    MARK(last_newline, p + 1);
 -  }
 -	break;
 -	case 16:
 -#line 162 "ragel/i18n/lt.c.rl"
 -	{
 -    if (lexer->mark == 0) {
 -      MARK(mark, p);
 -    }
 -  }
 -	break;
 -	case 17:
 -#line 168 "ragel/i18n/lt.c.rl"
 -	{
 -    MARK(keyword_end, p);
 -    MARK(keyword_start, PTR_TO(mark));
 -    MARK(content_start, p + 1);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 18:
 -#line 175 "ragel/i18n/lt.c.rl"
 -	{
 -    MARK(content_end, p);
 -  }
 -	break;
 -	case 19:
 -#line 179 "ragel/i18n/lt.c.rl"
 -	{
 -    p = p - 1;
 -    lexer->current_line = lexer->line_number;
 -    current_row = rb_ary_new();
 -  }
 -	break;
 -	case 20:
 -#line 185 "ragel/i18n/lt.c.rl"
 -	{
 -		MARK(content_start, p);
 -  }
 -	break;
 -	case 21:
 -#line 189 "ragel/i18n/lt.c.rl"
 -	{
 -    VALUE re_pipe, re_newline, re_backslash;
 -    VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
 -    rb_funcall(con, rb_intern("strip!"), 0);
 -    re_pipe      = rb_reg_regcomp(rb_str_new2("\\\\\\|"));
 -    re_newline   = rb_reg_regcomp(rb_str_new2("\\\\n"));
 -    re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_pipe,      rb_str_new2("|"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_newline,   rb_str_new2("\n"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\"));
 -
 -    rb_ary_push(current_row, con);
 -  }
 -	break;
 -	case 22:
 -#line 203 "ragel/i18n/lt.c.rl"
 -	{
 -    rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
 -  }
 -	break;
 -	case 23:
 -#line 207 "ragel/i18n/lt.c.rl"
 -	{
 -    int line;
 -    if (cs < lexer_first_final) {
 -      size_t count = 0;
 -      VALUE newstr_val;
 -      char *newstr;
 -      int newstr_count = 0;        
 -      size_t len;
 -      const char *buff;
 -      if (lexer->last_newline != 0) {
 -        len = LEN(last_newline, eof);
 -        buff = PTR_TO(last_newline);
 -      } else {
 -        len = strlen(data);
 -        buff = data;
 -      }
 -
 -      /* Allocate as a ruby string so that it gets cleaned up by GC */
 -      newstr_val = rb_str_new(buff, len);
 -      newstr = RSTRING_PTR(newstr_val);
 -
 -
 -      for (count = 0; count < len; count++) {
 -        if(buff[count] == 10) {
 -          newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
 -          break;
 -        } else {
 -          if (buff[count] == '%') {
 -            newstr[newstr_count++] = buff[count];
 -            newstr[newstr_count] = buff[count];
 -          } else {
 -            newstr[newstr_count] = buff[count];
 -          }
 -        }
 -        newstr_count++;
 -      }
 -
 -      line = lexer->line_number;
 -      lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
 -      raise_lexer_error(newstr, line);
 -    } else {
 -      rb_funcall(listener, rb_intern("eof"), 0);
 -    }
 -  }
 -	break;
 -#line 1197 "ext/gherkin_lexer_lt/gherkin_lexer_lt.c"
 -		}
 -	}
 -
 -_again:
 -	if ( cs == 0 )
 -		goto _out;
 -	if ( ++p != pe )
 -		goto _resume;
 -	_test_eof: {}
 -	if ( p == eof )
 -	{
 -	const char *__acts = _lexer_actions + _lexer_eof_actions[cs];
 -	unsigned int __nacts = (unsigned int) *__acts++;
 -	while ( __nacts-- > 0 ) {
 -		switch ( *__acts++ ) {
 -	case 23:
 -#line 207 "ragel/i18n/lt.c.rl"
 -	{
 -    int line;
 -    if (cs < lexer_first_final) {
 -      size_t count = 0;
 -      VALUE newstr_val;
 -      char *newstr;
 -      int newstr_count = 0;        
 -      size_t len;
 -      const char *buff;
 -      if (lexer->last_newline != 0) {
 -        len = LEN(last_newline, eof);
 -        buff = PTR_TO(last_newline);
 -      } else {
 -        len = strlen(data);
 -        buff = data;
 -      }
 -
 -      /* Allocate as a ruby string so that it gets cleaned up by GC */
 -      newstr_val = rb_str_new(buff, len);
 -      newstr = RSTRING_PTR(newstr_val);
 -
 -
 -      for (count = 0; count < len; count++) {
 -        if(buff[count] == 10) {
 -          newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
 -          break;
 -        } else {
 -          if (buff[count] == '%') {
 -            newstr[newstr_count++] = buff[count];
 -            newstr[newstr_count] = buff[count];
 -          } else {
 -            newstr[newstr_count] = buff[count];
 -          }
 -        }
 -        newstr_count++;
 -      }
 -
 -      line = lexer->line_number;
 -      lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
 -      raise_lexer_error(newstr, line);
 -    } else {
 -      rb_funcall(listener, rb_intern("eof"), 0);
 -    }
 -  }
 -	break;
 -#line 1260 "ext/gherkin_lexer_lt/gherkin_lexer_lt.c"
 -		}
 -	}
 -	}
 -
 -	_out: {}
 -	}
 -
 -#line 426 "ragel/i18n/lt.c.rl"
 -
 -    assert(p <= pe && "data overflow after parsing execute");
 -    assert(lexer->content_start <= len && "content starts after data end");
 -    assert(lexer->mark < len && "mark is after data end");
 -    
 -    /* Reset lexer by re-initializing the whole thing */
 -    lexer_init(lexer);
 -
 -    if (cs == lexer_error) {
 -      rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails.");
 -    } else {
 -      return Qtrue;
 -    }
 -  }
 -}
 -
 -void Init_gherkin_lexer_lt()
 -{
 -  mGherkin = rb_define_module("Gherkin");
 -  mGherkinLexer = rb_define_module_under(mGherkin, "Lexer");
 -  rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError"));
 -
 -  mCLexer = rb_define_module_under(mGherkin, "CLexer");
 -  cI18nLexer = rb_define_class_under(mCLexer, "Lt", rb_cObject);
 -  rb_define_alloc_func(cI18nLexer, CLexer_alloc);
 -  rb_define_method(cI18nLexer, "initialize", CLexer_init, 1);
 -  rb_define_method(cI18nLexer, "scan", CLexer_scan, 1);
 -}
 -
diff --cc ext/gherkin_lexer_lu/extconf.rb
index 4cb0777,4cb0777..0000000
deleted file mode 100644,100644
--- a/ext/gherkin_lexer_lu/extconf.rb
+++ /dev/null
@@@ -1,6 -1,6 +1,0 @@@
--require 'mkmf'
--CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags']
--$CFLAGS << ' -O0 -Wall' if CONFIG['CC'] =~ /gcc|clang/
--dir_config("gherkin_lexer_lu")
--have_library("c", "main")
--create_makefile("gherkin_lexer_lu")
diff --cc ext/gherkin_lexer_lu/gherkin_lexer_lu.c
index 5393e90,a2425d0..0000000
deleted file mode 100644,100644
--- a/ext/gherkin_lexer_lu/gherkin_lexer_lu.c
+++ /dev/null
@@@ -1,1389 -1,1389 +1,0 @@@
--
- #line 1 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/lu.c.rl"
- #include <assert.h>
- #include <ruby.h>
- 
- #if defined(_WIN32)
- #include <stddef.h>
- #endif
- 
- #ifdef HAVE_RUBY_RE_H
- #include <ruby/re.h>
- #else
- #include <re.h>
- #endif
- 
- #ifdef HAVE_RUBY_ENCODING_H
- #include <ruby/encoding.h>
- #define ENCODED_STR_NEW(ptr, len) \
-     rb_enc_str_new(ptr, len, rb_utf8_encoding())
- #else
- #define ENCODED_STR_NEW(ptr, len) \
-     rb_str_new(ptr, len)
- #endif
- 
- #ifndef RSTRING_PTR
- #define RSTRING_PTR(s) (RSTRING(s)->ptr)
- #endif
- 
- #ifndef RSTRING_LEN
- #define RSTRING_LEN(s) (RSTRING(s)->len)
- #endif
- 
- #define DATA_GET(FROM, TYPE, NAME) \
-   Data_Get_Struct(FROM, TYPE, NAME); \
-   if (NAME == NULL) { \
-     rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \
-   }
-  
- typedef struct lexer_state {
-   int content_len;
-   int line_number;
-   int current_line;
-   int start_col;
-   size_t mark;
-   size_t keyword_start;
-   size_t keyword_end;
-   size_t next_keyword_start;
-   size_t content_start;
-   size_t content_end;
-   size_t docstring_content_type_start;
-   size_t docstring_content_type_end;
-   size_t query_start;
-   size_t last_newline;
-   size_t final_newline;
- } lexer_state;
- 
- static VALUE mGherkin;
- static VALUE mGherkinLexer;
- static VALUE mCLexer;
- static VALUE cI18nLexer;
- static VALUE rb_eGherkinLexingError;
- 
- #define LEN(AT, P) (P - data - lexer->AT)
- #define MARK(M, P) (lexer->M = (P) - data)
- #define PTR_TO(P) (data + lexer->P)
- 
- #define STORE_KW_END_CON(EVENT) \
-   store_multiline_kw_con(listener, # EVENT, \
-     PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \
-     PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \
-     lexer->current_line, lexer->start_col); \
-     if (lexer->content_end != 0) { \
-       p = PTR_TO(content_end - 1); \
-     } \
-     lexer->content_end = 0
- 
- #define STORE_ATTR(ATTR) \
-     store_attr(listener, # ATTR, \
-       PTR_TO(content_start), LEN(content_start, p), \
-       lexer->line_number)
- 
- 
- #line 254 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/lu.c.rl"
- 
- 
- /** Data **/
- 
- #line 89 "ext/gherkin_lexer_lu/gherkin_lexer_lu.c"
- static const char _lexer_actions[] = {
- 	0, 1, 0, 1, 1, 1, 2, 1, 
- 	3, 1, 4, 1, 5, 1, 6, 1, 
- 	7, 1, 8, 1, 9, 1, 10, 1, 
- 	11, 1, 12, 1, 13, 1, 16, 1, 
- 	17, 1, 18, 1, 19, 1, 20, 1, 
- 	21, 1, 22, 1, 23, 2, 1, 18, 
- 	2, 4, 5, 2, 13, 0, 2, 14, 
- 	15, 2, 17, 0, 2, 17, 2, 2, 
- 	17, 16, 2, 17, 19, 2, 18, 6, 
- 	2, 18, 7, 2, 18, 8, 2, 18, 
- 	9, 2, 18, 10, 2, 18, 16, 2, 
- 	20, 21, 2, 22, 0, 2, 22, 2, 
- 	2, 22, 16, 2, 22, 19, 3, 3, 
- 	14, 15, 3, 5, 14, 15, 3, 11, 
- 	14, 15, 3, 12, 14, 15, 3, 13, 
- 	14, 15, 3, 14, 15, 18, 3, 17, 
- 	0, 11, 3, 17, 14, 15, 4, 1, 
- 	14, 15, 18, 4, 4, 5, 14, 15, 
- 	4, 17, 0, 14, 15, 5, 17, 0, 
- 	11, 14, 15
- };
- 
- static const short _lexer_key_offsets[] = {
- 	0, 0, 21, 22, 23, 43, 44, 45, 
- 	47, 49, 54, 59, 64, 69, 73, 77, 
- 	79, 80, 81, 82, 83, 84, 85, 86, 
- 	87, 88, 89, 90, 91, 92, 93, 94, 
- 	95, 97, 99, 104, 111, 116, 117, 118, 
- 	119, 120, 121, 122, 123, 124, 125, 126, 
- 	127, 128, 135, 137, 139, 141, 143, 145, 
- 	147, 149, 151, 153, 155, 157, 159, 161, 
- 	163, 165, 167, 187, 188, 189, 190, 191, 
- 	192, 193, 194, 195, 196, 197, 198, 199, 
- 	200, 201, 202, 203, 204, 205, 217, 219, 
- 	221, 223, 225, 227, 229, 231, 233, 235, 
- 	237, 239, 241, 243, 245, 247, 249, 251, 
- 	253, 255, 257, 259, 261, 263, 265, 267, 
- 	269, 271, 273, 275, 277, 279, 281, 283, 
- 	285, 287, 289, 291, 293, 295, 297, 299, 
- 	301, 303, 305, 307, 309, 311, 313, 315, 
- 	317, 319, 321, 323, 325, 327, 329, 331, 
- 	333, 335, 337, 339, 341, 343, 345, 347, 
- 	349, 350, 351, 352, 353, 354, 355, 356, 
- 	357, 358, 359, 360, 361, 362, 378, 380, 
- 	382, 384, 386, 388, 390, 392, 394, 396, 
- 	398, 400, 402, 404, 406, 408, 410, 412, 
- 	414, 416, 418, 420, 422, 424, 426, 428, 
- 	430, 432, 434, 436, 438, 440, 442, 444, 
- 	446, 448, 450, 452, 454, 456, 458, 460, 
- 	462, 464, 466, 468, 470, 472, 474, 478, 
- 	480, 482, 484, 486, 488, 490, 492, 494, 
- 	496, 498, 500, 502, 504, 505, 506, 507, 
- 	508, 509, 510, 511, 512, 513, 514, 515, 
- 	516, 517, 518, 519, 520, 521, 522, 523, 
- 	524, 539, 541, 543, 545, 547, 549, 551, 
- 	553, 555, 557, 559, 561, 563, 565, 567, 
- 	569, 571, 573, 575, 577, 579, 581, 583, 
- 	585, 587, 589, 591, 593, 595, 597, 599, 
- 	601, 603, 605, 607, 609, 611, 613, 615, 
- 	619, 621, 623, 625, 627, 629, 631, 633, 
- 	635, 637, 639, 641, 643, 645, 646, 647, 
- 	648, 649, 650, 651, 652, 653, 654, 655, 
- 	672, 674, 676, 678, 680, 682, 684, 686, 
- 	688, 690, 692, 694, 696, 698, 700, 702, 
- 	704, 706, 708, 710, 712, 714, 716, 718, 
- 	720, 722, 724, 726, 728, 730, 732, 734, 
- 	736, 738, 740, 742, 744, 746, 748, 750, 
- 	752, 754, 756, 758, 760, 762, 764, 766, 
- 	768, 770, 772, 774, 776, 778, 780, 782, 
- 	784, 786, 788, 792, 794, 796, 798, 800, 
- 	802, 804, 806, 808, 810, 812, 814, 816, 
- 	818, 821, 822, 823, 824, 825, 826, 827, 
- 	828, 829, 830, 831, 832, 833, 834, 838, 
- 	844, 847, 849, 855, 875
- };
- 
- static const char _lexer_trans_keys[] = {
- 	-17, 10, 32, 34, 35, 37, 42, 64, 
- 	66, 70, 72, 80, 83, 97, 100, 109, 
- 	117, 119, 124, 9, 13, -69, -65, 10, 
- 	32, 34, 35, 37, 42, 64, 66, 70, 
- 	72, 80, 83, 97, 100, 109, 117, 119, 
- 	124, 9, 13, 34, 34, 10, 13, 10, 
- 	13, 10, 32, 34, 9, 13, 10, 32, 
- 	34, 9, 13, 10, 32, 34, 9, 13, 
- 	10, 32, 34, 9, 13, 10, 32, 9, 
- 	13, 10, 32, 9, 13, 10, 13, 10, 
- 	95, 70, 69, 65, 84, 85, 82, 69, 
- 	95, 69, 78, 68, 95, 37, 32, 10, 
- 	13, 10, 13, 13, 32, 64, 9, 10, 
- 	9, 10, 13, 32, 64, 11, 12, 10, 
- 	32, 64, 9, 13, 101, 105, 115, 112, 
- 	105, 108, 108, 101, 114, 58, 10, 10, 
- 	10, 32, 35, 70, 124, 9, 13, 10, 
- 	117, 10, 110, 10, 107, 10, 116, 10, 
- 	105, 10, 111, 10, 110, 10, 97, 10, 
- 	108, 10, 105, 10, 116, -61, 10, -87, 
- 	10, 10, 105, 10, 116, 10, 58, 10, 
- 	32, 34, 35, 37, 42, 64, 66, 70, 
- 	72, 80, 83, 97, 100, 109, 117, 119, 
- 	124, 9, 13, 117, 110, 107, 116, 105, 
- 	111, 110, 97, 108, 105, 116, -61, -87, 
- 	105, 116, 58, 10, 10, 10, 32, 35, 
- 	37, 64, 66, 70, 72, 80, 83, 9, 
- 	13, 10, 95, 10, 70, 10, 69, 10, 
- 	65, 10, 84, 10, 85, 10, 82, 10, 
- 	69, 10, 95, 10, 69, 10, 78, 10, 
- 	68, 10, 95, 10, 37, 10, 101, 10, 
- 	105, 10, 115, 10, 112, 10, 105, 10, 
- 	108, 10, 108, 10, 101, 10, 114, 10, 
- 	58, 10, 117, 10, 110, 10, 107, 10, 
- 	116, 10, 105, 10, 111, 10, 110, 10, 
- 	97, 10, 108, 10, 105, 10, 116, -61, 
- 	10, -87, 10, 10, 105, 10, 116, 10, 
- 	97, 10, 110, 10, 110, 10, 101, 10, 
- 	114, 10, 103, 10, 114, 10, 111, 10, 
- 	110, 10, 100, 10, 108, 10, 97, 10, 
- 	110, 10, 103, 10, 32, 10, 118, 10, 
- 	117, 10, 109, 10, 32, 10, 83, 10, 
- 	122, 10, 101, 10, 110, 10, 97, 10, 
- 	114, 10, 105, 10, 111, 97, 110, 110, 
- 	101, 114, 103, 114, 111, 110, 100, 58, 
- 	10, 10, 10, 32, 35, 37, 42, 64, 
- 	70, 80, 83, 97, 100, 109, 117, 119, 
- 	9, 13, 10, 95, 10, 70, 10, 69, 
- 	10, 65, 10, 84, 10, 85, 10, 82, 
- 	10, 69, 10, 95, 10, 69, 10, 78, 
- 	10, 68, 10, 95, 10, 37, 10, 32, 
- 	10, 117, 10, 110, 10, 107, 10, 116, 
- 	10, 105, 10, 111, 10, 110, 10, 97, 
- 	10, 108, 10, 105, 10, 116, -61, 10, 
- 	-87, 10, 10, 105, 10, 116, 10, 58, 
- 	10, 108, 10, 97, 10, 110, 10, 103, 
- 	10, 32, 10, 118, 10, 117, 10, 109, 
- 	10, 32, 10, 83, 10, 122, 10, 101, 
- 	10, 110, 10, 97, 10, 114, 10, 105, 
- 	10, 111, 10, 32, 110, 119, 10, 101, 
- 	10, 114, 10, 97, 10, 110, 10, 110, 
- 	-61, 10, -92, 10, 10, 103, 10, 101, 
- 	10, 104, 10, 111, 10, 108, 10, 108, 
- 	108, 97, 110, 103, 32, 118, 117, 109, 
- 	32, 83, 122, 101, 110, 97, 114, 105, 
- 	111, 58, 10, 10, 10, 32, 35, 37, 
- 	42, 64, 70, 83, 97, 100, 109, 117, 
- 	119, 9, 13, 10, 95, 10, 70, 10, 
- 	69, 10, 65, 10, 84, 10, 85, 10, 
- 	82, 10, 69, 10, 95, 10, 69, 10, 
- 	78, 10, 68, 10, 95, 10, 37, 10, 
- 	32, 10, 117, 10, 110, 10, 107, 10, 
- 	116, 10, 105, 10, 111, 10, 110, 10, 
- 	97, 10, 108, 10, 105, 10, 116, -61, 
- 	10, -87, 10, 10, 105, 10, 116, 10, 
- 	58, 10, 122, 10, 101, 10, 110, 10, 
- 	97, 10, 114, 10, 105, 10, 111, 10, 
- 	32, 110, 119, 10, 101, 10, 114, 10, 
- 	97, 10, 110, 10, 110, -61, 10, -92, 
- 	10, 10, 103, 10, 101, 10, 104, 10, 
- 	111, 10, 108, 10, 108, 122, 101, 110, 
- 	97, 114, 105, 111, 58, 10, 10, 10, 
- 	32, 35, 37, 42, 64, 70, 72, 80, 
- 	83, 97, 100, 109, 117, 119, 9, 13, 
- 	10, 95, 10, 70, 10, 69, 10, 65, 
- 	10, 84, 10, 85, 10, 82, 10, 69, 
- 	10, 95, 10, 69, 10, 78, 10, 68, 
- 	10, 95, 10, 37, 10, 32, 10, 117, 
- 	10, 110, 10, 107, 10, 116, 10, 105, 
- 	10, 111, 10, 110, 10, 97, 10, 108, 
- 	10, 105, 10, 116, -61, 10, -87, 10, 
- 	10, 105, 10, 116, 10, 58, 10, 97, 
- 	10, 110, 10, 110, 10, 101, 10, 114, 
- 	10, 103, 10, 114, 10, 111, 10, 110, 
- 	10, 100, 10, 108, 10, 97, 10, 110, 
- 	10, 103, 10, 32, 10, 118, 10, 117, 
- 	10, 109, 10, 32, 10, 83, 10, 122, 
- 	10, 101, 10, 110, 10, 97, 10, 114, 
- 	10, 105, 10, 111, 10, 32, 110, 119, 
- 	10, 101, 10, 114, 10, 97, 10, 110, 
- 	10, 110, -61, 10, -92, 10, 10, 103, 
- 	10, 101, 10, 104, 10, 111, 10, 108, 
- 	10, 108, 32, 110, 119, 101, 114, 97, 
- 	110, 110, -61, -92, 103, 101, 104, 111, 
- 	108, 108, 32, 124, 9, 13, 10, 32, 
- 	92, 124, 9, 13, 10, 92, 124, 10, 
- 	92, 10, 32, 92, 124, 9, 13, 10, 
- 	32, 34, 35, 37, 42, 64, 66, 70, 
- 	72, 80, 83, 97, 100, 109, 117, 119, 
- 	124, 9, 13, 0
- };
- 
- static const char _lexer_single_lengths[] = {
- 	0, 19, 1, 1, 18, 1, 1, 2, 
- 	2, 3, 3, 3, 3, 2, 2, 2, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	2, 2, 3, 5, 3, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 5, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 18, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 10, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 14, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 4, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	13, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 4, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 15, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 4, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	3, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 2, 4, 
- 	3, 2, 4, 18, 0
- };
- 
- static const char _lexer_range_lengths[] = {
- 	0, 1, 0, 0, 1, 0, 0, 0, 
- 	0, 1, 1, 1, 1, 1, 1, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 1, 1, 1, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 1, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 1, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 1, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 1, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	1, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 1, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 1, 1, 
- 	0, 0, 1, 1, 0
- };
- 
- static const short _lexer_index_offsets[] = {
- 	0, 0, 21, 23, 25, 45, 47, 49, 
- 	52, 55, 60, 65, 70, 75, 79, 83, 
- 	86, 88, 90, 92, 94, 96, 98, 100, 
- 	102, 104, 106, 108, 110, 112, 114, 116, 
- 	118, 121, 124, 129, 136, 141, 143, 145, 
- 	147, 149, 151, 153, 155, 157, 159, 161, 
- 	163, 165, 172, 175, 178, 181, 184, 187, 
- 	190, 193, 196, 199, 202, 205, 208, 211, 
- 	214, 217, 220, 240, 242, 244, 246, 248, 
- 	250, 252, 254, 256, 258, 260, 262, 264, 
- 	266, 268, 270, 272, 274, 276, 288, 291, 
- 	294, 297, 300, 303, 306, 309, 312, 315, 
- 	318, 321, 324, 327, 330, 333, 336, 339, 
- 	342, 345, 348, 351, 354, 357, 360, 363, 
- 	366, 369, 372, 375, 378, 381, 384, 387, 
- 	390, 393, 396, 399, 402, 405, 408, 411, 
- 	414, 417, 420, 423, 426, 429, 432, 435, 
- 	438, 441, 444, 447, 450, 453, 456, 459, 
- 	462, 465, 468, 471, 474, 477, 480, 483, 
- 	486, 488, 490, 492, 494, 496, 498, 500, 
- 	502, 504, 506, 508, 510, 512, 528, 531, 
- 	534, 537, 540, 543, 546, 549, 552, 555, 
- 	558, 561, 564, 567, 570, 573, 576, 579, 
- 	582, 585, 588, 591, 594, 597, 600, 603, 
- 	606, 609, 612, 615, 618, 621, 624, 627, 
- 	630, 633, 636, 639, 642, 645, 648, 651, 
- 	654, 657, 660, 663, 666, 669, 672, 677, 
- 	680, 683, 686, 689, 692, 695, 698, 701, 
- 	704, 707, 710, 713, 716, 718, 720, 722, 
- 	724, 726, 728, 730, 732, 734, 736, 738, 
- 	740, 742, 744, 746, 748, 750, 752, 754, 
- 	756, 771, 774, 777, 780, 783, 786, 789, 
- 	792, 795, 798, 801, 804, 807, 810, 813, 
- 	816, 819, 822, 825, 828, 831, 834, 837, 
- 	840, 843, 846, 849, 852, 855, 858, 861, 
- 	864, 867, 870, 873, 876, 879, 882, 885, 
- 	890, 893, 896, 899, 902, 905, 908, 911, 
- 	914, 917, 920, 923, 926, 929, 931, 933, 
- 	935, 937, 939, 941, 943, 945, 947, 949, 
- 	966, 969, 972, 975, 978, 981, 984, 987, 
- 	990, 993, 996, 999, 1002, 1005, 1008, 1011, 
- 	1014, 1017, 1020, 1023, 1026, 1029, 1032, 1035, 
- 	1038, 1041, 1044, 1047, 1050, 1053, 1056, 1059, 
- 	1062, 1065, 1068, 1071, 1074, 1077, 1080, 1083, 
- 	1086, 1089, 1092, 1095, 1098, 1101, 1104, 1107, 
- 	1110, 1113, 1116, 1119, 1122, 1125, 1128, 1131, 
- 	1134, 1137, 1140, 1145, 1148, 1151, 1154, 1157, 
- 	1160, 1163, 1166, 1169, 1172, 1175, 1178, 1181, 
- 	1184, 1188, 1190, 1192, 1194, 1196, 1198, 1200, 
- 	1202, 1204, 1206, 1208, 1210, 1212, 1214, 1218, 
- 	1224, 1228, 1231, 1237, 1257
- };
- 
- static const short _lexer_trans_targs[] = {
- 	2, 4, 4, 5, 15, 17, 31, 34, 
- 	37, 67, 152, 228, 301, 384, 387, 390, 
- 	392, 387, 398, 4, 0, 3, 0, 4, 
- 	0, 4, 4, 5, 15, 17, 31, 34, 
- 	37, 67, 152, 228, 301, 384, 387, 390, 
- 	392, 387, 398, 4, 0, 6, 0, 7, 
- 	0, 9, 8, 8, 9, 8, 8, 10, 
- 	10, 11, 10, 10, 10, 10, 11, 10, 
- 	10, 10, 10, 12, 10, 10, 10, 10, 
- 	13, 10, 10, 4, 14, 14, 0, 4, 
- 	14, 14, 0, 4, 16, 15, 4, 0, 
- 	18, 0, 19, 0, 20, 0, 21, 0, 
- 	22, 0, 23, 0, 24, 0, 25, 0, 
- 	26, 0, 27, 0, 28, 0, 29, 0, 
- 	30, 0, 404, 0, 32, 0, 4, 16, 
- 	33, 4, 16, 33, 0, 0, 0, 0, 
- 	35, 36, 4, 36, 36, 34, 35, 35, 
- 	4, 36, 34, 36, 0, 38, 0, 39, 
- 	0, 40, 0, 41, 0, 42, 0, 43, 
- 	0, 44, 0, 45, 0, 46, 0, 47, 
- 	0, 49, 48, 49, 48, 49, 49, 4, 
- 	50, 4, 49, 48, 49, 51, 48, 49, 
- 	52, 48, 49, 53, 48, 49, 54, 48, 
- 	49, 55, 48, 49, 56, 48, 49, 57, 
- 	48, 49, 58, 48, 49, 59, 48, 49, 
- 	60, 48, 49, 61, 48, 62, 49, 48, 
- 	63, 49, 48, 49, 64, 48, 49, 65, 
- 	48, 49, 66, 48, 4, 4, 5, 15, 
- 	17, 31, 34, 37, 67, 152, 228, 301, 
- 	384, 387, 390, 392, 387, 398, 4, 0, 
- 	68, 0, 69, 0, 70, 0, 71, 0, 
- 	72, 0, 73, 0, 74, 0, 75, 0, 
- 	76, 0, 77, 0, 78, 0, 79, 0, 
- 	80, 0, 81, 0, 82, 0, 83, 0, 
- 	85, 84, 85, 84, 85, 85, 4, 86, 
- 	4, 100, 110, 125, 135, 145, 85, 84, 
- 	85, 87, 84, 85, 88, 84, 85, 89, 
- 	84, 85, 90, 84, 85, 91, 84, 85, 
- 	92, 84, 85, 93, 84, 85, 94, 84, 
- 	85, 95, 84, 85, 96, 84, 85, 97, 
- 	84, 85, 98, 84, 85, 99, 84, 85, 
- 	4, 84, 85, 101, 84, 85, 102, 84, 
- 	85, 103, 84, 85, 104, 84, 85, 105, 
- 	84, 85, 106, 84, 85, 107, 84, 85, 
- 	108, 84, 85, 109, 84, 85, 66, 84, 
- 	85, 111, 84, 85, 112, 84, 85, 113, 
- 	84, 85, 114, 84, 85, 115, 84, 85, 
- 	116, 84, 85, 117, 84, 85, 118, 84, 
- 	85, 119, 84, 85, 120, 84, 85, 121, 
- 	84, 122, 85, 84, 123, 85, 84, 85, 
- 	124, 84, 85, 109, 84, 85, 126, 84, 
- 	85, 127, 84, 85, 128, 84, 85, 129, 
- 	84, 85, 130, 84, 85, 131, 84, 85, 
- 	132, 84, 85, 133, 84, 85, 134, 84, 
- 	85, 109, 84, 85, 136, 84, 85, 137, 
- 	84, 85, 138, 84, 85, 139, 84, 85, 
- 	140, 84, 85, 141, 84, 85, 142, 84, 
- 	85, 143, 84, 85, 144, 84, 85, 145, 
- 	84, 85, 146, 84, 85, 147, 84, 85, 
- 	148, 84, 85, 149, 84, 85, 150, 84, 
- 	85, 151, 84, 85, 109, 84, 153, 0, 
- 	154, 0, 155, 0, 156, 0, 157, 0, 
- 	158, 0, 159, 0, 160, 0, 161, 0, 
- 	162, 0, 163, 0, 165, 164, 165, 164, 
- 	165, 165, 4, 166, 180, 4, 181, 197, 
- 	207, 214, 217, 220, 222, 217, 165, 164, 
- 	165, 167, 164, 165, 168, 164, 165, 169, 
- 	164, 165, 170, 164, 165, 171, 164, 165, 
- 	172, 164, 165, 173, 164, 165, 174, 164, 
- 	165, 175, 164, 165, 176, 164, 165, 177, 
- 	164, 165, 178, 164, 165, 179, 164, 165, 
- 	4, 164, 165, 66, 164, 165, 182, 164, 
- 	165, 183, 164, 165, 184, 164, 165, 185, 
- 	164, 165, 186, 164, 165, 187, 164, 165, 
- 	188, 164, 165, 189, 164, 165, 190, 164, 
- 	165, 191, 164, 165, 192, 164, 193, 165, 
- 	164, 194, 165, 164, 165, 195, 164, 165, 
- 	196, 164, 165, 66, 164, 165, 198, 164, 
- 	165, 199, 164, 165, 200, 164, 165, 201, 
- 	164, 165, 202, 164, 165, 203, 164, 165, 
- 	204, 164, 165, 205, 164, 165, 206, 164, 
- 	165, 207, 164, 165, 208, 164, 165, 209, 
- 	164, 165, 210, 164, 165, 211, 164, 165, 
- 	212, 164, 165, 213, 164, 165, 196, 164, 
- 	165, 66, 180, 215, 164, 165, 216, 164, 
- 	165, 180, 164, 165, 218, 164, 165, 219, 
- 	164, 165, 180, 164, 221, 165, 164, 180, 
- 	165, 164, 165, 223, 164, 165, 224, 164, 
- 	165, 225, 164, 165, 226, 164, 165, 227, 
- 	164, 165, 180, 164, 229, 0, 230, 0, 
- 	231, 0, 232, 0, 233, 0, 234, 0, 
- 	235, 0, 236, 0, 237, 0, 238, 0, 
- 	239, 0, 240, 0, 241, 0, 242, 0, 
- 	243, 0, 244, 0, 245, 0, 246, 0, 
- 	248, 247, 248, 247, 248, 248, 4, 249, 
- 	263, 4, 264, 280, 287, 290, 293, 295, 
- 	290, 248, 247, 248, 250, 247, 248, 251, 
- 	247, 248, 252, 247, 248, 253, 247, 248, 
- 	254, 247, 248, 255, 247, 248, 256, 247, 
- 	248, 257, 247, 248, 258, 247, 248, 259, 
- 	247, 248, 260, 247, 248, 261, 247, 248, 
- 	262, 247, 248, 4, 247, 248, 66, 247, 
- 	248, 265, 247, 248, 266, 247, 248, 267, 
- 	247, 248, 268, 247, 248, 269, 247, 248, 
- 	270, 247, 248, 271, 247, 248, 272, 247, 
- 	248, 273, 247, 248, 274, 247, 248, 275, 
- 	247, 276, 248, 247, 277, 248, 247, 248, 
- 	278, 247, 248, 279, 247, 248, 66, 247, 
- 	248, 281, 247, 248, 282, 247, 248, 283, 
- 	247, 248, 284, 247, 248, 285, 247, 248, 
- 	286, 247, 248, 279, 247, 248, 66, 263, 
- 	288, 247, 248, 289, 247, 248, 263, 247, 
- 	248, 291, 247, 248, 292, 247, 248, 263, 
- 	247, 294, 248, 247, 263, 248, 247, 248, 
- 	296, 247, 248, 297, 247, 248, 298, 247, 
- 	248, 299, 247, 248, 300, 247, 248, 263, 
- 	247, 302, 0, 303, 0, 304, 0, 305, 
- 	0, 306, 0, 307, 0, 308, 0, 309, 
- 	0, 311, 310, 311, 310, 311, 311, 4, 
- 	312, 326, 4, 327, 343, 353, 363, 370, 
- 	373, 376, 378, 373, 311, 310, 311, 313, 
- 	310, 311, 314, 310, 311, 315, 310, 311, 
- 	316, 310, 311, 317, 310, 311, 318, 310, 
- 	311, 319, 310, 311, 320, 310, 311, 321, 
- 	310, 311, 322, 310, 311, 323, 310, 311, 
- 	324, 310, 311, 325, 310, 311, 4, 310, 
- 	311, 66, 310, 311, 328, 310, 311, 329, 
- 	310, 311, 330, 310, 311, 331, 310, 311, 
- 	332, 310, 311, 333, 310, 311, 334, 310, 
- 	311, 335, 310, 311, 336, 310, 311, 337, 
- 	310, 311, 338, 310, 339, 311, 310, 340, 
- 	311, 310, 311, 341, 310, 311, 342, 310, 
- 	311, 66, 310, 311, 344, 310, 311, 345, 
- 	310, 311, 346, 310, 311, 347, 310, 311, 
- 	348, 310, 311, 349, 310, 311, 350, 310, 
- 	311, 351, 310, 311, 352, 310, 311, 342, 
- 	310, 311, 354, 310, 311, 355, 310, 311, 
- 	356, 310, 311, 357, 310, 311, 358, 310, 
- 	311, 359, 310, 311, 360, 310, 311, 361, 
- 	310, 311, 362, 310, 311, 363, 310, 311, 
- 	364, 310, 311, 365, 310, 311, 366, 310, 
- 	311, 367, 310, 311, 368, 310, 311, 369, 
- 	310, 311, 342, 310, 311, 66, 326, 371, 
- 	310, 311, 372, 310, 311, 326, 310, 311, 
- 	374, 310, 311, 375, 310, 311, 326, 310, 
- 	377, 311, 310, 326, 311, 310, 311, 379, 
- 	310, 311, 380, 310, 311, 381, 310, 311, 
- 	382, 310, 311, 383, 310, 311, 326, 310, 
- 	32, 31, 385, 0, 386, 0, 31, 0, 
- 	388, 0, 389, 0, 31, 0, 391, 0, 
- 	31, 0, 393, 0, 394, 0, 395, 0, 
- 	396, 0, 397, 0, 31, 0, 398, 399, 
- 	398, 0, 403, 402, 401, 399, 402, 400, 
- 	0, 401, 399, 400, 0, 401, 400, 403, 
- 	402, 401, 399, 402, 400, 403, 403, 5, 
- 	15, 17, 31, 34, 37, 67, 152, 228, 
- 	301, 384, 387, 390, 392, 387, 398, 403, 
- 	0, 0, 0
- };
- 
- static const unsigned char _lexer_trans_actions[] = {
- 	0, 54, 0, 5, 1, 0, 29, 1, 
- 	29, 29, 29, 29, 29, 29, 29, 29, 
- 	29, 29, 35, 0, 43, 0, 43, 0, 
- 	43, 54, 0, 5, 1, 0, 29, 1, 
- 	29, 29, 29, 29, 29, 29, 29, 29, 
- 	29, 29, 35, 0, 43, 0, 43, 0, 
- 	43, 139, 48, 9, 106, 11, 0, 134, 
- 	45, 45, 45, 3, 122, 33, 33, 33, 
- 	0, 122, 33, 33, 33, 0, 122, 33, 
- 	0, 33, 0, 102, 7, 7, 43, 54, 
- 	0, 0, 43, 114, 25, 0, 54, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 149, 126, 
- 	57, 110, 23, 0, 43, 43, 43, 43, 
- 	0, 27, 118, 27, 27, 51, 27, 0, 
- 	54, 0, 1, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 144, 57, 54, 0, 54, 0, 81, 
- 	84, 81, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 0, 54, 0, 
- 	0, 54, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 21, 0, 130, 31, 60, 57, 
- 	31, 63, 57, 63, 63, 63, 63, 63, 
- 	63, 63, 63, 63, 63, 66, 31, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	144, 57, 54, 0, 54, 0, 69, 33, 
- 	69, 84, 84, 84, 84, 84, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	13, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 13, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 0, 54, 0, 0, 54, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 144, 57, 54, 0, 
- 	54, 0, 72, 33, 84, 72, 84, 84, 
- 	84, 84, 84, 84, 84, 84, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	15, 0, 54, 15, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 0, 54, 
- 	0, 0, 54, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 15, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 15, 0, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 0, 54, 0, 0, 
- 	54, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	144, 57, 54, 0, 54, 0, 78, 33, 
- 	84, 78, 84, 84, 84, 84, 84, 84, 
- 	84, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 19, 0, 54, 19, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 0, 54, 0, 0, 54, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 19, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 19, 0, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 0, 54, 0, 0, 54, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 144, 57, 54, 0, 54, 0, 75, 
- 	33, 84, 75, 84, 84, 84, 84, 84, 
- 	84, 84, 84, 84, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 17, 0, 
- 	54, 17, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 0, 54, 0, 0, 
- 	54, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 17, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 17, 0, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	0, 54, 0, 0, 54, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	0, 0, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 0, 
- 	0, 43, 54, 37, 37, 87, 37, 37, 
- 	43, 0, 39, 0, 43, 0, 0, 54, 
- 	0, 0, 39, 0, 0, 54, 0, 93, 
- 	90, 41, 96, 90, 96, 96, 96, 96, 
- 	96, 96, 96, 96, 96, 96, 99, 0, 
- 	43, 0, 0
- };
- 
- static const unsigned char _lexer_eof_actions[] = {
- 	0, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43
- };
- 
- static const int lexer_start = 1;
- static const int lexer_first_final = 404;
- static const int lexer_error = 0;
- 
- static const int lexer_en_main = 1;
- 
- 
- #line 258 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/lu.c.rl"
- 
- static VALUE 
- unindent(VALUE con, int start_col)
- {
-   VALUE re;
-   // Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters
-   char pat[32]; 
-   snprintf(pat, 32, "^[\t ]{0,%d}", start_col); 
-   re = rb_reg_regcomp(rb_str_new2(pat));
-   rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2(""));
- 
-   return Qnil;
- 
- }
- 
- static void 
- store_kw_con(VALUE listener, const char * event_name, 
-              const char * keyword_at, size_t keyword_length, 
-              const char * at,         size_t length, 
-              int current_line)
- {
-   VALUE con = Qnil, kw = Qnil;
-   kw = ENCODED_STR_NEW(keyword_at, keyword_length);
-   con = ENCODED_STR_NEW(at, length);
-   rb_funcall(con, rb_intern("strip!"), 0);
-   rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); 
- }
- 
- static void
- store_multiline_kw_con(VALUE listener, const char * event_name,
-                       const char * keyword_at, size_t keyword_length,
-                       const char * at,         size_t length,
-                       int current_line, int start_col)
- {
-   VALUE split;
-   VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil;
- 
-   kw = ENCODED_STR_NEW(keyword_at, keyword_length);
-   con = ENCODED_STR_NEW(at, length);
- 
-   unindent(con, start_col);
-   
-   split = rb_str_split(con, "\n");
- 
-   name = rb_funcall(split, rb_intern("shift"), 0);
-   desc = rb_ary_join(split, rb_str_new2( "\n" ));
- 
-   if( name == Qnil ) 
-   {
-     name = rb_str_new2("");
-   }
-   if( rb_funcall(desc, rb_intern("size"), 0) == 0) 
-   {
-     desc = rb_str_new2("");
-   }
-   rb_funcall(name, rb_intern("strip!"), 0);
-   rb_funcall(desc, rb_intern("rstrip!"), 0);
-   rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); 
- }
- 
- static void 
- store_attr(VALUE listener, const char * attr_type,
-            const char * at, size_t length, 
-            int line)
- {
-   VALUE val = ENCODED_STR_NEW(at, length);
-   rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line));
- }
- static void 
- store_docstring_content(VALUE listener, 
-           int start_col, 
-           const char *type_at, size_t type_length,
-           const char *at, size_t length, 
-           int current_line)
- {
-   VALUE re2;
-   VALUE unescape_escaped_quotes;
-   VALUE con = ENCODED_STR_NEW(at, length);
-   VALUE con_type = ENCODED_STR_NEW(type_at, type_length);
- 
-   unindent(con, start_col);
- 
-   re2 = rb_reg_regcomp(rb_str_new2("\r\\Z"));
-   unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\""));
-   rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2(""));
-   rb_funcall(con_type, rb_intern("strip!"), 0);
-   rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\""));
-   rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line));
- }
- static void 
- raise_lexer_error(const char * at, int line)
- { 
-   rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at);
- }
- 
- static void lexer_init(lexer_state *lexer) {
-   lexer->content_start = 0;
-   lexer->content_end = 0;
-   lexer->content_len = 0;
-   lexer->docstring_content_type_start = 0;
-   lexer->docstring_content_type_end = 0;
-   lexer->mark = 0;
-   lexer->keyword_start = 0;
-   lexer->keyword_end = 0;
-   lexer->next_keyword_start = 0;
-   lexer->line_number = 1;
-   lexer->last_newline = 0;
-   lexer->final_newline = 0;
-   lexer->start_col = 0;
- }
- 
- static VALUE CLexer_alloc(VALUE klass)
- {
-   VALUE obj;
-   lexer_state *lxr = ALLOC(lexer_state);
-   lexer_init(lxr);
- 
-   obj = Data_Wrap_Struct(klass, NULL, -1, lxr);
- 
-   return obj;
- }
- 
- static VALUE CLexer_init(VALUE self, VALUE listener)
- {
-   lexer_state *lxr; 
-   rb_iv_set(self, "@listener", listener);
-   
-   lxr = NULL;
-   DATA_GET(self, lexer_state, lxr);
-   lexer_init(lxr);
-   
-   return self;
- }
- 
- static VALUE CLexer_scan(VALUE self, VALUE input)
- {
-   VALUE input_copy;
-   char *data;
-   size_t len;
-   VALUE listener = rb_iv_get(self, "@listener");
- 
-   lexer_state *lexer;
-   lexer = NULL;
-   DATA_GET(self, lexer_state, lexer);
- 
-   input_copy = rb_str_dup(input);
- 
-   rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%"));
-   data = RSTRING_PTR(input_copy);
-   len = RSTRING_LEN(input_copy);
-   
-   if (len == 0) { 
-     rb_raise(rb_eGherkinLexingError, "No content to lex.");
-   } else {
- 
-     const char *p, *pe, *eof;
-     int cs = 0;
-     
-     VALUE current_row = Qnil;
- 
-     p = data;
-     pe = data + len;
-     eof = pe;
-     
-     assert(*pe == '\0' && "pointer does not end on NULL");
-     
-     
- #line 993 "ext/gherkin_lexer_lu/gherkin_lexer_lu.c"
- 	{
- 	cs = lexer_start;
- 	}
- 
- #line 425 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/lu.c.rl"
-     
- #line 1000 "ext/gherkin_lexer_lu/gherkin_lexer_lu.c"
- 	{
- 	int _klen;
- 	unsigned int _trans;
- 	const char *_acts;
- 	unsigned int _nacts;
- 	const char *_keys;
- 
- 	if ( p == pe )
- 		goto _test_eof;
- 	if ( cs == 0 )
- 		goto _out;
- _resume:
- 	_keys = _lexer_trans_keys + _lexer_key_offsets[cs];
- 	_trans = _lexer_index_offsets[cs];
- 
- 	_klen = _lexer_single_lengths[cs];
- 	if ( _klen > 0 ) {
- 		const char *_lower = _keys;
- 		const char *_mid;
- 		const char *_upper = _keys + _klen - 1;
- 		while (1) {
- 			if ( _upper < _lower )
- 				break;
- 
- 			_mid = _lower + ((_upper-_lower) >> 1);
- 			if ( (*p) < *_mid )
- 				_upper = _mid - 1;
- 			else if ( (*p) > *_mid )
- 				_lower = _mid + 1;
- 			else {
- 				_trans += (_mid - _keys);
- 				goto _match;
- 			}
- 		}
- 		_keys += _klen;
- 		_trans += _klen;
- 	}
- 
- 	_klen = _lexer_range_lengths[cs];
- 	if ( _klen > 0 ) {
- 		const char *_lower = _keys;
- 		const char *_mid;
- 		const char *_upper = _keys + (_klen<<1) - 2;
- 		while (1) {
- 			if ( _upper < _lower )
- 				break;
- 
- 			_mid = _lower + (((_upper-_lower) >> 1) & ~1);
- 			if ( (*p) < _mid[0] )
- 				_upper = _mid - 2;
- 			else if ( (*p) > _mid[1] )
- 				_lower = _mid + 2;
- 			else {
- 				_trans += ((_mid - _keys)>>1);
- 				goto _match;
- 			}
- 		}
- 		_trans += _klen;
- 	}
- 
- _match:
- 	cs = _lexer_trans_targs[_trans];
- 
- 	if ( _lexer_trans_actions[_trans] == 0 )
- 		goto _again;
- 
- 	_acts = _lexer_actions + _lexer_trans_actions[_trans];
- 	_nacts = (unsigned int) *_acts++;
- 	while ( _nacts-- > 0 )
- 	{
- 		switch ( *_acts++ )
- 		{
- 	case 0:
- #line 83 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/lu.c.rl"
- 	{
- 		MARK(content_start, p);
-     lexer->current_line = lexer->line_number;
-     lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2;
-   }
- 	break;
- 	case 1:
- #line 89 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/lu.c.rl"
- 	{
-     MARK(content_start, p);
-   }
- 	break;
- 	case 2:
- #line 93 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/lu.c.rl"
- 	{
-     lexer->current_line = lexer->line_number;
-     lexer->start_col = p - data - lexer->last_newline;
-   }
- 	break;
- 	case 3:
- #line 98 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/lu.c.rl"
- 	{
-     int len = LEN(content_start, PTR_TO(final_newline));
-     int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end));
- 
-     if (len < 0) len = 0;
-     if (type_len < 0) len = 0;
- 
-     store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line);
-   }
- 	break;
- 	case 4:
- #line 108 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/lu.c.rl"
- 	{ 
-     MARK(docstring_content_type_start, p);
-   }
- 	break;
- 	case 5:
- #line 112 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/lu.c.rl"
- 	{ 
-     MARK(docstring_content_type_end, p);
-   }
- 	break;
- 	case 6:
- #line 116 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/lu.c.rl"
- 	{
-     STORE_KW_END_CON(feature);
-   }
- 	break;
- 	case 7:
- #line 120 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/lu.c.rl"
- 	{
-     STORE_KW_END_CON(background);
-   }
- 	break;
- 	case 8:
- #line 124 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/lu.c.rl"
- 	{
-     STORE_KW_END_CON(scenario);
-   }
- 	break;
- 	case 9:
- #line 128 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/lu.c.rl"
- 	{
-     STORE_KW_END_CON(scenario_outline);
-   }
- 	break;
- 	case 10:
- #line 132 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/lu.c.rl"
- 	{
-     STORE_KW_END_CON(examples);
-   }
- 	break;
- 	case 11:
- #line 136 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/lu.c.rl"
- 	{
-     store_kw_con(listener, "step",
-       PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-       PTR_TO(content_start), LEN(content_start, p), 
-       lexer->current_line);
-   }
- 	break;
- 	case 12:
- #line 143 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/lu.c.rl"
- 	{
-     STORE_ATTR(comment);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 13:
- #line 148 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/lu.c.rl"
- 	{
-     STORE_ATTR(tag);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 14:
- #line 153 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/lu.c.rl"
- 	{
-     lexer->line_number += 1;
-     MARK(final_newline, p);
-   }
- 	break;
- 	case 15:
- #line 158 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/lu.c.rl"
- 	{
-     MARK(last_newline, p + 1);
-   }
- 	break;
- 	case 16:
- #line 162 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/lu.c.rl"
- 	{
-     if (lexer->mark == 0) {
-       MARK(mark, p);
-     }
-   }
- 	break;
- 	case 17:
- #line 168 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/lu.c.rl"
- 	{
-     MARK(keyword_end, p);
-     MARK(keyword_start, PTR_TO(mark));
-     MARK(content_start, p + 1);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 18:
- #line 175 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/lu.c.rl"
- 	{
-     MARK(content_end, p);
-   }
- 	break;
- 	case 19:
- #line 179 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/lu.c.rl"
- 	{
-     p = p - 1;
-     lexer->current_line = lexer->line_number;
-     current_row = rb_ary_new();
-   }
- 	break;
- 	case 20:
- #line 185 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/lu.c.rl"
- 	{
- 		MARK(content_start, p);
-   }
- 	break;
- 	case 21:
- #line 189 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/lu.c.rl"
- 	{
-     VALUE re_pipe, re_newline, re_backslash;
-     VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
-     rb_funcall(con, rb_intern("strip!"), 0);
-     re_pipe      = rb_reg_regcomp(rb_str_new2("\\\\\\|"));
-     re_newline   = rb_reg_regcomp(rb_str_new2("\\\\n"));
-     re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_pipe,      rb_str_new2("|"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_newline,   rb_str_new2("\n"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\"));
- 
-     rb_ary_push(current_row, con);
-   }
- 	break;
- 	case 22:
- #line 203 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/lu.c.rl"
- 	{
-     rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
-   }
- 	break;
- 	case 23:
- #line 207 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/lu.c.rl"
- 	{
-     int line;
-     if (cs < lexer_first_final) {
-       size_t count = 0;
-       VALUE newstr_val;
-       char *newstr;
-       int newstr_count = 0;        
-       size_t len;
-       const char *buff;
-       if (lexer->last_newline != 0) {
-         len = LEN(last_newline, eof);
-         buff = PTR_TO(last_newline);
-       } else {
-         len = strlen(data);
-         buff = data;
-       }
- 
-       // Allocate as a ruby string so that it gets cleaned up by GC
-       newstr_val = rb_str_new(buff, len);
-       newstr = RSTRING_PTR(newstr_val);
- 
- 
-       for (count = 0; count < len; count++) {
-         if(buff[count] == 10) {
-           newstr[newstr_count] = '\0'; // terminate new string at first newline found
-           break;
-         } else {
-           if (buff[count] == '%') {
-             newstr[newstr_count++] = buff[count];
-             newstr[newstr_count] = buff[count];
-           } else {
-             newstr[newstr_count] = buff[count];
-           }
-         }
-         newstr_count++;
-       }
- 
-       line = lexer->line_number;
-       lexer_init(lexer); // Re-initialize so we can scan again with the same lexer
-       raise_lexer_error(newstr, line);
-     } else {
-       rb_funcall(listener, rb_intern("eof"), 0);
-     }
-   }
- 	break;
- #line 1290 "ext/gherkin_lexer_lu/gherkin_lexer_lu.c"
- 		}
- 	}
- 
- _again:
- 	if ( cs == 0 )
- 		goto _out;
- 	if ( ++p != pe )
- 		goto _resume;
- 	_test_eof: {}
- 	if ( p == eof )
- 	{
- 	const char *__acts = _lexer_actions + _lexer_eof_actions[cs];
- 	unsigned int __nacts = (unsigned int) *__acts++;
- 	while ( __nacts-- > 0 ) {
- 		switch ( *__acts++ ) {
- 	case 23:
- #line 207 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/lu.c.rl"
- 	{
-     int line;
-     if (cs < lexer_first_final) {
-       size_t count = 0;
-       VALUE newstr_val;
-       char *newstr;
-       int newstr_count = 0;        
-       size_t len;
-       const char *buff;
-       if (lexer->last_newline != 0) {
-         len = LEN(last_newline, eof);
-         buff = PTR_TO(last_newline);
-       } else {
-         len = strlen(data);
-         buff = data;
-       }
- 
-       // Allocate as a ruby string so that it gets cleaned up by GC
-       newstr_val = rb_str_new(buff, len);
-       newstr = RSTRING_PTR(newstr_val);
- 
- 
-       for (count = 0; count < len; count++) {
-         if(buff[count] == 10) {
-           newstr[newstr_count] = '\0'; // terminate new string at first newline found
-           break;
-         } else {
-           if (buff[count] == '%') {
-             newstr[newstr_count++] = buff[count];
-             newstr[newstr_count] = buff[count];
-           } else {
-             newstr[newstr_count] = buff[count];
-           }
-         }
-         newstr_count++;
-       }
- 
-       line = lexer->line_number;
-       lexer_init(lexer); // Re-initialize so we can scan again with the same lexer
-       raise_lexer_error(newstr, line);
-     } else {
-       rb_funcall(listener, rb_intern("eof"), 0);
-     }
-   }
- 	break;
- #line 1353 "ext/gherkin_lexer_lu/gherkin_lexer_lu.c"
- 		}
- 	}
- 	}
- 
- 	_out: {}
- 	}
- 
- #line 426 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/lu.c.rl"
- 
-     assert(p <= pe && "data overflow after parsing execute");
-     assert(lexer->content_start <= len && "content starts after data end");
-     assert(lexer->mark < len && "mark is after data end");
-     
-     // Reset lexer by re-initializing the whole thing
-     lexer_init(lexer);
- 
-     if (cs == lexer_error) {
-       rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails.");
-     } else {
-       return Qtrue;
-     }
-   }
- }
- 
- void Init_gherkin_lexer_lu()
- {
-   mGherkin = rb_define_module("Gherkin");
-   mGherkinLexer = rb_define_module_under(mGherkin, "Lexer");
-   rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError"));
- 
-   mCLexer = rb_define_module_under(mGherkin, "CLexer");
-   cI18nLexer = rb_define_class_under(mCLexer, "Lu", rb_cObject);
-   rb_define_alloc_func(cI18nLexer, CLexer_alloc);
-   rb_define_method(cI18nLexer, "initialize", CLexer_init, 1);
-   rb_define_method(cI18nLexer, "scan", CLexer_scan, 1);
- }
- 
 -#line 1 "ragel/i18n/lu.c.rl"
 -#include <assert.h>
 -#include <ruby.h>
 -
 -#if defined(_WIN32)
 -#include <stddef.h>
 -#endif
 -
 -#ifdef HAVE_RUBY_RE_H
 -#include <ruby/re.h>
 -#else
 -#include <re.h>
 -#endif
 -
 -#ifdef HAVE_RUBY_ENCODING_H
 -#include <ruby/encoding.h>
 -#define ENCODED_STR_NEW(ptr, len) \
 -    rb_enc_str_new(ptr, len, rb_utf8_encoding())
 -#else
 -#define ENCODED_STR_NEW(ptr, len) \
 -    rb_str_new(ptr, len)
 -#endif
 -
 -#ifndef RSTRING_PTR
 -#define RSTRING_PTR(s) (RSTRING(s)->ptr)
 -#endif
 -
 -#ifndef RSTRING_LEN
 -#define RSTRING_LEN(s) (RSTRING(s)->len)
 -#endif
 -
 -#define DATA_GET(FROM, TYPE, NAME) \
 -  Data_Get_Struct(FROM, TYPE, NAME); \
 -  if (NAME == NULL) { \
 -    rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \
 -  }
 - 
 -typedef struct lexer_state {
 -  int content_len;
 -  int line_number;
 -  int current_line;
 -  int start_col;
 -  size_t mark;
 -  size_t keyword_start;
 -  size_t keyword_end;
 -  size_t next_keyword_start;
 -  size_t content_start;
 -  size_t content_end;
 -  size_t docstring_content_type_start;
 -  size_t docstring_content_type_end;
 -  size_t query_start;
 -  size_t last_newline;
 -  size_t final_newline;
 -} lexer_state;
 -
 -static VALUE mGherkin;
 -static VALUE mGherkinLexer;
 -static VALUE mCLexer;
 -static VALUE cI18nLexer;
 -static VALUE rb_eGherkinLexingError;
 -
 -#define LEN(AT, P) (P - data - lexer->AT)
 -#define MARK(M, P) (lexer->M = (P) - data)
 -#define PTR_TO(P) (data + lexer->P)
 -
 -#define STORE_KW_END_CON(EVENT) \
 -  store_multiline_kw_con(listener, # EVENT, \
 -    PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \
 -    PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \
 -    lexer->current_line, lexer->start_col); \
 -    if (lexer->content_end != 0) { \
 -      p = PTR_TO(content_end - 1); \
 -    } \
 -    lexer->content_end = 0
 -
 -#define STORE_ATTR(ATTR) \
 -    store_attr(listener, # ATTR, \
 -      PTR_TO(content_start), LEN(content_start, p), \
 -      lexer->line_number)
 -
 -
 -#line 254 "ragel/i18n/lu.c.rl"
 -
 -
 -/** Data **/
 -
 -#line 89 "ext/gherkin_lexer_lu/gherkin_lexer_lu.c"
 -static const char _lexer_actions[] = {
 -	0, 1, 0, 1, 1, 1, 2, 1, 
 -	3, 1, 4, 1, 5, 1, 6, 1, 
 -	7, 1, 8, 1, 9, 1, 10, 1, 
 -	11, 1, 12, 1, 13, 1, 16, 1, 
 -	17, 1, 18, 1, 19, 1, 20, 1, 
 -	21, 1, 22, 1, 23, 2, 1, 18, 
 -	2, 4, 5, 2, 13, 0, 2, 14, 
 -	15, 2, 17, 0, 2, 17, 2, 2, 
 -	17, 16, 2, 17, 19, 2, 18, 6, 
 -	2, 18, 7, 2, 18, 8, 2, 18, 
 -	9, 2, 18, 10, 2, 18, 16, 2, 
 -	20, 21, 2, 22, 0, 2, 22, 2, 
 -	2, 22, 16, 2, 22, 19, 3, 3, 
 -	14, 15, 3, 5, 14, 15, 3, 11, 
 -	14, 15, 3, 12, 14, 15, 3, 13, 
 -	14, 15, 3, 14, 15, 18, 3, 17, 
 -	0, 11, 3, 17, 14, 15, 4, 1, 
 -	14, 15, 18, 4, 4, 5, 14, 15, 
 -	4, 17, 0, 14, 15, 5, 17, 0, 
 -	11, 14, 15
 -};
 -
 -static const short _lexer_key_offsets[] = {
 -	0, 0, 21, 22, 23, 43, 44, 45, 
 -	47, 49, 54, 59, 64, 69, 73, 77, 
 -	79, 80, 81, 82, 83, 84, 85, 86, 
 -	87, 88, 89, 90, 91, 92, 93, 94, 
 -	95, 97, 99, 104, 111, 116, 117, 118, 
 -	119, 120, 121, 122, 123, 124, 125, 126, 
 -	127, 128, 135, 137, 139, 141, 143, 145, 
 -	147, 149, 151, 153, 155, 157, 159, 161, 
 -	163, 165, 167, 187, 188, 189, 190, 191, 
 -	192, 193, 194, 195, 196, 197, 198, 199, 
 -	200, 201, 202, 203, 204, 205, 217, 219, 
 -	221, 223, 225, 227, 229, 231, 233, 235, 
 -	237, 239, 241, 243, 245, 247, 249, 251, 
 -	253, 255, 257, 259, 261, 263, 265, 267, 
 -	269, 271, 273, 275, 277, 279, 281, 283, 
 -	285, 287, 289, 291, 293, 295, 297, 299, 
 -	301, 303, 305, 307, 309, 311, 313, 315, 
 -	317, 319, 321, 323, 325, 327, 329, 331, 
 -	333, 335, 337, 339, 341, 343, 345, 347, 
 -	349, 350, 351, 352, 353, 354, 355, 356, 
 -	357, 358, 359, 360, 361, 362, 378, 380, 
 -	382, 384, 386, 388, 390, 392, 394, 396, 
 -	398, 400, 402, 404, 406, 408, 410, 412, 
 -	414, 416, 418, 420, 422, 424, 426, 428, 
 -	430, 432, 434, 436, 438, 440, 442, 444, 
 -	446, 448, 450, 452, 454, 456, 458, 460, 
 -	462, 464, 466, 468, 470, 472, 474, 478, 
 -	480, 482, 484, 486, 488, 490, 492, 494, 
 -	496, 498, 500, 502, 504, 505, 506, 507, 
 -	508, 509, 510, 511, 512, 513, 514, 515, 
 -	516, 517, 518, 519, 520, 521, 522, 523, 
 -	524, 539, 541, 543, 545, 547, 549, 551, 
 -	553, 555, 557, 559, 561, 563, 565, 567, 
 -	569, 571, 573, 575, 577, 579, 581, 583, 
 -	585, 587, 589, 591, 593, 595, 597, 599, 
 -	601, 603, 605, 607, 609, 611, 613, 615, 
 -	619, 621, 623, 625, 627, 629, 631, 633, 
 -	635, 637, 639, 641, 643, 645, 646, 647, 
 -	648, 649, 650, 651, 652, 653, 654, 655, 
 -	672, 674, 676, 678, 680, 682, 684, 686, 
 -	688, 690, 692, 694, 696, 698, 700, 702, 
 -	704, 706, 708, 710, 712, 714, 716, 718, 
 -	720, 722, 724, 726, 728, 730, 732, 734, 
 -	736, 738, 740, 742, 744, 746, 748, 750, 
 -	752, 754, 756, 758, 760, 762, 764, 766, 
 -	768, 770, 772, 774, 776, 778, 780, 782, 
 -	784, 786, 788, 792, 794, 796, 798, 800, 
 -	802, 804, 806, 808, 810, 812, 814, 816, 
 -	818, 821, 822, 823, 824, 825, 826, 827, 
 -	828, 829, 830, 831, 832, 833, 834, 838, 
 -	844, 847, 849, 855, 875
 -};
 -
 -static const char _lexer_trans_keys[] = {
 -	-17, 10, 32, 34, 35, 37, 42, 64, 
 -	66, 70, 72, 80, 83, 97, 100, 109, 
 -	117, 119, 124, 9, 13, -69, -65, 10, 
 -	32, 34, 35, 37, 42, 64, 66, 70, 
 -	72, 80, 83, 97, 100, 109, 117, 119, 
 -	124, 9, 13, 34, 34, 10, 13, 10, 
 -	13, 10, 32, 34, 9, 13, 10, 32, 
 -	34, 9, 13, 10, 32, 34, 9, 13, 
 -	10, 32, 34, 9, 13, 10, 32, 9, 
 -	13, 10, 32, 9, 13, 10, 13, 10, 
 -	95, 70, 69, 65, 84, 85, 82, 69, 
 -	95, 69, 78, 68, 95, 37, 32, 10, 
 -	13, 10, 13, 13, 32, 64, 9, 10, 
 -	9, 10, 13, 32, 64, 11, 12, 10, 
 -	32, 64, 9, 13, 101, 105, 115, 112, 
 -	105, 108, 108, 101, 114, 58, 10, 10, 
 -	10, 32, 35, 70, 124, 9, 13, 10, 
 -	117, 10, 110, 10, 107, 10, 116, 10, 
 -	105, 10, 111, 10, 110, 10, 97, 10, 
 -	108, 10, 105, 10, 116, -61, 10, -87, 
 -	10, 10, 105, 10, 116, 10, 58, 10, 
 -	32, 34, 35, 37, 42, 64, 66, 70, 
 -	72, 80, 83, 97, 100, 109, 117, 119, 
 -	124, 9, 13, 117, 110, 107, 116, 105, 
 -	111, 110, 97, 108, 105, 116, -61, -87, 
 -	105, 116, 58, 10, 10, 10, 32, 35, 
 -	37, 64, 66, 70, 72, 80, 83, 9, 
 -	13, 10, 95, 10, 70, 10, 69, 10, 
 -	65, 10, 84, 10, 85, 10, 82, 10, 
 -	69, 10, 95, 10, 69, 10, 78, 10, 
 -	68, 10, 95, 10, 37, 10, 101, 10, 
 -	105, 10, 115, 10, 112, 10, 105, 10, 
 -	108, 10, 108, 10, 101, 10, 114, 10, 
 -	58, 10, 117, 10, 110, 10, 107, 10, 
 -	116, 10, 105, 10, 111, 10, 110, 10, 
 -	97, 10, 108, 10, 105, 10, 116, -61, 
 -	10, -87, 10, 10, 105, 10, 116, 10, 
 -	97, 10, 110, 10, 110, 10, 101, 10, 
 -	114, 10, 103, 10, 114, 10, 111, 10, 
 -	110, 10, 100, 10, 108, 10, 97, 10, 
 -	110, 10, 103, 10, 32, 10, 118, 10, 
 -	117, 10, 109, 10, 32, 10, 83, 10, 
 -	122, 10, 101, 10, 110, 10, 97, 10, 
 -	114, 10, 105, 10, 111, 97, 110, 110, 
 -	101, 114, 103, 114, 111, 110, 100, 58, 
 -	10, 10, 10, 32, 35, 37, 42, 64, 
 -	70, 80, 83, 97, 100, 109, 117, 119, 
 -	9, 13, 10, 95, 10, 70, 10, 69, 
 -	10, 65, 10, 84, 10, 85, 10, 82, 
 -	10, 69, 10, 95, 10, 69, 10, 78, 
 -	10, 68, 10, 95, 10, 37, 10, 32, 
 -	10, 117, 10, 110, 10, 107, 10, 116, 
 -	10, 105, 10, 111, 10, 110, 10, 97, 
 -	10, 108, 10, 105, 10, 116, -61, 10, 
 -	-87, 10, 10, 105, 10, 116, 10, 58, 
 -	10, 108, 10, 97, 10, 110, 10, 103, 
 -	10, 32, 10, 118, 10, 117, 10, 109, 
 -	10, 32, 10, 83, 10, 122, 10, 101, 
 -	10, 110, 10, 97, 10, 114, 10, 105, 
 -	10, 111, 10, 32, 110, 119, 10, 101, 
 -	10, 114, 10, 97, 10, 110, 10, 110, 
 -	-61, 10, -92, 10, 10, 103, 10, 101, 
 -	10, 104, 10, 111, 10, 108, 10, 108, 
 -	108, 97, 110, 103, 32, 118, 117, 109, 
 -	32, 83, 122, 101, 110, 97, 114, 105, 
 -	111, 58, 10, 10, 10, 32, 35, 37, 
 -	42, 64, 70, 83, 97, 100, 109, 117, 
 -	119, 9, 13, 10, 95, 10, 70, 10, 
 -	69, 10, 65, 10, 84, 10, 85, 10, 
 -	82, 10, 69, 10, 95, 10, 69, 10, 
 -	78, 10, 68, 10, 95, 10, 37, 10, 
 -	32, 10, 117, 10, 110, 10, 107, 10, 
 -	116, 10, 105, 10, 111, 10, 110, 10, 
 -	97, 10, 108, 10, 105, 10, 116, -61, 
 -	10, -87, 10, 10, 105, 10, 116, 10, 
 -	58, 10, 122, 10, 101, 10, 110, 10, 
 -	97, 10, 114, 10, 105, 10, 111, 10, 
 -	32, 110, 119, 10, 101, 10, 114, 10, 
 -	97, 10, 110, 10, 110, -61, 10, -92, 
 -	10, 10, 103, 10, 101, 10, 104, 10, 
 -	111, 10, 108, 10, 108, 122, 101, 110, 
 -	97, 114, 105, 111, 58, 10, 10, 10, 
 -	32, 35, 37, 42, 64, 70, 72, 80, 
 -	83, 97, 100, 109, 117, 119, 9, 13, 
 -	10, 95, 10, 70, 10, 69, 10, 65, 
 -	10, 84, 10, 85, 10, 82, 10, 69, 
 -	10, 95, 10, 69, 10, 78, 10, 68, 
 -	10, 95, 10, 37, 10, 32, 10, 117, 
 -	10, 110, 10, 107, 10, 116, 10, 105, 
 -	10, 111, 10, 110, 10, 97, 10, 108, 
 -	10, 105, 10, 116, -61, 10, -87, 10, 
 -	10, 105, 10, 116, 10, 58, 10, 97, 
 -	10, 110, 10, 110, 10, 101, 10, 114, 
 -	10, 103, 10, 114, 10, 111, 10, 110, 
 -	10, 100, 10, 108, 10, 97, 10, 110, 
 -	10, 103, 10, 32, 10, 118, 10, 117, 
 -	10, 109, 10, 32, 10, 83, 10, 122, 
 -	10, 101, 10, 110, 10, 97, 10, 114, 
 -	10, 105, 10, 111, 10, 32, 110, 119, 
 -	10, 101, 10, 114, 10, 97, 10, 110, 
 -	10, 110, -61, 10, -92, 10, 10, 103, 
 -	10, 101, 10, 104, 10, 111, 10, 108, 
 -	10, 108, 32, 110, 119, 101, 114, 97, 
 -	110, 110, -61, -92, 103, 101, 104, 111, 
 -	108, 108, 32, 124, 9, 13, 10, 32, 
 -	92, 124, 9, 13, 10, 92, 124, 10, 
 -	92, 10, 32, 92, 124, 9, 13, 10, 
 -	32, 34, 35, 37, 42, 64, 66, 70, 
 -	72, 80, 83, 97, 100, 109, 117, 119, 
 -	124, 9, 13, 0
 -};
 -
 -static const char _lexer_single_lengths[] = {
 -	0, 19, 1, 1, 18, 1, 1, 2, 
 -	2, 3, 3, 3, 3, 2, 2, 2, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	2, 2, 3, 5, 3, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 5, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 18, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 10, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 14, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 4, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	13, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 4, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 15, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 4, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	3, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 2, 4, 
 -	3, 2, 4, 18, 0
 -};
 -
 -static const char _lexer_range_lengths[] = {
 -	0, 1, 0, 0, 1, 0, 0, 0, 
 -	0, 1, 1, 1, 1, 1, 1, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 1, 1, 1, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 1, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 1, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 1, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 1, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	1, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 1, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 1, 1, 
 -	0, 0, 1, 1, 0
 -};
 -
 -static const short _lexer_index_offsets[] = {
 -	0, 0, 21, 23, 25, 45, 47, 49, 
 -	52, 55, 60, 65, 70, 75, 79, 83, 
 -	86, 88, 90, 92, 94, 96, 98, 100, 
 -	102, 104, 106, 108, 110, 112, 114, 116, 
 -	118, 121, 124, 129, 136, 141, 143, 145, 
 -	147, 149, 151, 153, 155, 157, 159, 161, 
 -	163, 165, 172, 175, 178, 181, 184, 187, 
 -	190, 193, 196, 199, 202, 205, 208, 211, 
 -	214, 217, 220, 240, 242, 244, 246, 248, 
 -	250, 252, 254, 256, 258, 260, 262, 264, 
 -	266, 268, 270, 272, 274, 276, 288, 291, 
 -	294, 297, 300, 303, 306, 309, 312, 315, 
 -	318, 321, 324, 327, 330, 333, 336, 339, 
 -	342, 345, 348, 351, 354, 357, 360, 363, 
 -	366, 369, 372, 375, 378, 381, 384, 387, 
 -	390, 393, 396, 399, 402, 405, 408, 411, 
 -	414, 417, 420, 423, 426, 429, 432, 435, 
 -	438, 441, 444, 447, 450, 453, 456, 459, 
 -	462, 465, 468, 471, 474, 477, 480, 483, 
 -	486, 488, 490, 492, 494, 496, 498, 500, 
 -	502, 504, 506, 508, 510, 512, 528, 531, 
 -	534, 537, 540, 543, 546, 549, 552, 555, 
 -	558, 561, 564, 567, 570, 573, 576, 579, 
 -	582, 585, 588, 591, 594, 597, 600, 603, 
 -	606, 609, 612, 615, 618, 621, 624, 627, 
 -	630, 633, 636, 639, 642, 645, 648, 651, 
 -	654, 657, 660, 663, 666, 669, 672, 677, 
 -	680, 683, 686, 689, 692, 695, 698, 701, 
 -	704, 707, 710, 713, 716, 718, 720, 722, 
 -	724, 726, 728, 730, 732, 734, 736, 738, 
 -	740, 742, 744, 746, 748, 750, 752, 754, 
 -	756, 771, 774, 777, 780, 783, 786, 789, 
 -	792, 795, 798, 801, 804, 807, 810, 813, 
 -	816, 819, 822, 825, 828, 831, 834, 837, 
 -	840, 843, 846, 849, 852, 855, 858, 861, 
 -	864, 867, 870, 873, 876, 879, 882, 885, 
 -	890, 893, 896, 899, 902, 905, 908, 911, 
 -	914, 917, 920, 923, 926, 929, 931, 933, 
 -	935, 937, 939, 941, 943, 945, 947, 949, 
 -	966, 969, 972, 975, 978, 981, 984, 987, 
 -	990, 993, 996, 999, 1002, 1005, 1008, 1011, 
 -	1014, 1017, 1020, 1023, 1026, 1029, 1032, 1035, 
 -	1038, 1041, 1044, 1047, 1050, 1053, 1056, 1059, 
 -	1062, 1065, 1068, 1071, 1074, 1077, 1080, 1083, 
 -	1086, 1089, 1092, 1095, 1098, 1101, 1104, 1107, 
 -	1110, 1113, 1116, 1119, 1122, 1125, 1128, 1131, 
 -	1134, 1137, 1140, 1145, 1148, 1151, 1154, 1157, 
 -	1160, 1163, 1166, 1169, 1172, 1175, 1178, 1181, 
 -	1184, 1188, 1190, 1192, 1194, 1196, 1198, 1200, 
 -	1202, 1204, 1206, 1208, 1210, 1212, 1214, 1218, 
 -	1224, 1228, 1231, 1237, 1257
 -};
 -
 -static const short _lexer_trans_targs[] = {
 -	2, 4, 4, 5, 15, 17, 31, 34, 
 -	37, 67, 152, 228, 301, 384, 387, 390, 
 -	392, 387, 398, 4, 0, 3, 0, 4, 
 -	0, 4, 4, 5, 15, 17, 31, 34, 
 -	37, 67, 152, 228, 301, 384, 387, 390, 
 -	392, 387, 398, 4, 0, 6, 0, 7, 
 -	0, 9, 8, 8, 9, 8, 8, 10, 
 -	10, 11, 10, 10, 10, 10, 11, 10, 
 -	10, 10, 10, 12, 10, 10, 10, 10, 
 -	13, 10, 10, 4, 14, 14, 0, 4, 
 -	14, 14, 0, 4, 16, 15, 4, 0, 
 -	18, 0, 19, 0, 20, 0, 21, 0, 
 -	22, 0, 23, 0, 24, 0, 25, 0, 
 -	26, 0, 27, 0, 28, 0, 29, 0, 
 -	30, 0, 404, 0, 32, 0, 4, 16, 
 -	33, 4, 16, 33, 0, 0, 0, 0, 
 -	35, 36, 4, 36, 36, 34, 35, 35, 
 -	4, 36, 34, 36, 0, 38, 0, 39, 
 -	0, 40, 0, 41, 0, 42, 0, 43, 
 -	0, 44, 0, 45, 0, 46, 0, 47, 
 -	0, 49, 48, 49, 48, 49, 49, 4, 
 -	50, 4, 49, 48, 49, 51, 48, 49, 
 -	52, 48, 49, 53, 48, 49, 54, 48, 
 -	49, 55, 48, 49, 56, 48, 49, 57, 
 -	48, 49, 58, 48, 49, 59, 48, 49, 
 -	60, 48, 49, 61, 48, 62, 49, 48, 
 -	63, 49, 48, 49, 64, 48, 49, 65, 
 -	48, 49, 66, 48, 4, 4, 5, 15, 
 -	17, 31, 34, 37, 67, 152, 228, 301, 
 -	384, 387, 390, 392, 387, 398, 4, 0, 
 -	68, 0, 69, 0, 70, 0, 71, 0, 
 -	72, 0, 73, 0, 74, 0, 75, 0, 
 -	76, 0, 77, 0, 78, 0, 79, 0, 
 -	80, 0, 81, 0, 82, 0, 83, 0, 
 -	85, 84, 85, 84, 85, 85, 4, 86, 
 -	4, 100, 110, 125, 135, 145, 85, 84, 
 -	85, 87, 84, 85, 88, 84, 85, 89, 
 -	84, 85, 90, 84, 85, 91, 84, 85, 
 -	92, 84, 85, 93, 84, 85, 94, 84, 
 -	85, 95, 84, 85, 96, 84, 85, 97, 
 -	84, 85, 98, 84, 85, 99, 84, 85, 
 -	4, 84, 85, 101, 84, 85, 102, 84, 
 -	85, 103, 84, 85, 104, 84, 85, 105, 
 -	84, 85, 106, 84, 85, 107, 84, 85, 
 -	108, 84, 85, 109, 84, 85, 66, 84, 
 -	85, 111, 84, 85, 112, 84, 85, 113, 
 -	84, 85, 114, 84, 85, 115, 84, 85, 
 -	116, 84, 85, 117, 84, 85, 118, 84, 
 -	85, 119, 84, 85, 120, 84, 85, 121, 
 -	84, 122, 85, 84, 123, 85, 84, 85, 
 -	124, 84, 85, 109, 84, 85, 126, 84, 
 -	85, 127, 84, 85, 128, 84, 85, 129, 
 -	84, 85, 130, 84, 85, 131, 84, 85, 
 -	132, 84, 85, 133, 84, 85, 134, 84, 
 -	85, 109, 84, 85, 136, 84, 85, 137, 
 -	84, 85, 138, 84, 85, 139, 84, 85, 
 -	140, 84, 85, 141, 84, 85, 142, 84, 
 -	85, 143, 84, 85, 144, 84, 85, 145, 
 -	84, 85, 146, 84, 85, 147, 84, 85, 
 -	148, 84, 85, 149, 84, 85, 150, 84, 
 -	85, 151, 84, 85, 109, 84, 153, 0, 
 -	154, 0, 155, 0, 156, 0, 157, 0, 
 -	158, 0, 159, 0, 160, 0, 161, 0, 
 -	162, 0, 163, 0, 165, 164, 165, 164, 
 -	165, 165, 4, 166, 180, 4, 181, 197, 
 -	207, 214, 217, 220, 222, 217, 165, 164, 
 -	165, 167, 164, 165, 168, 164, 165, 169, 
 -	164, 165, 170, 164, 165, 171, 164, 165, 
 -	172, 164, 165, 173, 164, 165, 174, 164, 
 -	165, 175, 164, 165, 176, 164, 165, 177, 
 -	164, 165, 178, 164, 165, 179, 164, 165, 
 -	4, 164, 165, 66, 164, 165, 182, 164, 
 -	165, 183, 164, 165, 184, 164, 165, 185, 
 -	164, 165, 186, 164, 165, 187, 164, 165, 
 -	188, 164, 165, 189, 164, 165, 190, 164, 
 -	165, 191, 164, 165, 192, 164, 193, 165, 
 -	164, 194, 165, 164, 165, 195, 164, 165, 
 -	196, 164, 165, 66, 164, 165, 198, 164, 
 -	165, 199, 164, 165, 200, 164, 165, 201, 
 -	164, 165, 202, 164, 165, 203, 164, 165, 
 -	204, 164, 165, 205, 164, 165, 206, 164, 
 -	165, 207, 164, 165, 208, 164, 165, 209, 
 -	164, 165, 210, 164, 165, 211, 164, 165, 
 -	212, 164, 165, 213, 164, 165, 196, 164, 
 -	165, 66, 180, 215, 164, 165, 216, 164, 
 -	165, 180, 164, 165, 218, 164, 165, 219, 
 -	164, 165, 180, 164, 221, 165, 164, 180, 
 -	165, 164, 165, 223, 164, 165, 224, 164, 
 -	165, 225, 164, 165, 226, 164, 165, 227, 
 -	164, 165, 180, 164, 229, 0, 230, 0, 
 -	231, 0, 232, 0, 233, 0, 234, 0, 
 -	235, 0, 236, 0, 237, 0, 238, 0, 
 -	239, 0, 240, 0, 241, 0, 242, 0, 
 -	243, 0, 244, 0, 245, 0, 246, 0, 
 -	248, 247, 248, 247, 248, 248, 4, 249, 
 -	263, 4, 264, 280, 287, 290, 293, 295, 
 -	290, 248, 247, 248, 250, 247, 248, 251, 
 -	247, 248, 252, 247, 248, 253, 247, 248, 
 -	254, 247, 248, 255, 247, 248, 256, 247, 
 -	248, 257, 247, 248, 258, 247, 248, 259, 
 -	247, 248, 260, 247, 248, 261, 247, 248, 
 -	262, 247, 248, 4, 247, 248, 66, 247, 
 -	248, 265, 247, 248, 266, 247, 248, 267, 
 -	247, 248, 268, 247, 248, 269, 247, 248, 
 -	270, 247, 248, 271, 247, 248, 272, 247, 
 -	248, 273, 247, 248, 274, 247, 248, 275, 
 -	247, 276, 248, 247, 277, 248, 247, 248, 
 -	278, 247, 248, 279, 247, 248, 66, 247, 
 -	248, 281, 247, 248, 282, 247, 248, 283, 
 -	247, 248, 284, 247, 248, 285, 247, 248, 
 -	286, 247, 248, 279, 247, 248, 66, 263, 
 -	288, 247, 248, 289, 247, 248, 263, 247, 
 -	248, 291, 247, 248, 292, 247, 248, 263, 
 -	247, 294, 248, 247, 263, 248, 247, 248, 
 -	296, 247, 248, 297, 247, 248, 298, 247, 
 -	248, 299, 247, 248, 300, 247, 248, 263, 
 -	247, 302, 0, 303, 0, 304, 0, 305, 
 -	0, 306, 0, 307, 0, 308, 0, 309, 
 -	0, 311, 310, 311, 310, 311, 311, 4, 
 -	312, 326, 4, 327, 343, 353, 363, 370, 
 -	373, 376, 378, 373, 311, 310, 311, 313, 
 -	310, 311, 314, 310, 311, 315, 310, 311, 
 -	316, 310, 311, 317, 310, 311, 318, 310, 
 -	311, 319, 310, 311, 320, 310, 311, 321, 
 -	310, 311, 322, 310, 311, 323, 310, 311, 
 -	324, 310, 311, 325, 310, 311, 4, 310, 
 -	311, 66, 310, 311, 328, 310, 311, 329, 
 -	310, 311, 330, 310, 311, 331, 310, 311, 
 -	332, 310, 311, 333, 310, 311, 334, 310, 
 -	311, 335, 310, 311, 336, 310, 311, 337, 
 -	310, 311, 338, 310, 339, 311, 310, 340, 
 -	311, 310, 311, 341, 310, 311, 342, 310, 
 -	311, 66, 310, 311, 344, 310, 311, 345, 
 -	310, 311, 346, 310, 311, 347, 310, 311, 
 -	348, 310, 311, 349, 310, 311, 350, 310, 
 -	311, 351, 310, 311, 352, 310, 311, 342, 
 -	310, 311, 354, 310, 311, 355, 310, 311, 
 -	356, 310, 311, 357, 310, 311, 358, 310, 
 -	311, 359, 310, 311, 360, 310, 311, 361, 
 -	310, 311, 362, 310, 311, 363, 310, 311, 
 -	364, 310, 311, 365, 310, 311, 366, 310, 
 -	311, 367, 310, 311, 368, 310, 311, 369, 
 -	310, 311, 342, 310, 311, 66, 326, 371, 
 -	310, 311, 372, 310, 311, 326, 310, 311, 
 -	374, 310, 311, 375, 310, 311, 326, 310, 
 -	377, 311, 310, 326, 311, 310, 311, 379, 
 -	310, 311, 380, 310, 311, 381, 310, 311, 
 -	382, 310, 311, 383, 310, 311, 326, 310, 
 -	32, 31, 385, 0, 386, 0, 31, 0, 
 -	388, 0, 389, 0, 31, 0, 391, 0, 
 -	31, 0, 393, 0, 394, 0, 395, 0, 
 -	396, 0, 397, 0, 31, 0, 398, 399, 
 -	398, 0, 403, 402, 401, 399, 402, 400, 
 -	0, 401, 399, 400, 0, 401, 400, 403, 
 -	402, 401, 399, 402, 400, 403, 403, 5, 
 -	15, 17, 31, 34, 37, 67, 152, 228, 
 -	301, 384, 387, 390, 392, 387, 398, 403, 
 -	0, 0, 0
 -};
 -
 -static const unsigned char _lexer_trans_actions[] = {
 -	0, 54, 0, 5, 1, 0, 29, 1, 
 -	29, 29, 29, 29, 29, 29, 29, 29, 
 -	29, 29, 35, 0, 43, 0, 43, 0, 
 -	43, 54, 0, 5, 1, 0, 29, 1, 
 -	29, 29, 29, 29, 29, 29, 29, 29, 
 -	29, 29, 35, 0, 43, 0, 43, 0, 
 -	43, 139, 48, 9, 106, 11, 0, 134, 
 -	45, 45, 45, 3, 122, 33, 33, 33, 
 -	0, 122, 33, 33, 33, 0, 122, 33, 
 -	0, 33, 0, 102, 7, 7, 43, 54, 
 -	0, 0, 43, 114, 25, 0, 54, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 149, 126, 
 -	57, 110, 23, 0, 43, 43, 43, 43, 
 -	0, 27, 118, 27, 27, 51, 27, 0, 
 -	54, 0, 1, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 144, 57, 54, 0, 54, 0, 81, 
 -	84, 81, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 0, 54, 0, 
 -	0, 54, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 21, 0, 130, 31, 60, 57, 
 -	31, 63, 57, 63, 63, 63, 63, 63, 
 -	63, 63, 63, 63, 63, 66, 31, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	144, 57, 54, 0, 54, 0, 69, 33, 
 -	69, 84, 84, 84, 84, 84, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	13, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 13, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 0, 54, 0, 0, 54, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 144, 57, 54, 0, 
 -	54, 0, 72, 33, 84, 72, 84, 84, 
 -	84, 84, 84, 84, 84, 84, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	15, 0, 54, 15, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 0, 54, 
 -	0, 0, 54, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 15, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 15, 0, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 0, 54, 0, 0, 
 -	54, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	144, 57, 54, 0, 54, 0, 78, 33, 
 -	84, 78, 84, 84, 84, 84, 84, 84, 
 -	84, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 19, 0, 54, 19, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 0, 54, 0, 0, 54, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 19, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 19, 0, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 0, 54, 0, 0, 54, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 144, 57, 54, 0, 54, 0, 75, 
 -	33, 84, 75, 84, 84, 84, 84, 84, 
 -	84, 84, 84, 84, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 17, 0, 
 -	54, 17, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 0, 54, 0, 0, 
 -	54, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 17, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 17, 0, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	0, 54, 0, 0, 54, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	0, 0, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 0, 
 -	0, 43, 54, 37, 37, 87, 37, 37, 
 -	43, 0, 39, 0, 43, 0, 0, 54, 
 -	0, 0, 39, 0, 0, 54, 0, 93, 
 -	90, 41, 96, 90, 96, 96, 96, 96, 
 -	96, 96, 96, 96, 96, 96, 99, 0, 
 -	43, 0, 0
 -};
 -
 -static const unsigned char _lexer_eof_actions[] = {
 -	0, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43
 -};
 -
 -static const int lexer_start = 1;
 -static const int lexer_first_final = 404;
 -static const int lexer_error = 0;
 -
 -static const int lexer_en_main = 1;
 -
 -
 -#line 258 "ragel/i18n/lu.c.rl"
 -
 -static VALUE 
 -unindent(VALUE con, int start_col)
 -{
 -  VALUE re;
 -  /* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */
 -  char pat[32]; 
 -  snprintf(pat, 32, "^[\t ]{0,%d}", start_col); 
 -  re = rb_reg_regcomp(rb_str_new2(pat));
 -  rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2(""));
 -
 -  return Qnil;
 -
 -}
 -
 -static void 
 -store_kw_con(VALUE listener, const char * event_name, 
 -             const char * keyword_at, size_t keyword_length, 
 -             const char * at,         size_t length, 
 -             int current_line)
 -{
 -  VALUE con = Qnil, kw = Qnil;
 -  kw = ENCODED_STR_NEW(keyword_at, keyword_length);
 -  con = ENCODED_STR_NEW(at, length);
 -  rb_funcall(con, rb_intern("strip!"), 0);
 -  rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); 
 -}
 -
 -static void
 -store_multiline_kw_con(VALUE listener, const char * event_name,
 -                      const char * keyword_at, size_t keyword_length,
 -                      const char * at,         size_t length,
 -                      int current_line, int start_col)
 -{
 -  VALUE split;
 -  VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil;
 -
 -  kw = ENCODED_STR_NEW(keyword_at, keyword_length);
 -  con = ENCODED_STR_NEW(at, length);
 -
 -  unindent(con, start_col);
 -  
 -  split = rb_str_split(con, "\n");
 -
 -  name = rb_funcall(split, rb_intern("shift"), 0);
 -  desc = rb_ary_join(split, rb_str_new2( "\n" ));
 -
 -  if( name == Qnil ) 
 -  {
 -    name = rb_str_new2("");
 -  }
 -  if( rb_funcall(desc, rb_intern("size"), 0) == 0) 
 -  {
 -    desc = rb_str_new2("");
 -  }
 -  rb_funcall(name, rb_intern("strip!"), 0);
 -  rb_funcall(desc, rb_intern("rstrip!"), 0);
 -  rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); 
 -}
 -
 -static void 
 -store_attr(VALUE listener, const char * attr_type,
 -           const char * at, size_t length, 
 -           int line)
 -{
 -  VALUE val = ENCODED_STR_NEW(at, length);
 -  rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line));
 -}
 -static void 
 -store_docstring_content(VALUE listener, 
 -          int start_col, 
 -          const char *type_at, size_t type_length,
 -          const char *at, size_t length, 
 -          int current_line)
 -{
 -  VALUE re2;
 -  VALUE unescape_escaped_quotes;
 -  VALUE con = ENCODED_STR_NEW(at, length);
 -  VALUE con_type = ENCODED_STR_NEW(type_at, type_length);
 -
 -  unindent(con, start_col);
 -
 -  re2 = rb_reg_regcomp(rb_str_new2("\r\\Z"));
 -  unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\""));
 -  rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2(""));
 -  rb_funcall(con_type, rb_intern("strip!"), 0);
 -  rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\""));
 -  rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line));
 -}
 -static void 
 -raise_lexer_error(const char * at, int line)
 -{ 
 -  rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at);
 -}
 -
 -static void lexer_init(lexer_state *lexer) {
 -  lexer->content_start = 0;
 -  lexer->content_end = 0;
 -  lexer->content_len = 0;
 -  lexer->docstring_content_type_start = 0;
 -  lexer->docstring_content_type_end = 0;
 -  lexer->mark = 0;
 -  lexer->keyword_start = 0;
 -  lexer->keyword_end = 0;
 -  lexer->next_keyword_start = 0;
 -  lexer->line_number = 1;
 -  lexer->last_newline = 0;
 -  lexer->final_newline = 0;
 -  lexer->start_col = 0;
 -}
 -
 -static VALUE CLexer_alloc(VALUE klass)
 -{
 -  VALUE obj;
 -  lexer_state *lxr = ALLOC(lexer_state);
 -  lexer_init(lxr);
 -
 -  obj = Data_Wrap_Struct(klass, NULL, -1, lxr);
 -
 -  return obj;
 -}
 -
 -static VALUE CLexer_init(VALUE self, VALUE listener)
 -{
 -  lexer_state *lxr; 
 -  rb_iv_set(self, "@listener", listener);
 -  
 -  lxr = NULL;
 -  DATA_GET(self, lexer_state, lxr);
 -  lexer_init(lxr);
 -  
 -  return self;
 -}
 -
 -static VALUE CLexer_scan(VALUE self, VALUE input)
 -{
 -  VALUE input_copy;
 -  char *data;
 -  size_t len;
 -  VALUE listener = rb_iv_get(self, "@listener");
 -
 -  lexer_state *lexer;
 -  lexer = NULL;
 -  DATA_GET(self, lexer_state, lexer);
 -
 -  input_copy = rb_str_dup(input);
 -
 -  rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%"));
 -  data = RSTRING_PTR(input_copy);
 -  len = RSTRING_LEN(input_copy);
 -  
 -  if (len == 0) { 
 -    rb_raise(rb_eGherkinLexingError, "No content to lex.");
 -  } else {
 -
 -    const char *p, *pe, *eof;
 -    int cs = 0;
 -    
 -    VALUE current_row = Qnil;
 -
 -    p = data;
 -    pe = data + len;
 -    eof = pe;
 -    
 -    assert(*pe == '\0' && "pointer does not end on NULL");
 -    
 -    
 -#line 993 "ext/gherkin_lexer_lu/gherkin_lexer_lu.c"
 -	{
 -	cs = lexer_start;
 -	}
 -
 -#line 425 "ragel/i18n/lu.c.rl"
 -    
 -#line 1000 "ext/gherkin_lexer_lu/gherkin_lexer_lu.c"
 -	{
 -	int _klen;
 -	unsigned int _trans;
 -	const char *_acts;
 -	unsigned int _nacts;
 -	const char *_keys;
 -
 -	if ( p == pe )
 -		goto _test_eof;
 -	if ( cs == 0 )
 -		goto _out;
 -_resume:
 -	_keys = _lexer_trans_keys + _lexer_key_offsets[cs];
 -	_trans = _lexer_index_offsets[cs];
 -
 -	_klen = _lexer_single_lengths[cs];
 -	if ( _klen > 0 ) {
 -		const char *_lower = _keys;
 -		const char *_mid;
 -		const char *_upper = _keys + _klen - 1;
 -		while (1) {
 -			if ( _upper < _lower )
 -				break;
 -
 -			_mid = _lower + ((_upper-_lower) >> 1);
 -			if ( (*p) < *_mid )
 -				_upper = _mid - 1;
 -			else if ( (*p) > *_mid )
 -				_lower = _mid + 1;
 -			else {
 -				_trans += (unsigned int)(_mid - _keys);
 -				goto _match;
 -			}
 -		}
 -		_keys += _klen;
 -		_trans += _klen;
 -	}
 -
 -	_klen = _lexer_range_lengths[cs];
 -	if ( _klen > 0 ) {
 -		const char *_lower = _keys;
 -		const char *_mid;
 -		const char *_upper = _keys + (_klen<<1) - 2;
 -		while (1) {
 -			if ( _upper < _lower )
 -				break;
 -
 -			_mid = _lower + (((_upper-_lower) >> 1) & ~1);
 -			if ( (*p) < _mid[0] )
 -				_upper = _mid - 2;
 -			else if ( (*p) > _mid[1] )
 -				_lower = _mid + 2;
 -			else {
 -				_trans += (unsigned int)((_mid - _keys)>>1);
 -				goto _match;
 -			}
 -		}
 -		_trans += _klen;
 -	}
 -
 -_match:
 -	cs = _lexer_trans_targs[_trans];
 -
 -	if ( _lexer_trans_actions[_trans] == 0 )
 -		goto _again;
 -
 -	_acts = _lexer_actions + _lexer_trans_actions[_trans];
 -	_nacts = (unsigned int) *_acts++;
 -	while ( _nacts-- > 0 )
 -	{
 -		switch ( *_acts++ )
 -		{
 -	case 0:
 -#line 83 "ragel/i18n/lu.c.rl"
 -	{
 -		MARK(content_start, p);
 -    lexer->current_line = lexer->line_number;
 -    lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2;
 -  }
 -	break;
 -	case 1:
 -#line 89 "ragel/i18n/lu.c.rl"
 -	{
 -    MARK(content_start, p);
 -  }
 -	break;
 -	case 2:
 -#line 93 "ragel/i18n/lu.c.rl"
 -	{
 -    lexer->current_line = lexer->line_number;
 -    lexer->start_col = p - data - lexer->last_newline;
 -  }
 -	break;
 -	case 3:
 -#line 98 "ragel/i18n/lu.c.rl"
 -	{
 -    int len = LEN(content_start, PTR_TO(final_newline));
 -    int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end));
 -
 -    if (len < 0) len = 0;
 -    if (type_len < 0) len = 0;
 -
 -    store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line);
 -  }
 -	break;
 -	case 4:
 -#line 108 "ragel/i18n/lu.c.rl"
 -	{ 
 -    MARK(docstring_content_type_start, p);
 -  }
 -	break;
 -	case 5:
 -#line 112 "ragel/i18n/lu.c.rl"
 -	{ 
 -    MARK(docstring_content_type_end, p);
 -  }
 -	break;
 -	case 6:
 -#line 116 "ragel/i18n/lu.c.rl"
 -	{
 -    STORE_KW_END_CON(feature);
 -  }
 -	break;
 -	case 7:
 -#line 120 "ragel/i18n/lu.c.rl"
 -	{
 -    STORE_KW_END_CON(background);
 -  }
 -	break;
 -	case 8:
 -#line 124 "ragel/i18n/lu.c.rl"
 -	{
 -    STORE_KW_END_CON(scenario);
 -  }
 -	break;
 -	case 9:
 -#line 128 "ragel/i18n/lu.c.rl"
 -	{
 -    STORE_KW_END_CON(scenario_outline);
 -  }
 -	break;
 -	case 10:
 -#line 132 "ragel/i18n/lu.c.rl"
 -	{
 -    STORE_KW_END_CON(examples);
 -  }
 -	break;
 -	case 11:
 -#line 136 "ragel/i18n/lu.c.rl"
 -	{
 -    store_kw_con(listener, "step",
 -      PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
 -      PTR_TO(content_start), LEN(content_start, p), 
 -      lexer->current_line);
 -  }
 -	break;
 -	case 12:
 -#line 143 "ragel/i18n/lu.c.rl"
 -	{
 -    STORE_ATTR(comment);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 13:
 -#line 148 "ragel/i18n/lu.c.rl"
 -	{
 -    STORE_ATTR(tag);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 14:
 -#line 153 "ragel/i18n/lu.c.rl"
 -	{
 -    lexer->line_number += 1;
 -    MARK(final_newline, p);
 -  }
 -	break;
 -	case 15:
 -#line 158 "ragel/i18n/lu.c.rl"
 -	{
 -    MARK(last_newline, p + 1);
 -  }
 -	break;
 -	case 16:
 -#line 162 "ragel/i18n/lu.c.rl"
 -	{
 -    if (lexer->mark == 0) {
 -      MARK(mark, p);
 -    }
 -  }
 -	break;
 -	case 17:
 -#line 168 "ragel/i18n/lu.c.rl"
 -	{
 -    MARK(keyword_end, p);
 -    MARK(keyword_start, PTR_TO(mark));
 -    MARK(content_start, p + 1);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 18:
 -#line 175 "ragel/i18n/lu.c.rl"
 -	{
 -    MARK(content_end, p);
 -  }
 -	break;
 -	case 19:
 -#line 179 "ragel/i18n/lu.c.rl"
 -	{
 -    p = p - 1;
 -    lexer->current_line = lexer->line_number;
 -    current_row = rb_ary_new();
 -  }
 -	break;
 -	case 20:
 -#line 185 "ragel/i18n/lu.c.rl"
 -	{
 -		MARK(content_start, p);
 -  }
 -	break;
 -	case 21:
 -#line 189 "ragel/i18n/lu.c.rl"
 -	{
 -    VALUE re_pipe, re_newline, re_backslash;
 -    VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
 -    rb_funcall(con, rb_intern("strip!"), 0);
 -    re_pipe      = rb_reg_regcomp(rb_str_new2("\\\\\\|"));
 -    re_newline   = rb_reg_regcomp(rb_str_new2("\\\\n"));
 -    re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_pipe,      rb_str_new2("|"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_newline,   rb_str_new2("\n"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\"));
 -
 -    rb_ary_push(current_row, con);
 -  }
 -	break;
 -	case 22:
 -#line 203 "ragel/i18n/lu.c.rl"
 -	{
 -    rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
 -  }
 -	break;
 -	case 23:
 -#line 207 "ragel/i18n/lu.c.rl"
 -	{
 -    int line;
 -    if (cs < lexer_first_final) {
 -      size_t count = 0;
 -      VALUE newstr_val;
 -      char *newstr;
 -      int newstr_count = 0;        
 -      size_t len;
 -      const char *buff;
 -      if (lexer->last_newline != 0) {
 -        len = LEN(last_newline, eof);
 -        buff = PTR_TO(last_newline);
 -      } else {
 -        len = strlen(data);
 -        buff = data;
 -      }
 -
 -      /* Allocate as a ruby string so that it gets cleaned up by GC */
 -      newstr_val = rb_str_new(buff, len);
 -      newstr = RSTRING_PTR(newstr_val);
 -
 -
 -      for (count = 0; count < len; count++) {
 -        if(buff[count] == 10) {
 -          newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
 -          break;
 -        } else {
 -          if (buff[count] == '%') {
 -            newstr[newstr_count++] = buff[count];
 -            newstr[newstr_count] = buff[count];
 -          } else {
 -            newstr[newstr_count] = buff[count];
 -          }
 -        }
 -        newstr_count++;
 -      }
 -
 -      line = lexer->line_number;
 -      lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
 -      raise_lexer_error(newstr, line);
 -    } else {
 -      rb_funcall(listener, rb_intern("eof"), 0);
 -    }
 -  }
 -	break;
 -#line 1290 "ext/gherkin_lexer_lu/gherkin_lexer_lu.c"
 -		}
 -	}
 -
 -_again:
 -	if ( cs == 0 )
 -		goto _out;
 -	if ( ++p != pe )
 -		goto _resume;
 -	_test_eof: {}
 -	if ( p == eof )
 -	{
 -	const char *__acts = _lexer_actions + _lexer_eof_actions[cs];
 -	unsigned int __nacts = (unsigned int) *__acts++;
 -	while ( __nacts-- > 0 ) {
 -		switch ( *__acts++ ) {
 -	case 23:
 -#line 207 "ragel/i18n/lu.c.rl"
 -	{
 -    int line;
 -    if (cs < lexer_first_final) {
 -      size_t count = 0;
 -      VALUE newstr_val;
 -      char *newstr;
 -      int newstr_count = 0;        
 -      size_t len;
 -      const char *buff;
 -      if (lexer->last_newline != 0) {
 -        len = LEN(last_newline, eof);
 -        buff = PTR_TO(last_newline);
 -      } else {
 -        len = strlen(data);
 -        buff = data;
 -      }
 -
 -      /* Allocate as a ruby string so that it gets cleaned up by GC */
 -      newstr_val = rb_str_new(buff, len);
 -      newstr = RSTRING_PTR(newstr_val);
 -
 -
 -      for (count = 0; count < len; count++) {
 -        if(buff[count] == 10) {
 -          newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
 -          break;
 -        } else {
 -          if (buff[count] == '%') {
 -            newstr[newstr_count++] = buff[count];
 -            newstr[newstr_count] = buff[count];
 -          } else {
 -            newstr[newstr_count] = buff[count];
 -          }
 -        }
 -        newstr_count++;
 -      }
 -
 -      line = lexer->line_number;
 -      lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
 -      raise_lexer_error(newstr, line);
 -    } else {
 -      rb_funcall(listener, rb_intern("eof"), 0);
 -    }
 -  }
 -	break;
 -#line 1353 "ext/gherkin_lexer_lu/gherkin_lexer_lu.c"
 -		}
 -	}
 -	}
 -
 -	_out: {}
 -	}
 -
 -#line 426 "ragel/i18n/lu.c.rl"
 -
 -    assert(p <= pe && "data overflow after parsing execute");
 -    assert(lexer->content_start <= len && "content starts after data end");
 -    assert(lexer->mark < len && "mark is after data end");
 -    
 -    /* Reset lexer by re-initializing the whole thing */
 -    lexer_init(lexer);
 -
 -    if (cs == lexer_error) {
 -      rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails.");
 -    } else {
 -      return Qtrue;
 -    }
 -  }
 -}
 -
 -void Init_gherkin_lexer_lu()
 -{
 -  mGherkin = rb_define_module("Gherkin");
 -  mGherkinLexer = rb_define_module_under(mGherkin, "Lexer");
 -  rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError"));
 -
 -  mCLexer = rb_define_module_under(mGherkin, "CLexer");
 -  cI18nLexer = rb_define_class_under(mCLexer, "Lu", rb_cObject);
 -  rb_define_alloc_func(cI18nLexer, CLexer_alloc);
 -  rb_define_method(cI18nLexer, "initialize", CLexer_init, 1);
 -  rb_define_method(cI18nLexer, "scan", CLexer_scan, 1);
 -}
 -
diff --cc ext/gherkin_lexer_lv/extconf.rb
index c80ffe6,c80ffe6..0000000
deleted file mode 100644,100644
--- a/ext/gherkin_lexer_lv/extconf.rb
+++ /dev/null
@@@ -1,6 -1,6 +1,0 @@@
--require 'mkmf'
--CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags']
--$CFLAGS << ' -O0 -Wall' if CONFIG['CC'] =~ /gcc|clang/
--dir_config("gherkin_lexer_lv")
--have_library("c", "main")
--create_makefile("gherkin_lexer_lv")
diff --cc ext/gherkin_lexer_lv/gherkin_lexer_lv.c
index 79247be,937a388..0000000
deleted file mode 100644,100644
--- a/ext/gherkin_lexer_lv/gherkin_lexer_lv.c
+++ /dev/null
@@@ -1,1425 -1,1425 +1,0 @@@
--
- #line 1 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/lv.c.rl"
- #include <assert.h>
- #include <ruby.h>
- 
- #if defined(_WIN32)
- #include <stddef.h>
- #endif
- 
- #ifdef HAVE_RUBY_RE_H
- #include <ruby/re.h>
- #else
- #include <re.h>
- #endif
- 
- #ifdef HAVE_RUBY_ENCODING_H
- #include <ruby/encoding.h>
- #define ENCODED_STR_NEW(ptr, len) \
-     rb_enc_str_new(ptr, len, rb_utf8_encoding())
- #else
- #define ENCODED_STR_NEW(ptr, len) \
-     rb_str_new(ptr, len)
- #endif
- 
- #ifndef RSTRING_PTR
- #define RSTRING_PTR(s) (RSTRING(s)->ptr)
- #endif
- 
- #ifndef RSTRING_LEN
- #define RSTRING_LEN(s) (RSTRING(s)->len)
- #endif
- 
- #define DATA_GET(FROM, TYPE, NAME) \
-   Data_Get_Struct(FROM, TYPE, NAME); \
-   if (NAME == NULL) { \
-     rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \
-   }
-  
- typedef struct lexer_state {
-   int content_len;
-   int line_number;
-   int current_line;
-   int start_col;
-   size_t mark;
-   size_t keyword_start;
-   size_t keyword_end;
-   size_t next_keyword_start;
-   size_t content_start;
-   size_t content_end;
-   size_t docstring_content_type_start;
-   size_t docstring_content_type_end;
-   size_t query_start;
-   size_t last_newline;
-   size_t final_newline;
- } lexer_state;
- 
- static VALUE mGherkin;
- static VALUE mGherkinLexer;
- static VALUE mCLexer;
- static VALUE cI18nLexer;
- static VALUE rb_eGherkinLexingError;
- 
- #define LEN(AT, P) (P - data - lexer->AT)
- #define MARK(M, P) (lexer->M = (P) - data)
- #define PTR_TO(P) (data + lexer->P)
- 
- #define STORE_KW_END_CON(EVENT) \
-   store_multiline_kw_con(listener, # EVENT, \
-     PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \
-     PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \
-     lexer->current_line, lexer->start_col); \
-     if (lexer->content_end != 0) { \
-       p = PTR_TO(content_end - 1); \
-     } \
-     lexer->content_end = 0
- 
- #define STORE_ATTR(ATTR) \
-     store_attr(listener, # ATTR, \
-       PTR_TO(content_start), LEN(content_start, p), \
-       lexer->line_number)
- 
- 
- #line 254 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/lv.c.rl"
- 
- 
- /** Data **/
- 
- #line 89 "ext/gherkin_lexer_lv/gherkin_lexer_lv.c"
- static const char _lexer_actions[] = {
- 	0, 1, 0, 1, 1, 1, 2, 1, 
- 	3, 1, 4, 1, 5, 1, 6, 1, 
- 	7, 1, 8, 1, 9, 1, 10, 1, 
- 	11, 1, 12, 1, 13, 1, 16, 1, 
- 	17, 1, 18, 1, 19, 1, 20, 1, 
- 	21, 1, 22, 1, 23, 2, 1, 18, 
- 	2, 4, 5, 2, 13, 0, 2, 14, 
- 	15, 2, 17, 0, 2, 17, 2, 2, 
- 	17, 16, 2, 17, 19, 2, 18, 6, 
- 	2, 18, 7, 2, 18, 8, 2, 18, 
- 	9, 2, 18, 10, 2, 18, 16, 2, 
- 	20, 21, 2, 22, 0, 2, 22, 2, 
- 	2, 22, 16, 2, 22, 19, 3, 3, 
- 	14, 15, 3, 5, 14, 15, 3, 11, 
- 	14, 15, 3, 12, 14, 15, 3, 13, 
- 	14, 15, 3, 14, 15, 18, 3, 17, 
- 	0, 11, 3, 17, 14, 15, 4, 1, 
- 	14, 15, 18, 4, 4, 5, 14, 15, 
- 	4, 17, 0, 14, 15, 5, 17, 0, 
- 	11, 14, 15
- };
- 
- static const short _lexer_key_offsets[] = {
- 	0, 0, 19, 20, 21, 39, 40, 41, 
- 	43, 45, 50, 55, 60, 65, 69, 73, 
- 	75, 76, 77, 78, 79, 80, 81, 82, 
- 	83, 84, 85, 86, 87, 88, 89, 90, 
- 	91, 93, 95, 100, 107, 112, 113, 114, 
- 	116, 117, 118, 119, 120, 121, 122, 123, 
- 	134, 136, 138, 140, 142, 144, 146, 148, 
- 	150, 152, 154, 156, 158, 160, 162, 165, 
- 	167, 169, 171, 173, 175, 193, 194, 196, 
- 	197, 198, 199, 200, 201, 202, 203, 204, 
- 	205, 206, 207, 222, 224, 226, 228, 230, 
- 	232, 234, 236, 238, 240, 242, 244, 246, 
- 	248, 250, 252, 254, 256, 259, 261, 263, 
- 	265, 267, 269, 271, 273, 275, 277, 279, 
- 	281, 283, 285, 287, 289, 291, 293, 295, 
- 	297, 299, 301, 303, 305, 307, 309, 311, 
- 	313, 315, 317, 319, 321, 324, 326, 328, 
- 	330, 332, 334, 336, 338, 340, 342, 344, 
- 	346, 348, 350, 351, 352, 353, 354, 355, 
- 	356, 357, 358, 365, 368, 370, 372, 374, 
- 	376, 378, 380, 382, 384, 386, 388, 390, 
- 	392, 394, 396, 398, 400, 402, 404, 406, 
- 	407, 408, 409, 410, 411, 412, 414, 415, 
- 	416, 417, 418, 419, 420, 421, 422, 424, 
- 	425, 426, 427, 428, 429, 430, 431, 432, 
- 	433, 434, 435, 436, 437, 438, 439, 454, 
- 	456, 458, 460, 462, 464, 466, 468, 470, 
- 	472, 474, 476, 478, 480, 482, 484, 486, 
- 	488, 491, 493, 495, 497, 499, 501, 503, 
- 	505, 507, 509, 511, 513, 515, 517, 519, 
- 	521, 523, 525, 527, 529, 531, 533, 535, 
- 	537, 539, 541, 543, 545, 547, 549, 551, 
- 	553, 555, 556, 557, 572, 574, 576, 578, 
- 	580, 582, 584, 586, 588, 590, 592, 594, 
- 	596, 598, 600, 602, 604, 606, 609, 611, 
- 	613, 615, 617, 619, 621, 623, 625, 627, 
- 	629, 631, 633, 635, 637, 639, 641, 643, 
- 	645, 647, 649, 652, 654, 656, 658, 660, 
- 	662, 664, 666, 668, 671, 673, 675, 677, 
- 	679, 681, 683, 685, 687, 690, 692, 694, 
- 	696, 698, 700, 702, 704, 706, 708, 710, 
- 	712, 714, 716, 718, 720, 722, 724, 726, 
- 	728, 730, 731, 732, 733, 734, 735, 736, 
- 	737, 738, 739, 740, 744, 750, 753, 755, 
- 	761, 779, 781, 783, 785, 787, 789, 791, 
- 	793, 795, 797, 799, 801, 803, 805, 807, 
- 	809, 811, 813, 815, 817, 819, 821, 823, 
- 	826, 828, 830, 832, 834, 836, 838, 840, 
- 	842, 844, 846, 849, 851, 853, 855, 857, 
- 	859, 861, 863, 865, 868, 870, 872, 874, 
- 	876, 878, 880, 882, 884, 886, 888, 890, 
- 	892, 894, 896, 898, 900, 902, 904, 905, 
- 	906, 907, 908, 909, 910, 911, 912, 913, 
- 	914, 915, 916, 917, 918
- };
- 
- static const char _lexer_trans_keys[] = {
- 	-17, 10, 32, 34, 35, 37, 42, 64, 
- 	66, 70, 74, 75, 80, 83, 84, 85, 
- 	124, 9, 13, -69, -65, 10, 32, 34, 
- 	35, 37, 42, 64, 66, 70, 74, 75, 
- 	80, 83, 84, 85, 124, 9, 13, 34, 
- 	34, 10, 13, 10, 13, 10, 32, 34, 
- 	9, 13, 10, 32, 34, 9, 13, 10, 
- 	32, 34, 9, 13, 10, 32, 34, 9, 
- 	13, 10, 32, 9, 13, 10, 32, 9, 
- 	13, 10, 13, 10, 95, 70, 69, 65, 
- 	84, 85, 82, 69, 95, 69, 78, 68, 
- 	95, 37, 32, 10, 13, 10, 13, 13, 
- 	32, 64, 9, 10, 9, 10, 13, 32, 
- 	64, 11, 12, 10, 32, 64, 9, 13, 
- 	101, 116, -60, 117, -85, -60, -115, 97, 
- 	58, 10, 10, 10, 32, 35, 37, 64, 
- 	70, 75, 80, 83, 9, 13, 10, 95, 
- 	10, 70, 10, 69, 10, 65, 10, 84, 
- 	10, 85, 10, 82, 10, 69, 10, 95, 
- 	10, 69, 10, 78, 10, 68, 10, 95, 
- 	10, 37, -60, 10, 117, -85, 10, -60, 
- 	10, -115, 10, 10, 97, 10, 58, 10, 
- 	32, 34, 35, 37, 42, 64, 66, 70, 
- 	74, 75, 80, 83, 84, 85, 124, 9, 
- 	13, 97, 97, 111, 100, 110, 116, 101, 
- 	107, 115, 116, 115, 58, 10, 10, 10, 
- 	32, 35, 37, 42, 64, 66, 70, 74, 
- 	75, 83, 84, 85, 9, 13, 10, 95, 
- 	10, 70, 10, 69, 10, 65, 10, 84, 
- 	10, 85, 10, 82, 10, 69, 10, 95, 
- 	10, 69, 10, 78, 10, 68, 10, 95, 
- 	10, 37, 10, 32, 10, 101, 10, 116, 
- 	-60, 10, 117, -85, 10, -60, 10, -115, 
- 	10, 10, 97, 10, 58, 10, 110, 10, 
- 	107, 10, 99, 10, 105, 10, 111, 10, 
- 	110, 10, 97, 10, 108, 10, 105, 10, 
- 	116, -60, 10, -127, 10, 10, 116, 10, 
- 	101, 10, 97, 10, 97, 10, 100, 10, 
- 	99, 10, 101, 10, 110, -60, 10, -127, 
- 	10, 10, 114, 10, 105, 10, 106, 10, 
- 	115, 10, 32, 58, 10, 112, -60, 10, 
- 	-109, 10, 10, 99, 10, 32, 10, 112, 
- 	10, 97, 10, 114, 10, 97, 10, 117, 
- 	10, 103, 10, 110, 97, 105, 114, 97, 
- 	117, 103, 115, 58, 10, 10, 10, 32, 
- 	35, 70, 124, 9, 13, -60, 10, 117, 
- 	-85, 10, -60, 10, -115, 10, 10, 97, 
- 	10, 58, 10, 110, 10, 107, 10, 99, 
- 	10, 105, 10, 111, 10, 110, 10, 97, 
- 	10, 108, 10, 105, 10, 116, -60, 10, 
- 	-127, 10, 10, 116, 10, 101, 101, 109, 
- 	-60, -109, 114, 105, 99, 105, 101, 110, 
- 	-60, -127, 114, 105, 106, 115, 32, 58, 
- 	112, -60, -109, 99, 32, 112, 97, 114, 
- 	97, 117, 103, 97, 58, 10, 10, 10, 
- 	32, 35, 37, 42, 64, 66, 70, 74, 
- 	75, 83, 84, 85, 9, 13, 10, 95, 
- 	10, 70, 10, 69, 10, 65, 10, 84, 
- 	10, 85, 10, 82, 10, 69, 10, 95, 
- 	10, 69, 10, 78, 10, 68, 10, 95, 
- 	10, 37, 10, 32, 10, 101, 10, 116, 
- 	-60, 10, 117, -85, 10, -60, 10, -115, 
- 	10, 10, 97, 10, 58, 10, 110, 10, 
- 	107, 10, 99, 10, 105, 10, 111, 10, 
- 	110, 10, 97, 10, 108, 10, 105, 10, 
- 	116, -60, 10, -127, 10, 10, 116, 10, 
- 	101, 10, 97, 10, 97, 10, 100, 10, 
- 	99, 10, 101, 10, 110, -60, 10, -127, 
- 	10, 10, 114, 10, 105, 10, 106, 10, 
- 	115, 10, 110, 10, 10, 10, 32, 35, 
- 	37, 42, 64, 66, 70, 74, 75, 83, 
- 	84, 85, 9, 13, 10, 95, 10, 70, 
- 	10, 69, 10, 65, 10, 84, 10, 85, 
- 	10, 82, 10, 69, 10, 95, 10, 69, 
- 	10, 78, 10, 68, 10, 95, 10, 37, 
- 	10, 32, 10, 101, 10, 116, -60, 10, 
- 	117, -85, 10, -60, 10, -115, 10, 10, 
- 	97, 10, 58, 10, 110, 10, 107, 10, 
- 	99, 10, 105, 10, 111, 10, 110, 10, 
- 	97, 10, 108, 10, 105, 10, 116, -60, 
- 	10, -127, 10, 10, 116, 10, 101, 10, 
- 	97, 10, 97, 111, 10, 100, 10, 110, 
- 	10, 116, 10, 101, 10, 107, 10, 115, 
- 	10, 116, 10, 115, 10, 99, 105, 10, 
- 	101, 10, 110, -60, 10, -127, 10, 10, 
- 	114, 10, 105, 10, 106, 10, 115, 10, 
- 	32, 58, 10, 112, -60, 10, -109, 10, 
- 	10, 99, 10, 32, 10, 112, 10, 97, 
- 	10, 114, 10, 97, 10, 117, 10, 103, 
- 	10, 116, 10, 117, -60, 10, -127, 10, 
- 	10, 99, 10, 105, 10, 106, 10, 97, 
- 	10, 110, 116, 117, -60, -127, 99, 105, 
- 	106, 97, 97, 110, 32, 124, 9, 13, 
- 	10, 32, 92, 124, 9, 13, 10, 92, 
- 	124, 10, 92, 10, 32, 92, 124, 9, 
- 	13, 10, 32, 34, 35, 37, 42, 64, 
- 	66, 70, 74, 75, 80, 83, 84, 85, 
- 	124, 9, 13, 10, 110, 10, 107, 10, 
- 	99, 10, 105, 10, 111, 10, 110, 10, 
- 	97, 10, 108, 10, 105, 10, 116, -60, 
- 	10, -127, 10, 10, 116, 10, 101, 10, 
- 	111, 10, 110, 10, 116, 10, 101, 10, 
- 	107, 10, 115, 10, 116, 10, 115, 10, 
- 	97, 105, 10, 114, 10, 97, 10, 117, 
- 	10, 103, 10, 101, 10, 109, -60, 10, 
- 	-109, 10, 10, 114, 10, 105, 10, 99, 
- 	105, 10, 101, 10, 110, -60, 10, -127, 
- 	10, 10, 114, 10, 105, 10, 106, 10, 
- 	115, 10, 32, 58, 10, 112, -60, 10, 
- 	-109, 10, 10, 99, 10, 32, 10, 112, 
- 	10, 97, 10, 114, 10, 97, 10, 117, 
- 	10, 103, 10, 116, 10, 117, -60, 10, 
- 	-127, 10, 10, 99, 10, 105, 10, 106, 
- 	110, 107, 99, 105, 111, 110, 97, 108, 
- 	105, 116, -60, -127, 116, 101, 0
- };
- 
- static const char _lexer_single_lengths[] = {
- 	0, 17, 1, 1, 16, 1, 1, 2, 
- 	2, 3, 3, 3, 3, 2, 2, 2, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	2, 2, 3, 5, 3, 1, 1, 2, 
- 	1, 1, 1, 1, 1, 1, 1, 9, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 3, 2, 
- 	2, 2, 2, 2, 16, 1, 2, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 13, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 3, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 3, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 5, 3, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 1, 
- 	1, 1, 1, 1, 1, 2, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 2, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 13, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	3, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 1, 1, 13, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 3, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 3, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 3, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 3, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 2, 4, 3, 2, 4, 
- 	16, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 3, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 3, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 3, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 0
- };
- 
- static const char _lexer_range_lengths[] = {
- 	0, 1, 0, 0, 1, 0, 0, 0, 
- 	0, 1, 1, 1, 1, 1, 1, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 1, 1, 1, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 1, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 1, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 1, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 1, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 1, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 1, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 1, 1, 0, 0, 1, 
- 	1, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0
- };
- 
- static const short _lexer_index_offsets[] = {
- 	0, 0, 19, 21, 23, 41, 43, 45, 
- 	48, 51, 56, 61, 66, 71, 75, 79, 
- 	82, 84, 86, 88, 90, 92, 94, 96, 
- 	98, 100, 102, 104, 106, 108, 110, 112, 
- 	114, 117, 120, 125, 132, 137, 139, 141, 
- 	144, 146, 148, 150, 152, 154, 156, 158, 
- 	169, 172, 175, 178, 181, 184, 187, 190, 
- 	193, 196, 199, 202, 205, 208, 211, 215, 
- 	218, 221, 224, 227, 230, 248, 250, 253, 
- 	255, 257, 259, 261, 263, 265, 267, 269, 
- 	271, 273, 275, 290, 293, 296, 299, 302, 
- 	305, 308, 311, 314, 317, 320, 323, 326, 
- 	329, 332, 335, 338, 341, 345, 348, 351, 
- 	354, 357, 360, 363, 366, 369, 372, 375, 
- 	378, 381, 384, 387, 390, 393, 396, 399, 
- 	402, 405, 408, 411, 414, 417, 420, 423, 
- 	426, 429, 432, 435, 438, 442, 445, 448, 
- 	451, 454, 457, 460, 463, 466, 469, 472, 
- 	475, 478, 481, 483, 485, 487, 489, 491, 
- 	493, 495, 497, 504, 508, 511, 514, 517, 
- 	520, 523, 526, 529, 532, 535, 538, 541, 
- 	544, 547, 550, 553, 556, 559, 562, 565, 
- 	567, 569, 571, 573, 575, 577, 580, 582, 
- 	584, 586, 588, 590, 592, 594, 596, 599, 
- 	601, 603, 605, 607, 609, 611, 613, 615, 
- 	617, 619, 621, 623, 625, 627, 629, 644, 
- 	647, 650, 653, 656, 659, 662, 665, 668, 
- 	671, 674, 677, 680, 683, 686, 689, 692, 
- 	695, 699, 702, 705, 708, 711, 714, 717, 
- 	720, 723, 726, 729, 732, 735, 738, 741, 
- 	744, 747, 750, 753, 756, 759, 762, 765, 
- 	768, 771, 774, 777, 780, 783, 786, 789, 
- 	792, 795, 797, 799, 814, 817, 820, 823, 
- 	826, 829, 832, 835, 838, 841, 844, 847, 
- 	850, 853, 856, 859, 862, 865, 869, 872, 
- 	875, 878, 881, 884, 887, 890, 893, 896, 
- 	899, 902, 905, 908, 911, 914, 917, 920, 
- 	923, 926, 929, 933, 936, 939, 942, 945, 
- 	948, 951, 954, 957, 961, 964, 967, 970, 
- 	973, 976, 979, 982, 985, 989, 992, 995, 
- 	998, 1001, 1004, 1007, 1010, 1013, 1016, 1019, 
- 	1022, 1025, 1028, 1031, 1034, 1037, 1040, 1043, 
- 	1046, 1049, 1051, 1053, 1055, 1057, 1059, 1061, 
- 	1063, 1065, 1067, 1069, 1073, 1079, 1083, 1086, 
- 	1092, 1110, 1113, 1116, 1119, 1122, 1125, 1128, 
- 	1131, 1134, 1137, 1140, 1143, 1146, 1149, 1152, 
- 	1155, 1158, 1161, 1164, 1167, 1170, 1173, 1176, 
- 	1180, 1183, 1186, 1189, 1192, 1195, 1198, 1201, 
- 	1204, 1207, 1210, 1214, 1217, 1220, 1223, 1226, 
- 	1229, 1232, 1235, 1238, 1242, 1245, 1248, 1251, 
- 	1254, 1257, 1260, 1263, 1266, 1269, 1272, 1275, 
- 	1278, 1281, 1284, 1287, 1290, 1293, 1296, 1298, 
- 	1300, 1302, 1304, 1306, 1308, 1310, 1312, 1314, 
- 	1316, 1318, 1320, 1322, 1324
- };
- 
- static const short _lexer_trans_targs[] = {
- 	2, 4, 4, 5, 15, 17, 31, 34, 
- 	37, 39, 69, 70, 145, 181, 345, 346, 
- 	347, 4, 0, 3, 0, 4, 0, 4, 
- 	4, 5, 15, 17, 31, 34, 37, 39, 
- 	69, 70, 145, 181, 345, 346, 347, 4, 
- 	0, 6, 0, 7, 0, 9, 8, 8, 
- 	9, 8, 8, 10, 10, 11, 10, 10, 
- 	10, 10, 11, 10, 10, 10, 10, 12, 
- 	10, 10, 10, 10, 13, 10, 10, 4, 
- 	14, 14, 0, 4, 14, 14, 0, 4, 
- 	16, 15, 4, 0, 18, 0, 19, 0, 
- 	20, 0, 21, 0, 22, 0, 23, 0, 
- 	24, 0, 25, 0, 26, 0, 27, 0, 
- 	28, 0, 29, 0, 30, 0, 428, 0, 
- 	32, 0, 4, 16, 33, 4, 16, 33, 
- 	0, 0, 0, 0, 35, 36, 4, 36, 
- 	36, 34, 35, 35, 4, 36, 34, 36, 
- 	0, 38, 0, 31, 0, 40, 414, 0, 
- 	41, 0, 42, 0, 43, 0, 44, 0, 
- 	45, 0, 47, 46, 47, 46, 47, 47, 
- 	4, 48, 4, 62, 367, 375, 386, 47, 
- 	46, 47, 49, 46, 47, 50, 46, 47, 
- 	51, 46, 47, 52, 46, 47, 53, 46, 
- 	47, 54, 46, 47, 55, 46, 47, 56, 
- 	46, 47, 57, 46, 47, 58, 46, 47, 
- 	59, 46, 47, 60, 46, 47, 61, 46, 
- 	47, 4, 46, 63, 47, 353, 46, 64, 
- 	47, 46, 65, 47, 46, 66, 47, 46, 
- 	47, 67, 46, 47, 68, 46, 4, 4, 
- 	5, 15, 17, 31, 34, 37, 39, 69, 
- 	70, 145, 181, 345, 346, 347, 4, 0, 
- 	31, 0, 71, 72, 0, 31, 0, 73, 
- 	0, 74, 0, 75, 0, 76, 0, 77, 
- 	0, 78, 0, 79, 0, 80, 0, 82, 
- 	81, 82, 81, 82, 82, 4, 83, 97, 
- 	4, 98, 100, 120, 121, 123, 121, 144, 
- 	82, 81, 82, 84, 81, 82, 85, 81, 
- 	82, 86, 81, 82, 87, 81, 82, 88, 
- 	81, 82, 89, 81, 82, 90, 81, 82, 
- 	91, 81, 82, 92, 81, 82, 93, 81, 
- 	82, 94, 81, 82, 95, 81, 82, 96, 
- 	81, 82, 4, 81, 82, 68, 81, 82, 
- 	99, 81, 82, 97, 81, 101, 82, 106, 
- 	81, 102, 82, 81, 103, 82, 81, 104, 
- 	82, 81, 82, 105, 81, 82, 68, 81, 
- 	82, 107, 81, 82, 108, 81, 82, 109, 
- 	81, 82, 110, 81, 82, 111, 81, 82, 
- 	112, 81, 82, 113, 81, 82, 114, 81, 
- 	82, 115, 81, 82, 116, 81, 117, 82, 
- 	81, 118, 82, 81, 82, 119, 81, 82, 
- 	105, 81, 82, 97, 81, 82, 122, 81, 
- 	82, 97, 81, 82, 124, 81, 82, 125, 
- 	81, 82, 126, 81, 127, 82, 81, 128, 
- 	82, 81, 82, 129, 81, 82, 130, 81, 
- 	82, 131, 81, 82, 132, 81, 82, 133, 
- 	68, 81, 82, 134, 81, 135, 82, 81, 
- 	136, 82, 81, 82, 137, 81, 82, 138, 
- 	81, 82, 139, 81, 82, 140, 81, 82, 
- 	141, 81, 82, 142, 81, 82, 143, 81, 
- 	82, 104, 81, 82, 97, 81, 146, 175, 
- 	0, 147, 0, 148, 0, 149, 0, 150, 
- 	0, 151, 0, 152, 0, 154, 153, 154, 
- 	153, 154, 154, 4, 155, 4, 154, 153, 
- 	156, 154, 161, 153, 157, 154, 153, 158, 
- 	154, 153, 159, 154, 153, 154, 160, 153, 
- 	154, 68, 153, 154, 162, 153, 154, 163, 
- 	153, 154, 164, 153, 154, 165, 153, 154, 
- 	166, 153, 154, 167, 153, 154, 168, 153, 
- 	154, 169, 153, 154, 170, 153, 154, 171, 
- 	153, 172, 154, 153, 173, 154, 153, 154, 
- 	174, 153, 154, 160, 153, 176, 0, 177, 
- 	0, 178, 0, 179, 0, 180, 0, 151, 
- 	0, 182, 337, 0, 183, 0, 184, 0, 
- 	185, 0, 186, 0, 187, 0, 188, 0, 
- 	189, 0, 190, 0, 191, 257, 0, 192, 
- 	0, 193, 0, 194, 0, 195, 0, 196, 
- 	0, 197, 0, 198, 0, 199, 0, 200, 
- 	0, 201, 0, 202, 0, 203, 0, 204, 
- 	0, 206, 205, 206, 205, 206, 206, 4, 
- 	207, 221, 4, 222, 224, 244, 245, 247, 
- 	245, 256, 206, 205, 206, 208, 205, 206, 
- 	209, 205, 206, 210, 205, 206, 211, 205, 
- 	206, 212, 205, 206, 213, 205, 206, 214, 
- 	205, 206, 215, 205, 206, 216, 205, 206, 
- 	217, 205, 206, 218, 205, 206, 219, 205, 
- 	206, 220, 205, 206, 4, 205, 206, 68, 
- 	205, 206, 223, 205, 206, 221, 205, 225, 
- 	206, 230, 205, 226, 206, 205, 227, 206, 
- 	205, 228, 206, 205, 206, 229, 205, 206, 
- 	68, 205, 206, 231, 205, 206, 232, 205, 
- 	206, 233, 205, 206, 234, 205, 206, 235, 
- 	205, 206, 236, 205, 206, 237, 205, 206, 
- 	238, 205, 206, 239, 205, 206, 240, 205, 
- 	241, 206, 205, 242, 206, 205, 206, 243, 
- 	205, 206, 229, 205, 206, 221, 205, 206, 
- 	246, 205, 206, 221, 205, 206, 248, 205, 
- 	206, 249, 205, 206, 250, 205, 251, 206, 
- 	205, 252, 206, 205, 206, 253, 205, 206, 
- 	254, 205, 206, 255, 205, 206, 229, 205, 
- 	206, 221, 205, 259, 258, 259, 258, 259, 
- 	259, 4, 260, 274, 4, 275, 277, 297, 
- 	298, 307, 335, 336, 259, 258, 259, 261, 
- 	258, 259, 262, 258, 259, 263, 258, 259, 
- 	264, 258, 259, 265, 258, 259, 266, 258, 
- 	259, 267, 258, 259, 268, 258, 259, 269, 
- 	258, 259, 270, 258, 259, 271, 258, 259, 
- 	272, 258, 259, 273, 258, 259, 4, 258, 
- 	259, 68, 258, 259, 276, 258, 259, 274, 
- 	258, 278, 259, 283, 258, 279, 259, 258, 
- 	280, 259, 258, 281, 259, 258, 259, 282, 
- 	258, 259, 68, 258, 259, 284, 258, 259, 
- 	285, 258, 259, 286, 258, 259, 287, 258, 
- 	259, 288, 258, 259, 289, 258, 259, 290, 
- 	258, 259, 291, 258, 259, 292, 258, 259, 
- 	293, 258, 294, 259, 258, 295, 259, 258, 
- 	259, 296, 258, 259, 282, 258, 259, 274, 
- 	258, 259, 299, 300, 258, 259, 274, 258, 
- 	259, 301, 258, 259, 302, 258, 259, 303, 
- 	258, 259, 304, 258, 259, 305, 258, 259, 
- 	306, 258, 259, 282, 258, 259, 308, 328, 
- 	258, 259, 309, 258, 259, 310, 258, 311, 
- 	259, 258, 312, 259, 258, 259, 313, 258, 
- 	259, 314, 258, 259, 315, 258, 259, 316, 
- 	258, 259, 317, 68, 258, 259, 318, 258, 
- 	319, 259, 258, 320, 259, 258, 259, 321, 
- 	258, 259, 322, 258, 259, 323, 258, 259, 
- 	324, 258, 259, 325, 258, 259, 326, 258, 
- 	259, 327, 258, 259, 281, 258, 259, 329, 
- 	258, 259, 330, 258, 331, 259, 258, 332, 
- 	259, 258, 259, 333, 258, 259, 334, 258, 
- 	259, 281, 258, 259, 299, 258, 259, 274, 
- 	258, 338, 0, 339, 0, 340, 0, 341, 
- 	0, 342, 0, 343, 0, 344, 0, 79, 
- 	0, 71, 0, 31, 0, 347, 348, 347, 
- 	0, 352, 351, 350, 348, 351, 349, 0, 
- 	350, 348, 349, 0, 350, 349, 352, 351, 
- 	350, 348, 351, 349, 352, 352, 5, 15, 
- 	17, 31, 34, 37, 39, 69, 70, 145, 
- 	181, 345, 346, 347, 352, 0, 47, 354, 
- 	46, 47, 355, 46, 47, 356, 46, 47, 
- 	357, 46, 47, 358, 46, 47, 359, 46, 
- 	47, 360, 46, 47, 361, 46, 47, 362, 
- 	46, 47, 363, 46, 364, 47, 46, 365, 
- 	47, 46, 47, 366, 46, 47, 67, 46, 
- 	47, 368, 46, 47, 369, 46, 47, 370, 
- 	46, 47, 371, 46, 47, 372, 46, 47, 
- 	373, 46, 47, 374, 46, 47, 67, 46, 
- 	47, 376, 380, 46, 47, 377, 46, 47, 
- 	378, 46, 47, 379, 46, 47, 374, 46, 
- 	47, 381, 46, 47, 382, 46, 383, 47, 
- 	46, 384, 47, 46, 47, 385, 46, 47, 
- 	67, 46, 47, 387, 407, 46, 47, 388, 
- 	46, 47, 389, 46, 390, 47, 46, 391, 
- 	47, 46, 47, 392, 46, 47, 393, 46, 
- 	47, 394, 46, 47, 395, 46, 47, 396, 
- 	68, 46, 47, 397, 46, 398, 47, 46, 
- 	399, 47, 46, 47, 400, 46, 47, 401, 
- 	46, 47, 402, 46, 47, 403, 46, 47, 
- 	404, 46, 47, 405, 46, 47, 406, 46, 
- 	47, 66, 46, 47, 408, 46, 47, 409, 
- 	46, 410, 47, 46, 411, 47, 46, 47, 
- 	412, 46, 47, 413, 46, 47, 66, 46, 
- 	415, 0, 416, 0, 417, 0, 418, 0, 
- 	419, 0, 420, 0, 421, 0, 422, 0, 
- 	423, 0, 424, 0, 425, 0, 426, 0, 
- 	427, 0, 44, 0, 0, 0
- };
- 
- static const unsigned char _lexer_trans_actions[] = {
- 	0, 54, 0, 5, 1, 0, 29, 1, 
- 	29, 29, 29, 29, 29, 29, 29, 29, 
- 	35, 0, 43, 0, 43, 0, 43, 54, 
- 	0, 5, 1, 0, 29, 1, 29, 29, 
- 	29, 29, 29, 29, 29, 29, 35, 0, 
- 	43, 0, 43, 0, 43, 139, 48, 9, 
- 	106, 11, 0, 134, 45, 45, 45, 3, 
- 	122, 33, 33, 33, 0, 122, 33, 33, 
- 	33, 0, 122, 33, 0, 33, 0, 102, 
- 	7, 7, 43, 54, 0, 0, 43, 114, 
- 	25, 0, 54, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 149, 126, 57, 110, 23, 0, 
- 	43, 43, 43, 43, 0, 27, 118, 27, 
- 	27, 51, 27, 0, 54, 0, 1, 0, 
- 	43, 0, 43, 0, 43, 0, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 144, 57, 54, 0, 54, 0, 
- 	69, 33, 69, 84, 84, 84, 84, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 13, 0, 0, 54, 0, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	54, 0, 0, 54, 13, 0, 130, 31, 
- 	60, 57, 31, 63, 57, 63, 63, 63, 
- 	63, 63, 63, 63, 63, 66, 31, 43, 
- 	0, 43, 0, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 144, 
- 	57, 54, 0, 54, 0, 72, 33, 84, 
- 	72, 84, 84, 84, 84, 84, 84, 84, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 15, 0, 54, 15, 0, 54, 
- 	0, 0, 54, 0, 0, 0, 54, 0, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 54, 0, 0, 54, 15, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 0, 54, 
- 	0, 0, 54, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 0, 54, 0, 0, 
- 	54, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	15, 0, 54, 0, 0, 0, 54, 0, 
- 	0, 54, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 0, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 144, 57, 54, 
- 	0, 54, 0, 81, 84, 81, 0, 0, 
- 	0, 54, 0, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 54, 0, 0, 
- 	54, 21, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 0, 54, 0, 0, 54, 0, 54, 
- 	0, 0, 54, 0, 0, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 144, 57, 54, 0, 54, 0, 78, 
- 	33, 84, 78, 84, 84, 84, 84, 84, 
- 	84, 84, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 19, 0, 54, 19, 
- 	0, 54, 0, 0, 54, 0, 0, 0, 
- 	54, 0, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 54, 0, 0, 54, 
- 	19, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	0, 54, 0, 0, 54, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 0, 54, 
- 	0, 0, 54, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 144, 57, 54, 0, 54, 
- 	0, 75, 33, 84, 75, 84, 84, 84, 
- 	84, 84, 84, 84, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 17, 0, 
- 	54, 17, 0, 54, 0, 0, 54, 0, 
- 	0, 0, 54, 0, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 54, 0, 
- 	0, 54, 17, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 0, 54, 0, 0, 54, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 0, 
- 	54, 0, 0, 54, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 17, 0, 54, 0, 0, 
- 	0, 54, 0, 0, 54, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 0, 54, 0, 0, 
- 	54, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 0, 0, 
- 	43, 54, 37, 37, 87, 37, 37, 43, 
- 	0, 39, 0, 43, 0, 0, 54, 0, 
- 	0, 39, 0, 0, 54, 0, 93, 90, 
- 	41, 96, 90, 96, 96, 96, 96, 96, 
- 	96, 96, 96, 99, 0, 43, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 0, 54, 0, 0, 
- 	54, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 0, 54, 
- 	0, 0, 54, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 0, 54, 0, 0, 
- 	54, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	13, 0, 54, 0, 0, 0, 54, 0, 
- 	0, 54, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 0, 54, 0, 0, 54, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 0
- };
- 
- static const unsigned char _lexer_eof_actions[] = {
- 	0, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43
- };
- 
- static const int lexer_start = 1;
- static const int lexer_first_final = 428;
- static const int lexer_error = 0;
- 
- static const int lexer_en_main = 1;
- 
- 
- #line 258 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/lv.c.rl"
- 
- static VALUE 
- unindent(VALUE con, int start_col)
- {
-   VALUE re;
-   // Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters
-   char pat[32]; 
-   snprintf(pat, 32, "^[\t ]{0,%d}", start_col); 
-   re = rb_reg_regcomp(rb_str_new2(pat));
-   rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2(""));
- 
-   return Qnil;
- 
- }
- 
- static void 
- store_kw_con(VALUE listener, const char * event_name, 
-              const char * keyword_at, size_t keyword_length, 
-              const char * at,         size_t length, 
-              int current_line)
- {
-   VALUE con = Qnil, kw = Qnil;
-   kw = ENCODED_STR_NEW(keyword_at, keyword_length);
-   con = ENCODED_STR_NEW(at, length);
-   rb_funcall(con, rb_intern("strip!"), 0);
-   rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); 
- }
- 
- static void
- store_multiline_kw_con(VALUE listener, const char * event_name,
-                       const char * keyword_at, size_t keyword_length,
-                       const char * at,         size_t length,
-                       int current_line, int start_col)
- {
-   VALUE split;
-   VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil;
- 
-   kw = ENCODED_STR_NEW(keyword_at, keyword_length);
-   con = ENCODED_STR_NEW(at, length);
- 
-   unindent(con, start_col);
-   
-   split = rb_str_split(con, "\n");
- 
-   name = rb_funcall(split, rb_intern("shift"), 0);
-   desc = rb_ary_join(split, rb_str_new2( "\n" ));
- 
-   if( name == Qnil ) 
-   {
-     name = rb_str_new2("");
-   }
-   if( rb_funcall(desc, rb_intern("size"), 0) == 0) 
-   {
-     desc = rb_str_new2("");
-   }
-   rb_funcall(name, rb_intern("strip!"), 0);
-   rb_funcall(desc, rb_intern("rstrip!"), 0);
-   rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); 
- }
- 
- static void 
- store_attr(VALUE listener, const char * attr_type,
-            const char * at, size_t length, 
-            int line)
- {
-   VALUE val = ENCODED_STR_NEW(at, length);
-   rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line));
- }
- static void 
- store_docstring_content(VALUE listener, 
-           int start_col, 
-           const char *type_at, size_t type_length,
-           const char *at, size_t length, 
-           int current_line)
- {
-   VALUE re2;
-   VALUE unescape_escaped_quotes;
-   VALUE con = ENCODED_STR_NEW(at, length);
-   VALUE con_type = ENCODED_STR_NEW(type_at, type_length);
- 
-   unindent(con, start_col);
- 
-   re2 = rb_reg_regcomp(rb_str_new2("\r\\Z"));
-   unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\""));
-   rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2(""));
-   rb_funcall(con_type, rb_intern("strip!"), 0);
-   rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\""));
-   rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line));
- }
- static void 
- raise_lexer_error(const char * at, int line)
- { 
-   rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at);
- }
- 
- static void lexer_init(lexer_state *lexer) {
-   lexer->content_start = 0;
-   lexer->content_end = 0;
-   lexer->content_len = 0;
-   lexer->docstring_content_type_start = 0;
-   lexer->docstring_content_type_end = 0;
-   lexer->mark = 0;
-   lexer->keyword_start = 0;
-   lexer->keyword_end = 0;
-   lexer->next_keyword_start = 0;
-   lexer->line_number = 1;
-   lexer->last_newline = 0;
-   lexer->final_newline = 0;
-   lexer->start_col = 0;
- }
- 
- static VALUE CLexer_alloc(VALUE klass)
- {
-   VALUE obj;
-   lexer_state *lxr = ALLOC(lexer_state);
-   lexer_init(lxr);
- 
-   obj = Data_Wrap_Struct(klass, NULL, -1, lxr);
- 
-   return obj;
- }
- 
- static VALUE CLexer_init(VALUE self, VALUE listener)
- {
-   lexer_state *lxr; 
-   rb_iv_set(self, "@listener", listener);
-   
-   lxr = NULL;
-   DATA_GET(self, lexer_state, lxr);
-   lexer_init(lxr);
-   
-   return self;
- }
- 
- static VALUE CLexer_scan(VALUE self, VALUE input)
- {
-   VALUE input_copy;
-   char *data;
-   size_t len;
-   VALUE listener = rb_iv_get(self, "@listener");
- 
-   lexer_state *lexer;
-   lexer = NULL;
-   DATA_GET(self, lexer_state, lexer);
- 
-   input_copy = rb_str_dup(input);
- 
-   rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%"));
-   data = RSTRING_PTR(input_copy);
-   len = RSTRING_LEN(input_copy);
-   
-   if (len == 0) { 
-     rb_raise(rb_eGherkinLexingError, "No content to lex.");
-   } else {
- 
-     const char *p, *pe, *eof;
-     int cs = 0;
-     
-     VALUE current_row = Qnil;
- 
-     p = data;
-     pe = data + len;
-     eof = pe;
-     
-     assert(*pe == '\0' && "pointer does not end on NULL");
-     
-     
- #line 1029 "ext/gherkin_lexer_lv/gherkin_lexer_lv.c"
- 	{
- 	cs = lexer_start;
- 	}
- 
- #line 425 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/lv.c.rl"
-     
- #line 1036 "ext/gherkin_lexer_lv/gherkin_lexer_lv.c"
- 	{
- 	int _klen;
- 	unsigned int _trans;
- 	const char *_acts;
- 	unsigned int _nacts;
- 	const char *_keys;
- 
- 	if ( p == pe )
- 		goto _test_eof;
- 	if ( cs == 0 )
- 		goto _out;
- _resume:
- 	_keys = _lexer_trans_keys + _lexer_key_offsets[cs];
- 	_trans = _lexer_index_offsets[cs];
- 
- 	_klen = _lexer_single_lengths[cs];
- 	if ( _klen > 0 ) {
- 		const char *_lower = _keys;
- 		const char *_mid;
- 		const char *_upper = _keys + _klen - 1;
- 		while (1) {
- 			if ( _upper < _lower )
- 				break;
- 
- 			_mid = _lower + ((_upper-_lower) >> 1);
- 			if ( (*p) < *_mid )
- 				_upper = _mid - 1;
- 			else if ( (*p) > *_mid )
- 				_lower = _mid + 1;
- 			else {
- 				_trans += (_mid - _keys);
- 				goto _match;
- 			}
- 		}
- 		_keys += _klen;
- 		_trans += _klen;
- 	}
- 
- 	_klen = _lexer_range_lengths[cs];
- 	if ( _klen > 0 ) {
- 		const char *_lower = _keys;
- 		const char *_mid;
- 		const char *_upper = _keys + (_klen<<1) - 2;
- 		while (1) {
- 			if ( _upper < _lower )
- 				break;
- 
- 			_mid = _lower + (((_upper-_lower) >> 1) & ~1);
- 			if ( (*p) < _mid[0] )
- 				_upper = _mid - 2;
- 			else if ( (*p) > _mid[1] )
- 				_lower = _mid + 2;
- 			else {
- 				_trans += ((_mid - _keys)>>1);
- 				goto _match;
- 			}
- 		}
- 		_trans += _klen;
- 	}
- 
- _match:
- 	cs = _lexer_trans_targs[_trans];
- 
- 	if ( _lexer_trans_actions[_trans] == 0 )
- 		goto _again;
- 
- 	_acts = _lexer_actions + _lexer_trans_actions[_trans];
- 	_nacts = (unsigned int) *_acts++;
- 	while ( _nacts-- > 0 )
- 	{
- 		switch ( *_acts++ )
- 		{
- 	case 0:
- #line 83 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/lv.c.rl"
- 	{
- 		MARK(content_start, p);
-     lexer->current_line = lexer->line_number;
-     lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2;
-   }
- 	break;
- 	case 1:
- #line 89 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/lv.c.rl"
- 	{
-     MARK(content_start, p);
-   }
- 	break;
- 	case 2:
- #line 93 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/lv.c.rl"
- 	{
-     lexer->current_line = lexer->line_number;
-     lexer->start_col = p - data - lexer->last_newline;
-   }
- 	break;
- 	case 3:
- #line 98 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/lv.c.rl"
- 	{
-     int len = LEN(content_start, PTR_TO(final_newline));
-     int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end));
- 
-     if (len < 0) len = 0;
-     if (type_len < 0) len = 0;
- 
-     store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line);
-   }
- 	break;
- 	case 4:
- #line 108 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/lv.c.rl"
- 	{ 
-     MARK(docstring_content_type_start, p);
-   }
- 	break;
- 	case 5:
- #line 112 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/lv.c.rl"
- 	{ 
-     MARK(docstring_content_type_end, p);
-   }
- 	break;
- 	case 6:
- #line 116 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/lv.c.rl"
- 	{
-     STORE_KW_END_CON(feature);
-   }
- 	break;
- 	case 7:
- #line 120 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/lv.c.rl"
- 	{
-     STORE_KW_END_CON(background);
-   }
- 	break;
- 	case 8:
- #line 124 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/lv.c.rl"
- 	{
-     STORE_KW_END_CON(scenario);
-   }
- 	break;
- 	case 9:
- #line 128 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/lv.c.rl"
- 	{
-     STORE_KW_END_CON(scenario_outline);
-   }
- 	break;
- 	case 10:
- #line 132 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/lv.c.rl"
- 	{
-     STORE_KW_END_CON(examples);
-   }
- 	break;
- 	case 11:
- #line 136 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/lv.c.rl"
- 	{
-     store_kw_con(listener, "step",
-       PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-       PTR_TO(content_start), LEN(content_start, p), 
-       lexer->current_line);
-   }
- 	break;
- 	case 12:
- #line 143 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/lv.c.rl"
- 	{
-     STORE_ATTR(comment);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 13:
- #line 148 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/lv.c.rl"
- 	{
-     STORE_ATTR(tag);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 14:
- #line 153 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/lv.c.rl"
- 	{
-     lexer->line_number += 1;
-     MARK(final_newline, p);
-   }
- 	break;
- 	case 15:
- #line 158 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/lv.c.rl"
- 	{
-     MARK(last_newline, p + 1);
-   }
- 	break;
- 	case 16:
- #line 162 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/lv.c.rl"
- 	{
-     if (lexer->mark == 0) {
-       MARK(mark, p);
-     }
-   }
- 	break;
- 	case 17:
- #line 168 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/lv.c.rl"
- 	{
-     MARK(keyword_end, p);
-     MARK(keyword_start, PTR_TO(mark));
-     MARK(content_start, p + 1);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 18:
- #line 175 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/lv.c.rl"
- 	{
-     MARK(content_end, p);
-   }
- 	break;
- 	case 19:
- #line 179 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/lv.c.rl"
- 	{
-     p = p - 1;
-     lexer->current_line = lexer->line_number;
-     current_row = rb_ary_new();
-   }
- 	break;
- 	case 20:
- #line 185 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/lv.c.rl"
- 	{
- 		MARK(content_start, p);
-   }
- 	break;
- 	case 21:
- #line 189 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/lv.c.rl"
- 	{
-     VALUE re_pipe, re_newline, re_backslash;
-     VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
-     rb_funcall(con, rb_intern("strip!"), 0);
-     re_pipe      = rb_reg_regcomp(rb_str_new2("\\\\\\|"));
-     re_newline   = rb_reg_regcomp(rb_str_new2("\\\\n"));
-     re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_pipe,      rb_str_new2("|"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_newline,   rb_str_new2("\n"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\"));
- 
-     rb_ary_push(current_row, con);
-   }
- 	break;
- 	case 22:
- #line 203 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/lv.c.rl"
- 	{
-     rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
-   }
- 	break;
- 	case 23:
- #line 207 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/lv.c.rl"
- 	{
-     int line;
-     if (cs < lexer_first_final) {
-       size_t count = 0;
-       VALUE newstr_val;
-       char *newstr;
-       int newstr_count = 0;        
-       size_t len;
-       const char *buff;
-       if (lexer->last_newline != 0) {
-         len = LEN(last_newline, eof);
-         buff = PTR_TO(last_newline);
-       } else {
-         len = strlen(data);
-         buff = data;
-       }
- 
-       // Allocate as a ruby string so that it gets cleaned up by GC
-       newstr_val = rb_str_new(buff, len);
-       newstr = RSTRING_PTR(newstr_val);
- 
- 
-       for (count = 0; count < len; count++) {
-         if(buff[count] == 10) {
-           newstr[newstr_count] = '\0'; // terminate new string at first newline found
-           break;
-         } else {
-           if (buff[count] == '%') {
-             newstr[newstr_count++] = buff[count];
-             newstr[newstr_count] = buff[count];
-           } else {
-             newstr[newstr_count] = buff[count];
-           }
-         }
-         newstr_count++;
-       }
- 
-       line = lexer->line_number;
-       lexer_init(lexer); // Re-initialize so we can scan again with the same lexer
-       raise_lexer_error(newstr, line);
-     } else {
-       rb_funcall(listener, rb_intern("eof"), 0);
-     }
-   }
- 	break;
- #line 1326 "ext/gherkin_lexer_lv/gherkin_lexer_lv.c"
- 		}
- 	}
- 
- _again:
- 	if ( cs == 0 )
- 		goto _out;
- 	if ( ++p != pe )
- 		goto _resume;
- 	_test_eof: {}
- 	if ( p == eof )
- 	{
- 	const char *__acts = _lexer_actions + _lexer_eof_actions[cs];
- 	unsigned int __nacts = (unsigned int) *__acts++;
- 	while ( __nacts-- > 0 ) {
- 		switch ( *__acts++ ) {
- 	case 23:
- #line 207 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/lv.c.rl"
- 	{
-     int line;
-     if (cs < lexer_first_final) {
-       size_t count = 0;
-       VALUE newstr_val;
-       char *newstr;
-       int newstr_count = 0;        
-       size_t len;
-       const char *buff;
-       if (lexer->last_newline != 0) {
-         len = LEN(last_newline, eof);
-         buff = PTR_TO(last_newline);
-       } else {
-         len = strlen(data);
-         buff = data;
-       }
- 
-       // Allocate as a ruby string so that it gets cleaned up by GC
-       newstr_val = rb_str_new(buff, len);
-       newstr = RSTRING_PTR(newstr_val);
- 
- 
-       for (count = 0; count < len; count++) {
-         if(buff[count] == 10) {
-           newstr[newstr_count] = '\0'; // terminate new string at first newline found
-           break;
-         } else {
-           if (buff[count] == '%') {
-             newstr[newstr_count++] = buff[count];
-             newstr[newstr_count] = buff[count];
-           } else {
-             newstr[newstr_count] = buff[count];
-           }
-         }
-         newstr_count++;
-       }
- 
-       line = lexer->line_number;
-       lexer_init(lexer); // Re-initialize so we can scan again with the same lexer
-       raise_lexer_error(newstr, line);
-     } else {
-       rb_funcall(listener, rb_intern("eof"), 0);
-     }
-   }
- 	break;
- #line 1389 "ext/gherkin_lexer_lv/gherkin_lexer_lv.c"
- 		}
- 	}
- 	}
- 
- 	_out: {}
- 	}
- 
- #line 426 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/lv.c.rl"
- 
-     assert(p <= pe && "data overflow after parsing execute");
-     assert(lexer->content_start <= len && "content starts after data end");
-     assert(lexer->mark < len && "mark is after data end");
-     
-     // Reset lexer by re-initializing the whole thing
-     lexer_init(lexer);
- 
-     if (cs == lexer_error) {
-       rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails.");
-     } else {
-       return Qtrue;
-     }
-   }
- }
- 
- void Init_gherkin_lexer_lv()
- {
-   mGherkin = rb_define_module("Gherkin");
-   mGherkinLexer = rb_define_module_under(mGherkin, "Lexer");
-   rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError"));
- 
-   mCLexer = rb_define_module_under(mGherkin, "CLexer");
-   cI18nLexer = rb_define_class_under(mCLexer, "Lv", rb_cObject);
-   rb_define_alloc_func(cI18nLexer, CLexer_alloc);
-   rb_define_method(cI18nLexer, "initialize", CLexer_init, 1);
-   rb_define_method(cI18nLexer, "scan", CLexer_scan, 1);
- }
- 
 -#line 1 "ragel/i18n/lv.c.rl"
 -#include <assert.h>
 -#include <ruby.h>
 -
 -#if defined(_WIN32)
 -#include <stddef.h>
 -#endif
 -
 -#ifdef HAVE_RUBY_RE_H
 -#include <ruby/re.h>
 -#else
 -#include <re.h>
 -#endif
 -
 -#ifdef HAVE_RUBY_ENCODING_H
 -#include <ruby/encoding.h>
 -#define ENCODED_STR_NEW(ptr, len) \
 -    rb_enc_str_new(ptr, len, rb_utf8_encoding())
 -#else
 -#define ENCODED_STR_NEW(ptr, len) \
 -    rb_str_new(ptr, len)
 -#endif
 -
 -#ifndef RSTRING_PTR
 -#define RSTRING_PTR(s) (RSTRING(s)->ptr)
 -#endif
 -
 -#ifndef RSTRING_LEN
 -#define RSTRING_LEN(s) (RSTRING(s)->len)
 -#endif
 -
 -#define DATA_GET(FROM, TYPE, NAME) \
 -  Data_Get_Struct(FROM, TYPE, NAME); \
 -  if (NAME == NULL) { \
 -    rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \
 -  }
 - 
 -typedef struct lexer_state {
 -  int content_len;
 -  int line_number;
 -  int current_line;
 -  int start_col;
 -  size_t mark;
 -  size_t keyword_start;
 -  size_t keyword_end;
 -  size_t next_keyword_start;
 -  size_t content_start;
 -  size_t content_end;
 -  size_t docstring_content_type_start;
 -  size_t docstring_content_type_end;
 -  size_t query_start;
 -  size_t last_newline;
 -  size_t final_newline;
 -} lexer_state;
 -
 -static VALUE mGherkin;
 -static VALUE mGherkinLexer;
 -static VALUE mCLexer;
 -static VALUE cI18nLexer;
 -static VALUE rb_eGherkinLexingError;
 -
 -#define LEN(AT, P) (P - data - lexer->AT)
 -#define MARK(M, P) (lexer->M = (P) - data)
 -#define PTR_TO(P) (data + lexer->P)
 -
 -#define STORE_KW_END_CON(EVENT) \
 -  store_multiline_kw_con(listener, # EVENT, \
 -    PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \
 -    PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \
 -    lexer->current_line, lexer->start_col); \
 -    if (lexer->content_end != 0) { \
 -      p = PTR_TO(content_end - 1); \
 -    } \
 -    lexer->content_end = 0
 -
 -#define STORE_ATTR(ATTR) \
 -    store_attr(listener, # ATTR, \
 -      PTR_TO(content_start), LEN(content_start, p), \
 -      lexer->line_number)
 -
 -
 -#line 254 "ragel/i18n/lv.c.rl"
 -
 -
 -/** Data **/
 -
 -#line 89 "ext/gherkin_lexer_lv/gherkin_lexer_lv.c"
 -static const char _lexer_actions[] = {
 -	0, 1, 0, 1, 1, 1, 2, 1, 
 -	3, 1, 4, 1, 5, 1, 6, 1, 
 -	7, 1, 8, 1, 9, 1, 10, 1, 
 -	11, 1, 12, 1, 13, 1, 16, 1, 
 -	17, 1, 18, 1, 19, 1, 20, 1, 
 -	21, 1, 22, 1, 23, 2, 1, 18, 
 -	2, 4, 5, 2, 13, 0, 2, 14, 
 -	15, 2, 17, 0, 2, 17, 2, 2, 
 -	17, 16, 2, 17, 19, 2, 18, 6, 
 -	2, 18, 7, 2, 18, 8, 2, 18, 
 -	9, 2, 18, 10, 2, 18, 16, 2, 
 -	20, 21, 2, 22, 0, 2, 22, 2, 
 -	2, 22, 16, 2, 22, 19, 3, 3, 
 -	14, 15, 3, 5, 14, 15, 3, 11, 
 -	14, 15, 3, 12, 14, 15, 3, 13, 
 -	14, 15, 3, 14, 15, 18, 3, 17, 
 -	0, 11, 3, 17, 14, 15, 4, 1, 
 -	14, 15, 18, 4, 4, 5, 14, 15, 
 -	4, 17, 0, 14, 15, 5, 17, 0, 
 -	11, 14, 15
 -};
 -
 -static const short _lexer_key_offsets[] = {
 -	0, 0, 19, 20, 21, 39, 40, 41, 
 -	43, 45, 50, 55, 60, 65, 69, 73, 
 -	75, 76, 77, 78, 79, 80, 81, 82, 
 -	83, 84, 85, 86, 87, 88, 89, 90, 
 -	91, 93, 95, 100, 107, 112, 113, 114, 
 -	116, 117, 118, 119, 120, 121, 122, 123, 
 -	134, 136, 138, 140, 142, 144, 146, 148, 
 -	150, 152, 154, 156, 158, 160, 162, 165, 
 -	167, 169, 171, 173, 175, 193, 194, 196, 
 -	197, 198, 199, 200, 201, 202, 203, 204, 
 -	205, 206, 207, 222, 224, 226, 228, 230, 
 -	232, 234, 236, 238, 240, 242, 244, 246, 
 -	248, 250, 252, 254, 256, 259, 261, 263, 
 -	265, 267, 269, 271, 273, 275, 277, 279, 
 -	281, 283, 285, 287, 289, 291, 293, 295, 
 -	297, 299, 301, 303, 305, 307, 309, 311, 
 -	313, 315, 317, 319, 321, 324, 326, 328, 
 -	330, 332, 334, 336, 338, 340, 342, 344, 
 -	346, 348, 350, 351, 352, 353, 354, 355, 
 -	356, 357, 358, 365, 368, 370, 372, 374, 
 -	376, 378, 380, 382, 384, 386, 388, 390, 
 -	392, 394, 396, 398, 400, 402, 404, 406, 
 -	407, 408, 409, 410, 411, 412, 414, 415, 
 -	416, 417, 418, 419, 420, 421, 422, 424, 
 -	425, 426, 427, 428, 429, 430, 431, 432, 
 -	433, 434, 435, 436, 437, 438, 439, 454, 
 -	456, 458, 460, 462, 464, 466, 468, 470, 
 -	472, 474, 476, 478, 480, 482, 484, 486, 
 -	488, 491, 493, 495, 497, 499, 501, 503, 
 -	505, 507, 509, 511, 513, 515, 517, 519, 
 -	521, 523, 525, 527, 529, 531, 533, 535, 
 -	537, 539, 541, 543, 545, 547, 549, 551, 
 -	553, 555, 556, 557, 572, 574, 576, 578, 
 -	580, 582, 584, 586, 588, 590, 592, 594, 
 -	596, 598, 600, 602, 604, 606, 609, 611, 
 -	613, 615, 617, 619, 621, 623, 625, 627, 
 -	629, 631, 633, 635, 637, 639, 641, 643, 
 -	645, 647, 649, 652, 654, 656, 658, 660, 
 -	662, 664, 666, 668, 671, 673, 675, 677, 
 -	679, 681, 683, 685, 687, 690, 692, 694, 
 -	696, 698, 700, 702, 704, 706, 708, 710, 
 -	712, 714, 716, 718, 720, 722, 724, 726, 
 -	728, 730, 731, 732, 733, 734, 735, 736, 
 -	737, 738, 739, 740, 744, 750, 753, 755, 
 -	761, 779, 781, 783, 785, 787, 789, 791, 
 -	793, 795, 797, 799, 801, 803, 805, 807, 
 -	809, 811, 813, 815, 817, 819, 821, 823, 
 -	826, 828, 830, 832, 834, 836, 838, 840, 
 -	842, 844, 846, 849, 851, 853, 855, 857, 
 -	859, 861, 863, 865, 868, 870, 872, 874, 
 -	876, 878, 880, 882, 884, 886, 888, 890, 
 -	892, 894, 896, 898, 900, 902, 904, 905, 
 -	906, 907, 908, 909, 910, 911, 912, 913, 
 -	914, 915, 916, 917, 918
 -};
 -
 -static const char _lexer_trans_keys[] = {
 -	-17, 10, 32, 34, 35, 37, 42, 64, 
 -	66, 70, 74, 75, 80, 83, 84, 85, 
 -	124, 9, 13, -69, -65, 10, 32, 34, 
 -	35, 37, 42, 64, 66, 70, 74, 75, 
 -	80, 83, 84, 85, 124, 9, 13, 34, 
 -	34, 10, 13, 10, 13, 10, 32, 34, 
 -	9, 13, 10, 32, 34, 9, 13, 10, 
 -	32, 34, 9, 13, 10, 32, 34, 9, 
 -	13, 10, 32, 9, 13, 10, 32, 9, 
 -	13, 10, 13, 10, 95, 70, 69, 65, 
 -	84, 85, 82, 69, 95, 69, 78, 68, 
 -	95, 37, 32, 10, 13, 10, 13, 13, 
 -	32, 64, 9, 10, 9, 10, 13, 32, 
 -	64, 11, 12, 10, 32, 64, 9, 13, 
 -	101, 116, -60, 117, -85, -60, -115, 97, 
 -	58, 10, 10, 10, 32, 35, 37, 64, 
 -	70, 75, 80, 83, 9, 13, 10, 95, 
 -	10, 70, 10, 69, 10, 65, 10, 84, 
 -	10, 85, 10, 82, 10, 69, 10, 95, 
 -	10, 69, 10, 78, 10, 68, 10, 95, 
 -	10, 37, -60, 10, 117, -85, 10, -60, 
 -	10, -115, 10, 10, 97, 10, 58, 10, 
 -	32, 34, 35, 37, 42, 64, 66, 70, 
 -	74, 75, 80, 83, 84, 85, 124, 9, 
 -	13, 97, 97, 111, 100, 110, 116, 101, 
 -	107, 115, 116, 115, 58, 10, 10, 10, 
 -	32, 35, 37, 42, 64, 66, 70, 74, 
 -	75, 83, 84, 85, 9, 13, 10, 95, 
 -	10, 70, 10, 69, 10, 65, 10, 84, 
 -	10, 85, 10, 82, 10, 69, 10, 95, 
 -	10, 69, 10, 78, 10, 68, 10, 95, 
 -	10, 37, 10, 32, 10, 101, 10, 116, 
 -	-60, 10, 117, -85, 10, -60, 10, -115, 
 -	10, 10, 97, 10, 58, 10, 110, 10, 
 -	107, 10, 99, 10, 105, 10, 111, 10, 
 -	110, 10, 97, 10, 108, 10, 105, 10, 
 -	116, -60, 10, -127, 10, 10, 116, 10, 
 -	101, 10, 97, 10, 97, 10, 100, 10, 
 -	99, 10, 101, 10, 110, -60, 10, -127, 
 -	10, 10, 114, 10, 105, 10, 106, 10, 
 -	115, 10, 32, 58, 10, 112, -60, 10, 
 -	-109, 10, 10, 99, 10, 32, 10, 112, 
 -	10, 97, 10, 114, 10, 97, 10, 117, 
 -	10, 103, 10, 110, 97, 105, 114, 97, 
 -	117, 103, 115, 58, 10, 10, 10, 32, 
 -	35, 70, 124, 9, 13, -60, 10, 117, 
 -	-85, 10, -60, 10, -115, 10, 10, 97, 
 -	10, 58, 10, 110, 10, 107, 10, 99, 
 -	10, 105, 10, 111, 10, 110, 10, 97, 
 -	10, 108, 10, 105, 10, 116, -60, 10, 
 -	-127, 10, 10, 116, 10, 101, 101, 109, 
 -	-60, -109, 114, 105, 99, 105, 101, 110, 
 -	-60, -127, 114, 105, 106, 115, 32, 58, 
 -	112, -60, -109, 99, 32, 112, 97, 114, 
 -	97, 117, 103, 97, 58, 10, 10, 10, 
 -	32, 35, 37, 42, 64, 66, 70, 74, 
 -	75, 83, 84, 85, 9, 13, 10, 95, 
 -	10, 70, 10, 69, 10, 65, 10, 84, 
 -	10, 85, 10, 82, 10, 69, 10, 95, 
 -	10, 69, 10, 78, 10, 68, 10, 95, 
 -	10, 37, 10, 32, 10, 101, 10, 116, 
 -	-60, 10, 117, -85, 10, -60, 10, -115, 
 -	10, 10, 97, 10, 58, 10, 110, 10, 
 -	107, 10, 99, 10, 105, 10, 111, 10, 
 -	110, 10, 97, 10, 108, 10, 105, 10, 
 -	116, -60, 10, -127, 10, 10, 116, 10, 
 -	101, 10, 97, 10, 97, 10, 100, 10, 
 -	99, 10, 101, 10, 110, -60, 10, -127, 
 -	10, 10, 114, 10, 105, 10, 106, 10, 
 -	115, 10, 110, 10, 10, 10, 32, 35, 
 -	37, 42, 64, 66, 70, 74, 75, 83, 
 -	84, 85, 9, 13, 10, 95, 10, 70, 
 -	10, 69, 10, 65, 10, 84, 10, 85, 
 -	10, 82, 10, 69, 10, 95, 10, 69, 
 -	10, 78, 10, 68, 10, 95, 10, 37, 
 -	10, 32, 10, 101, 10, 116, -60, 10, 
 -	117, -85, 10, -60, 10, -115, 10, 10, 
 -	97, 10, 58, 10, 110, 10, 107, 10, 
 -	99, 10, 105, 10, 111, 10, 110, 10, 
 -	97, 10, 108, 10, 105, 10, 116, -60, 
 -	10, -127, 10, 10, 116, 10, 101, 10, 
 -	97, 10, 97, 111, 10, 100, 10, 110, 
 -	10, 116, 10, 101, 10, 107, 10, 115, 
 -	10, 116, 10, 115, 10, 99, 105, 10, 
 -	101, 10, 110, -60, 10, -127, 10, 10, 
 -	114, 10, 105, 10, 106, 10, 115, 10, 
 -	32, 58, 10, 112, -60, 10, -109, 10, 
 -	10, 99, 10, 32, 10, 112, 10, 97, 
 -	10, 114, 10, 97, 10, 117, 10, 103, 
 -	10, 116, 10, 117, -60, 10, -127, 10, 
 -	10, 99, 10, 105, 10, 106, 10, 97, 
 -	10, 110, 116, 117, -60, -127, 99, 105, 
 -	106, 97, 97, 110, 32, 124, 9, 13, 
 -	10, 32, 92, 124, 9, 13, 10, 92, 
 -	124, 10, 92, 10, 32, 92, 124, 9, 
 -	13, 10, 32, 34, 35, 37, 42, 64, 
 -	66, 70, 74, 75, 80, 83, 84, 85, 
 -	124, 9, 13, 10, 110, 10, 107, 10, 
 -	99, 10, 105, 10, 111, 10, 110, 10, 
 -	97, 10, 108, 10, 105, 10, 116, -60, 
 -	10, -127, 10, 10, 116, 10, 101, 10, 
 -	111, 10, 110, 10, 116, 10, 101, 10, 
 -	107, 10, 115, 10, 116, 10, 115, 10, 
 -	97, 105, 10, 114, 10, 97, 10, 117, 
 -	10, 103, 10, 101, 10, 109, -60, 10, 
 -	-109, 10, 10, 114, 10, 105, 10, 99, 
 -	105, 10, 101, 10, 110, -60, 10, -127, 
 -	10, 10, 114, 10, 105, 10, 106, 10, 
 -	115, 10, 32, 58, 10, 112, -60, 10, 
 -	-109, 10, 10, 99, 10, 32, 10, 112, 
 -	10, 97, 10, 114, 10, 97, 10, 117, 
 -	10, 103, 10, 116, 10, 117, -60, 10, 
 -	-127, 10, 10, 99, 10, 105, 10, 106, 
 -	110, 107, 99, 105, 111, 110, 97, 108, 
 -	105, 116, -60, -127, 116, 101, 0
 -};
 -
 -static const char _lexer_single_lengths[] = {
 -	0, 17, 1, 1, 16, 1, 1, 2, 
 -	2, 3, 3, 3, 3, 2, 2, 2, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	2, 2, 3, 5, 3, 1, 1, 2, 
 -	1, 1, 1, 1, 1, 1, 1, 9, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 3, 2, 
 -	2, 2, 2, 2, 16, 1, 2, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 13, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 3, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 3, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 5, 3, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 1, 
 -	1, 1, 1, 1, 1, 2, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 2, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 13, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	3, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 1, 1, 13, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 3, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 3, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 3, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 3, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 2, 4, 3, 2, 4, 
 -	16, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 3, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 3, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 3, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 0
 -};
 -
 -static const char _lexer_range_lengths[] = {
 -	0, 1, 0, 0, 1, 0, 0, 0, 
 -	0, 1, 1, 1, 1, 1, 1, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 1, 1, 1, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 1, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 1, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 1, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 1, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 1, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 1, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 1, 1, 0, 0, 1, 
 -	1, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0
 -};
 -
 -static const short _lexer_index_offsets[] = {
 -	0, 0, 19, 21, 23, 41, 43, 45, 
 -	48, 51, 56, 61, 66, 71, 75, 79, 
 -	82, 84, 86, 88, 90, 92, 94, 96, 
 -	98, 100, 102, 104, 106, 108, 110, 112, 
 -	114, 117, 120, 125, 132, 137, 139, 141, 
 -	144, 146, 148, 150, 152, 154, 156, 158, 
 -	169, 172, 175, 178, 181, 184, 187, 190, 
 -	193, 196, 199, 202, 205, 208, 211, 215, 
 -	218, 221, 224, 227, 230, 248, 250, 253, 
 -	255, 257, 259, 261, 263, 265, 267, 269, 
 -	271, 273, 275, 290, 293, 296, 299, 302, 
 -	305, 308, 311, 314, 317, 320, 323, 326, 
 -	329, 332, 335, 338, 341, 345, 348, 351, 
 -	354, 357, 360, 363, 366, 369, 372, 375, 
 -	378, 381, 384, 387, 390, 393, 396, 399, 
 -	402, 405, 408, 411, 414, 417, 420, 423, 
 -	426, 429, 432, 435, 438, 442, 445, 448, 
 -	451, 454, 457, 460, 463, 466, 469, 472, 
 -	475, 478, 481, 483, 485, 487, 489, 491, 
 -	493, 495, 497, 504, 508, 511, 514, 517, 
 -	520, 523, 526, 529, 532, 535, 538, 541, 
 -	544, 547, 550, 553, 556, 559, 562, 565, 
 -	567, 569, 571, 573, 575, 577, 580, 582, 
 -	584, 586, 588, 590, 592, 594, 596, 599, 
 -	601, 603, 605, 607, 609, 611, 613, 615, 
 -	617, 619, 621, 623, 625, 627, 629, 644, 
 -	647, 650, 653, 656, 659, 662, 665, 668, 
 -	671, 674, 677, 680, 683, 686, 689, 692, 
 -	695, 699, 702, 705, 708, 711, 714, 717, 
 -	720, 723, 726, 729, 732, 735, 738, 741, 
 -	744, 747, 750, 753, 756, 759, 762, 765, 
 -	768, 771, 774, 777, 780, 783, 786, 789, 
 -	792, 795, 797, 799, 814, 817, 820, 823, 
 -	826, 829, 832, 835, 838, 841, 844, 847, 
 -	850, 853, 856, 859, 862, 865, 869, 872, 
 -	875, 878, 881, 884, 887, 890, 893, 896, 
 -	899, 902, 905, 908, 911, 914, 917, 920, 
 -	923, 926, 929, 933, 936, 939, 942, 945, 
 -	948, 951, 954, 957, 961, 964, 967, 970, 
 -	973, 976, 979, 982, 985, 989, 992, 995, 
 -	998, 1001, 1004, 1007, 1010, 1013, 1016, 1019, 
 -	1022, 1025, 1028, 1031, 1034, 1037, 1040, 1043, 
 -	1046, 1049, 1051, 1053, 1055, 1057, 1059, 1061, 
 -	1063, 1065, 1067, 1069, 1073, 1079, 1083, 1086, 
 -	1092, 1110, 1113, 1116, 1119, 1122, 1125, 1128, 
 -	1131, 1134, 1137, 1140, 1143, 1146, 1149, 1152, 
 -	1155, 1158, 1161, 1164, 1167, 1170, 1173, 1176, 
 -	1180, 1183, 1186, 1189, 1192, 1195, 1198, 1201, 
 -	1204, 1207, 1210, 1214, 1217, 1220, 1223, 1226, 
 -	1229, 1232, 1235, 1238, 1242, 1245, 1248, 1251, 
 -	1254, 1257, 1260, 1263, 1266, 1269, 1272, 1275, 
 -	1278, 1281, 1284, 1287, 1290, 1293, 1296, 1298, 
 -	1300, 1302, 1304, 1306, 1308, 1310, 1312, 1314, 
 -	1316, 1318, 1320, 1322, 1324
 -};
 -
 -static const short _lexer_trans_targs[] = {
 -	2, 4, 4, 5, 15, 17, 31, 34, 
 -	37, 39, 69, 70, 145, 181, 345, 346, 
 -	347, 4, 0, 3, 0, 4, 0, 4, 
 -	4, 5, 15, 17, 31, 34, 37, 39, 
 -	69, 70, 145, 181, 345, 346, 347, 4, 
 -	0, 6, 0, 7, 0, 9, 8, 8, 
 -	9, 8, 8, 10, 10, 11, 10, 10, 
 -	10, 10, 11, 10, 10, 10, 10, 12, 
 -	10, 10, 10, 10, 13, 10, 10, 4, 
 -	14, 14, 0, 4, 14, 14, 0, 4, 
 -	16, 15, 4, 0, 18, 0, 19, 0, 
 -	20, 0, 21, 0, 22, 0, 23, 0, 
 -	24, 0, 25, 0, 26, 0, 27, 0, 
 -	28, 0, 29, 0, 30, 0, 428, 0, 
 -	32, 0, 4, 16, 33, 4, 16, 33, 
 -	0, 0, 0, 0, 35, 36, 4, 36, 
 -	36, 34, 35, 35, 4, 36, 34, 36, 
 -	0, 38, 0, 31, 0, 40, 414, 0, 
 -	41, 0, 42, 0, 43, 0, 44, 0, 
 -	45, 0, 47, 46, 47, 46, 47, 47, 
 -	4, 48, 4, 62, 367, 375, 386, 47, 
 -	46, 47, 49, 46, 47, 50, 46, 47, 
 -	51, 46, 47, 52, 46, 47, 53, 46, 
 -	47, 54, 46, 47, 55, 46, 47, 56, 
 -	46, 47, 57, 46, 47, 58, 46, 47, 
 -	59, 46, 47, 60, 46, 47, 61, 46, 
 -	47, 4, 46, 63, 47, 353, 46, 64, 
 -	47, 46, 65, 47, 46, 66, 47, 46, 
 -	47, 67, 46, 47, 68, 46, 4, 4, 
 -	5, 15, 17, 31, 34, 37, 39, 69, 
 -	70, 145, 181, 345, 346, 347, 4, 0, 
 -	31, 0, 71, 72, 0, 31, 0, 73, 
 -	0, 74, 0, 75, 0, 76, 0, 77, 
 -	0, 78, 0, 79, 0, 80, 0, 82, 
 -	81, 82, 81, 82, 82, 4, 83, 97, 
 -	4, 98, 100, 120, 121, 123, 121, 144, 
 -	82, 81, 82, 84, 81, 82, 85, 81, 
 -	82, 86, 81, 82, 87, 81, 82, 88, 
 -	81, 82, 89, 81, 82, 90, 81, 82, 
 -	91, 81, 82, 92, 81, 82, 93, 81, 
 -	82, 94, 81, 82, 95, 81, 82, 96, 
 -	81, 82, 4, 81, 82, 68, 81, 82, 
 -	99, 81, 82, 97, 81, 101, 82, 106, 
 -	81, 102, 82, 81, 103, 82, 81, 104, 
 -	82, 81, 82, 105, 81, 82, 68, 81, 
 -	82, 107, 81, 82, 108, 81, 82, 109, 
 -	81, 82, 110, 81, 82, 111, 81, 82, 
 -	112, 81, 82, 113, 81, 82, 114, 81, 
 -	82, 115, 81, 82, 116, 81, 117, 82, 
 -	81, 118, 82, 81, 82, 119, 81, 82, 
 -	105, 81, 82, 97, 81, 82, 122, 81, 
 -	82, 97, 81, 82, 124, 81, 82, 125, 
 -	81, 82, 126, 81, 127, 82, 81, 128, 
 -	82, 81, 82, 129, 81, 82, 130, 81, 
 -	82, 131, 81, 82, 132, 81, 82, 133, 
 -	68, 81, 82, 134, 81, 135, 82, 81, 
 -	136, 82, 81, 82, 137, 81, 82, 138, 
 -	81, 82, 139, 81, 82, 140, 81, 82, 
 -	141, 81, 82, 142, 81, 82, 143, 81, 
 -	82, 104, 81, 82, 97, 81, 146, 175, 
 -	0, 147, 0, 148, 0, 149, 0, 150, 
 -	0, 151, 0, 152, 0, 154, 153, 154, 
 -	153, 154, 154, 4, 155, 4, 154, 153, 
 -	156, 154, 161, 153, 157, 154, 153, 158, 
 -	154, 153, 159, 154, 153, 154, 160, 153, 
 -	154, 68, 153, 154, 162, 153, 154, 163, 
 -	153, 154, 164, 153, 154, 165, 153, 154, 
 -	166, 153, 154, 167, 153, 154, 168, 153, 
 -	154, 169, 153, 154, 170, 153, 154, 171, 
 -	153, 172, 154, 153, 173, 154, 153, 154, 
 -	174, 153, 154, 160, 153, 176, 0, 177, 
 -	0, 178, 0, 179, 0, 180, 0, 151, 
 -	0, 182, 337, 0, 183, 0, 184, 0, 
 -	185, 0, 186, 0, 187, 0, 188, 0, 
 -	189, 0, 190, 0, 191, 257, 0, 192, 
 -	0, 193, 0, 194, 0, 195, 0, 196, 
 -	0, 197, 0, 198, 0, 199, 0, 200, 
 -	0, 201, 0, 202, 0, 203, 0, 204, 
 -	0, 206, 205, 206, 205, 206, 206, 4, 
 -	207, 221, 4, 222, 224, 244, 245, 247, 
 -	245, 256, 206, 205, 206, 208, 205, 206, 
 -	209, 205, 206, 210, 205, 206, 211, 205, 
 -	206, 212, 205, 206, 213, 205, 206, 214, 
 -	205, 206, 215, 205, 206, 216, 205, 206, 
 -	217, 205, 206, 218, 205, 206, 219, 205, 
 -	206, 220, 205, 206, 4, 205, 206, 68, 
 -	205, 206, 223, 205, 206, 221, 205, 225, 
 -	206, 230, 205, 226, 206, 205, 227, 206, 
 -	205, 228, 206, 205, 206, 229, 205, 206, 
 -	68, 205, 206, 231, 205, 206, 232, 205, 
 -	206, 233, 205, 206, 234, 205, 206, 235, 
 -	205, 206, 236, 205, 206, 237, 205, 206, 
 -	238, 205, 206, 239, 205, 206, 240, 205, 
 -	241, 206, 205, 242, 206, 205, 206, 243, 
 -	205, 206, 229, 205, 206, 221, 205, 206, 
 -	246, 205, 206, 221, 205, 206, 248, 205, 
 -	206, 249, 205, 206, 250, 205, 251, 206, 
 -	205, 252, 206, 205, 206, 253, 205, 206, 
 -	254, 205, 206, 255, 205, 206, 229, 205, 
 -	206, 221, 205, 259, 258, 259, 258, 259, 
 -	259, 4, 260, 274, 4, 275, 277, 297, 
 -	298, 307, 335, 336, 259, 258, 259, 261, 
 -	258, 259, 262, 258, 259, 263, 258, 259, 
 -	264, 258, 259, 265, 258, 259, 266, 258, 
 -	259, 267, 258, 259, 268, 258, 259, 269, 
 -	258, 259, 270, 258, 259, 271, 258, 259, 
 -	272, 258, 259, 273, 258, 259, 4, 258, 
 -	259, 68, 258, 259, 276, 258, 259, 274, 
 -	258, 278, 259, 283, 258, 279, 259, 258, 
 -	280, 259, 258, 281, 259, 258, 259, 282, 
 -	258, 259, 68, 258, 259, 284, 258, 259, 
 -	285, 258, 259, 286, 258, 259, 287, 258, 
 -	259, 288, 258, 259, 289, 258, 259, 290, 
 -	258, 259, 291, 258, 259, 292, 258, 259, 
 -	293, 258, 294, 259, 258, 295, 259, 258, 
 -	259, 296, 258, 259, 282, 258, 259, 274, 
 -	258, 259, 299, 300, 258, 259, 274, 258, 
 -	259, 301, 258, 259, 302, 258, 259, 303, 
 -	258, 259, 304, 258, 259, 305, 258, 259, 
 -	306, 258, 259, 282, 258, 259, 308, 328, 
 -	258, 259, 309, 258, 259, 310, 258, 311, 
 -	259, 258, 312, 259, 258, 259, 313, 258, 
 -	259, 314, 258, 259, 315, 258, 259, 316, 
 -	258, 259, 317, 68, 258, 259, 318, 258, 
 -	319, 259, 258, 320, 259, 258, 259, 321, 
 -	258, 259, 322, 258, 259, 323, 258, 259, 
 -	324, 258, 259, 325, 258, 259, 326, 258, 
 -	259, 327, 258, 259, 281, 258, 259, 329, 
 -	258, 259, 330, 258, 331, 259, 258, 332, 
 -	259, 258, 259, 333, 258, 259, 334, 258, 
 -	259, 281, 258, 259, 299, 258, 259, 274, 
 -	258, 338, 0, 339, 0, 340, 0, 341, 
 -	0, 342, 0, 343, 0, 344, 0, 79, 
 -	0, 71, 0, 31, 0, 347, 348, 347, 
 -	0, 352, 351, 350, 348, 351, 349, 0, 
 -	350, 348, 349, 0, 350, 349, 352, 351, 
 -	350, 348, 351, 349, 352, 352, 5, 15, 
 -	17, 31, 34, 37, 39, 69, 70, 145, 
 -	181, 345, 346, 347, 352, 0, 47, 354, 
 -	46, 47, 355, 46, 47, 356, 46, 47, 
 -	357, 46, 47, 358, 46, 47, 359, 46, 
 -	47, 360, 46, 47, 361, 46, 47, 362, 
 -	46, 47, 363, 46, 364, 47, 46, 365, 
 -	47, 46, 47, 366, 46, 47, 67, 46, 
 -	47, 368, 46, 47, 369, 46, 47, 370, 
 -	46, 47, 371, 46, 47, 372, 46, 47, 
 -	373, 46, 47, 374, 46, 47, 67, 46, 
 -	47, 376, 380, 46, 47, 377, 46, 47, 
 -	378, 46, 47, 379, 46, 47, 374, 46, 
 -	47, 381, 46, 47, 382, 46, 383, 47, 
 -	46, 384, 47, 46, 47, 385, 46, 47, 
 -	67, 46, 47, 387, 407, 46, 47, 388, 
 -	46, 47, 389, 46, 390, 47, 46, 391, 
 -	47, 46, 47, 392, 46, 47, 393, 46, 
 -	47, 394, 46, 47, 395, 46, 47, 396, 
 -	68, 46, 47, 397, 46, 398, 47, 46, 
 -	399, 47, 46, 47, 400, 46, 47, 401, 
 -	46, 47, 402, 46, 47, 403, 46, 47, 
 -	404, 46, 47, 405, 46, 47, 406, 46, 
 -	47, 66, 46, 47, 408, 46, 47, 409, 
 -	46, 410, 47, 46, 411, 47, 46, 47, 
 -	412, 46, 47, 413, 46, 47, 66, 46, 
 -	415, 0, 416, 0, 417, 0, 418, 0, 
 -	419, 0, 420, 0, 421, 0, 422, 0, 
 -	423, 0, 424, 0, 425, 0, 426, 0, 
 -	427, 0, 44, 0, 0, 0
 -};
 -
 -static const unsigned char _lexer_trans_actions[] = {
 -	0, 54, 0, 5, 1, 0, 29, 1, 
 -	29, 29, 29, 29, 29, 29, 29, 29, 
 -	35, 0, 43, 0, 43, 0, 43, 54, 
 -	0, 5, 1, 0, 29, 1, 29, 29, 
 -	29, 29, 29, 29, 29, 29, 35, 0, 
 -	43, 0, 43, 0, 43, 139, 48, 9, 
 -	106, 11, 0, 134, 45, 45, 45, 3, 
 -	122, 33, 33, 33, 0, 122, 33, 33, 
 -	33, 0, 122, 33, 0, 33, 0, 102, 
 -	7, 7, 43, 54, 0, 0, 43, 114, 
 -	25, 0, 54, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 149, 126, 57, 110, 23, 0, 
 -	43, 43, 43, 43, 0, 27, 118, 27, 
 -	27, 51, 27, 0, 54, 0, 1, 0, 
 -	43, 0, 43, 0, 43, 0, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 144, 57, 54, 0, 54, 0, 
 -	69, 33, 69, 84, 84, 84, 84, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 13, 0, 0, 54, 0, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	54, 0, 0, 54, 13, 0, 130, 31, 
 -	60, 57, 31, 63, 57, 63, 63, 63, 
 -	63, 63, 63, 63, 63, 66, 31, 43, 
 -	0, 43, 0, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 144, 
 -	57, 54, 0, 54, 0, 72, 33, 84, 
 -	72, 84, 84, 84, 84, 84, 84, 84, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 15, 0, 54, 15, 0, 54, 
 -	0, 0, 54, 0, 0, 0, 54, 0, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 54, 0, 0, 54, 15, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 0, 54, 
 -	0, 0, 54, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 0, 54, 0, 0, 
 -	54, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	15, 0, 54, 0, 0, 0, 54, 0, 
 -	0, 54, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 0, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 144, 57, 54, 
 -	0, 54, 0, 81, 84, 81, 0, 0, 
 -	0, 54, 0, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 54, 0, 0, 
 -	54, 21, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 0, 54, 0, 0, 54, 0, 54, 
 -	0, 0, 54, 0, 0, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 144, 57, 54, 0, 54, 0, 78, 
 -	33, 84, 78, 84, 84, 84, 84, 84, 
 -	84, 84, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 19, 0, 54, 19, 
 -	0, 54, 0, 0, 54, 0, 0, 0, 
 -	54, 0, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 54, 0, 0, 54, 
 -	19, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	0, 54, 0, 0, 54, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 0, 54, 
 -	0, 0, 54, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 144, 57, 54, 0, 54, 
 -	0, 75, 33, 84, 75, 84, 84, 84, 
 -	84, 84, 84, 84, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 17, 0, 
 -	54, 17, 0, 54, 0, 0, 54, 0, 
 -	0, 0, 54, 0, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 54, 0, 
 -	0, 54, 17, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 0, 54, 0, 0, 54, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 0, 
 -	54, 0, 0, 54, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 17, 0, 54, 0, 0, 
 -	0, 54, 0, 0, 54, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 0, 54, 0, 0, 
 -	54, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 0, 0, 
 -	43, 54, 37, 37, 87, 37, 37, 43, 
 -	0, 39, 0, 43, 0, 0, 54, 0, 
 -	0, 39, 0, 0, 54, 0, 93, 90, 
 -	41, 96, 90, 96, 96, 96, 96, 96, 
 -	96, 96, 96, 99, 0, 43, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 0, 54, 0, 0, 
 -	54, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 0, 54, 
 -	0, 0, 54, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 0, 54, 0, 0, 
 -	54, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	13, 0, 54, 0, 0, 0, 54, 0, 
 -	0, 54, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 0, 54, 0, 0, 54, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 0
 -};
 -
 -static const unsigned char _lexer_eof_actions[] = {
 -	0, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43
 -};
 -
 -static const int lexer_start = 1;
 -static const int lexer_first_final = 428;
 -static const int lexer_error = 0;
 -
 -static const int lexer_en_main = 1;
 -
 -
 -#line 258 "ragel/i18n/lv.c.rl"
 -
 -static VALUE 
 -unindent(VALUE con, int start_col)
 -{
 -  VALUE re;
 -  /* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */
 -  char pat[32]; 
 -  snprintf(pat, 32, "^[\t ]{0,%d}", start_col); 
 -  re = rb_reg_regcomp(rb_str_new2(pat));
 -  rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2(""));
 -
 -  return Qnil;
 -
 -}
 -
 -static void 
 -store_kw_con(VALUE listener, const char * event_name, 
 -             const char * keyword_at, size_t keyword_length, 
 -             const char * at,         size_t length, 
 -             int current_line)
 -{
 -  VALUE con = Qnil, kw = Qnil;
 -  kw = ENCODED_STR_NEW(keyword_at, keyword_length);
 -  con = ENCODED_STR_NEW(at, length);
 -  rb_funcall(con, rb_intern("strip!"), 0);
 -  rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); 
 -}
 -
 -static void
 -store_multiline_kw_con(VALUE listener, const char * event_name,
 -                      const char * keyword_at, size_t keyword_length,
 -                      const char * at,         size_t length,
 -                      int current_line, int start_col)
 -{
 -  VALUE split;
 -  VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil;
 -
 -  kw = ENCODED_STR_NEW(keyword_at, keyword_length);
 -  con = ENCODED_STR_NEW(at, length);
 -
 -  unindent(con, start_col);
 -  
 -  split = rb_str_split(con, "\n");
 -
 -  name = rb_funcall(split, rb_intern("shift"), 0);
 -  desc = rb_ary_join(split, rb_str_new2( "\n" ));
 -
 -  if( name == Qnil ) 
 -  {
 -    name = rb_str_new2("");
 -  }
 -  if( rb_funcall(desc, rb_intern("size"), 0) == 0) 
 -  {
 -    desc = rb_str_new2("");
 -  }
 -  rb_funcall(name, rb_intern("strip!"), 0);
 -  rb_funcall(desc, rb_intern("rstrip!"), 0);
 -  rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); 
 -}
 -
 -static void 
 -store_attr(VALUE listener, const char * attr_type,
 -           const char * at, size_t length, 
 -           int line)
 -{
 -  VALUE val = ENCODED_STR_NEW(at, length);
 -  rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line));
 -}
 -static void 
 -store_docstring_content(VALUE listener, 
 -          int start_col, 
 -          const char *type_at, size_t type_length,
 -          const char *at, size_t length, 
 -          int current_line)
 -{
 -  VALUE re2;
 -  VALUE unescape_escaped_quotes;
 -  VALUE con = ENCODED_STR_NEW(at, length);
 -  VALUE con_type = ENCODED_STR_NEW(type_at, type_length);
 -
 -  unindent(con, start_col);
 -
 -  re2 = rb_reg_regcomp(rb_str_new2("\r\\Z"));
 -  unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\""));
 -  rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2(""));
 -  rb_funcall(con_type, rb_intern("strip!"), 0);
 -  rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\""));
 -  rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line));
 -}
 -static void 
 -raise_lexer_error(const char * at, int line)
 -{ 
 -  rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at);
 -}
 -
 -static void lexer_init(lexer_state *lexer) {
 -  lexer->content_start = 0;
 -  lexer->content_end = 0;
 -  lexer->content_len = 0;
 -  lexer->docstring_content_type_start = 0;
 -  lexer->docstring_content_type_end = 0;
 -  lexer->mark = 0;
 -  lexer->keyword_start = 0;
 -  lexer->keyword_end = 0;
 -  lexer->next_keyword_start = 0;
 -  lexer->line_number = 1;
 -  lexer->last_newline = 0;
 -  lexer->final_newline = 0;
 -  lexer->start_col = 0;
 -}
 -
 -static VALUE CLexer_alloc(VALUE klass)
 -{
 -  VALUE obj;
 -  lexer_state *lxr = ALLOC(lexer_state);
 -  lexer_init(lxr);
 -
 -  obj = Data_Wrap_Struct(klass, NULL, -1, lxr);
 -
 -  return obj;
 -}
 -
 -static VALUE CLexer_init(VALUE self, VALUE listener)
 -{
 -  lexer_state *lxr; 
 -  rb_iv_set(self, "@listener", listener);
 -  
 -  lxr = NULL;
 -  DATA_GET(self, lexer_state, lxr);
 -  lexer_init(lxr);
 -  
 -  return self;
 -}
 -
 -static VALUE CLexer_scan(VALUE self, VALUE input)
 -{
 -  VALUE input_copy;
 -  char *data;
 -  size_t len;
 -  VALUE listener = rb_iv_get(self, "@listener");
 -
 -  lexer_state *lexer;
 -  lexer = NULL;
 -  DATA_GET(self, lexer_state, lexer);
 -
 -  input_copy = rb_str_dup(input);
 -
 -  rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%"));
 -  data = RSTRING_PTR(input_copy);
 -  len = RSTRING_LEN(input_copy);
 -  
 -  if (len == 0) { 
 -    rb_raise(rb_eGherkinLexingError, "No content to lex.");
 -  } else {
 -
 -    const char *p, *pe, *eof;
 -    int cs = 0;
 -    
 -    VALUE current_row = Qnil;
 -
 -    p = data;
 -    pe = data + len;
 -    eof = pe;
 -    
 -    assert(*pe == '\0' && "pointer does not end on NULL");
 -    
 -    
 -#line 1029 "ext/gherkin_lexer_lv/gherkin_lexer_lv.c"
 -	{
 -	cs = lexer_start;
 -	}
 -
 -#line 425 "ragel/i18n/lv.c.rl"
 -    
 -#line 1036 "ext/gherkin_lexer_lv/gherkin_lexer_lv.c"
 -	{
 -	int _klen;
 -	unsigned int _trans;
 -	const char *_acts;
 -	unsigned int _nacts;
 -	const char *_keys;
 -
 -	if ( p == pe )
 -		goto _test_eof;
 -	if ( cs == 0 )
 -		goto _out;
 -_resume:
 -	_keys = _lexer_trans_keys + _lexer_key_offsets[cs];
 -	_trans = _lexer_index_offsets[cs];
 -
 -	_klen = _lexer_single_lengths[cs];
 -	if ( _klen > 0 ) {
 -		const char *_lower = _keys;
 -		const char *_mid;
 -		const char *_upper = _keys + _klen - 1;
 -		while (1) {
 -			if ( _upper < _lower )
 -				break;
 -
 -			_mid = _lower + ((_upper-_lower) >> 1);
 -			if ( (*p) < *_mid )
 -				_upper = _mid - 1;
 -			else if ( (*p) > *_mid )
 -				_lower = _mid + 1;
 -			else {
 -				_trans += (unsigned int)(_mid - _keys);
 -				goto _match;
 -			}
 -		}
 -		_keys += _klen;
 -		_trans += _klen;
 -	}
 -
 -	_klen = _lexer_range_lengths[cs];
 -	if ( _klen > 0 ) {
 -		const char *_lower = _keys;
 -		const char *_mid;
 -		const char *_upper = _keys + (_klen<<1) - 2;
 -		while (1) {
 -			if ( _upper < _lower )
 -				break;
 -
 -			_mid = _lower + (((_upper-_lower) >> 1) & ~1);
 -			if ( (*p) < _mid[0] )
 -				_upper = _mid - 2;
 -			else if ( (*p) > _mid[1] )
 -				_lower = _mid + 2;
 -			else {
 -				_trans += (unsigned int)((_mid - _keys)>>1);
 -				goto _match;
 -			}
 -		}
 -		_trans += _klen;
 -	}
 -
 -_match:
 -	cs = _lexer_trans_targs[_trans];
 -
 -	if ( _lexer_trans_actions[_trans] == 0 )
 -		goto _again;
 -
 -	_acts = _lexer_actions + _lexer_trans_actions[_trans];
 -	_nacts = (unsigned int) *_acts++;
 -	while ( _nacts-- > 0 )
 -	{
 -		switch ( *_acts++ )
 -		{
 -	case 0:
 -#line 83 "ragel/i18n/lv.c.rl"
 -	{
 -		MARK(content_start, p);
 -    lexer->current_line = lexer->line_number;
 -    lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2;
 -  }
 -	break;
 -	case 1:
 -#line 89 "ragel/i18n/lv.c.rl"
 -	{
 -    MARK(content_start, p);
 -  }
 -	break;
 -	case 2:
 -#line 93 "ragel/i18n/lv.c.rl"
 -	{
 -    lexer->current_line = lexer->line_number;
 -    lexer->start_col = p - data - lexer->last_newline;
 -  }
 -	break;
 -	case 3:
 -#line 98 "ragel/i18n/lv.c.rl"
 -	{
 -    int len = LEN(content_start, PTR_TO(final_newline));
 -    int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end));
 -
 -    if (len < 0) len = 0;
 -    if (type_len < 0) len = 0;
 -
 -    store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line);
 -  }
 -	break;
 -	case 4:
 -#line 108 "ragel/i18n/lv.c.rl"
 -	{ 
 -    MARK(docstring_content_type_start, p);
 -  }
 -	break;
 -	case 5:
 -#line 112 "ragel/i18n/lv.c.rl"
 -	{ 
 -    MARK(docstring_content_type_end, p);
 -  }
 -	break;
 -	case 6:
 -#line 116 "ragel/i18n/lv.c.rl"
 -	{
 -    STORE_KW_END_CON(feature);
 -  }
 -	break;
 -	case 7:
 -#line 120 "ragel/i18n/lv.c.rl"
 -	{
 -    STORE_KW_END_CON(background);
 -  }
 -	break;
 -	case 8:
 -#line 124 "ragel/i18n/lv.c.rl"
 -	{
 -    STORE_KW_END_CON(scenario);
 -  }
 -	break;
 -	case 9:
 -#line 128 "ragel/i18n/lv.c.rl"
 -	{
 -    STORE_KW_END_CON(scenario_outline);
 -  }
 -	break;
 -	case 10:
 -#line 132 "ragel/i18n/lv.c.rl"
 -	{
 -    STORE_KW_END_CON(examples);
 -  }
 -	break;
 -	case 11:
 -#line 136 "ragel/i18n/lv.c.rl"
 -	{
 -    store_kw_con(listener, "step",
 -      PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
 -      PTR_TO(content_start), LEN(content_start, p), 
 -      lexer->current_line);
 -  }
 -	break;
 -	case 12:
 -#line 143 "ragel/i18n/lv.c.rl"
 -	{
 -    STORE_ATTR(comment);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 13:
 -#line 148 "ragel/i18n/lv.c.rl"
 -	{
 -    STORE_ATTR(tag);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 14:
 -#line 153 "ragel/i18n/lv.c.rl"
 -	{
 -    lexer->line_number += 1;
 -    MARK(final_newline, p);
 -  }
 -	break;
 -	case 15:
 -#line 158 "ragel/i18n/lv.c.rl"
 -	{
 -    MARK(last_newline, p + 1);
 -  }
 -	break;
 -	case 16:
 -#line 162 "ragel/i18n/lv.c.rl"
 -	{
 -    if (lexer->mark == 0) {
 -      MARK(mark, p);
 -    }
 -  }
 -	break;
 -	case 17:
 -#line 168 "ragel/i18n/lv.c.rl"
 -	{
 -    MARK(keyword_end, p);
 -    MARK(keyword_start, PTR_TO(mark));
 -    MARK(content_start, p + 1);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 18:
 -#line 175 "ragel/i18n/lv.c.rl"
 -	{
 -    MARK(content_end, p);
 -  }
 -	break;
 -	case 19:
 -#line 179 "ragel/i18n/lv.c.rl"
 -	{
 -    p = p - 1;
 -    lexer->current_line = lexer->line_number;
 -    current_row = rb_ary_new();
 -  }
 -	break;
 -	case 20:
 -#line 185 "ragel/i18n/lv.c.rl"
 -	{
 -		MARK(content_start, p);
 -  }
 -	break;
 -	case 21:
 -#line 189 "ragel/i18n/lv.c.rl"
 -	{
 -    VALUE re_pipe, re_newline, re_backslash;
 -    VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
 -    rb_funcall(con, rb_intern("strip!"), 0);
 -    re_pipe      = rb_reg_regcomp(rb_str_new2("\\\\\\|"));
 -    re_newline   = rb_reg_regcomp(rb_str_new2("\\\\n"));
 -    re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_pipe,      rb_str_new2("|"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_newline,   rb_str_new2("\n"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\"));
 -
 -    rb_ary_push(current_row, con);
 -  }
 -	break;
 -	case 22:
 -#line 203 "ragel/i18n/lv.c.rl"
 -	{
 -    rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
 -  }
 -	break;
 -	case 23:
 -#line 207 "ragel/i18n/lv.c.rl"
 -	{
 -    int line;
 -    if (cs < lexer_first_final) {
 -      size_t count = 0;
 -      VALUE newstr_val;
 -      char *newstr;
 -      int newstr_count = 0;        
 -      size_t len;
 -      const char *buff;
 -      if (lexer->last_newline != 0) {
 -        len = LEN(last_newline, eof);
 -        buff = PTR_TO(last_newline);
 -      } else {
 -        len = strlen(data);
 -        buff = data;
 -      }
 -
 -      /* Allocate as a ruby string so that it gets cleaned up by GC */
 -      newstr_val = rb_str_new(buff, len);
 -      newstr = RSTRING_PTR(newstr_val);
 -
 -
 -      for (count = 0; count < len; count++) {
 -        if(buff[count] == 10) {
 -          newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
 -          break;
 -        } else {
 -          if (buff[count] == '%') {
 -            newstr[newstr_count++] = buff[count];
 -            newstr[newstr_count] = buff[count];
 -          } else {
 -            newstr[newstr_count] = buff[count];
 -          }
 -        }
 -        newstr_count++;
 -      }
 -
 -      line = lexer->line_number;
 -      lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
 -      raise_lexer_error(newstr, line);
 -    } else {
 -      rb_funcall(listener, rb_intern("eof"), 0);
 -    }
 -  }
 -	break;
 -#line 1326 "ext/gherkin_lexer_lv/gherkin_lexer_lv.c"
 -		}
 -	}
 -
 -_again:
 -	if ( cs == 0 )
 -		goto _out;
 -	if ( ++p != pe )
 -		goto _resume;
 -	_test_eof: {}
 -	if ( p == eof )
 -	{
 -	const char *__acts = _lexer_actions + _lexer_eof_actions[cs];
 -	unsigned int __nacts = (unsigned int) *__acts++;
 -	while ( __nacts-- > 0 ) {
 -		switch ( *__acts++ ) {
 -	case 23:
 -#line 207 "ragel/i18n/lv.c.rl"
 -	{
 -    int line;
 -    if (cs < lexer_first_final) {
 -      size_t count = 0;
 -      VALUE newstr_val;
 -      char *newstr;
 -      int newstr_count = 0;        
 -      size_t len;
 -      const char *buff;
 -      if (lexer->last_newline != 0) {
 -        len = LEN(last_newline, eof);
 -        buff = PTR_TO(last_newline);
 -      } else {
 -        len = strlen(data);
 -        buff = data;
 -      }
 -
 -      /* Allocate as a ruby string so that it gets cleaned up by GC */
 -      newstr_val = rb_str_new(buff, len);
 -      newstr = RSTRING_PTR(newstr_val);
 -
 -
 -      for (count = 0; count < len; count++) {
 -        if(buff[count] == 10) {
 -          newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
 -          break;
 -        } else {
 -          if (buff[count] == '%') {
 -            newstr[newstr_count++] = buff[count];
 -            newstr[newstr_count] = buff[count];
 -          } else {
 -            newstr[newstr_count] = buff[count];
 -          }
 -        }
 -        newstr_count++;
 -      }
 -
 -      line = lexer->line_number;
 -      lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
 -      raise_lexer_error(newstr, line);
 -    } else {
 -      rb_funcall(listener, rb_intern("eof"), 0);
 -    }
 -  }
 -	break;
 -#line 1389 "ext/gherkin_lexer_lv/gherkin_lexer_lv.c"
 -		}
 -	}
 -	}
 -
 -	_out: {}
 -	}
 -
 -#line 426 "ragel/i18n/lv.c.rl"
 -
 -    assert(p <= pe && "data overflow after parsing execute");
 -    assert(lexer->content_start <= len && "content starts after data end");
 -    assert(lexer->mark < len && "mark is after data end");
 -    
 -    /* Reset lexer by re-initializing the whole thing */
 -    lexer_init(lexer);
 -
 -    if (cs == lexer_error) {
 -      rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails.");
 -    } else {
 -      return Qtrue;
 -    }
 -  }
 -}
 -
 -void Init_gherkin_lexer_lv()
 -{
 -  mGherkin = rb_define_module("Gherkin");
 -  mGherkinLexer = rb_define_module_under(mGherkin, "Lexer");
 -  rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError"));
 -
 -  mCLexer = rb_define_module_under(mGherkin, "CLexer");
 -  cI18nLexer = rb_define_class_under(mCLexer, "Lv", rb_cObject);
 -  rb_define_alloc_func(cI18nLexer, CLexer_alloc);
 -  rb_define_method(cI18nLexer, "initialize", CLexer_init, 1);
 -  rb_define_method(cI18nLexer, "scan", CLexer_scan, 1);
 -}
 -
diff --cc ext/gherkin_lexer_nl/extconf.rb
index e2a09bb,e2a09bb..0000000
deleted file mode 100644,100644
--- a/ext/gherkin_lexer_nl/extconf.rb
+++ /dev/null
@@@ -1,6 -1,6 +1,0 @@@
--require 'mkmf'
--CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags']
--$CFLAGS << ' -O0 -Wall' if CONFIG['CC'] =~ /gcc|clang/
--dir_config("gherkin_lexer_nl")
--have_library("c", "main")
--create_makefile("gherkin_lexer_nl")
diff --cc ext/gherkin_lexer_nl/gherkin_lexer_nl.c
index 3bb2a41,bde5df0..0000000
deleted file mode 100644,100644
--- a/ext/gherkin_lexer_nl/gherkin_lexer_nl.c
+++ /dev/null
@@@ -1,1368 -1,1368 +1,0 @@@
--
- #line 1 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/nl.c.rl"
- #include <assert.h>
- #include <ruby.h>
- 
- #if defined(_WIN32)
- #include <stddef.h>
- #endif
- 
- #ifdef HAVE_RUBY_RE_H
- #include <ruby/re.h>
- #else
- #include <re.h>
- #endif
- 
- #ifdef HAVE_RUBY_ENCODING_H
- #include <ruby/encoding.h>
- #define ENCODED_STR_NEW(ptr, len) \
-     rb_enc_str_new(ptr, len, rb_utf8_encoding())
- #else
- #define ENCODED_STR_NEW(ptr, len) \
-     rb_str_new(ptr, len)
- #endif
- 
- #ifndef RSTRING_PTR
- #define RSTRING_PTR(s) (RSTRING(s)->ptr)
- #endif
- 
- #ifndef RSTRING_LEN
- #define RSTRING_LEN(s) (RSTRING(s)->len)
- #endif
- 
- #define DATA_GET(FROM, TYPE, NAME) \
-   Data_Get_Struct(FROM, TYPE, NAME); \
-   if (NAME == NULL) { \
-     rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \
-   }
-  
- typedef struct lexer_state {
-   int content_len;
-   int line_number;
-   int current_line;
-   int start_col;
-   size_t mark;
-   size_t keyword_start;
-   size_t keyword_end;
-   size_t next_keyword_start;
-   size_t content_start;
-   size_t content_end;
-   size_t docstring_content_type_start;
-   size_t docstring_content_type_end;
-   size_t query_start;
-   size_t last_newline;
-   size_t final_newline;
- } lexer_state;
- 
- static VALUE mGherkin;
- static VALUE mGherkinLexer;
- static VALUE mCLexer;
- static VALUE cI18nLexer;
- static VALUE rb_eGherkinLexingError;
- 
- #define LEN(AT, P) (P - data - lexer->AT)
- #define MARK(M, P) (lexer->M = (P) - data)
- #define PTR_TO(P) (data + lexer->P)
- 
- #define STORE_KW_END_CON(EVENT) \
-   store_multiline_kw_con(listener, # EVENT, \
-     PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \
-     PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \
-     lexer->current_line, lexer->start_col); \
-     if (lexer->content_end != 0) { \
-       p = PTR_TO(content_end - 1); \
-     } \
-     lexer->content_end = 0
- 
- #define STORE_ATTR(ATTR) \
-     store_attr(listener, # ATTR, \
-       PTR_TO(content_start), LEN(content_start, p), \
-       lexer->line_number)
- 
- 
- #line 254 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/nl.c.rl"
- 
- 
- /** Data **/
- 
- #line 89 "ext/gherkin_lexer_nl/gherkin_lexer_nl.c"
- static const char _lexer_actions[] = {
- 	0, 1, 0, 1, 1, 1, 2, 1, 
- 	3, 1, 4, 1, 5, 1, 6, 1, 
- 	7, 1, 8, 1, 9, 1, 10, 1, 
- 	11, 1, 12, 1, 13, 1, 16, 1, 
- 	17, 1, 18, 1, 19, 1, 20, 1, 
- 	21, 1, 22, 1, 23, 2, 1, 18, 
- 	2, 4, 5, 2, 13, 0, 2, 14, 
- 	15, 2, 17, 0, 2, 17, 2, 2, 
- 	17, 16, 2, 17, 19, 2, 18, 6, 
- 	2, 18, 7, 2, 18, 8, 2, 18, 
- 	9, 2, 18, 10, 2, 18, 16, 2, 
- 	20, 21, 2, 22, 0, 2, 22, 2, 
- 	2, 22, 16, 2, 22, 19, 3, 3, 
- 	14, 15, 3, 5, 14, 15, 3, 11, 
- 	14, 15, 3, 12, 14, 15, 3, 13, 
- 	14, 15, 3, 14, 15, 18, 3, 17, 
- 	0, 11, 3, 17, 14, 15, 4, 1, 
- 	14, 15, 18, 4, 4, 5, 14, 15, 
- 	4, 17, 0, 14, 15, 5, 17, 0, 
- 	11, 14, 15
- };
- 
- static const short _lexer_key_offsets[] = {
- 	0, 0, 19, 20, 21, 39, 40, 41, 
- 	43, 45, 50, 55, 60, 65, 69, 73, 
- 	75, 76, 77, 78, 79, 80, 81, 82, 
- 	83, 84, 85, 86, 87, 88, 89, 90, 
- 	91, 93, 95, 100, 107, 112, 115, 116, 
- 	117, 118, 119, 120, 121, 122, 123, 124, 
- 	125, 126, 127, 128, 129, 130, 131, 132, 
- 	133, 148, 150, 152, 154, 156, 158, 160, 
- 	162, 164, 166, 168, 170, 172, 174, 176, 
- 	178, 196, 197, 198, 199, 200, 201, 202, 
- 	203, 204, 205, 206, 207, 208, 209, 210, 
- 	211, 212, 213, 214, 215, 226, 228, 230, 
- 	232, 234, 236, 238, 240, 242, 244, 246, 
- 	248, 250, 252, 254, 257, 259, 261, 263, 
- 	265, 267, 269, 271, 273, 275, 277, 279, 
- 	281, 283, 285, 287, 289, 291, 293, 295, 
- 	297, 299, 301, 303, 305, 307, 309, 311, 
- 	313, 315, 317, 319, 321, 323, 325, 327, 
- 	329, 331, 333, 335, 337, 339, 341, 343, 
- 	345, 347, 349, 351, 353, 355, 356, 357, 
- 	358, 359, 360, 361, 362, 363, 365, 366, 
- 	367, 368, 369, 370, 371, 372, 373, 374, 
- 	389, 391, 393, 395, 397, 399, 401, 403, 
- 	405, 407, 409, 411, 413, 415, 417, 419, 
- 	423, 425, 427, 429, 431, 433, 435, 437, 
- 	439, 441, 443, 445, 447, 449, 451, 453, 
- 	455, 457, 459, 461, 463, 465, 467, 469, 
- 	471, 473, 475, 477, 479, 481, 483, 485, 
- 	487, 489, 491, 493, 495, 497, 499, 501, 
- 	503, 505, 507, 509, 511, 513, 515, 517, 
- 	519, 521, 523, 526, 528, 530, 531, 532, 
- 	533, 534, 535, 536, 537, 538, 539, 540, 
- 	541, 542, 543, 544, 545, 552, 554, 556, 
- 	558, 560, 562, 564, 566, 568, 570, 572, 
- 	574, 576, 578, 580, 582, 586, 592, 595, 
- 	597, 603, 621, 623, 625, 627, 629, 631, 
- 	633, 635, 637, 639, 641, 643, 645, 647, 
- 	649, 651, 653, 655, 657, 659, 661, 663, 
- 	665, 667, 669, 671, 673, 675, 678, 680, 
- 	682, 684, 686, 688, 690, 692, 694, 695, 
- 	696, 697, 698, 699, 700, 701, 702, 703, 
- 	704, 705, 706, 721, 723, 725, 727, 729, 
- 	731, 733, 735, 737, 739, 741, 743, 745, 
- 	747, 749, 751, 754, 756, 758, 760, 762, 
- 	764, 766, 768, 770, 772, 774, 776, 778, 
- 	780, 782, 784, 786, 788, 790, 792, 794, 
- 	796, 798, 800, 802, 804, 806, 808, 810, 
- 	812, 814, 816, 818, 820, 822, 824, 826, 
- 	828, 830, 832, 834, 836, 839, 841, 843, 
- 	844
- };
- 
- static const char _lexer_trans_keys[] = {
- 	-17, 10, 32, 34, 35, 37, 42, 64, 
- 	65, 68, 69, 70, 71, 77, 83, 86, 
- 	124, 9, 13, -69, -65, 10, 32, 34, 
- 	35, 37, 42, 64, 65, 68, 69, 70, 
- 	71, 77, 83, 86, 124, 9, 13, 34, 
- 	34, 10, 13, 10, 13, 10, 32, 34, 
- 	9, 13, 10, 32, 34, 9, 13, 10, 
- 	32, 34, 9, 13, 10, 32, 34, 9, 
- 	13, 10, 32, 9, 13, 10, 32, 9, 
- 	13, 10, 13, 10, 95, 70, 69, 65, 
- 	84, 85, 82, 69, 95, 69, 78, 68, 
- 	95, 37, 32, 10, 13, 10, 13, 13, 
- 	32, 64, 9, 10, 9, 10, 13, 32, 
- 	64, 11, 12, 10, 32, 64, 9, 13, 
- 	98, 99, 108, 115, 116, 114, 97, 99, 
- 	116, 32, 83, 99, 101, 110, 97, 114, 
- 	105, 111, 58, 10, 10, 10, 32, 35, 
- 	37, 42, 64, 65, 68, 69, 70, 71, 
- 	77, 83, 9, 13, 10, 95, 10, 70, 
- 	10, 69, 10, 65, 10, 84, 10, 85, 
- 	10, 82, 10, 69, 10, 95, 10, 69, 
- 	10, 78, 10, 68, 10, 95, 10, 37, 
- 	10, 32, 10, 32, 34, 35, 37, 42, 
- 	64, 65, 68, 69, 70, 71, 77, 83, 
- 	86, 124, 9, 13, 97, 110, 117, 110, 
- 	99, 116, 105, 111, 110, 97, 108, 105, 
- 	116, 101, 105, 116, 58, 10, 10, 10, 
- 	32, 35, 37, 64, 65, 70, 83, 86, 
- 	9, 13, 10, 95, 10, 70, 10, 69, 
- 	10, 65, 10, 84, 10, 85, 10, 82, 
- 	10, 69, 10, 95, 10, 69, 10, 78, 
- 	10, 68, 10, 95, 10, 37, 10, 98, 
- 	99, 10, 115, 10, 116, 10, 114, 10, 
- 	97, 10, 99, 10, 116, 10, 32, 10, 
- 	83, 10, 99, 10, 101, 10, 110, 10, 
- 	97, 10, 114, 10, 105, 10, 111, 10, 
- 	58, 10, 104, 10, 116, 10, 101, 10, 
- 	114, 10, 103, 10, 114, 10, 111, 10, 
- 	110, 10, 100, 10, 117, 10, 110, 10, 
- 	99, 10, 116, 10, 105, 10, 111, 10, 
- 	110, 10, 97, 10, 108, 10, 105, 10, 
- 	116, 10, 101, 10, 105, 10, 116, 10, 
- 	111, 10, 111, 10, 114, 10, 98, 10, 
- 	101, 10, 101, 10, 108, 10, 100, 10, 
- 	101, 10, 110, 101, 103, 101, 118, 101, 
- 	97, 97, 114, 99, 116, 101, 110, 97, 
- 	114, 105, 111, 58, 10, 10, 10, 32, 
- 	35, 37, 42, 64, 65, 68, 69, 70, 
- 	71, 77, 83, 9, 13, 10, 95, 10, 
- 	70, 10, 69, 10, 65, 10, 84, 10, 
- 	85, 10, 82, 10, 69, 10, 95, 10, 
- 	69, 10, 78, 10, 68, 10, 95, 10, 
- 	37, 10, 32, 10, 98, 99, 108, 10, 
- 	115, 10, 116, 10, 114, 10, 97, 10, 
- 	99, 10, 116, 10, 32, 10, 83, 10, 
- 	99, 10, 101, 10, 110, 10, 97, 10, 
- 	114, 10, 105, 10, 111, 10, 58, 10, 
- 	104, 10, 116, 10, 101, 10, 114, 10, 
- 	103, 10, 114, 10, 111, 10, 110, 10, 
- 	100, 10, 115, 10, 97, 10, 110, 10, 
- 	117, 10, 110, 10, 99, 10, 116, 10, 
- 	105, 10, 111, 10, 110, 10, 97, 10, 
- 	108, 10, 105, 10, 116, 10, 101, 10, 
- 	105, 10, 116, 10, 101, 10, 103, 10, 
- 	101, 10, 118, 10, 101, 10, 97, 10, 
- 	97, 10, 114, 10, 99, 116, 10, 101, 
- 	10, 108, 101, 108, 111, 111, 114, 98, 
- 	101, 101, 108, 100, 101, 110, 58, 10, 
- 	10, 10, 32, 35, 70, 124, 9, 13, 
- 	10, 117, 10, 110, 10, 99, 10, 116, 
- 	10, 105, 10, 111, 10, 110, 10, 97, 
- 	10, 108, 10, 105, 10, 116, 10, 101, 
- 	10, 105, 10, 116, 10, 58, 32, 124, 
- 	9, 13, 10, 32, 92, 124, 9, 13, 
- 	10, 92, 124, 10, 92, 10, 32, 92, 
- 	124, 9, 13, 10, 32, 34, 35, 37, 
- 	42, 64, 65, 68, 69, 70, 71, 77, 
- 	83, 86, 124, 9, 13, 10, 108, 10, 
- 	115, 10, 97, 10, 110, 10, 117, 10, 
- 	110, 10, 99, 10, 116, 10, 105, 10, 
- 	111, 10, 110, 10, 97, 10, 108, 10, 
- 	105, 10, 116, 10, 101, 10, 105, 10, 
- 	116, 10, 58, 10, 101, 10, 103, 10, 
- 	101, 10, 118, 10, 101, 10, 97, 10, 
- 	97, 10, 114, 10, 99, 116, 10, 101, 
- 	10, 110, 10, 97, 10, 114, 10, 105, 
- 	10, 111, 10, 101, 10, 108, 104, 116, 
- 	101, 114, 103, 114, 111, 110, 100, 58, 
- 	10, 10, 10, 32, 35, 37, 42, 64, 
- 	65, 68, 69, 70, 71, 77, 83, 9, 
- 	13, 10, 95, 10, 70, 10, 69, 10, 
- 	65, 10, 84, 10, 85, 10, 82, 10, 
- 	69, 10, 95, 10, 69, 10, 78, 10, 
- 	68, 10, 95, 10, 37, 10, 32, 10, 
- 	98, 108, 10, 115, 10, 116, 10, 114, 
- 	10, 97, 10, 99, 10, 116, 10, 32, 
- 	10, 83, 10, 99, 10, 101, 10, 110, 
- 	10, 97, 10, 114, 10, 105, 10, 111, 
- 	10, 58, 10, 115, 10, 97, 10, 110, 
- 	10, 117, 10, 110, 10, 99, 10, 116, 
- 	10, 105, 10, 111, 10, 110, 10, 97, 
- 	10, 108, 10, 105, 10, 116, 10, 101, 
- 	10, 105, 10, 116, 10, 101, 10, 103, 
- 	10, 101, 10, 118, 10, 101, 10, 97, 
- 	10, 97, 10, 114, 10, 99, 116, 10, 
- 	101, 10, 108, 115, 0
- };
- 
- static const char _lexer_single_lengths[] = {
- 	0, 17, 1, 1, 16, 1, 1, 2, 
- 	2, 3, 3, 3, 3, 2, 2, 2, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	2, 2, 3, 5, 3, 3, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	13, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	16, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 9, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 3, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 2, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 13, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 4, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 3, 2, 2, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 5, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 4, 3, 2, 
- 	4, 16, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 3, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 13, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 3, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 3, 2, 2, 1, 
- 	0
- };
- 
- static const char _lexer_range_lengths[] = {
- 	0, 1, 0, 0, 1, 0, 0, 0, 
- 	0, 1, 1, 1, 1, 1, 1, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 1, 1, 1, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	1, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	1, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 1, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 1, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 1, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 1, 1, 0, 0, 
- 	1, 1, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 1, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0
- };
- 
- static const short _lexer_index_offsets[] = {
- 	0, 0, 19, 21, 23, 41, 43, 45, 
- 	48, 51, 56, 61, 66, 71, 75, 79, 
- 	82, 84, 86, 88, 90, 92, 94, 96, 
- 	98, 100, 102, 104, 106, 108, 110, 112, 
- 	114, 117, 120, 125, 132, 137, 141, 143, 
- 	145, 147, 149, 151, 153, 155, 157, 159, 
- 	161, 163, 165, 167, 169, 171, 173, 175, 
- 	177, 192, 195, 198, 201, 204, 207, 210, 
- 	213, 216, 219, 222, 225, 228, 231, 234, 
- 	237, 255, 257, 259, 261, 263, 265, 267, 
- 	269, 271, 273, 275, 277, 279, 281, 283, 
- 	285, 287, 289, 291, 293, 304, 307, 310, 
- 	313, 316, 319, 322, 325, 328, 331, 334, 
- 	337, 340, 343, 346, 350, 353, 356, 359, 
- 	362, 365, 368, 371, 374, 377, 380, 383, 
- 	386, 389, 392, 395, 398, 401, 404, 407, 
- 	410, 413, 416, 419, 422, 425, 428, 431, 
- 	434, 437, 440, 443, 446, 449, 452, 455, 
- 	458, 461, 464, 467, 470, 473, 476, 479, 
- 	482, 485, 488, 491, 494, 497, 499, 501, 
- 	503, 505, 507, 509, 511, 513, 516, 518, 
- 	520, 522, 524, 526, 528, 530, 532, 534, 
- 	549, 552, 555, 558, 561, 564, 567, 570, 
- 	573, 576, 579, 582, 585, 588, 591, 594, 
- 	599, 602, 605, 608, 611, 614, 617, 620, 
- 	623, 626, 629, 632, 635, 638, 641, 644, 
- 	647, 650, 653, 656, 659, 662, 665, 668, 
- 	671, 674, 677, 680, 683, 686, 689, 692, 
- 	695, 698, 701, 704, 707, 710, 713, 716, 
- 	719, 722, 725, 728, 731, 734, 737, 740, 
- 	743, 746, 749, 753, 756, 759, 761, 763, 
- 	765, 767, 769, 771, 773, 775, 777, 779, 
- 	781, 783, 785, 787, 789, 796, 799, 802, 
- 	805, 808, 811, 814, 817, 820, 823, 826, 
- 	829, 832, 835, 838, 841, 845, 851, 855, 
- 	858, 864, 882, 885, 888, 891, 894, 897, 
- 	900, 903, 906, 909, 912, 915, 918, 921, 
- 	924, 927, 930, 933, 936, 939, 942, 945, 
- 	948, 951, 954, 957, 960, 963, 967, 970, 
- 	973, 976, 979, 982, 985, 988, 991, 993, 
- 	995, 997, 999, 1001, 1003, 1005, 1007, 1009, 
- 	1011, 1013, 1015, 1030, 1033, 1036, 1039, 1042, 
- 	1045, 1048, 1051, 1054, 1057, 1060, 1063, 1066, 
- 	1069, 1072, 1075, 1079, 1082, 1085, 1088, 1091, 
- 	1094, 1097, 1100, 1103, 1106, 1109, 1112, 1115, 
- 	1118, 1121, 1124, 1127, 1130, 1133, 1136, 1139, 
- 	1142, 1145, 1148, 1151, 1154, 1157, 1160, 1163, 
- 	1166, 1169, 1172, 1175, 1178, 1181, 1184, 1187, 
- 	1190, 1193, 1196, 1199, 1202, 1206, 1209, 1212, 
- 	1214
- };
- 
- static const short _lexer_trans_targs[] = {
- 	2, 4, 4, 5, 15, 17, 31, 34, 
- 	37, 73, 74, 75, 157, 162, 165, 247, 
- 	276, 4, 0, 3, 0, 4, 0, 4, 
- 	4, 5, 15, 17, 31, 34, 37, 73, 
- 	74, 75, 157, 162, 165, 247, 276, 4, 
- 	0, 6, 0, 7, 0, 9, 8, 8, 
- 	9, 8, 8, 10, 10, 11, 10, 10, 
- 	10, 10, 11, 10, 10, 10, 10, 12, 
- 	10, 10, 10, 10, 13, 10, 10, 4, 
- 	14, 14, 0, 4, 14, 14, 0, 4, 
- 	16, 15, 4, 0, 18, 0, 19, 0, 
- 	20, 0, 21, 0, 22, 0, 23, 0, 
- 	24, 0, 25, 0, 26, 0, 27, 0, 
- 	28, 0, 29, 0, 30, 0, 392, 0, 
- 	32, 0, 4, 16, 33, 4, 16, 33, 
- 	0, 0, 0, 0, 35, 36, 4, 36, 
- 	36, 34, 35, 35, 4, 36, 34, 36, 
- 	0, 38, 318, 391, 0, 39, 0, 40, 
- 	0, 41, 0, 42, 0, 43, 0, 44, 
- 	0, 45, 0, 46, 0, 47, 0, 48, 
- 	0, 49, 0, 50, 0, 51, 0, 52, 
- 	0, 53, 0, 54, 0, 56, 55, 56, 
- 	55, 56, 56, 4, 57, 71, 4, 282, 
- 	284, 285, 286, 301, 306, 309, 56, 55, 
- 	56, 58, 55, 56, 59, 55, 56, 60, 
- 	55, 56, 61, 55, 56, 62, 55, 56, 
- 	63, 55, 56, 64, 55, 56, 65, 55, 
- 	56, 66, 55, 56, 67, 55, 56, 68, 
- 	55, 56, 69, 55, 56, 70, 55, 56, 
- 	4, 55, 56, 72, 55, 4, 4, 5, 
- 	15, 17, 31, 34, 37, 73, 74, 75, 
- 	157, 162, 165, 247, 276, 4, 0, 74, 
- 	0, 31, 0, 76, 0, 77, 0, 78, 
- 	0, 79, 0, 80, 0, 81, 0, 82, 
- 	0, 83, 0, 84, 0, 85, 0, 86, 
- 	0, 87, 0, 88, 0, 89, 0, 90, 
- 	0, 92, 91, 92, 91, 92, 92, 4, 
- 	93, 4, 107, 133, 116, 147, 92, 91, 
- 	92, 94, 91, 92, 95, 91, 92, 96, 
- 	91, 92, 97, 91, 92, 98, 91, 92, 
- 	99, 91, 92, 100, 91, 92, 101, 91, 
- 	92, 102, 91, 92, 103, 91, 92, 104, 
- 	91, 92, 105, 91, 92, 106, 91, 92, 
- 	4, 91, 92, 108, 124, 91, 92, 109, 
- 	91, 92, 110, 91, 92, 111, 91, 92, 
- 	112, 91, 92, 113, 91, 92, 114, 91, 
- 	92, 115, 91, 92, 116, 91, 92, 117, 
- 	91, 92, 118, 91, 92, 119, 91, 92, 
- 	120, 91, 92, 121, 91, 92, 122, 91, 
- 	92, 123, 91, 92, 72, 91, 92, 125, 
- 	91, 92, 126, 91, 92, 127, 91, 92, 
- 	128, 91, 92, 129, 91, 92, 130, 91, 
- 	92, 131, 91, 92, 132, 91, 92, 123, 
- 	91, 92, 134, 91, 92, 135, 91, 92, 
- 	136, 91, 92, 137, 91, 92, 138, 91, 
- 	92, 139, 91, 92, 140, 91, 92, 141, 
- 	91, 92, 142, 91, 92, 143, 91, 92, 
- 	144, 91, 92, 145, 91, 92, 146, 91, 
- 	92, 123, 91, 92, 148, 91, 92, 149, 
- 	91, 92, 150, 91, 92, 151, 91, 92, 
- 	152, 91, 92, 153, 91, 92, 154, 91, 
- 	92, 155, 91, 92, 156, 91, 92, 123, 
- 	91, 158, 0, 159, 0, 160, 0, 161, 
- 	0, 74, 0, 163, 0, 164, 0, 31, 
- 	0, 166, 245, 0, 167, 0, 168, 0, 
- 	169, 0, 170, 0, 171, 0, 172, 0, 
- 	173, 0, 175, 174, 175, 174, 175, 175, 
- 	4, 176, 190, 4, 191, 218, 219, 220, 
- 	234, 239, 242, 175, 174, 175, 177, 174, 
- 	175, 178, 174, 175, 179, 174, 175, 180, 
- 	174, 175, 181, 174, 175, 182, 174, 175, 
- 	183, 174, 175, 184, 174, 175, 185, 174, 
- 	175, 186, 174, 175, 187, 174, 175, 188, 
- 	174, 175, 189, 174, 175, 4, 174, 175, 
- 	72, 174, 175, 192, 208, 217, 174, 175, 
- 	193, 174, 175, 194, 174, 175, 195, 174, 
- 	175, 196, 174, 175, 197, 174, 175, 198, 
- 	174, 175, 199, 174, 175, 200, 174, 175, 
- 	201, 174, 175, 202, 174, 175, 203, 174, 
- 	175, 204, 174, 175, 205, 174, 175, 206, 
- 	174, 175, 207, 174, 175, 72, 174, 175, 
- 	209, 174, 175, 210, 174, 175, 211, 174, 
- 	175, 212, 174, 175, 213, 174, 175, 214, 
- 	174, 175, 215, 174, 175, 216, 174, 175, 
- 	207, 174, 175, 190, 174, 175, 219, 174, 
- 	175, 190, 174, 175, 221, 174, 175, 222, 
- 	174, 175, 223, 174, 175, 224, 174, 175, 
- 	225, 174, 175, 226, 174, 175, 227, 174, 
- 	175, 228, 174, 175, 229, 174, 175, 230, 
- 	174, 175, 231, 174, 175, 232, 174, 175, 
- 	233, 174, 175, 207, 174, 175, 235, 174, 
- 	175, 236, 174, 175, 237, 174, 175, 238, 
- 	174, 175, 219, 174, 175, 240, 174, 175, 
- 	241, 174, 175, 190, 174, 175, 201, 243, 
- 	174, 175, 244, 174, 175, 190, 174, 246, 
- 	0, 31, 0, 248, 0, 249, 0, 250, 
- 	0, 251, 0, 252, 0, 253, 0, 254, 
- 	0, 255, 0, 256, 0, 257, 0, 258, 
- 	0, 260, 259, 260, 259, 260, 260, 4, 
- 	261, 4, 260, 259, 260, 262, 259, 260, 
- 	263, 259, 260, 264, 259, 260, 265, 259, 
- 	260, 266, 259, 260, 267, 259, 260, 268, 
- 	259, 260, 269, 259, 260, 270, 259, 260, 
- 	271, 259, 260, 272, 259, 260, 273, 259, 
- 	260, 274, 259, 260, 275, 259, 260, 72, 
- 	259, 276, 277, 276, 0, 281, 280, 279, 
- 	277, 280, 278, 0, 279, 277, 278, 0, 
- 	279, 278, 281, 280, 279, 277, 280, 278, 
- 	281, 281, 5, 15, 17, 31, 34, 37, 
- 	73, 74, 75, 157, 162, 165, 247, 276, 
- 	281, 0, 56, 283, 55, 56, 71, 55, 
- 	56, 285, 55, 56, 71, 55, 56, 287, 
- 	55, 56, 288, 55, 56, 289, 55, 56, 
- 	290, 55, 56, 291, 55, 56, 292, 55, 
- 	56, 293, 55, 56, 294, 55, 56, 295, 
- 	55, 56, 296, 55, 56, 297, 55, 56, 
- 	298, 55, 56, 299, 55, 56, 300, 55, 
- 	56, 72, 55, 56, 302, 55, 56, 303, 
- 	55, 56, 304, 55, 56, 305, 55, 56, 
- 	285, 55, 56, 307, 55, 56, 308, 55, 
- 	56, 71, 55, 56, 310, 316, 55, 56, 
- 	311, 55, 56, 312, 55, 56, 313, 55, 
- 	56, 314, 55, 56, 315, 55, 56, 300, 
- 	55, 56, 317, 55, 56, 71, 55, 319, 
- 	0, 320, 0, 321, 0, 322, 0, 323, 
- 	0, 324, 0, 325, 0, 326, 0, 327, 
- 	0, 328, 0, 330, 329, 330, 329, 330, 
- 	330, 4, 331, 345, 4, 346, 364, 365, 
- 	366, 380, 385, 388, 330, 329, 330, 332, 
- 	329, 330, 333, 329, 330, 334, 329, 330, 
- 	335, 329, 330, 336, 329, 330, 337, 329, 
- 	330, 338, 329, 330, 339, 329, 330, 340, 
- 	329, 330, 341, 329, 330, 342, 329, 330, 
- 	343, 329, 330, 344, 329, 330, 4, 329, 
- 	330, 72, 329, 330, 347, 363, 329, 330, 
- 	348, 329, 330, 349, 329, 330, 350, 329, 
- 	330, 351, 329, 330, 352, 329, 330, 353, 
- 	329, 330, 354, 329, 330, 355, 329, 330, 
- 	356, 329, 330, 357, 329, 330, 358, 329, 
- 	330, 359, 329, 330, 360, 329, 330, 361, 
- 	329, 330, 362, 329, 330, 72, 329, 330, 
- 	345, 329, 330, 365, 329, 330, 345, 329, 
- 	330, 367, 329, 330, 368, 329, 330, 369, 
- 	329, 330, 370, 329, 330, 371, 329, 330, 
- 	372, 329, 330, 373, 329, 330, 374, 329, 
- 	330, 375, 329, 330, 376, 329, 330, 377, 
- 	329, 330, 378, 329, 330, 379, 329, 330, 
- 	362, 329, 330, 381, 329, 330, 382, 329, 
- 	330, 383, 329, 330, 384, 329, 330, 365, 
- 	329, 330, 386, 329, 330, 387, 329, 330, 
- 	345, 329, 330, 356, 389, 329, 330, 390, 
- 	329, 330, 345, 329, 31, 0, 0, 0
- };
- 
- static const unsigned char _lexer_trans_actions[] = {
- 	0, 54, 0, 5, 1, 0, 29, 1, 
- 	29, 29, 29, 29, 29, 29, 29, 29, 
- 	35, 0, 43, 0, 43, 0, 43, 54, 
- 	0, 5, 1, 0, 29, 1, 29, 29, 
- 	29, 29, 29, 29, 29, 29, 35, 0, 
- 	43, 0, 43, 0, 43, 139, 48, 9, 
- 	106, 11, 0, 134, 45, 45, 45, 3, 
- 	122, 33, 33, 33, 0, 122, 33, 33, 
- 	33, 0, 122, 33, 0, 33, 0, 102, 
- 	7, 7, 43, 54, 0, 0, 43, 114, 
- 	25, 0, 54, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 149, 126, 57, 110, 23, 0, 
- 	43, 43, 43, 43, 0, 27, 118, 27, 
- 	27, 51, 27, 0, 54, 0, 1, 0, 
- 	43, 0, 0, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 144, 57, 54, 
- 	0, 54, 0, 78, 33, 84, 78, 84, 
- 	84, 84, 84, 84, 84, 84, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	19, 0, 54, 19, 0, 130, 31, 60, 
- 	57, 31, 63, 57, 63, 63, 63, 63, 
- 	63, 63, 63, 63, 66, 31, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 144, 57, 54, 0, 54, 0, 69, 
- 	33, 69, 84, 84, 84, 84, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	13, 0, 54, 0, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 13, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 144, 57, 54, 0, 54, 0, 
- 	75, 33, 84, 75, 84, 84, 84, 84, 
- 	84, 84, 84, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 17, 0, 54, 
- 	17, 0, 54, 0, 0, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 17, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 144, 57, 54, 0, 54, 0, 81, 
- 	84, 81, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 21, 
- 	0, 0, 0, 0, 43, 54, 37, 37, 
- 	87, 37, 37, 43, 0, 39, 0, 43, 
- 	0, 0, 54, 0, 0, 39, 0, 0, 
- 	54, 0, 93, 90, 41, 96, 90, 96, 
- 	96, 96, 96, 96, 96, 96, 96, 99, 
- 	0, 43, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 19, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 144, 57, 54, 0, 54, 
- 	0, 72, 33, 84, 72, 84, 84, 84, 
- 	84, 84, 84, 84, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 15, 0, 
- 	54, 15, 0, 54, 0, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 15, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 0, 43, 0, 0
- };
- 
- static const unsigned char _lexer_eof_actions[] = {
- 	0, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43
- };
- 
- static const int lexer_start = 1;
- static const int lexer_first_final = 392;
- static const int lexer_error = 0;
- 
- static const int lexer_en_main = 1;
- 
- 
- #line 258 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/nl.c.rl"
- 
- static VALUE 
- unindent(VALUE con, int start_col)
- {
-   VALUE re;
-   // Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters
-   char pat[32]; 
-   snprintf(pat, 32, "^[\t ]{0,%d}", start_col); 
-   re = rb_reg_regcomp(rb_str_new2(pat));
-   rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2(""));
- 
-   return Qnil;
- 
- }
- 
- static void 
- store_kw_con(VALUE listener, const char * event_name, 
-              const char * keyword_at, size_t keyword_length, 
-              const char * at,         size_t length, 
-              int current_line)
- {
-   VALUE con = Qnil, kw = Qnil;
-   kw = ENCODED_STR_NEW(keyword_at, keyword_length);
-   con = ENCODED_STR_NEW(at, length);
-   rb_funcall(con, rb_intern("strip!"), 0);
-   rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); 
- }
- 
- static void
- store_multiline_kw_con(VALUE listener, const char * event_name,
-                       const char * keyword_at, size_t keyword_length,
-                       const char * at,         size_t length,
-                       int current_line, int start_col)
- {
-   VALUE split;
-   VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil;
- 
-   kw = ENCODED_STR_NEW(keyword_at, keyword_length);
-   con = ENCODED_STR_NEW(at, length);
- 
-   unindent(con, start_col);
-   
-   split = rb_str_split(con, "\n");
- 
-   name = rb_funcall(split, rb_intern("shift"), 0);
-   desc = rb_ary_join(split, rb_str_new2( "\n" ));
- 
-   if( name == Qnil ) 
-   {
-     name = rb_str_new2("");
-   }
-   if( rb_funcall(desc, rb_intern("size"), 0) == 0) 
-   {
-     desc = rb_str_new2("");
-   }
-   rb_funcall(name, rb_intern("strip!"), 0);
-   rb_funcall(desc, rb_intern("rstrip!"), 0);
-   rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); 
- }
- 
- static void 
- store_attr(VALUE listener, const char * attr_type,
-            const char * at, size_t length, 
-            int line)
- {
-   VALUE val = ENCODED_STR_NEW(at, length);
-   rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line));
- }
- static void 
- store_docstring_content(VALUE listener, 
-           int start_col, 
-           const char *type_at, size_t type_length,
-           const char *at, size_t length, 
-           int current_line)
- {
-   VALUE re2;
-   VALUE unescape_escaped_quotes;
-   VALUE con = ENCODED_STR_NEW(at, length);
-   VALUE con_type = ENCODED_STR_NEW(type_at, type_length);
- 
-   unindent(con, start_col);
- 
-   re2 = rb_reg_regcomp(rb_str_new2("\r\\Z"));
-   unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\""));
-   rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2(""));
-   rb_funcall(con_type, rb_intern("strip!"), 0);
-   rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\""));
-   rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line));
- }
- static void 
- raise_lexer_error(const char * at, int line)
- { 
-   rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at);
- }
- 
- static void lexer_init(lexer_state *lexer) {
-   lexer->content_start = 0;
-   lexer->content_end = 0;
-   lexer->content_len = 0;
-   lexer->docstring_content_type_start = 0;
-   lexer->docstring_content_type_end = 0;
-   lexer->mark = 0;
-   lexer->keyword_start = 0;
-   lexer->keyword_end = 0;
-   lexer->next_keyword_start = 0;
-   lexer->line_number = 1;
-   lexer->last_newline = 0;
-   lexer->final_newline = 0;
-   lexer->start_col = 0;
- }
- 
- static VALUE CLexer_alloc(VALUE klass)
- {
-   VALUE obj;
-   lexer_state *lxr = ALLOC(lexer_state);
-   lexer_init(lxr);
- 
-   obj = Data_Wrap_Struct(klass, NULL, -1, lxr);
- 
-   return obj;
- }
- 
- static VALUE CLexer_init(VALUE self, VALUE listener)
- {
-   lexer_state *lxr; 
-   rb_iv_set(self, "@listener", listener);
-   
-   lxr = NULL;
-   DATA_GET(self, lexer_state, lxr);
-   lexer_init(lxr);
-   
-   return self;
- }
- 
- static VALUE CLexer_scan(VALUE self, VALUE input)
- {
-   VALUE input_copy;
-   char *data;
-   size_t len;
-   VALUE listener = rb_iv_get(self, "@listener");
- 
-   lexer_state *lexer;
-   lexer = NULL;
-   DATA_GET(self, lexer_state, lexer);
- 
-   input_copy = rb_str_dup(input);
- 
-   rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%"));
-   data = RSTRING_PTR(input_copy);
-   len = RSTRING_LEN(input_copy);
-   
-   if (len == 0) { 
-     rb_raise(rb_eGherkinLexingError, "No content to lex.");
-   } else {
- 
-     const char *p, *pe, *eof;
-     int cs = 0;
-     
-     VALUE current_row = Qnil;
- 
-     p = data;
-     pe = data + len;
-     eof = pe;
-     
-     assert(*pe == '\0' && "pointer does not end on NULL");
-     
-     
- #line 972 "ext/gherkin_lexer_nl/gherkin_lexer_nl.c"
- 	{
- 	cs = lexer_start;
- 	}
- 
- #line 425 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/nl.c.rl"
-     
- #line 979 "ext/gherkin_lexer_nl/gherkin_lexer_nl.c"
- 	{
- 	int _klen;
- 	unsigned int _trans;
- 	const char *_acts;
- 	unsigned int _nacts;
- 	const char *_keys;
- 
- 	if ( p == pe )
- 		goto _test_eof;
- 	if ( cs == 0 )
- 		goto _out;
- _resume:
- 	_keys = _lexer_trans_keys + _lexer_key_offsets[cs];
- 	_trans = _lexer_index_offsets[cs];
- 
- 	_klen = _lexer_single_lengths[cs];
- 	if ( _klen > 0 ) {
- 		const char *_lower = _keys;
- 		const char *_mid;
- 		const char *_upper = _keys + _klen - 1;
- 		while (1) {
- 			if ( _upper < _lower )
- 				break;
- 
- 			_mid = _lower + ((_upper-_lower) >> 1);
- 			if ( (*p) < *_mid )
- 				_upper = _mid - 1;
- 			else if ( (*p) > *_mid )
- 				_lower = _mid + 1;
- 			else {
- 				_trans += (_mid - _keys);
- 				goto _match;
- 			}
- 		}
- 		_keys += _klen;
- 		_trans += _klen;
- 	}
- 
- 	_klen = _lexer_range_lengths[cs];
- 	if ( _klen > 0 ) {
- 		const char *_lower = _keys;
- 		const char *_mid;
- 		const char *_upper = _keys + (_klen<<1) - 2;
- 		while (1) {
- 			if ( _upper < _lower )
- 				break;
- 
- 			_mid = _lower + (((_upper-_lower) >> 1) & ~1);
- 			if ( (*p) < _mid[0] )
- 				_upper = _mid - 2;
- 			else if ( (*p) > _mid[1] )
- 				_lower = _mid + 2;
- 			else {
- 				_trans += ((_mid - _keys)>>1);
- 				goto _match;
- 			}
- 		}
- 		_trans += _klen;
- 	}
- 
- _match:
- 	cs = _lexer_trans_targs[_trans];
- 
- 	if ( _lexer_trans_actions[_trans] == 0 )
- 		goto _again;
- 
- 	_acts = _lexer_actions + _lexer_trans_actions[_trans];
- 	_nacts = (unsigned int) *_acts++;
- 	while ( _nacts-- > 0 )
- 	{
- 		switch ( *_acts++ )
- 		{
- 	case 0:
- #line 83 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/nl.c.rl"
- 	{
- 		MARK(content_start, p);
-     lexer->current_line = lexer->line_number;
-     lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2;
-   }
- 	break;
- 	case 1:
- #line 89 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/nl.c.rl"
- 	{
-     MARK(content_start, p);
-   }
- 	break;
- 	case 2:
- #line 93 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/nl.c.rl"
- 	{
-     lexer->current_line = lexer->line_number;
-     lexer->start_col = p - data - lexer->last_newline;
-   }
- 	break;
- 	case 3:
- #line 98 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/nl.c.rl"
- 	{
-     int len = LEN(content_start, PTR_TO(final_newline));
-     int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end));
- 
-     if (len < 0) len = 0;
-     if (type_len < 0) len = 0;
- 
-     store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line);
-   }
- 	break;
- 	case 4:
- #line 108 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/nl.c.rl"
- 	{ 
-     MARK(docstring_content_type_start, p);
-   }
- 	break;
- 	case 5:
- #line 112 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/nl.c.rl"
- 	{ 
-     MARK(docstring_content_type_end, p);
-   }
- 	break;
- 	case 6:
- #line 116 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/nl.c.rl"
- 	{
-     STORE_KW_END_CON(feature);
-   }
- 	break;
- 	case 7:
- #line 120 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/nl.c.rl"
- 	{
-     STORE_KW_END_CON(background);
-   }
- 	break;
- 	case 8:
- #line 124 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/nl.c.rl"
- 	{
-     STORE_KW_END_CON(scenario);
-   }
- 	break;
- 	case 9:
- #line 128 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/nl.c.rl"
- 	{
-     STORE_KW_END_CON(scenario_outline);
-   }
- 	break;
- 	case 10:
- #line 132 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/nl.c.rl"
- 	{
-     STORE_KW_END_CON(examples);
-   }
- 	break;
- 	case 11:
- #line 136 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/nl.c.rl"
- 	{
-     store_kw_con(listener, "step",
-       PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-       PTR_TO(content_start), LEN(content_start, p), 
-       lexer->current_line);
-   }
- 	break;
- 	case 12:
- #line 143 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/nl.c.rl"
- 	{
-     STORE_ATTR(comment);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 13:
- #line 148 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/nl.c.rl"
- 	{
-     STORE_ATTR(tag);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 14:
- #line 153 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/nl.c.rl"
- 	{
-     lexer->line_number += 1;
-     MARK(final_newline, p);
-   }
- 	break;
- 	case 15:
- #line 158 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/nl.c.rl"
- 	{
-     MARK(last_newline, p + 1);
-   }
- 	break;
- 	case 16:
- #line 162 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/nl.c.rl"
- 	{
-     if (lexer->mark == 0) {
-       MARK(mark, p);
-     }
-   }
- 	break;
- 	case 17:
- #line 168 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/nl.c.rl"
- 	{
-     MARK(keyword_end, p);
-     MARK(keyword_start, PTR_TO(mark));
-     MARK(content_start, p + 1);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 18:
- #line 175 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/nl.c.rl"
- 	{
-     MARK(content_end, p);
-   }
- 	break;
- 	case 19:
- #line 179 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/nl.c.rl"
- 	{
-     p = p - 1;
-     lexer->current_line = lexer->line_number;
-     current_row = rb_ary_new();
-   }
- 	break;
- 	case 20:
- #line 185 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/nl.c.rl"
- 	{
- 		MARK(content_start, p);
-   }
- 	break;
- 	case 21:
- #line 189 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/nl.c.rl"
- 	{
-     VALUE re_pipe, re_newline, re_backslash;
-     VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
-     rb_funcall(con, rb_intern("strip!"), 0);
-     re_pipe      = rb_reg_regcomp(rb_str_new2("\\\\\\|"));
-     re_newline   = rb_reg_regcomp(rb_str_new2("\\\\n"));
-     re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_pipe,      rb_str_new2("|"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_newline,   rb_str_new2("\n"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\"));
- 
-     rb_ary_push(current_row, con);
-   }
- 	break;
- 	case 22:
- #line 203 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/nl.c.rl"
- 	{
-     rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
-   }
- 	break;
- 	case 23:
- #line 207 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/nl.c.rl"
- 	{
-     int line;
-     if (cs < lexer_first_final) {
-       size_t count = 0;
-       VALUE newstr_val;
-       char *newstr;
-       int newstr_count = 0;        
-       size_t len;
-       const char *buff;
-       if (lexer->last_newline != 0) {
-         len = LEN(last_newline, eof);
-         buff = PTR_TO(last_newline);
-       } else {
-         len = strlen(data);
-         buff = data;
-       }
- 
-       // Allocate as a ruby string so that it gets cleaned up by GC
-       newstr_val = rb_str_new(buff, len);
-       newstr = RSTRING_PTR(newstr_val);
- 
- 
-       for (count = 0; count < len; count++) {
-         if(buff[count] == 10) {
-           newstr[newstr_count] = '\0'; // terminate new string at first newline found
-           break;
-         } else {
-           if (buff[count] == '%') {
-             newstr[newstr_count++] = buff[count];
-             newstr[newstr_count] = buff[count];
-           } else {
-             newstr[newstr_count] = buff[count];
-           }
-         }
-         newstr_count++;
-       }
- 
-       line = lexer->line_number;
-       lexer_init(lexer); // Re-initialize so we can scan again with the same lexer
-       raise_lexer_error(newstr, line);
-     } else {
-       rb_funcall(listener, rb_intern("eof"), 0);
-     }
-   }
- 	break;
- #line 1269 "ext/gherkin_lexer_nl/gherkin_lexer_nl.c"
- 		}
- 	}
- 
- _again:
- 	if ( cs == 0 )
- 		goto _out;
- 	if ( ++p != pe )
- 		goto _resume;
- 	_test_eof: {}
- 	if ( p == eof )
- 	{
- 	const char *__acts = _lexer_actions + _lexer_eof_actions[cs];
- 	unsigned int __nacts = (unsigned int) *__acts++;
- 	while ( __nacts-- > 0 ) {
- 		switch ( *__acts++ ) {
- 	case 23:
- #line 207 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/nl.c.rl"
- 	{
-     int line;
-     if (cs < lexer_first_final) {
-       size_t count = 0;
-       VALUE newstr_val;
-       char *newstr;
-       int newstr_count = 0;        
-       size_t len;
-       const char *buff;
-       if (lexer->last_newline != 0) {
-         len = LEN(last_newline, eof);
-         buff = PTR_TO(last_newline);
-       } else {
-         len = strlen(data);
-         buff = data;
-       }
- 
-       // Allocate as a ruby string so that it gets cleaned up by GC
-       newstr_val = rb_str_new(buff, len);
-       newstr = RSTRING_PTR(newstr_val);
- 
- 
-       for (count = 0; count < len; count++) {
-         if(buff[count] == 10) {
-           newstr[newstr_count] = '\0'; // terminate new string at first newline found
-           break;
-         } else {
-           if (buff[count] == '%') {
-             newstr[newstr_count++] = buff[count];
-             newstr[newstr_count] = buff[count];
-           } else {
-             newstr[newstr_count] = buff[count];
-           }
-         }
-         newstr_count++;
-       }
- 
-       line = lexer->line_number;
-       lexer_init(lexer); // Re-initialize so we can scan again with the same lexer
-       raise_lexer_error(newstr, line);
-     } else {
-       rb_funcall(listener, rb_intern("eof"), 0);
-     }
-   }
- 	break;
- #line 1332 "ext/gherkin_lexer_nl/gherkin_lexer_nl.c"
- 		}
- 	}
- 	}
- 
- 	_out: {}
- 	}
- 
- #line 426 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/nl.c.rl"
- 
-     assert(p <= pe && "data overflow after parsing execute");
-     assert(lexer->content_start <= len && "content starts after data end");
-     assert(lexer->mark < len && "mark is after data end");
-     
-     // Reset lexer by re-initializing the whole thing
-     lexer_init(lexer);
- 
-     if (cs == lexer_error) {
-       rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails.");
-     } else {
-       return Qtrue;
-     }
-   }
- }
- 
- void Init_gherkin_lexer_nl()
- {
-   mGherkin = rb_define_module("Gherkin");
-   mGherkinLexer = rb_define_module_under(mGherkin, "Lexer");
-   rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError"));
- 
-   mCLexer = rb_define_module_under(mGherkin, "CLexer");
-   cI18nLexer = rb_define_class_under(mCLexer, "Nl", rb_cObject);
-   rb_define_alloc_func(cI18nLexer, CLexer_alloc);
-   rb_define_method(cI18nLexer, "initialize", CLexer_init, 1);
-   rb_define_method(cI18nLexer, "scan", CLexer_scan, 1);
- }
- 
 -#line 1 "ragel/i18n/nl.c.rl"
 -#include <assert.h>
 -#include <ruby.h>
 -
 -#if defined(_WIN32)
 -#include <stddef.h>
 -#endif
 -
 -#ifdef HAVE_RUBY_RE_H
 -#include <ruby/re.h>
 -#else
 -#include <re.h>
 -#endif
 -
 -#ifdef HAVE_RUBY_ENCODING_H
 -#include <ruby/encoding.h>
 -#define ENCODED_STR_NEW(ptr, len) \
 -    rb_enc_str_new(ptr, len, rb_utf8_encoding())
 -#else
 -#define ENCODED_STR_NEW(ptr, len) \
 -    rb_str_new(ptr, len)
 -#endif
 -
 -#ifndef RSTRING_PTR
 -#define RSTRING_PTR(s) (RSTRING(s)->ptr)
 -#endif
 -
 -#ifndef RSTRING_LEN
 -#define RSTRING_LEN(s) (RSTRING(s)->len)
 -#endif
 -
 -#define DATA_GET(FROM, TYPE, NAME) \
 -  Data_Get_Struct(FROM, TYPE, NAME); \
 -  if (NAME == NULL) { \
 -    rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \
 -  }
 - 
 -typedef struct lexer_state {
 -  int content_len;
 -  int line_number;
 -  int current_line;
 -  int start_col;
 -  size_t mark;
 -  size_t keyword_start;
 -  size_t keyword_end;
 -  size_t next_keyword_start;
 -  size_t content_start;
 -  size_t content_end;
 -  size_t docstring_content_type_start;
 -  size_t docstring_content_type_end;
 -  size_t query_start;
 -  size_t last_newline;
 -  size_t final_newline;
 -} lexer_state;
 -
 -static VALUE mGherkin;
 -static VALUE mGherkinLexer;
 -static VALUE mCLexer;
 -static VALUE cI18nLexer;
 -static VALUE rb_eGherkinLexingError;
 -
 -#define LEN(AT, P) (P - data - lexer->AT)
 -#define MARK(M, P) (lexer->M = (P) - data)
 -#define PTR_TO(P) (data + lexer->P)
 -
 -#define STORE_KW_END_CON(EVENT) \
 -  store_multiline_kw_con(listener, # EVENT, \
 -    PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \
 -    PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \
 -    lexer->current_line, lexer->start_col); \
 -    if (lexer->content_end != 0) { \
 -      p = PTR_TO(content_end - 1); \
 -    } \
 -    lexer->content_end = 0
 -
 -#define STORE_ATTR(ATTR) \
 -    store_attr(listener, # ATTR, \
 -      PTR_TO(content_start), LEN(content_start, p), \
 -      lexer->line_number)
 -
 -
 -#line 254 "ragel/i18n/nl.c.rl"
 -
 -
 -/** Data **/
 -
 -#line 89 "ext/gherkin_lexer_nl/gherkin_lexer_nl.c"
 -static const char _lexer_actions[] = {
 -	0, 1, 0, 1, 1, 1, 2, 1, 
 -	3, 1, 4, 1, 5, 1, 6, 1, 
 -	7, 1, 8, 1, 9, 1, 10, 1, 
 -	11, 1, 12, 1, 13, 1, 16, 1, 
 -	17, 1, 18, 1, 19, 1, 20, 1, 
 -	21, 1, 22, 1, 23, 2, 1, 18, 
 -	2, 4, 5, 2, 13, 0, 2, 14, 
 -	15, 2, 17, 0, 2, 17, 2, 2, 
 -	17, 16, 2, 17, 19, 2, 18, 6, 
 -	2, 18, 7, 2, 18, 8, 2, 18, 
 -	9, 2, 18, 10, 2, 18, 16, 2, 
 -	20, 21, 2, 22, 0, 2, 22, 2, 
 -	2, 22, 16, 2, 22, 19, 3, 3, 
 -	14, 15, 3, 5, 14, 15, 3, 11, 
 -	14, 15, 3, 12, 14, 15, 3, 13, 
 -	14, 15, 3, 14, 15, 18, 3, 17, 
 -	0, 11, 3, 17, 14, 15, 4, 1, 
 -	14, 15, 18, 4, 4, 5, 14, 15, 
 -	4, 17, 0, 14, 15, 5, 17, 0, 
 -	11, 14, 15
 -};
 -
 -static const short _lexer_key_offsets[] = {
 -	0, 0, 19, 20, 21, 39, 40, 41, 
 -	43, 45, 50, 55, 60, 65, 69, 73, 
 -	75, 76, 77, 78, 79, 80, 81, 82, 
 -	83, 84, 85, 86, 87, 88, 89, 90, 
 -	91, 93, 95, 100, 107, 112, 115, 116, 
 -	117, 118, 119, 120, 121, 122, 123, 124, 
 -	125, 126, 127, 128, 129, 130, 131, 132, 
 -	133, 148, 150, 152, 154, 156, 158, 160, 
 -	162, 164, 166, 168, 170, 172, 174, 176, 
 -	178, 196, 197, 198, 199, 200, 201, 202, 
 -	203, 204, 205, 206, 207, 208, 209, 210, 
 -	211, 212, 213, 214, 215, 226, 228, 230, 
 -	232, 234, 236, 238, 240, 242, 244, 246, 
 -	248, 250, 252, 254, 257, 259, 261, 263, 
 -	265, 267, 269, 271, 273, 275, 277, 279, 
 -	281, 283, 285, 287, 289, 291, 293, 295, 
 -	297, 299, 301, 303, 305, 307, 309, 311, 
 -	313, 315, 317, 319, 321, 323, 325, 327, 
 -	329, 331, 333, 335, 337, 339, 341, 343, 
 -	345, 347, 349, 351, 353, 355, 356, 357, 
 -	358, 359, 360, 361, 362, 363, 365, 366, 
 -	367, 368, 369, 370, 371, 372, 373, 374, 
 -	389, 391, 393, 395, 397, 399, 401, 403, 
 -	405, 407, 409, 411, 413, 415, 417, 419, 
 -	423, 425, 427, 429, 431, 433, 435, 437, 
 -	439, 441, 443, 445, 447, 449, 451, 453, 
 -	455, 457, 459, 461, 463, 465, 467, 469, 
 -	471, 473, 475, 477, 479, 481, 483, 485, 
 -	487, 489, 491, 493, 495, 497, 499, 501, 
 -	503, 505, 507, 509, 511, 513, 515, 517, 
 -	519, 521, 523, 526, 528, 530, 531, 532, 
 -	533, 534, 535, 536, 537, 538, 539, 540, 
 -	541, 542, 543, 544, 545, 552, 554, 556, 
 -	558, 560, 562, 564, 566, 568, 570, 572, 
 -	574, 576, 578, 580, 582, 586, 592, 595, 
 -	597, 603, 621, 623, 625, 627, 629, 631, 
 -	633, 635, 637, 639, 641, 643, 645, 647, 
 -	649, 651, 653, 655, 657, 659, 661, 663, 
 -	665, 667, 669, 671, 673, 675, 678, 680, 
 -	682, 684, 686, 688, 690, 692, 694, 695, 
 -	696, 697, 698, 699, 700, 701, 702, 703, 
 -	704, 705, 706, 721, 723, 725, 727, 729, 
 -	731, 733, 735, 737, 739, 741, 743, 745, 
 -	747, 749, 751, 754, 756, 758, 760, 762, 
 -	764, 766, 768, 770, 772, 774, 776, 778, 
 -	780, 782, 784, 786, 788, 790, 792, 794, 
 -	796, 798, 800, 802, 804, 806, 808, 810, 
 -	812, 814, 816, 818, 820, 822, 824, 826, 
 -	828, 830, 832, 834, 836, 839, 841, 843, 
 -	844
 -};
 -
 -static const char _lexer_trans_keys[] = {
 -	-17, 10, 32, 34, 35, 37, 42, 64, 
 -	65, 68, 69, 70, 71, 77, 83, 86, 
 -	124, 9, 13, -69, -65, 10, 32, 34, 
 -	35, 37, 42, 64, 65, 68, 69, 70, 
 -	71, 77, 83, 86, 124, 9, 13, 34, 
 -	34, 10, 13, 10, 13, 10, 32, 34, 
 -	9, 13, 10, 32, 34, 9, 13, 10, 
 -	32, 34, 9, 13, 10, 32, 34, 9, 
 -	13, 10, 32, 9, 13, 10, 32, 9, 
 -	13, 10, 13, 10, 95, 70, 69, 65, 
 -	84, 85, 82, 69, 95, 69, 78, 68, 
 -	95, 37, 32, 10, 13, 10, 13, 13, 
 -	32, 64, 9, 10, 9, 10, 13, 32, 
 -	64, 11, 12, 10, 32, 64, 9, 13, 
 -	98, 99, 108, 115, 116, 114, 97, 99, 
 -	116, 32, 83, 99, 101, 110, 97, 114, 
 -	105, 111, 58, 10, 10, 10, 32, 35, 
 -	37, 42, 64, 65, 68, 69, 70, 71, 
 -	77, 83, 9, 13, 10, 95, 10, 70, 
 -	10, 69, 10, 65, 10, 84, 10, 85, 
 -	10, 82, 10, 69, 10, 95, 10, 69, 
 -	10, 78, 10, 68, 10, 95, 10, 37, 
 -	10, 32, 10, 32, 34, 35, 37, 42, 
 -	64, 65, 68, 69, 70, 71, 77, 83, 
 -	86, 124, 9, 13, 97, 110, 117, 110, 
 -	99, 116, 105, 111, 110, 97, 108, 105, 
 -	116, 101, 105, 116, 58, 10, 10, 10, 
 -	32, 35, 37, 64, 65, 70, 83, 86, 
 -	9, 13, 10, 95, 10, 70, 10, 69, 
 -	10, 65, 10, 84, 10, 85, 10, 82, 
 -	10, 69, 10, 95, 10, 69, 10, 78, 
 -	10, 68, 10, 95, 10, 37, 10, 98, 
 -	99, 10, 115, 10, 116, 10, 114, 10, 
 -	97, 10, 99, 10, 116, 10, 32, 10, 
 -	83, 10, 99, 10, 101, 10, 110, 10, 
 -	97, 10, 114, 10, 105, 10, 111, 10, 
 -	58, 10, 104, 10, 116, 10, 101, 10, 
 -	114, 10, 103, 10, 114, 10, 111, 10, 
 -	110, 10, 100, 10, 117, 10, 110, 10, 
 -	99, 10, 116, 10, 105, 10, 111, 10, 
 -	110, 10, 97, 10, 108, 10, 105, 10, 
 -	116, 10, 101, 10, 105, 10, 116, 10, 
 -	111, 10, 111, 10, 114, 10, 98, 10, 
 -	101, 10, 101, 10, 108, 10, 100, 10, 
 -	101, 10, 110, 101, 103, 101, 118, 101, 
 -	97, 97, 114, 99, 116, 101, 110, 97, 
 -	114, 105, 111, 58, 10, 10, 10, 32, 
 -	35, 37, 42, 64, 65, 68, 69, 70, 
 -	71, 77, 83, 9, 13, 10, 95, 10, 
 -	70, 10, 69, 10, 65, 10, 84, 10, 
 -	85, 10, 82, 10, 69, 10, 95, 10, 
 -	69, 10, 78, 10, 68, 10, 95, 10, 
 -	37, 10, 32, 10, 98, 99, 108, 10, 
 -	115, 10, 116, 10, 114, 10, 97, 10, 
 -	99, 10, 116, 10, 32, 10, 83, 10, 
 -	99, 10, 101, 10, 110, 10, 97, 10, 
 -	114, 10, 105, 10, 111, 10, 58, 10, 
 -	104, 10, 116, 10, 101, 10, 114, 10, 
 -	103, 10, 114, 10, 111, 10, 110, 10, 
 -	100, 10, 115, 10, 97, 10, 110, 10, 
 -	117, 10, 110, 10, 99, 10, 116, 10, 
 -	105, 10, 111, 10, 110, 10, 97, 10, 
 -	108, 10, 105, 10, 116, 10, 101, 10, 
 -	105, 10, 116, 10, 101, 10, 103, 10, 
 -	101, 10, 118, 10, 101, 10, 97, 10, 
 -	97, 10, 114, 10, 99, 116, 10, 101, 
 -	10, 108, 101, 108, 111, 111, 114, 98, 
 -	101, 101, 108, 100, 101, 110, 58, 10, 
 -	10, 10, 32, 35, 70, 124, 9, 13, 
 -	10, 117, 10, 110, 10, 99, 10, 116, 
 -	10, 105, 10, 111, 10, 110, 10, 97, 
 -	10, 108, 10, 105, 10, 116, 10, 101, 
 -	10, 105, 10, 116, 10, 58, 32, 124, 
 -	9, 13, 10, 32, 92, 124, 9, 13, 
 -	10, 92, 124, 10, 92, 10, 32, 92, 
 -	124, 9, 13, 10, 32, 34, 35, 37, 
 -	42, 64, 65, 68, 69, 70, 71, 77, 
 -	83, 86, 124, 9, 13, 10, 108, 10, 
 -	115, 10, 97, 10, 110, 10, 117, 10, 
 -	110, 10, 99, 10, 116, 10, 105, 10, 
 -	111, 10, 110, 10, 97, 10, 108, 10, 
 -	105, 10, 116, 10, 101, 10, 105, 10, 
 -	116, 10, 58, 10, 101, 10, 103, 10, 
 -	101, 10, 118, 10, 101, 10, 97, 10, 
 -	97, 10, 114, 10, 99, 116, 10, 101, 
 -	10, 110, 10, 97, 10, 114, 10, 105, 
 -	10, 111, 10, 101, 10, 108, 104, 116, 
 -	101, 114, 103, 114, 111, 110, 100, 58, 
 -	10, 10, 10, 32, 35, 37, 42, 64, 
 -	65, 68, 69, 70, 71, 77, 83, 9, 
 -	13, 10, 95, 10, 70, 10, 69, 10, 
 -	65, 10, 84, 10, 85, 10, 82, 10, 
 -	69, 10, 95, 10, 69, 10, 78, 10, 
 -	68, 10, 95, 10, 37, 10, 32, 10, 
 -	98, 108, 10, 115, 10, 116, 10, 114, 
 -	10, 97, 10, 99, 10, 116, 10, 32, 
 -	10, 83, 10, 99, 10, 101, 10, 110, 
 -	10, 97, 10, 114, 10, 105, 10, 111, 
 -	10, 58, 10, 115, 10, 97, 10, 110, 
 -	10, 117, 10, 110, 10, 99, 10, 116, 
 -	10, 105, 10, 111, 10, 110, 10, 97, 
 -	10, 108, 10, 105, 10, 116, 10, 101, 
 -	10, 105, 10, 116, 10, 101, 10, 103, 
 -	10, 101, 10, 118, 10, 101, 10, 97, 
 -	10, 97, 10, 114, 10, 99, 116, 10, 
 -	101, 10, 108, 115, 0
 -};
 -
 -static const char _lexer_single_lengths[] = {
 -	0, 17, 1, 1, 16, 1, 1, 2, 
 -	2, 3, 3, 3, 3, 2, 2, 2, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	2, 2, 3, 5, 3, 3, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	13, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	16, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 9, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 3, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 2, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 13, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 4, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 3, 2, 2, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 5, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 4, 3, 2, 
 -	4, 16, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 3, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 13, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 3, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 3, 2, 2, 1, 
 -	0
 -};
 -
 -static const char _lexer_range_lengths[] = {
 -	0, 1, 0, 0, 1, 0, 0, 0, 
 -	0, 1, 1, 1, 1, 1, 1, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 1, 1, 1, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	1, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	1, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 1, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 1, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 1, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 1, 1, 0, 0, 
 -	1, 1, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 1, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0
 -};
 -
 -static const short _lexer_index_offsets[] = {
 -	0, 0, 19, 21, 23, 41, 43, 45, 
 -	48, 51, 56, 61, 66, 71, 75, 79, 
 -	82, 84, 86, 88, 90, 92, 94, 96, 
 -	98, 100, 102, 104, 106, 108, 110, 112, 
 -	114, 117, 120, 125, 132, 137, 141, 143, 
 -	145, 147, 149, 151, 153, 155, 157, 159, 
 -	161, 163, 165, 167, 169, 171, 173, 175, 
 -	177, 192, 195, 198, 201, 204, 207, 210, 
 -	213, 216, 219, 222, 225, 228, 231, 234, 
 -	237, 255, 257, 259, 261, 263, 265, 267, 
 -	269, 271, 273, 275, 277, 279, 281, 283, 
 -	285, 287, 289, 291, 293, 304, 307, 310, 
 -	313, 316, 319, 322, 325, 328, 331, 334, 
 -	337, 340, 343, 346, 350, 353, 356, 359, 
 -	362, 365, 368, 371, 374, 377, 380, 383, 
 -	386, 389, 392, 395, 398, 401, 404, 407, 
 -	410, 413, 416, 419, 422, 425, 428, 431, 
 -	434, 437, 440, 443, 446, 449, 452, 455, 
 -	458, 461, 464, 467, 470, 473, 476, 479, 
 -	482, 485, 488, 491, 494, 497, 499, 501, 
 -	503, 505, 507, 509, 511, 513, 516, 518, 
 -	520, 522, 524, 526, 528, 530, 532, 534, 
 -	549, 552, 555, 558, 561, 564, 567, 570, 
 -	573, 576, 579, 582, 585, 588, 591, 594, 
 -	599, 602, 605, 608, 611, 614, 617, 620, 
 -	623, 626, 629, 632, 635, 638, 641, 644, 
 -	647, 650, 653, 656, 659, 662, 665, 668, 
 -	671, 674, 677, 680, 683, 686, 689, 692, 
 -	695, 698, 701, 704, 707, 710, 713, 716, 
 -	719, 722, 725, 728, 731, 734, 737, 740, 
 -	743, 746, 749, 753, 756, 759, 761, 763, 
 -	765, 767, 769, 771, 773, 775, 777, 779, 
 -	781, 783, 785, 787, 789, 796, 799, 802, 
 -	805, 808, 811, 814, 817, 820, 823, 826, 
 -	829, 832, 835, 838, 841, 845, 851, 855, 
 -	858, 864, 882, 885, 888, 891, 894, 897, 
 -	900, 903, 906, 909, 912, 915, 918, 921, 
 -	924, 927, 930, 933, 936, 939, 942, 945, 
 -	948, 951, 954, 957, 960, 963, 967, 970, 
 -	973, 976, 979, 982, 985, 988, 991, 993, 
 -	995, 997, 999, 1001, 1003, 1005, 1007, 1009, 
 -	1011, 1013, 1015, 1030, 1033, 1036, 1039, 1042, 
 -	1045, 1048, 1051, 1054, 1057, 1060, 1063, 1066, 
 -	1069, 1072, 1075, 1079, 1082, 1085, 1088, 1091, 
 -	1094, 1097, 1100, 1103, 1106, 1109, 1112, 1115, 
 -	1118, 1121, 1124, 1127, 1130, 1133, 1136, 1139, 
 -	1142, 1145, 1148, 1151, 1154, 1157, 1160, 1163, 
 -	1166, 1169, 1172, 1175, 1178, 1181, 1184, 1187, 
 -	1190, 1193, 1196, 1199, 1202, 1206, 1209, 1212, 
 -	1214
 -};
 -
 -static const short _lexer_trans_targs[] = {
 -	2, 4, 4, 5, 15, 17, 31, 34, 
 -	37, 73, 74, 75, 157, 162, 165, 247, 
 -	276, 4, 0, 3, 0, 4, 0, 4, 
 -	4, 5, 15, 17, 31, 34, 37, 73, 
 -	74, 75, 157, 162, 165, 247, 276, 4, 
 -	0, 6, 0, 7, 0, 9, 8, 8, 
 -	9, 8, 8, 10, 10, 11, 10, 10, 
 -	10, 10, 11, 10, 10, 10, 10, 12, 
 -	10, 10, 10, 10, 13, 10, 10, 4, 
 -	14, 14, 0, 4, 14, 14, 0, 4, 
 -	16, 15, 4, 0, 18, 0, 19, 0, 
 -	20, 0, 21, 0, 22, 0, 23, 0, 
 -	24, 0, 25, 0, 26, 0, 27, 0, 
 -	28, 0, 29, 0, 30, 0, 392, 0, 
 -	32, 0, 4, 16, 33, 4, 16, 33, 
 -	0, 0, 0, 0, 35, 36, 4, 36, 
 -	36, 34, 35, 35, 4, 36, 34, 36, 
 -	0, 38, 318, 391, 0, 39, 0, 40, 
 -	0, 41, 0, 42, 0, 43, 0, 44, 
 -	0, 45, 0, 46, 0, 47, 0, 48, 
 -	0, 49, 0, 50, 0, 51, 0, 52, 
 -	0, 53, 0, 54, 0, 56, 55, 56, 
 -	55, 56, 56, 4, 57, 71, 4, 282, 
 -	284, 285, 286, 301, 306, 309, 56, 55, 
 -	56, 58, 55, 56, 59, 55, 56, 60, 
 -	55, 56, 61, 55, 56, 62, 55, 56, 
 -	63, 55, 56, 64, 55, 56, 65, 55, 
 -	56, 66, 55, 56, 67, 55, 56, 68, 
 -	55, 56, 69, 55, 56, 70, 55, 56, 
 -	4, 55, 56, 72, 55, 4, 4, 5, 
 -	15, 17, 31, 34, 37, 73, 74, 75, 
 -	157, 162, 165, 247, 276, 4, 0, 74, 
 -	0, 31, 0, 76, 0, 77, 0, 78, 
 -	0, 79, 0, 80, 0, 81, 0, 82, 
 -	0, 83, 0, 84, 0, 85, 0, 86, 
 -	0, 87, 0, 88, 0, 89, 0, 90, 
 -	0, 92, 91, 92, 91, 92, 92, 4, 
 -	93, 4, 107, 133, 116, 147, 92, 91, 
 -	92, 94, 91, 92, 95, 91, 92, 96, 
 -	91, 92, 97, 91, 92, 98, 91, 92, 
 -	99, 91, 92, 100, 91, 92, 101, 91, 
 -	92, 102, 91, 92, 103, 91, 92, 104, 
 -	91, 92, 105, 91, 92, 106, 91, 92, 
 -	4, 91, 92, 108, 124, 91, 92, 109, 
 -	91, 92, 110, 91, 92, 111, 91, 92, 
 -	112, 91, 92, 113, 91, 92, 114, 91, 
 -	92, 115, 91, 92, 116, 91, 92, 117, 
 -	91, 92, 118, 91, 92, 119, 91, 92, 
 -	120, 91, 92, 121, 91, 92, 122, 91, 
 -	92, 123, 91, 92, 72, 91, 92, 125, 
 -	91, 92, 126, 91, 92, 127, 91, 92, 
 -	128, 91, 92, 129, 91, 92, 130, 91, 
 -	92, 131, 91, 92, 132, 91, 92, 123, 
 -	91, 92, 134, 91, 92, 135, 91, 92, 
 -	136, 91, 92, 137, 91, 92, 138, 91, 
 -	92, 139, 91, 92, 140, 91, 92, 141, 
 -	91, 92, 142, 91, 92, 143, 91, 92, 
 -	144, 91, 92, 145, 91, 92, 146, 91, 
 -	92, 123, 91, 92, 148, 91, 92, 149, 
 -	91, 92, 150, 91, 92, 151, 91, 92, 
 -	152, 91, 92, 153, 91, 92, 154, 91, 
 -	92, 155, 91, 92, 156, 91, 92, 123, 
 -	91, 158, 0, 159, 0, 160, 0, 161, 
 -	0, 74, 0, 163, 0, 164, 0, 31, 
 -	0, 166, 245, 0, 167, 0, 168, 0, 
 -	169, 0, 170, 0, 171, 0, 172, 0, 
 -	173, 0, 175, 174, 175, 174, 175, 175, 
 -	4, 176, 190, 4, 191, 218, 219, 220, 
 -	234, 239, 242, 175, 174, 175, 177, 174, 
 -	175, 178, 174, 175, 179, 174, 175, 180, 
 -	174, 175, 181, 174, 175, 182, 174, 175, 
 -	183, 174, 175, 184, 174, 175, 185, 174, 
 -	175, 186, 174, 175, 187, 174, 175, 188, 
 -	174, 175, 189, 174, 175, 4, 174, 175, 
 -	72, 174, 175, 192, 208, 217, 174, 175, 
 -	193, 174, 175, 194, 174, 175, 195, 174, 
 -	175, 196, 174, 175, 197, 174, 175, 198, 
 -	174, 175, 199, 174, 175, 200, 174, 175, 
 -	201, 174, 175, 202, 174, 175, 203, 174, 
 -	175, 204, 174, 175, 205, 174, 175, 206, 
 -	174, 175, 207, 174, 175, 72, 174, 175, 
 -	209, 174, 175, 210, 174, 175, 211, 174, 
 -	175, 212, 174, 175, 213, 174, 175, 214, 
 -	174, 175, 215, 174, 175, 216, 174, 175, 
 -	207, 174, 175, 190, 174, 175, 219, 174, 
 -	175, 190, 174, 175, 221, 174, 175, 222, 
 -	174, 175, 223, 174, 175, 224, 174, 175, 
 -	225, 174, 175, 226, 174, 175, 227, 174, 
 -	175, 228, 174, 175, 229, 174, 175, 230, 
 -	174, 175, 231, 174, 175, 232, 174, 175, 
 -	233, 174, 175, 207, 174, 175, 235, 174, 
 -	175, 236, 174, 175, 237, 174, 175, 238, 
 -	174, 175, 219, 174, 175, 240, 174, 175, 
 -	241, 174, 175, 190, 174, 175, 201, 243, 
 -	174, 175, 244, 174, 175, 190, 174, 246, 
 -	0, 31, 0, 248, 0, 249, 0, 250, 
 -	0, 251, 0, 252, 0, 253, 0, 254, 
 -	0, 255, 0, 256, 0, 257, 0, 258, 
 -	0, 260, 259, 260, 259, 260, 260, 4, 
 -	261, 4, 260, 259, 260, 262, 259, 260, 
 -	263, 259, 260, 264, 259, 260, 265, 259, 
 -	260, 266, 259, 260, 267, 259, 260, 268, 
 -	259, 260, 269, 259, 260, 270, 259, 260, 
 -	271, 259, 260, 272, 259, 260, 273, 259, 
 -	260, 274, 259, 260, 275, 259, 260, 72, 
 -	259, 276, 277, 276, 0, 281, 280, 279, 
 -	277, 280, 278, 0, 279, 277, 278, 0, 
 -	279, 278, 281, 280, 279, 277, 280, 278, 
 -	281, 281, 5, 15, 17, 31, 34, 37, 
 -	73, 74, 75, 157, 162, 165, 247, 276, 
 -	281, 0, 56, 283, 55, 56, 71, 55, 
 -	56, 285, 55, 56, 71, 55, 56, 287, 
 -	55, 56, 288, 55, 56, 289, 55, 56, 
 -	290, 55, 56, 291, 55, 56, 292, 55, 
 -	56, 293, 55, 56, 294, 55, 56, 295, 
 -	55, 56, 296, 55, 56, 297, 55, 56, 
 -	298, 55, 56, 299, 55, 56, 300, 55, 
 -	56, 72, 55, 56, 302, 55, 56, 303, 
 -	55, 56, 304, 55, 56, 305, 55, 56, 
 -	285, 55, 56, 307, 55, 56, 308, 55, 
 -	56, 71, 55, 56, 310, 316, 55, 56, 
 -	311, 55, 56, 312, 55, 56, 313, 55, 
 -	56, 314, 55, 56, 315, 55, 56, 300, 
 -	55, 56, 317, 55, 56, 71, 55, 319, 
 -	0, 320, 0, 321, 0, 322, 0, 323, 
 -	0, 324, 0, 325, 0, 326, 0, 327, 
 -	0, 328, 0, 330, 329, 330, 329, 330, 
 -	330, 4, 331, 345, 4, 346, 364, 365, 
 -	366, 380, 385, 388, 330, 329, 330, 332, 
 -	329, 330, 333, 329, 330, 334, 329, 330, 
 -	335, 329, 330, 336, 329, 330, 337, 329, 
 -	330, 338, 329, 330, 339, 329, 330, 340, 
 -	329, 330, 341, 329, 330, 342, 329, 330, 
 -	343, 329, 330, 344, 329, 330, 4, 329, 
 -	330, 72, 329, 330, 347, 363, 329, 330, 
 -	348, 329, 330, 349, 329, 330, 350, 329, 
 -	330, 351, 329, 330, 352, 329, 330, 353, 
 -	329, 330, 354, 329, 330, 355, 329, 330, 
 -	356, 329, 330, 357, 329, 330, 358, 329, 
 -	330, 359, 329, 330, 360, 329, 330, 361, 
 -	329, 330, 362, 329, 330, 72, 329, 330, 
 -	345, 329, 330, 365, 329, 330, 345, 329, 
 -	330, 367, 329, 330, 368, 329, 330, 369, 
 -	329, 330, 370, 329, 330, 371, 329, 330, 
 -	372, 329, 330, 373, 329, 330, 374, 329, 
 -	330, 375, 329, 330, 376, 329, 330, 377, 
 -	329, 330, 378, 329, 330, 379, 329, 330, 
 -	362, 329, 330, 381, 329, 330, 382, 329, 
 -	330, 383, 329, 330, 384, 329, 330, 365, 
 -	329, 330, 386, 329, 330, 387, 329, 330, 
 -	345, 329, 330, 356, 389, 329, 330, 390, 
 -	329, 330, 345, 329, 31, 0, 0, 0
 -};
 -
 -static const unsigned char _lexer_trans_actions[] = {
 -	0, 54, 0, 5, 1, 0, 29, 1, 
 -	29, 29, 29, 29, 29, 29, 29, 29, 
 -	35, 0, 43, 0, 43, 0, 43, 54, 
 -	0, 5, 1, 0, 29, 1, 29, 29, 
 -	29, 29, 29, 29, 29, 29, 35, 0, 
 -	43, 0, 43, 0, 43, 139, 48, 9, 
 -	106, 11, 0, 134, 45, 45, 45, 3, 
 -	122, 33, 33, 33, 0, 122, 33, 33, 
 -	33, 0, 122, 33, 0, 33, 0, 102, 
 -	7, 7, 43, 54, 0, 0, 43, 114, 
 -	25, 0, 54, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 149, 126, 57, 110, 23, 0, 
 -	43, 43, 43, 43, 0, 27, 118, 27, 
 -	27, 51, 27, 0, 54, 0, 1, 0, 
 -	43, 0, 0, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 144, 57, 54, 
 -	0, 54, 0, 78, 33, 84, 78, 84, 
 -	84, 84, 84, 84, 84, 84, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	19, 0, 54, 19, 0, 130, 31, 60, 
 -	57, 31, 63, 57, 63, 63, 63, 63, 
 -	63, 63, 63, 63, 66, 31, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 144, 57, 54, 0, 54, 0, 69, 
 -	33, 69, 84, 84, 84, 84, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	13, 0, 54, 0, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 13, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 144, 57, 54, 0, 54, 0, 
 -	75, 33, 84, 75, 84, 84, 84, 84, 
 -	84, 84, 84, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 17, 0, 54, 
 -	17, 0, 54, 0, 0, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 17, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 144, 57, 54, 0, 54, 0, 81, 
 -	84, 81, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 21, 
 -	0, 0, 0, 0, 43, 54, 37, 37, 
 -	87, 37, 37, 43, 0, 39, 0, 43, 
 -	0, 0, 54, 0, 0, 39, 0, 0, 
 -	54, 0, 93, 90, 41, 96, 90, 96, 
 -	96, 96, 96, 96, 96, 96, 96, 99, 
 -	0, 43, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 19, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 144, 57, 54, 0, 54, 
 -	0, 72, 33, 84, 72, 84, 84, 84, 
 -	84, 84, 84, 84, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 15, 0, 
 -	54, 15, 0, 54, 0, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 15, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 0, 43, 0, 0
 -};
 -
 -static const unsigned char _lexer_eof_actions[] = {
 -	0, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43
 -};
 -
 -static const int lexer_start = 1;
 -static const int lexer_first_final = 392;
 -static const int lexer_error = 0;
 -
 -static const int lexer_en_main = 1;
 -
 -
 -#line 258 "ragel/i18n/nl.c.rl"
 -
 -static VALUE 
 -unindent(VALUE con, int start_col)
 -{
 -  VALUE re;
 -  /* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */
 -  char pat[32]; 
 -  snprintf(pat, 32, "^[\t ]{0,%d}", start_col); 
 -  re = rb_reg_regcomp(rb_str_new2(pat));
 -  rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2(""));
 -
 -  return Qnil;
 -
 -}
 -
 -static void 
 -store_kw_con(VALUE listener, const char * event_name, 
 -             const char * keyword_at, size_t keyword_length, 
 -             const char * at,         size_t length, 
 -             int current_line)
 -{
 -  VALUE con = Qnil, kw = Qnil;
 -  kw = ENCODED_STR_NEW(keyword_at, keyword_length);
 -  con = ENCODED_STR_NEW(at, length);
 -  rb_funcall(con, rb_intern("strip!"), 0);
 -  rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); 
 -}
 -
 -static void
 -store_multiline_kw_con(VALUE listener, const char * event_name,
 -                      const char * keyword_at, size_t keyword_length,
 -                      const char * at,         size_t length,
 -                      int current_line, int start_col)
 -{
 -  VALUE split;
 -  VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil;
 -
 -  kw = ENCODED_STR_NEW(keyword_at, keyword_length);
 -  con = ENCODED_STR_NEW(at, length);
 -
 -  unindent(con, start_col);
 -  
 -  split = rb_str_split(con, "\n");
 -
 -  name = rb_funcall(split, rb_intern("shift"), 0);
 -  desc = rb_ary_join(split, rb_str_new2( "\n" ));
 -
 -  if( name == Qnil ) 
 -  {
 -    name = rb_str_new2("");
 -  }
 -  if( rb_funcall(desc, rb_intern("size"), 0) == 0) 
 -  {
 -    desc = rb_str_new2("");
 -  }
 -  rb_funcall(name, rb_intern("strip!"), 0);
 -  rb_funcall(desc, rb_intern("rstrip!"), 0);
 -  rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); 
 -}
 -
 -static void 
 -store_attr(VALUE listener, const char * attr_type,
 -           const char * at, size_t length, 
 -           int line)
 -{
 -  VALUE val = ENCODED_STR_NEW(at, length);
 -  rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line));
 -}
 -static void 
 -store_docstring_content(VALUE listener, 
 -          int start_col, 
 -          const char *type_at, size_t type_length,
 -          const char *at, size_t length, 
 -          int current_line)
 -{
 -  VALUE re2;
 -  VALUE unescape_escaped_quotes;
 -  VALUE con = ENCODED_STR_NEW(at, length);
 -  VALUE con_type = ENCODED_STR_NEW(type_at, type_length);
 -
 -  unindent(con, start_col);
 -
 -  re2 = rb_reg_regcomp(rb_str_new2("\r\\Z"));
 -  unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\""));
 -  rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2(""));
 -  rb_funcall(con_type, rb_intern("strip!"), 0);
 -  rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\""));
 -  rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line));
 -}
 -static void 
 -raise_lexer_error(const char * at, int line)
 -{ 
 -  rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at);
 -}
 -
 -static void lexer_init(lexer_state *lexer) {
 -  lexer->content_start = 0;
 -  lexer->content_end = 0;
 -  lexer->content_len = 0;
 -  lexer->docstring_content_type_start = 0;
 -  lexer->docstring_content_type_end = 0;
 -  lexer->mark = 0;
 -  lexer->keyword_start = 0;
 -  lexer->keyword_end = 0;
 -  lexer->next_keyword_start = 0;
 -  lexer->line_number = 1;
 -  lexer->last_newline = 0;
 -  lexer->final_newline = 0;
 -  lexer->start_col = 0;
 -}
 -
 -static VALUE CLexer_alloc(VALUE klass)
 -{
 -  VALUE obj;
 -  lexer_state *lxr = ALLOC(lexer_state);
 -  lexer_init(lxr);
 -
 -  obj = Data_Wrap_Struct(klass, NULL, -1, lxr);
 -
 -  return obj;
 -}
 -
 -static VALUE CLexer_init(VALUE self, VALUE listener)
 -{
 -  lexer_state *lxr; 
 -  rb_iv_set(self, "@listener", listener);
 -  
 -  lxr = NULL;
 -  DATA_GET(self, lexer_state, lxr);
 -  lexer_init(lxr);
 -  
 -  return self;
 -}
 -
 -static VALUE CLexer_scan(VALUE self, VALUE input)
 -{
 -  VALUE input_copy;
 -  char *data;
 -  size_t len;
 -  VALUE listener = rb_iv_get(self, "@listener");
 -
 -  lexer_state *lexer;
 -  lexer = NULL;
 -  DATA_GET(self, lexer_state, lexer);
 -
 -  input_copy = rb_str_dup(input);
 -
 -  rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%"));
 -  data = RSTRING_PTR(input_copy);
 -  len = RSTRING_LEN(input_copy);
 -  
 -  if (len == 0) { 
 -    rb_raise(rb_eGherkinLexingError, "No content to lex.");
 -  } else {
 -
 -    const char *p, *pe, *eof;
 -    int cs = 0;
 -    
 -    VALUE current_row = Qnil;
 -
 -    p = data;
 -    pe = data + len;
 -    eof = pe;
 -    
 -    assert(*pe == '\0' && "pointer does not end on NULL");
 -    
 -    
 -#line 972 "ext/gherkin_lexer_nl/gherkin_lexer_nl.c"
 -	{
 -	cs = lexer_start;
 -	}
 -
 -#line 425 "ragel/i18n/nl.c.rl"
 -    
 -#line 979 "ext/gherkin_lexer_nl/gherkin_lexer_nl.c"
 -	{
 -	int _klen;
 -	unsigned int _trans;
 -	const char *_acts;
 -	unsigned int _nacts;
 -	const char *_keys;
 -
 -	if ( p == pe )
 -		goto _test_eof;
 -	if ( cs == 0 )
 -		goto _out;
 -_resume:
 -	_keys = _lexer_trans_keys + _lexer_key_offsets[cs];
 -	_trans = _lexer_index_offsets[cs];
 -
 -	_klen = _lexer_single_lengths[cs];
 -	if ( _klen > 0 ) {
 -		const char *_lower = _keys;
 -		const char *_mid;
 -		const char *_upper = _keys + _klen - 1;
 -		while (1) {
 -			if ( _upper < _lower )
 -				break;
 -
 -			_mid = _lower + ((_upper-_lower) >> 1);
 -			if ( (*p) < *_mid )
 -				_upper = _mid - 1;
 -			else if ( (*p) > *_mid )
 -				_lower = _mid + 1;
 -			else {
 -				_trans += (unsigned int)(_mid - _keys);
 -				goto _match;
 -			}
 -		}
 -		_keys += _klen;
 -		_trans += _klen;
 -	}
 -
 -	_klen = _lexer_range_lengths[cs];
 -	if ( _klen > 0 ) {
 -		const char *_lower = _keys;
 -		const char *_mid;
 -		const char *_upper = _keys + (_klen<<1) - 2;
 -		while (1) {
 -			if ( _upper < _lower )
 -				break;
 -
 -			_mid = _lower + (((_upper-_lower) >> 1) & ~1);
 -			if ( (*p) < _mid[0] )
 -				_upper = _mid - 2;
 -			else if ( (*p) > _mid[1] )
 -				_lower = _mid + 2;
 -			else {
 -				_trans += (unsigned int)((_mid - _keys)>>1);
 -				goto _match;
 -			}
 -		}
 -		_trans += _klen;
 -	}
 -
 -_match:
 -	cs = _lexer_trans_targs[_trans];
 -
 -	if ( _lexer_trans_actions[_trans] == 0 )
 -		goto _again;
 -
 -	_acts = _lexer_actions + _lexer_trans_actions[_trans];
 -	_nacts = (unsigned int) *_acts++;
 -	while ( _nacts-- > 0 )
 -	{
 -		switch ( *_acts++ )
 -		{
 -	case 0:
 -#line 83 "ragel/i18n/nl.c.rl"
 -	{
 -		MARK(content_start, p);
 -    lexer->current_line = lexer->line_number;
 -    lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2;
 -  }
 -	break;
 -	case 1:
 -#line 89 "ragel/i18n/nl.c.rl"
 -	{
 -    MARK(content_start, p);
 -  }
 -	break;
 -	case 2:
 -#line 93 "ragel/i18n/nl.c.rl"
 -	{
 -    lexer->current_line = lexer->line_number;
 -    lexer->start_col = p - data - lexer->last_newline;
 -  }
 -	break;
 -	case 3:
 -#line 98 "ragel/i18n/nl.c.rl"
 -	{
 -    int len = LEN(content_start, PTR_TO(final_newline));
 -    int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end));
 -
 -    if (len < 0) len = 0;
 -    if (type_len < 0) len = 0;
 -
 -    store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line);
 -  }
 -	break;
 -	case 4:
 -#line 108 "ragel/i18n/nl.c.rl"
 -	{ 
 -    MARK(docstring_content_type_start, p);
 -  }
 -	break;
 -	case 5:
 -#line 112 "ragel/i18n/nl.c.rl"
 -	{ 
 -    MARK(docstring_content_type_end, p);
 -  }
 -	break;
 -	case 6:
 -#line 116 "ragel/i18n/nl.c.rl"
 -	{
 -    STORE_KW_END_CON(feature);
 -  }
 -	break;
 -	case 7:
 -#line 120 "ragel/i18n/nl.c.rl"
 -	{
 -    STORE_KW_END_CON(background);
 -  }
 -	break;
 -	case 8:
 -#line 124 "ragel/i18n/nl.c.rl"
 -	{
 -    STORE_KW_END_CON(scenario);
 -  }
 -	break;
 -	case 9:
 -#line 128 "ragel/i18n/nl.c.rl"
 -	{
 -    STORE_KW_END_CON(scenario_outline);
 -  }
 -	break;
 -	case 10:
 -#line 132 "ragel/i18n/nl.c.rl"
 -	{
 -    STORE_KW_END_CON(examples);
 -  }
 -	break;
 -	case 11:
 -#line 136 "ragel/i18n/nl.c.rl"
 -	{
 -    store_kw_con(listener, "step",
 -      PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
 -      PTR_TO(content_start), LEN(content_start, p), 
 -      lexer->current_line);
 -  }
 -	break;
 -	case 12:
 -#line 143 "ragel/i18n/nl.c.rl"
 -	{
 -    STORE_ATTR(comment);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 13:
 -#line 148 "ragel/i18n/nl.c.rl"
 -	{
 -    STORE_ATTR(tag);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 14:
 -#line 153 "ragel/i18n/nl.c.rl"
 -	{
 -    lexer->line_number += 1;
 -    MARK(final_newline, p);
 -  }
 -	break;
 -	case 15:
 -#line 158 "ragel/i18n/nl.c.rl"
 -	{
 -    MARK(last_newline, p + 1);
 -  }
 -	break;
 -	case 16:
 -#line 162 "ragel/i18n/nl.c.rl"
 -	{
 -    if (lexer->mark == 0) {
 -      MARK(mark, p);
 -    }
 -  }
 -	break;
 -	case 17:
 -#line 168 "ragel/i18n/nl.c.rl"
 -	{
 -    MARK(keyword_end, p);
 -    MARK(keyword_start, PTR_TO(mark));
 -    MARK(content_start, p + 1);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 18:
 -#line 175 "ragel/i18n/nl.c.rl"
 -	{
 -    MARK(content_end, p);
 -  }
 -	break;
 -	case 19:
 -#line 179 "ragel/i18n/nl.c.rl"
 -	{
 -    p = p - 1;
 -    lexer->current_line = lexer->line_number;
 -    current_row = rb_ary_new();
 -  }
 -	break;
 -	case 20:
 -#line 185 "ragel/i18n/nl.c.rl"
 -	{
 -		MARK(content_start, p);
 -  }
 -	break;
 -	case 21:
 -#line 189 "ragel/i18n/nl.c.rl"
 -	{
 -    VALUE re_pipe, re_newline, re_backslash;
 -    VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
 -    rb_funcall(con, rb_intern("strip!"), 0);
 -    re_pipe      = rb_reg_regcomp(rb_str_new2("\\\\\\|"));
 -    re_newline   = rb_reg_regcomp(rb_str_new2("\\\\n"));
 -    re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_pipe,      rb_str_new2("|"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_newline,   rb_str_new2("\n"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\"));
 -
 -    rb_ary_push(current_row, con);
 -  }
 -	break;
 -	case 22:
 -#line 203 "ragel/i18n/nl.c.rl"
 -	{
 -    rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
 -  }
 -	break;
 -	case 23:
 -#line 207 "ragel/i18n/nl.c.rl"
 -	{
 -    int line;
 -    if (cs < lexer_first_final) {
 -      size_t count = 0;
 -      VALUE newstr_val;
 -      char *newstr;
 -      int newstr_count = 0;        
 -      size_t len;
 -      const char *buff;
 -      if (lexer->last_newline != 0) {
 -        len = LEN(last_newline, eof);
 -        buff = PTR_TO(last_newline);
 -      } else {
 -        len = strlen(data);
 -        buff = data;
 -      }
 -
 -      /* Allocate as a ruby string so that it gets cleaned up by GC */
 -      newstr_val = rb_str_new(buff, len);
 -      newstr = RSTRING_PTR(newstr_val);
 -
 -
 -      for (count = 0; count < len; count++) {
 -        if(buff[count] == 10) {
 -          newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
 -          break;
 -        } else {
 -          if (buff[count] == '%') {
 -            newstr[newstr_count++] = buff[count];
 -            newstr[newstr_count] = buff[count];
 -          } else {
 -            newstr[newstr_count] = buff[count];
 -          }
 -        }
 -        newstr_count++;
 -      }
 -
 -      line = lexer->line_number;
 -      lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
 -      raise_lexer_error(newstr, line);
 -    } else {
 -      rb_funcall(listener, rb_intern("eof"), 0);
 -    }
 -  }
 -	break;
 -#line 1269 "ext/gherkin_lexer_nl/gherkin_lexer_nl.c"
 -		}
 -	}
 -
 -_again:
 -	if ( cs == 0 )
 -		goto _out;
 -	if ( ++p != pe )
 -		goto _resume;
 -	_test_eof: {}
 -	if ( p == eof )
 -	{
 -	const char *__acts = _lexer_actions + _lexer_eof_actions[cs];
 -	unsigned int __nacts = (unsigned int) *__acts++;
 -	while ( __nacts-- > 0 ) {
 -		switch ( *__acts++ ) {
 -	case 23:
 -#line 207 "ragel/i18n/nl.c.rl"
 -	{
 -    int line;
 -    if (cs < lexer_first_final) {
 -      size_t count = 0;
 -      VALUE newstr_val;
 -      char *newstr;
 -      int newstr_count = 0;        
 -      size_t len;
 -      const char *buff;
 -      if (lexer->last_newline != 0) {
 -        len = LEN(last_newline, eof);
 -        buff = PTR_TO(last_newline);
 -      } else {
 -        len = strlen(data);
 -        buff = data;
 -      }
 -
 -      /* Allocate as a ruby string so that it gets cleaned up by GC */
 -      newstr_val = rb_str_new(buff, len);
 -      newstr = RSTRING_PTR(newstr_val);
 -
 -
 -      for (count = 0; count < len; count++) {
 -        if(buff[count] == 10) {
 -          newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
 -          break;
 -        } else {
 -          if (buff[count] == '%') {
 -            newstr[newstr_count++] = buff[count];
 -            newstr[newstr_count] = buff[count];
 -          } else {
 -            newstr[newstr_count] = buff[count];
 -          }
 -        }
 -        newstr_count++;
 -      }
 -
 -      line = lexer->line_number;
 -      lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
 -      raise_lexer_error(newstr, line);
 -    } else {
 -      rb_funcall(listener, rb_intern("eof"), 0);
 -    }
 -  }
 -	break;
 -#line 1332 "ext/gherkin_lexer_nl/gherkin_lexer_nl.c"
 -		}
 -	}
 -	}
 -
 -	_out: {}
 -	}
 -
 -#line 426 "ragel/i18n/nl.c.rl"
 -
 -    assert(p <= pe && "data overflow after parsing execute");
 -    assert(lexer->content_start <= len && "content starts after data end");
 -    assert(lexer->mark < len && "mark is after data end");
 -    
 -    /* Reset lexer by re-initializing the whole thing */
 -    lexer_init(lexer);
 -
 -    if (cs == lexer_error) {
 -      rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails.");
 -    } else {
 -      return Qtrue;
 -    }
 -  }
 -}
 -
 -void Init_gherkin_lexer_nl()
 -{
 -  mGherkin = rb_define_module("Gherkin");
 -  mGherkinLexer = rb_define_module_under(mGherkin, "Lexer");
 -  rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError"));
 -
 -  mCLexer = rb_define_module_under(mGherkin, "CLexer");
 -  cI18nLexer = rb_define_class_under(mCLexer, "Nl", rb_cObject);
 -  rb_define_alloc_func(cI18nLexer, CLexer_alloc);
 -  rb_define_method(cI18nLexer, "initialize", CLexer_init, 1);
 -  rb_define_method(cI18nLexer, "scan", CLexer_scan, 1);
 -}
 -
diff --cc ext/gherkin_lexer_no/extconf.rb
index a4cdd03,a4cdd03..0000000
deleted file mode 100644,100644
--- a/ext/gherkin_lexer_no/extconf.rb
+++ /dev/null
@@@ -1,6 -1,6 +1,0 @@@
--require 'mkmf'
--CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags']
--$CFLAGS << ' -O0 -Wall' if CONFIG['CC'] =~ /gcc|clang/
--dir_config("gherkin_lexer_no")
--have_library("c", "main")
--create_makefile("gherkin_lexer_no")
diff --cc ext/gherkin_lexer_no/gherkin_lexer_no.c
index 4cb04fe,63a1b59..0000000
deleted file mode 100644,100644
--- a/ext/gherkin_lexer_no/gherkin_lexer_no.c
+++ /dev/null
@@@ -1,1311 -1,1311 +1,0 @@@
--
- #line 1 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/no.c.rl"
- #include <assert.h>
- #include <ruby.h>
- 
- #if defined(_WIN32)
- #include <stddef.h>
- #endif
- 
- #ifdef HAVE_RUBY_RE_H
- #include <ruby/re.h>
- #else
- #include <re.h>
- #endif
- 
- #ifdef HAVE_RUBY_ENCODING_H
- #include <ruby/encoding.h>
- #define ENCODED_STR_NEW(ptr, len) \
-     rb_enc_str_new(ptr, len, rb_utf8_encoding())
- #else
- #define ENCODED_STR_NEW(ptr, len) \
-     rb_str_new(ptr, len)
- #endif
- 
- #ifndef RSTRING_PTR
- #define RSTRING_PTR(s) (RSTRING(s)->ptr)
- #endif
- 
- #ifndef RSTRING_LEN
- #define RSTRING_LEN(s) (RSTRING(s)->len)
- #endif
- 
- #define DATA_GET(FROM, TYPE, NAME) \
-   Data_Get_Struct(FROM, TYPE, NAME); \
-   if (NAME == NULL) { \
-     rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \
-   }
-  
- typedef struct lexer_state {
-   int content_len;
-   int line_number;
-   int current_line;
-   int start_col;
-   size_t mark;
-   size_t keyword_start;
-   size_t keyword_end;
-   size_t next_keyword_start;
-   size_t content_start;
-   size_t content_end;
-   size_t docstring_content_type_start;
-   size_t docstring_content_type_end;
-   size_t query_start;
-   size_t last_newline;
-   size_t final_newline;
- } lexer_state;
- 
- static VALUE mGherkin;
- static VALUE mGherkinLexer;
- static VALUE mCLexer;
- static VALUE cI18nLexer;
- static VALUE rb_eGherkinLexingError;
- 
- #define LEN(AT, P) (P - data - lexer->AT)
- #define MARK(M, P) (lexer->M = (P) - data)
- #define PTR_TO(P) (data + lexer->P)
- 
- #define STORE_KW_END_CON(EVENT) \
-   store_multiline_kw_con(listener, # EVENT, \
-     PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \
-     PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \
-     lexer->current_line, lexer->start_col); \
-     if (lexer->content_end != 0) { \
-       p = PTR_TO(content_end - 1); \
-     } \
-     lexer->content_end = 0
- 
- #define STORE_ATTR(ATTR) \
-     store_attr(listener, # ATTR, \
-       PTR_TO(content_start), LEN(content_start, p), \
-       lexer->line_number)
- 
- 
- #line 254 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/no.c.rl"
- 
- 
- /** Data **/
- 
- #line 89 "ext/gherkin_lexer_no/gherkin_lexer_no.c"
- static const char _lexer_actions[] = {
- 	0, 1, 0, 1, 1, 1, 2, 1, 
- 	3, 1, 4, 1, 5, 1, 6, 1, 
- 	7, 1, 8, 1, 9, 1, 10, 1, 
- 	11, 1, 12, 1, 13, 1, 16, 1, 
- 	17, 1, 18, 1, 19, 1, 20, 1, 
- 	21, 1, 22, 1, 23, 2, 1, 18, 
- 	2, 4, 5, 2, 13, 0, 2, 14, 
- 	15, 2, 17, 0, 2, 17, 2, 2, 
- 	17, 16, 2, 17, 19, 2, 18, 6, 
- 	2, 18, 7, 2, 18, 8, 2, 18, 
- 	9, 2, 18, 10, 2, 18, 16, 2, 
- 	20, 21, 2, 22, 0, 2, 22, 2, 
- 	2, 22, 16, 2, 22, 19, 3, 3, 
- 	14, 15, 3, 5, 14, 15, 3, 11, 
- 	14, 15, 3, 12, 14, 15, 3, 13, 
- 	14, 15, 3, 14, 15, 18, 3, 17, 
- 	0, 11, 3, 17, 14, 15, 4, 1, 
- 	14, 15, 18, 4, 4, 5, 14, 15, 
- 	4, 17, 0, 14, 15, 5, 17, 0, 
- 	11, 14, 15
- };
- 
- static const short _lexer_key_offsets[] = {
- 	0, 0, 19, 20, 21, 39, 40, 41, 
- 	43, 45, 50, 55, 60, 65, 69, 73, 
- 	75, 76, 77, 78, 79, 80, 81, 82, 
- 	83, 84, 85, 86, 87, 88, 89, 90, 
- 	91, 93, 95, 100, 107, 112, 113, 114, 
- 	115, 116, 117, 118, 119, 120, 121, 122, 
- 	123, 124, 125, 126, 127, 128, 129, 130, 
- 	131, 145, 147, 149, 151, 153, 155, 157, 
- 	159, 161, 163, 165, 167, 169, 171, 173, 
- 	175, 193, 194, 195, 196, 197, 198, 199, 
- 	200, 201, 202, 203, 218, 220, 222, 224, 
- 	226, 228, 230, 232, 234, 236, 238, 240, 
- 	242, 244, 246, 248, 250, 252, 254, 256, 
- 	258, 260, 262, 264, 266, 268, 270, 272, 
- 	274, 276, 278, 280, 282, 284, 286, 288, 
- 	290, 292, 294, 296, 298, 300, 302, 304, 
- 	306, 308, 310, 312, 314, 317, 319, 321, 
- 	323, 325, 327, 329, 331, 334, 336, 338, 
- 	340, 341, 342, 343, 344, 345, 346, 347, 
- 	348, 349, 360, 362, 364, 366, 368, 370, 
- 	372, 374, 376, 378, 380, 382, 384, 386, 
- 	388, 390, 392, 394, 396, 398, 400, 402, 
- 	404, 406, 408, 410, 412, 414, 416, 418, 
- 	420, 422, 424, 426, 428, 430, 432, 434, 
- 	436, 439, 441, 443, 445, 447, 449, 451, 
- 	453, 455, 457, 459, 461, 463, 465, 467, 
- 	469, 471, 473, 475, 477, 479, 482, 484, 
- 	486, 487, 488, 489, 490, 491, 492, 493, 
- 	494, 495, 496, 503, 505, 507, 509, 511, 
- 	513, 515, 517, 519, 520, 521, 522, 523, 
- 	524, 525, 526, 527, 528, 530, 531, 532, 
- 	533, 534, 535, 536, 537, 539, 540, 541, 
- 	557, 559, 561, 563, 565, 567, 569, 571, 
- 	573, 575, 577, 579, 581, 583, 585, 587, 
- 	589, 591, 593, 595, 597, 599, 601, 603, 
- 	605, 607, 609, 611, 613, 615, 617, 619, 
- 	621, 623, 625, 627, 629, 631, 633, 635, 
- 	637, 639, 641, 643, 645, 647, 649, 651, 
- 	653, 655, 657, 659, 661, 663, 665, 667, 
- 	670, 672, 674, 676, 678, 680, 682, 684, 
- 	687, 689, 691, 692, 693, 697, 703, 706, 
- 	708, 714, 732, 734, 736, 738, 740, 742, 
- 	744, 746, 748, 750, 752, 754, 756, 758, 
- 	760, 762, 764, 766, 769, 771, 773, 775, 
- 	777, 779, 781, 783
- };
- 
- static const char _lexer_trans_keys[] = {
- 	-17, 10, 32, 34, 35, 37, 42, 64, 
- 	65, 66, 69, 71, 77, 78, 79, 83, 
- 	124, 9, 13, -69, -65, 10, 32, 34, 
- 	35, 37, 42, 64, 65, 66, 69, 71, 
- 	77, 78, 79, 83, 124, 9, 13, 34, 
- 	34, 10, 13, 10, 13, 10, 32, 34, 
- 	9, 13, 10, 32, 34, 9, 13, 10, 
- 	32, 34, 9, 13, 10, 32, 34, 9, 
- 	13, 10, 32, 9, 13, 10, 32, 9, 
- 	13, 10, 13, 10, 95, 70, 69, 65, 
- 	84, 85, 82, 69, 95, 69, 78, 68, 
- 	95, 37, 32, 10, 13, 10, 13, 13, 
- 	32, 64, 9, 10, 9, 10, 13, 32, 
- 	64, 11, 12, 10, 32, 64, 9, 13, 
- 	98, 115, 116, 114, 97, 107, 116, 32, 
- 	83, 99, 101, 110, 97, 114, 105, 111, 
- 	58, 10, 10, 10, 32, 35, 37, 42, 
- 	64, 69, 71, 77, 78, 79, 83, 9, 
- 	13, 10, 95, 10, 70, 10, 69, 10, 
- 	65, 10, 84, 10, 85, 10, 82, 10, 
- 	69, 10, 95, 10, 69, 10, 78, 10, 
- 	68, 10, 95, 10, 37, 10, 32, 10, 
- 	32, 34, 35, 37, 42, 64, 65, 66, 
- 	69, 71, 77, 78, 79, 83, 124, 9, 
- 	13, 97, 107, 103, 114, 117, 110, 110, 
- 	58, 10, 10, 10, 32, 35, 37, 42, 
- 	64, 65, 69, 71, 77, 78, 79, 83, 
- 	9, 13, 10, 95, 10, 70, 10, 69, 
- 	10, 65, 10, 84, 10, 85, 10, 82, 
- 	10, 69, 10, 95, 10, 69, 10, 78, 
- 	10, 68, 10, 95, 10, 37, 10, 32, 
- 	10, 98, 10, 115, 10, 116, 10, 114, 
- 	10, 97, 10, 107, 10, 116, 10, 32, 
- 	10, 83, 10, 99, 10, 101, 10, 110, 
- 	10, 97, 10, 114, 10, 105, 10, 111, 
- 	10, 58, 10, 103, 10, 101, 10, 110, 
- 	10, 115, 10, 107, 10, 97, 10, 112, 
- 	10, 105, 10, 116, 10, 116, 10, 101, 
- 	10, 110, -61, 10, -91, 10, 10, 114, 
- 	10, 103, -61, 10, 99, -91, 10, 10, 
- 	101, 10, 110, 10, 97, 10, 114, 10, 
- 	105, 10, 111, 10, 58, 109, 10, 97, 
- 	10, 108, 103, 107, 101, 110, 115, 107, 
- 	97, 112, 58, 10, 10, 10, 32, 35, 
- 	37, 64, 65, 66, 69, 83, 9, 13, 
- 	10, 95, 10, 70, 10, 69, 10, 65, 
- 	10, 84, 10, 85, 10, 82, 10, 69, 
- 	10, 95, 10, 69, 10, 78, 10, 68, 
- 	10, 95, 10, 37, 10, 98, 10, 115, 
- 	10, 116, 10, 114, 10, 97, 10, 107, 
- 	10, 116, 10, 32, 10, 83, 10, 99, 
- 	10, 101, 10, 110, 10, 97, 10, 114, 
- 	10, 105, 10, 111, 10, 58, 10, 97, 
- 	10, 107, 10, 103, 10, 114, 10, 117, 
- 	10, 110, 10, 110, 10, 103, 107, 10, 
- 	101, 10, 110, 10, 115, 10, 107, 10, 
- 	97, 10, 112, 10, 115, 10, 101, 10, 
- 	109, 10, 112, 10, 108, 10, 101, 10, 
- 	114, 10, 99, 10, 101, 10, 110, 10, 
- 	97, 10, 114, 10, 105, 10, 111, 10, 
- 	58, 109, 10, 97, 10, 108, 115, 101, 
- 	109, 112, 108, 101, 114, 58, 10, 10, 
- 	10, 32, 35, 69, 124, 9, 13, 10, 
- 	103, 10, 101, 10, 110, 10, 115, 10, 
- 	107, 10, 97, 10, 112, 10, 58, 105, 
- 	116, 116, 101, 110, -61, -91, 114, 103, 
- 	-61, 99, -91, 101, 110, 97, 114, 105, 
- 	111, 58, 109, 10, 10, 10, 32, 35, 
- 	37, 42, 64, 65, 66, 69, 71, 77, 
- 	78, 79, 83, 9, 13, 10, 95, 10, 
- 	70, 10, 69, 10, 65, 10, 84, 10, 
- 	85, 10, 82, 10, 69, 10, 95, 10, 
- 	69, 10, 78, 10, 68, 10, 95, 10, 
- 	37, 10, 32, 10, 98, 10, 115, 10, 
- 	116, 10, 114, 10, 97, 10, 107, 10, 
- 	116, 10, 32, 10, 83, 10, 99, 10, 
- 	101, 10, 110, 10, 97, 10, 114, 10, 
- 	105, 10, 111, 10, 58, 10, 97, 10, 
- 	107, 10, 103, 10, 114, 10, 117, 10, 
- 	110, 10, 110, 10, 103, 10, 101, 10, 
- 	110, 10, 115, 10, 107, 10, 97, 10, 
- 	112, 10, 105, 10, 116, 10, 116, 10, 
- 	101, 10, 110, -61, 10, -91, 10, 10, 
- 	114, 10, 103, -61, 10, 99, -91, 10, 
- 	10, 101, 10, 110, 10, 97, 10, 114, 
- 	10, 105, 10, 111, 10, 58, 109, 10, 
- 	97, 10, 108, 97, 108, 32, 124, 9, 
- 	13, 10, 32, 92, 124, 9, 13, 10, 
- 	92, 124, 10, 92, 10, 32, 92, 124, 
- 	9, 13, 10, 32, 34, 35, 37, 42, 
- 	64, 65, 66, 69, 71, 77, 78, 79, 
- 	83, 124, 9, 13, 10, 103, 10, 101, 
- 	10, 110, 10, 115, 10, 107, 10, 97, 
- 	10, 112, 10, 58, 10, 105, 10, 116, 
- 	10, 116, 10, 101, 10, 110, -61, 10, 
- 	-91, 10, 10, 114, 10, 103, -61, 10, 
- 	99, -91, 10, 10, 101, 10, 110, 10, 
- 	97, 10, 114, 10, 105, 10, 111, 0
- };
- 
- static const char _lexer_single_lengths[] = {
- 	0, 17, 1, 1, 16, 1, 1, 2, 
- 	2, 3, 3, 3, 3, 2, 2, 2, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	2, 2, 3, 5, 3, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	12, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	16, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 13, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 3, 2, 2, 2, 
- 	2, 2, 2, 2, 3, 2, 2, 2, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 9, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	3, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 3, 2, 2, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 5, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 2, 1, 1, 1, 
- 	1, 1, 1, 1, 2, 1, 1, 14, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 3, 
- 	2, 2, 2, 2, 2, 2, 2, 3, 
- 	2, 2, 1, 1, 2, 4, 3, 2, 
- 	4, 16, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 3, 2, 2, 2, 2, 
- 	2, 2, 2, 0
- };
- 
- static const char _lexer_range_lengths[] = {
- 	0, 1, 0, 0, 1, 0, 0, 0, 
- 	0, 1, 1, 1, 1, 1, 1, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 1, 1, 1, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	1, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	1, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 1, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 1, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 1, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 1, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 1, 1, 0, 0, 
- 	1, 1, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0
- };
- 
- static const short _lexer_index_offsets[] = {
- 	0, 0, 19, 21, 23, 41, 43, 45, 
- 	48, 51, 56, 61, 66, 71, 75, 79, 
- 	82, 84, 86, 88, 90, 92, 94, 96, 
- 	98, 100, 102, 104, 106, 108, 110, 112, 
- 	114, 117, 120, 125, 132, 137, 139, 141, 
- 	143, 145, 147, 149, 151, 153, 155, 157, 
- 	159, 161, 163, 165, 167, 169, 171, 173, 
- 	175, 189, 192, 195, 198, 201, 204, 207, 
- 	210, 213, 216, 219, 222, 225, 228, 231, 
- 	234, 252, 254, 256, 258, 260, 262, 264, 
- 	266, 268, 270, 272, 287, 290, 293, 296, 
- 	299, 302, 305, 308, 311, 314, 317, 320, 
- 	323, 326, 329, 332, 335, 338, 341, 344, 
- 	347, 350, 353, 356, 359, 362, 365, 368, 
- 	371, 374, 377, 380, 383, 386, 389, 392, 
- 	395, 398, 401, 404, 407, 410, 413, 416, 
- 	419, 422, 425, 428, 431, 435, 438, 441, 
- 	444, 447, 450, 453, 456, 460, 463, 466, 
- 	469, 471, 473, 475, 477, 479, 481, 483, 
- 	485, 487, 498, 501, 504, 507, 510, 513, 
- 	516, 519, 522, 525, 528, 531, 534, 537, 
- 	540, 543, 546, 549, 552, 555, 558, 561, 
- 	564, 567, 570, 573, 576, 579, 582, 585, 
- 	588, 591, 594, 597, 600, 603, 606, 609, 
- 	612, 616, 619, 622, 625, 628, 631, 634, 
- 	637, 640, 643, 646, 649, 652, 655, 658, 
- 	661, 664, 667, 670, 673, 676, 680, 683, 
- 	686, 688, 690, 692, 694, 696, 698, 700, 
- 	702, 704, 706, 713, 716, 719, 722, 725, 
- 	728, 731, 734, 737, 739, 741, 743, 745, 
- 	747, 749, 751, 753, 755, 758, 760, 762, 
- 	764, 766, 768, 770, 772, 775, 777, 779, 
- 	795, 798, 801, 804, 807, 810, 813, 816, 
- 	819, 822, 825, 828, 831, 834, 837, 840, 
- 	843, 846, 849, 852, 855, 858, 861, 864, 
- 	867, 870, 873, 876, 879, 882, 885, 888, 
- 	891, 894, 897, 900, 903, 906, 909, 912, 
- 	915, 918, 921, 924, 927, 930, 933, 936, 
- 	939, 942, 945, 948, 951, 954, 957, 960, 
- 	964, 967, 970, 973, 976, 979, 982, 985, 
- 	989, 992, 995, 997, 999, 1003, 1009, 1013, 
- 	1016, 1022, 1040, 1043, 1046, 1049, 1052, 1055, 
- 	1058, 1061, 1064, 1067, 1070, 1073, 1076, 1079, 
- 	1082, 1085, 1088, 1091, 1095, 1098, 1101, 1104, 
- 	1107, 1110, 1113, 1116
- };
- 
- static const short _lexer_trans_targs[] = {
- 	2, 4, 4, 5, 15, 17, 31, 34, 
- 	37, 73, 143, 235, 238, 240, 243, 244, 
- 	324, 4, 0, 3, 0, 4, 0, 4, 
- 	4, 5, 15, 17, 31, 34, 37, 73, 
- 	143, 235, 238, 240, 243, 244, 324, 4, 
- 	0, 6, 0, 7, 0, 9, 8, 8, 
- 	9, 8, 8, 10, 10, 11, 10, 10, 
- 	10, 10, 11, 10, 10, 10, 10, 12, 
- 	10, 10, 10, 10, 13, 10, 10, 4, 
- 	14, 14, 0, 4, 14, 14, 0, 4, 
- 	16, 15, 4, 0, 18, 0, 19, 0, 
- 	20, 0, 21, 0, 22, 0, 23, 0, 
- 	24, 0, 25, 0, 26, 0, 27, 0, 
- 	28, 0, 29, 0, 30, 0, 355, 0, 
- 	32, 0, 4, 16, 33, 4, 16, 33, 
- 	0, 0, 0, 0, 35, 36, 4, 36, 
- 	36, 34, 35, 35, 4, 36, 34, 36, 
- 	0, 38, 0, 39, 0, 40, 0, 41, 
- 	0, 42, 0, 43, 0, 44, 0, 45, 
- 	0, 46, 0, 47, 0, 48, 0, 49, 
- 	0, 50, 0, 51, 0, 52, 0, 53, 
- 	0, 54, 0, 56, 55, 56, 55, 56, 
- 	56, 4, 57, 71, 4, 330, 338, 341, 
- 	343, 346, 347, 56, 55, 56, 58, 55, 
- 	56, 59, 55, 56, 60, 55, 56, 61, 
- 	55, 56, 62, 55, 56, 63, 55, 56, 
- 	64, 55, 56, 65, 55, 56, 66, 55, 
- 	56, 67, 55, 56, 68, 55, 56, 69, 
- 	55, 56, 70, 55, 56, 4, 55, 56, 
- 	72, 55, 4, 4, 5, 15, 17, 31, 
- 	34, 37, 73, 143, 235, 238, 240, 243, 
- 	244, 324, 4, 0, 74, 0, 75, 0, 
- 	76, 0, 77, 0, 78, 0, 79, 0, 
- 	80, 0, 81, 0, 83, 82, 83, 82, 
- 	83, 83, 4, 84, 98, 4, 99, 116, 
- 	123, 126, 128, 131, 132, 83, 82, 83, 
- 	85, 82, 83, 86, 82, 83, 87, 82, 
- 	83, 88, 82, 83, 89, 82, 83, 90, 
- 	82, 83, 91, 82, 83, 92, 82, 83, 
- 	93, 82, 83, 94, 82, 83, 95, 82, 
- 	83, 96, 82, 83, 97, 82, 83, 4, 
- 	82, 83, 72, 82, 83, 100, 82, 83, 
- 	101, 82, 83, 102, 82, 83, 103, 82, 
- 	83, 104, 82, 83, 105, 82, 83, 106, 
- 	82, 83, 107, 82, 83, 108, 82, 83, 
- 	109, 82, 83, 110, 82, 83, 111, 82, 
- 	83, 112, 82, 83, 113, 82, 83, 114, 
- 	82, 83, 115, 82, 83, 72, 82, 83, 
- 	117, 82, 83, 118, 82, 83, 119, 82, 
- 	83, 120, 82, 83, 121, 82, 83, 122, 
- 	82, 83, 115, 82, 83, 124, 82, 83, 
- 	125, 82, 83, 98, 82, 83, 127, 82, 
- 	83, 98, 82, 129, 83, 82, 130, 83, 
- 	82, 83, 98, 82, 83, 98, 82, 133, 
- 	83, 134, 82, 98, 83, 82, 83, 135, 
- 	82, 83, 136, 82, 83, 137, 82, 83, 
- 	138, 82, 83, 139, 82, 83, 140, 82, 
- 	83, 72, 141, 82, 83, 142, 82, 83, 
- 	115, 82, 144, 216, 0, 145, 0, 146, 
- 	0, 147, 0, 148, 0, 149, 0, 150, 
- 	0, 151, 0, 153, 152, 153, 152, 153, 
- 	153, 4, 154, 4, 168, 185, 192, 206, 
- 	153, 152, 153, 155, 152, 153, 156, 152, 
- 	153, 157, 152, 153, 158, 152, 153, 159, 
- 	152, 153, 160, 152, 153, 161, 152, 153, 
- 	162, 152, 153, 163, 152, 153, 164, 152, 
- 	153, 165, 152, 153, 166, 152, 153, 167, 
- 	152, 153, 4, 152, 153, 169, 152, 153, 
- 	170, 152, 153, 171, 152, 153, 172, 152, 
- 	153, 173, 152, 153, 174, 152, 153, 175, 
- 	152, 153, 176, 152, 153, 177, 152, 153, 
- 	178, 152, 153, 179, 152, 153, 180, 152, 
- 	153, 181, 152, 153, 182, 152, 153, 183, 
- 	152, 153, 184, 152, 153, 72, 152, 153, 
- 	186, 152, 153, 187, 152, 153, 188, 152, 
- 	153, 189, 152, 153, 190, 152, 153, 191, 
- 	152, 153, 184, 152, 153, 193, 199, 152, 
- 	153, 194, 152, 153, 195, 152, 153, 196, 
- 	152, 153, 197, 152, 153, 198, 152, 153, 
- 	184, 152, 153, 200, 152, 153, 201, 152, 
- 	153, 202, 152, 153, 203, 152, 153, 204, 
- 	152, 153, 205, 152, 153, 184, 152, 153, 
- 	207, 152, 153, 208, 152, 153, 209, 152, 
- 	153, 210, 152, 153, 211, 152, 153, 212, 
- 	152, 153, 213, 152, 153, 72, 214, 152, 
- 	153, 215, 152, 153, 184, 152, 217, 0, 
- 	218, 0, 219, 0, 220, 0, 221, 0, 
- 	222, 0, 223, 0, 224, 0, 226, 225, 
- 	226, 225, 226, 226, 4, 227, 4, 226, 
- 	225, 226, 228, 225, 226, 229, 225, 226, 
- 	230, 225, 226, 231, 225, 226, 232, 225, 
- 	226, 233, 225, 226, 234, 225, 226, 72, 
- 	225, 236, 0, 237, 0, 31, 0, 239, 
- 	0, 31, 0, 241, 0, 242, 0, 31, 
- 	0, 31, 0, 245, 246, 0, 31, 0, 
- 	247, 0, 248, 0, 249, 0, 250, 0, 
- 	251, 0, 252, 0, 253, 322, 0, 255, 
- 	254, 255, 254, 255, 255, 4, 256, 270, 
- 	4, 271, 288, 295, 302, 305, 307, 310, 
- 	311, 255, 254, 255, 257, 254, 255, 258, 
- 	254, 255, 259, 254, 255, 260, 254, 255, 
- 	261, 254, 255, 262, 254, 255, 263, 254, 
- 	255, 264, 254, 255, 265, 254, 255, 266, 
- 	254, 255, 267, 254, 255, 268, 254, 255, 
- 	269, 254, 255, 4, 254, 255, 72, 254, 
- 	255, 272, 254, 255, 273, 254, 255, 274, 
- 	254, 255, 275, 254, 255, 276, 254, 255, 
- 	277, 254, 255, 278, 254, 255, 279, 254, 
- 	255, 280, 254, 255, 281, 254, 255, 282, 
- 	254, 255, 283, 254, 255, 284, 254, 255, 
- 	285, 254, 255, 286, 254, 255, 287, 254, 
- 	255, 72, 254, 255, 289, 254, 255, 290, 
- 	254, 255, 291, 254, 255, 292, 254, 255, 
- 	293, 254, 255, 294, 254, 255, 287, 254, 
- 	255, 296, 254, 255, 297, 254, 255, 298, 
- 	254, 255, 299, 254, 255, 300, 254, 255, 
- 	301, 254, 255, 287, 254, 255, 303, 254, 
- 	255, 304, 254, 255, 270, 254, 255, 306, 
- 	254, 255, 270, 254, 308, 255, 254, 309, 
- 	255, 254, 255, 270, 254, 255, 270, 254, 
- 	312, 255, 313, 254, 270, 255, 254, 255, 
- 	314, 254, 255, 315, 254, 255, 316, 254, 
- 	255, 317, 254, 255, 318, 254, 255, 319, 
- 	254, 255, 72, 320, 254, 255, 321, 254, 
- 	255, 287, 254, 323, 0, 53, 0, 324, 
- 	325, 324, 0, 329, 328, 327, 325, 328, 
- 	326, 0, 327, 325, 326, 0, 327, 326, 
- 	329, 328, 327, 325, 328, 326, 329, 329, 
- 	5, 15, 17, 31, 34, 37, 73, 143, 
- 	235, 238, 240, 243, 244, 324, 329, 0, 
- 	56, 331, 55, 56, 332, 55, 56, 333, 
- 	55, 56, 334, 55, 56, 335, 55, 56, 
- 	336, 55, 56, 337, 55, 56, 72, 55, 
- 	56, 339, 55, 56, 340, 55, 56, 71, 
- 	55, 56, 342, 55, 56, 71, 55, 344, 
- 	56, 55, 345, 56, 55, 56, 71, 55, 
- 	56, 71, 55, 348, 56, 349, 55, 71, 
- 	56, 55, 56, 350, 55, 56, 351, 55, 
- 	56, 352, 55, 56, 353, 55, 56, 354, 
- 	55, 56, 337, 55, 0, 0
- };
- 
- static const unsigned char _lexer_trans_actions[] = {
- 	0, 54, 0, 5, 1, 0, 29, 1, 
- 	29, 29, 29, 29, 29, 29, 29, 29, 
- 	35, 0, 43, 0, 43, 0, 43, 54, 
- 	0, 5, 1, 0, 29, 1, 29, 29, 
- 	29, 29, 29, 29, 29, 29, 35, 0, 
- 	43, 0, 43, 0, 43, 139, 48, 9, 
- 	106, 11, 0, 134, 45, 45, 45, 3, 
- 	122, 33, 33, 33, 0, 122, 33, 33, 
- 	33, 0, 122, 33, 0, 33, 0, 102, 
- 	7, 7, 43, 54, 0, 0, 43, 114, 
- 	25, 0, 54, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 149, 126, 57, 110, 23, 0, 
- 	43, 43, 43, 43, 0, 27, 118, 27, 
- 	27, 51, 27, 0, 54, 0, 1, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 144, 57, 54, 0, 54, 
- 	0, 78, 33, 84, 78, 84, 84, 84, 
- 	84, 84, 84, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 19, 0, 54, 
- 	19, 0, 130, 31, 60, 57, 31, 63, 
- 	57, 63, 63, 63, 63, 63, 63, 63, 
- 	63, 66, 31, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 144, 57, 54, 0, 
- 	54, 0, 72, 33, 84, 72, 84, 84, 
- 	84, 84, 84, 84, 84, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 15, 
- 	0, 54, 15, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 15, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 0, 54, 0, 0, 54, 
- 	0, 54, 0, 0, 54, 0, 0, 0, 
- 	54, 0, 0, 0, 54, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 15, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 0, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 144, 57, 54, 0, 54, 
- 	0, 69, 33, 69, 84, 84, 84, 84, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 13, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 13, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 13, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 144, 57, 
- 	54, 0, 54, 0, 81, 84, 81, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 21, 
- 	0, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 0, 43, 144, 
- 	57, 54, 0, 54, 0, 75, 33, 84, 
- 	75, 84, 84, 84, 84, 84, 84, 84, 
- 	84, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 17, 0, 54, 17, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 17, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 0, 54, 0, 0, 
- 	54, 0, 54, 0, 0, 54, 0, 0, 
- 	0, 54, 0, 0, 0, 54, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 17, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 0, 43, 0, 43, 0, 
- 	0, 0, 43, 54, 37, 37, 87, 37, 
- 	37, 43, 0, 39, 0, 43, 0, 0, 
- 	54, 0, 0, 39, 0, 0, 54, 0, 
- 	93, 90, 41, 96, 90, 96, 96, 96, 
- 	96, 96, 96, 96, 96, 99, 0, 43, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 19, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 0, 
- 	54, 0, 0, 54, 0, 54, 0, 0, 
- 	54, 0, 0, 0, 54, 0, 0, 0, 
- 	54, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 0, 0
- };
- 
- static const unsigned char _lexer_eof_actions[] = {
- 	0, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43
- };
- 
- static const int lexer_start = 1;
- static const int lexer_first_final = 355;
- static const int lexer_error = 0;
- 
- static const int lexer_en_main = 1;
- 
- 
- #line 258 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/no.c.rl"
- 
- static VALUE 
- unindent(VALUE con, int start_col)
- {
-   VALUE re;
-   // Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters
-   char pat[32]; 
-   snprintf(pat, 32, "^[\t ]{0,%d}", start_col); 
-   re = rb_reg_regcomp(rb_str_new2(pat));
-   rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2(""));
- 
-   return Qnil;
- 
- }
- 
- static void 
- store_kw_con(VALUE listener, const char * event_name, 
-              const char * keyword_at, size_t keyword_length, 
-              const char * at,         size_t length, 
-              int current_line)
- {
-   VALUE con = Qnil, kw = Qnil;
-   kw = ENCODED_STR_NEW(keyword_at, keyword_length);
-   con = ENCODED_STR_NEW(at, length);
-   rb_funcall(con, rb_intern("strip!"), 0);
-   rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); 
- }
- 
- static void
- store_multiline_kw_con(VALUE listener, const char * event_name,
-                       const char * keyword_at, size_t keyword_length,
-                       const char * at,         size_t length,
-                       int current_line, int start_col)
- {
-   VALUE split;
-   VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil;
- 
-   kw = ENCODED_STR_NEW(keyword_at, keyword_length);
-   con = ENCODED_STR_NEW(at, length);
- 
-   unindent(con, start_col);
-   
-   split = rb_str_split(con, "\n");
- 
-   name = rb_funcall(split, rb_intern("shift"), 0);
-   desc = rb_ary_join(split, rb_str_new2( "\n" ));
- 
-   if( name == Qnil ) 
-   {
-     name = rb_str_new2("");
-   }
-   if( rb_funcall(desc, rb_intern("size"), 0) == 0) 
-   {
-     desc = rb_str_new2("");
-   }
-   rb_funcall(name, rb_intern("strip!"), 0);
-   rb_funcall(desc, rb_intern("rstrip!"), 0);
-   rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); 
- }
- 
- static void 
- store_attr(VALUE listener, const char * attr_type,
-            const char * at, size_t length, 
-            int line)
- {
-   VALUE val = ENCODED_STR_NEW(at, length);
-   rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line));
- }
- static void 
- store_docstring_content(VALUE listener, 
-           int start_col, 
-           const char *type_at, size_t type_length,
-           const char *at, size_t length, 
-           int current_line)
- {
-   VALUE re2;
-   VALUE unescape_escaped_quotes;
-   VALUE con = ENCODED_STR_NEW(at, length);
-   VALUE con_type = ENCODED_STR_NEW(type_at, type_length);
- 
-   unindent(con, start_col);
- 
-   re2 = rb_reg_regcomp(rb_str_new2("\r\\Z"));
-   unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\""));
-   rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2(""));
-   rb_funcall(con_type, rb_intern("strip!"), 0);
-   rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\""));
-   rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line));
- }
- static void 
- raise_lexer_error(const char * at, int line)
- { 
-   rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at);
- }
- 
- static void lexer_init(lexer_state *lexer) {
-   lexer->content_start = 0;
-   lexer->content_end = 0;
-   lexer->content_len = 0;
-   lexer->docstring_content_type_start = 0;
-   lexer->docstring_content_type_end = 0;
-   lexer->mark = 0;
-   lexer->keyword_start = 0;
-   lexer->keyword_end = 0;
-   lexer->next_keyword_start = 0;
-   lexer->line_number = 1;
-   lexer->last_newline = 0;
-   lexer->final_newline = 0;
-   lexer->start_col = 0;
- }
- 
- static VALUE CLexer_alloc(VALUE klass)
- {
-   VALUE obj;
-   lexer_state *lxr = ALLOC(lexer_state);
-   lexer_init(lxr);
- 
-   obj = Data_Wrap_Struct(klass, NULL, -1, lxr);
- 
-   return obj;
- }
- 
- static VALUE CLexer_init(VALUE self, VALUE listener)
- {
-   lexer_state *lxr; 
-   rb_iv_set(self, "@listener", listener);
-   
-   lxr = NULL;
-   DATA_GET(self, lexer_state, lxr);
-   lexer_init(lxr);
-   
-   return self;
- }
- 
- static VALUE CLexer_scan(VALUE self, VALUE input)
- {
-   VALUE input_copy;
-   char *data;
-   size_t len;
-   VALUE listener = rb_iv_get(self, "@listener");
- 
-   lexer_state *lexer;
-   lexer = NULL;
-   DATA_GET(self, lexer_state, lexer);
- 
-   input_copy = rb_str_dup(input);
- 
-   rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%"));
-   data = RSTRING_PTR(input_copy);
-   len = RSTRING_LEN(input_copy);
-   
-   if (len == 0) { 
-     rb_raise(rb_eGherkinLexingError, "No content to lex.");
-   } else {
- 
-     const char *p, *pe, *eof;
-     int cs = 0;
-     
-     VALUE current_row = Qnil;
- 
-     p = data;
-     pe = data + len;
-     eof = pe;
-     
-     assert(*pe == '\0' && "pointer does not end on NULL");
-     
-     
- #line 915 "ext/gherkin_lexer_no/gherkin_lexer_no.c"
- 	{
- 	cs = lexer_start;
- 	}
- 
- #line 425 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/no.c.rl"
-     
- #line 922 "ext/gherkin_lexer_no/gherkin_lexer_no.c"
- 	{
- 	int _klen;
- 	unsigned int _trans;
- 	const char *_acts;
- 	unsigned int _nacts;
- 	const char *_keys;
- 
- 	if ( p == pe )
- 		goto _test_eof;
- 	if ( cs == 0 )
- 		goto _out;
- _resume:
- 	_keys = _lexer_trans_keys + _lexer_key_offsets[cs];
- 	_trans = _lexer_index_offsets[cs];
- 
- 	_klen = _lexer_single_lengths[cs];
- 	if ( _klen > 0 ) {
- 		const char *_lower = _keys;
- 		const char *_mid;
- 		const char *_upper = _keys + _klen - 1;
- 		while (1) {
- 			if ( _upper < _lower )
- 				break;
- 
- 			_mid = _lower + ((_upper-_lower) >> 1);
- 			if ( (*p) < *_mid )
- 				_upper = _mid - 1;
- 			else if ( (*p) > *_mid )
- 				_lower = _mid + 1;
- 			else {
- 				_trans += (_mid - _keys);
- 				goto _match;
- 			}
- 		}
- 		_keys += _klen;
- 		_trans += _klen;
- 	}
- 
- 	_klen = _lexer_range_lengths[cs];
- 	if ( _klen > 0 ) {
- 		const char *_lower = _keys;
- 		const char *_mid;
- 		const char *_upper = _keys + (_klen<<1) - 2;
- 		while (1) {
- 			if ( _upper < _lower )
- 				break;
- 
- 			_mid = _lower + (((_upper-_lower) >> 1) & ~1);
- 			if ( (*p) < _mid[0] )
- 				_upper = _mid - 2;
- 			else if ( (*p) > _mid[1] )
- 				_lower = _mid + 2;
- 			else {
- 				_trans += ((_mid - _keys)>>1);
- 				goto _match;
- 			}
- 		}
- 		_trans += _klen;
- 	}
- 
- _match:
- 	cs = _lexer_trans_targs[_trans];
- 
- 	if ( _lexer_trans_actions[_trans] == 0 )
- 		goto _again;
- 
- 	_acts = _lexer_actions + _lexer_trans_actions[_trans];
- 	_nacts = (unsigned int) *_acts++;
- 	while ( _nacts-- > 0 )
- 	{
- 		switch ( *_acts++ )
- 		{
- 	case 0:
- #line 83 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/no.c.rl"
- 	{
- 		MARK(content_start, p);
-     lexer->current_line = lexer->line_number;
-     lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2;
-   }
- 	break;
- 	case 1:
- #line 89 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/no.c.rl"
- 	{
-     MARK(content_start, p);
-   }
- 	break;
- 	case 2:
- #line 93 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/no.c.rl"
- 	{
-     lexer->current_line = lexer->line_number;
-     lexer->start_col = p - data - lexer->last_newline;
-   }
- 	break;
- 	case 3:
- #line 98 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/no.c.rl"
- 	{
-     int len = LEN(content_start, PTR_TO(final_newline));
-     int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end));
- 
-     if (len < 0) len = 0;
-     if (type_len < 0) len = 0;
- 
-     store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line);
-   }
- 	break;
- 	case 4:
- #line 108 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/no.c.rl"
- 	{ 
-     MARK(docstring_content_type_start, p);
-   }
- 	break;
- 	case 5:
- #line 112 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/no.c.rl"
- 	{ 
-     MARK(docstring_content_type_end, p);
-   }
- 	break;
- 	case 6:
- #line 116 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/no.c.rl"
- 	{
-     STORE_KW_END_CON(feature);
-   }
- 	break;
- 	case 7:
- #line 120 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/no.c.rl"
- 	{
-     STORE_KW_END_CON(background);
-   }
- 	break;
- 	case 8:
- #line 124 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/no.c.rl"
- 	{
-     STORE_KW_END_CON(scenario);
-   }
- 	break;
- 	case 9:
- #line 128 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/no.c.rl"
- 	{
-     STORE_KW_END_CON(scenario_outline);
-   }
- 	break;
- 	case 10:
- #line 132 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/no.c.rl"
- 	{
-     STORE_KW_END_CON(examples);
-   }
- 	break;
- 	case 11:
- #line 136 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/no.c.rl"
- 	{
-     store_kw_con(listener, "step",
-       PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-       PTR_TO(content_start), LEN(content_start, p), 
-       lexer->current_line);
-   }
- 	break;
- 	case 12:
- #line 143 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/no.c.rl"
- 	{
-     STORE_ATTR(comment);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 13:
- #line 148 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/no.c.rl"
- 	{
-     STORE_ATTR(tag);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 14:
- #line 153 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/no.c.rl"
- 	{
-     lexer->line_number += 1;
-     MARK(final_newline, p);
-   }
- 	break;
- 	case 15:
- #line 158 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/no.c.rl"
- 	{
-     MARK(last_newline, p + 1);
-   }
- 	break;
- 	case 16:
- #line 162 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/no.c.rl"
- 	{
-     if (lexer->mark == 0) {
-       MARK(mark, p);
-     }
-   }
- 	break;
- 	case 17:
- #line 168 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/no.c.rl"
- 	{
-     MARK(keyword_end, p);
-     MARK(keyword_start, PTR_TO(mark));
-     MARK(content_start, p + 1);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 18:
- #line 175 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/no.c.rl"
- 	{
-     MARK(content_end, p);
-   }
- 	break;
- 	case 19:
- #line 179 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/no.c.rl"
- 	{
-     p = p - 1;
-     lexer->current_line = lexer->line_number;
-     current_row = rb_ary_new();
-   }
- 	break;
- 	case 20:
- #line 185 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/no.c.rl"
- 	{
- 		MARK(content_start, p);
-   }
- 	break;
- 	case 21:
- #line 189 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/no.c.rl"
- 	{
-     VALUE re_pipe, re_newline, re_backslash;
-     VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
-     rb_funcall(con, rb_intern("strip!"), 0);
-     re_pipe      = rb_reg_regcomp(rb_str_new2("\\\\\\|"));
-     re_newline   = rb_reg_regcomp(rb_str_new2("\\\\n"));
-     re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_pipe,      rb_str_new2("|"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_newline,   rb_str_new2("\n"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\"));
- 
-     rb_ary_push(current_row, con);
-   }
- 	break;
- 	case 22:
- #line 203 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/no.c.rl"
- 	{
-     rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
-   }
- 	break;
- 	case 23:
- #line 207 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/no.c.rl"
- 	{
-     int line;
-     if (cs < lexer_first_final) {
-       size_t count = 0;
-       VALUE newstr_val;
-       char *newstr;
-       int newstr_count = 0;        
-       size_t len;
-       const char *buff;
-       if (lexer->last_newline != 0) {
-         len = LEN(last_newline, eof);
-         buff = PTR_TO(last_newline);
-       } else {
-         len = strlen(data);
-         buff = data;
-       }
- 
-       // Allocate as a ruby string so that it gets cleaned up by GC
-       newstr_val = rb_str_new(buff, len);
-       newstr = RSTRING_PTR(newstr_val);
- 
- 
-       for (count = 0; count < len; count++) {
-         if(buff[count] == 10) {
-           newstr[newstr_count] = '\0'; // terminate new string at first newline found
-           break;
-         } else {
-           if (buff[count] == '%') {
-             newstr[newstr_count++] = buff[count];
-             newstr[newstr_count] = buff[count];
-           } else {
-             newstr[newstr_count] = buff[count];
-           }
-         }
-         newstr_count++;
-       }
- 
-       line = lexer->line_number;
-       lexer_init(lexer); // Re-initialize so we can scan again with the same lexer
-       raise_lexer_error(newstr, line);
-     } else {
-       rb_funcall(listener, rb_intern("eof"), 0);
-     }
-   }
- 	break;
- #line 1212 "ext/gherkin_lexer_no/gherkin_lexer_no.c"
- 		}
- 	}
- 
- _again:
- 	if ( cs == 0 )
- 		goto _out;
- 	if ( ++p != pe )
- 		goto _resume;
- 	_test_eof: {}
- 	if ( p == eof )
- 	{
- 	const char *__acts = _lexer_actions + _lexer_eof_actions[cs];
- 	unsigned int __nacts = (unsigned int) *__acts++;
- 	while ( __nacts-- > 0 ) {
- 		switch ( *__acts++ ) {
- 	case 23:
- #line 207 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/no.c.rl"
- 	{
-     int line;
-     if (cs < lexer_first_final) {
-       size_t count = 0;
-       VALUE newstr_val;
-       char *newstr;
-       int newstr_count = 0;        
-       size_t len;
-       const char *buff;
-       if (lexer->last_newline != 0) {
-         len = LEN(last_newline, eof);
-         buff = PTR_TO(last_newline);
-       } else {
-         len = strlen(data);
-         buff = data;
-       }
- 
-       // Allocate as a ruby string so that it gets cleaned up by GC
-       newstr_val = rb_str_new(buff, len);
-       newstr = RSTRING_PTR(newstr_val);
- 
- 
-       for (count = 0; count < len; count++) {
-         if(buff[count] == 10) {
-           newstr[newstr_count] = '\0'; // terminate new string at first newline found
-           break;
-         } else {
-           if (buff[count] == '%') {
-             newstr[newstr_count++] = buff[count];
-             newstr[newstr_count] = buff[count];
-           } else {
-             newstr[newstr_count] = buff[count];
-           }
-         }
-         newstr_count++;
-       }
- 
-       line = lexer->line_number;
-       lexer_init(lexer); // Re-initialize so we can scan again with the same lexer
-       raise_lexer_error(newstr, line);
-     } else {
-       rb_funcall(listener, rb_intern("eof"), 0);
-     }
-   }
- 	break;
- #line 1275 "ext/gherkin_lexer_no/gherkin_lexer_no.c"
- 		}
- 	}
- 	}
- 
- 	_out: {}
- 	}
- 
- #line 426 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/no.c.rl"
- 
-     assert(p <= pe && "data overflow after parsing execute");
-     assert(lexer->content_start <= len && "content starts after data end");
-     assert(lexer->mark < len && "mark is after data end");
-     
-     // Reset lexer by re-initializing the whole thing
-     lexer_init(lexer);
- 
-     if (cs == lexer_error) {
-       rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails.");
-     } else {
-       return Qtrue;
-     }
-   }
- }
- 
- void Init_gherkin_lexer_no()
- {
-   mGherkin = rb_define_module("Gherkin");
-   mGherkinLexer = rb_define_module_under(mGherkin, "Lexer");
-   rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError"));
- 
-   mCLexer = rb_define_module_under(mGherkin, "CLexer");
-   cI18nLexer = rb_define_class_under(mCLexer, "No", rb_cObject);
-   rb_define_alloc_func(cI18nLexer, CLexer_alloc);
-   rb_define_method(cI18nLexer, "initialize", CLexer_init, 1);
-   rb_define_method(cI18nLexer, "scan", CLexer_scan, 1);
- }
- 
 -#line 1 "ragel/i18n/no.c.rl"
 -#include <assert.h>
 -#include <ruby.h>
 -
 -#if defined(_WIN32)
 -#include <stddef.h>
 -#endif
 -
 -#ifdef HAVE_RUBY_RE_H
 -#include <ruby/re.h>
 -#else
 -#include <re.h>
 -#endif
 -
 -#ifdef HAVE_RUBY_ENCODING_H
 -#include <ruby/encoding.h>
 -#define ENCODED_STR_NEW(ptr, len) \
 -    rb_enc_str_new(ptr, len, rb_utf8_encoding())
 -#else
 -#define ENCODED_STR_NEW(ptr, len) \
 -    rb_str_new(ptr, len)
 -#endif
 -
 -#ifndef RSTRING_PTR
 -#define RSTRING_PTR(s) (RSTRING(s)->ptr)
 -#endif
 -
 -#ifndef RSTRING_LEN
 -#define RSTRING_LEN(s) (RSTRING(s)->len)
 -#endif
 -
 -#define DATA_GET(FROM, TYPE, NAME) \
 -  Data_Get_Struct(FROM, TYPE, NAME); \
 -  if (NAME == NULL) { \
 -    rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \
 -  }
 - 
 -typedef struct lexer_state {
 -  int content_len;
 -  int line_number;
 -  int current_line;
 -  int start_col;
 -  size_t mark;
 -  size_t keyword_start;
 -  size_t keyword_end;
 -  size_t next_keyword_start;
 -  size_t content_start;
 -  size_t content_end;
 -  size_t docstring_content_type_start;
 -  size_t docstring_content_type_end;
 -  size_t query_start;
 -  size_t last_newline;
 -  size_t final_newline;
 -} lexer_state;
 -
 -static VALUE mGherkin;
 -static VALUE mGherkinLexer;
 -static VALUE mCLexer;
 -static VALUE cI18nLexer;
 -static VALUE rb_eGherkinLexingError;
 -
 -#define LEN(AT, P) (P - data - lexer->AT)
 -#define MARK(M, P) (lexer->M = (P) - data)
 -#define PTR_TO(P) (data + lexer->P)
 -
 -#define STORE_KW_END_CON(EVENT) \
 -  store_multiline_kw_con(listener, # EVENT, \
 -    PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \
 -    PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \
 -    lexer->current_line, lexer->start_col); \
 -    if (lexer->content_end != 0) { \
 -      p = PTR_TO(content_end - 1); \
 -    } \
 -    lexer->content_end = 0
 -
 -#define STORE_ATTR(ATTR) \
 -    store_attr(listener, # ATTR, \
 -      PTR_TO(content_start), LEN(content_start, p), \
 -      lexer->line_number)
 -
 -
 -#line 254 "ragel/i18n/no.c.rl"
 -
 -
 -/** Data **/
 -
 -#line 89 "ext/gherkin_lexer_no/gherkin_lexer_no.c"
 -static const char _lexer_actions[] = {
 -	0, 1, 0, 1, 1, 1, 2, 1, 
 -	3, 1, 4, 1, 5, 1, 6, 1, 
 -	7, 1, 8, 1, 9, 1, 10, 1, 
 -	11, 1, 12, 1, 13, 1, 16, 1, 
 -	17, 1, 18, 1, 19, 1, 20, 1, 
 -	21, 1, 22, 1, 23, 2, 1, 18, 
 -	2, 4, 5, 2, 13, 0, 2, 14, 
 -	15, 2, 17, 0, 2, 17, 2, 2, 
 -	17, 16, 2, 17, 19, 2, 18, 6, 
 -	2, 18, 7, 2, 18, 8, 2, 18, 
 -	9, 2, 18, 10, 2, 18, 16, 2, 
 -	20, 21, 2, 22, 0, 2, 22, 2, 
 -	2, 22, 16, 2, 22, 19, 3, 3, 
 -	14, 15, 3, 5, 14, 15, 3, 11, 
 -	14, 15, 3, 12, 14, 15, 3, 13, 
 -	14, 15, 3, 14, 15, 18, 3, 17, 
 -	0, 11, 3, 17, 14, 15, 4, 1, 
 -	14, 15, 18, 4, 4, 5, 14, 15, 
 -	4, 17, 0, 14, 15, 5, 17, 0, 
 -	11, 14, 15
 -};
 -
 -static const short _lexer_key_offsets[] = {
 -	0, 0, 19, 20, 21, 39, 40, 41, 
 -	43, 45, 50, 55, 60, 65, 69, 73, 
 -	75, 76, 77, 78, 79, 80, 81, 82, 
 -	83, 84, 85, 86, 87, 88, 89, 90, 
 -	91, 93, 95, 100, 107, 112, 113, 114, 
 -	115, 116, 117, 118, 119, 120, 121, 122, 
 -	123, 124, 125, 126, 127, 128, 129, 130, 
 -	131, 145, 147, 149, 151, 153, 155, 157, 
 -	159, 161, 163, 165, 167, 169, 171, 173, 
 -	175, 193, 194, 195, 196, 197, 198, 199, 
 -	200, 201, 202, 203, 218, 220, 222, 224, 
 -	226, 228, 230, 232, 234, 236, 238, 240, 
 -	242, 244, 246, 248, 250, 252, 254, 256, 
 -	258, 260, 262, 264, 266, 268, 270, 272, 
 -	274, 276, 278, 280, 282, 284, 286, 288, 
 -	290, 292, 294, 296, 298, 300, 302, 304, 
 -	306, 308, 310, 312, 314, 317, 319, 321, 
 -	323, 325, 327, 329, 331, 334, 336, 338, 
 -	340, 341, 342, 343, 344, 345, 346, 347, 
 -	348, 349, 360, 362, 364, 366, 368, 370, 
 -	372, 374, 376, 378, 380, 382, 384, 386, 
 -	388, 390, 392, 394, 396, 398, 400, 402, 
 -	404, 406, 408, 410, 412, 414, 416, 418, 
 -	420, 422, 424, 426, 428, 430, 432, 434, 
 -	436, 439, 441, 443, 445, 447, 449, 451, 
 -	453, 455, 457, 459, 461, 463, 465, 467, 
 -	469, 471, 473, 475, 477, 479, 482, 484, 
 -	486, 487, 488, 489, 490, 491, 492, 493, 
 -	494, 495, 496, 503, 505, 507, 509, 511, 
 -	513, 515, 517, 519, 520, 521, 522, 523, 
 -	524, 525, 526, 527, 528, 530, 531, 532, 
 -	533, 534, 535, 536, 537, 539, 540, 541, 
 -	557, 559, 561, 563, 565, 567, 569, 571, 
 -	573, 575, 577, 579, 581, 583, 585, 587, 
 -	589, 591, 593, 595, 597, 599, 601, 603, 
 -	605, 607, 609, 611, 613, 615, 617, 619, 
 -	621, 623, 625, 627, 629, 631, 633, 635, 
 -	637, 639, 641, 643, 645, 647, 649, 651, 
 -	653, 655, 657, 659, 661, 663, 665, 667, 
 -	670, 672, 674, 676, 678, 680, 682, 684, 
 -	687, 689, 691, 692, 693, 697, 703, 706, 
 -	708, 714, 732, 734, 736, 738, 740, 742, 
 -	744, 746, 748, 750, 752, 754, 756, 758, 
 -	760, 762, 764, 766, 769, 771, 773, 775, 
 -	777, 779, 781, 783
 -};
 -
 -static const char _lexer_trans_keys[] = {
 -	-17, 10, 32, 34, 35, 37, 42, 64, 
 -	65, 66, 69, 71, 77, 78, 79, 83, 
 -	124, 9, 13, -69, -65, 10, 32, 34, 
 -	35, 37, 42, 64, 65, 66, 69, 71, 
 -	77, 78, 79, 83, 124, 9, 13, 34, 
 -	34, 10, 13, 10, 13, 10, 32, 34, 
 -	9, 13, 10, 32, 34, 9, 13, 10, 
 -	32, 34, 9, 13, 10, 32, 34, 9, 
 -	13, 10, 32, 9, 13, 10, 32, 9, 
 -	13, 10, 13, 10, 95, 70, 69, 65, 
 -	84, 85, 82, 69, 95, 69, 78, 68, 
 -	95, 37, 32, 10, 13, 10, 13, 13, 
 -	32, 64, 9, 10, 9, 10, 13, 32, 
 -	64, 11, 12, 10, 32, 64, 9, 13, 
 -	98, 115, 116, 114, 97, 107, 116, 32, 
 -	83, 99, 101, 110, 97, 114, 105, 111, 
 -	58, 10, 10, 10, 32, 35, 37, 42, 
 -	64, 69, 71, 77, 78, 79, 83, 9, 
 -	13, 10, 95, 10, 70, 10, 69, 10, 
 -	65, 10, 84, 10, 85, 10, 82, 10, 
 -	69, 10, 95, 10, 69, 10, 78, 10, 
 -	68, 10, 95, 10, 37, 10, 32, 10, 
 -	32, 34, 35, 37, 42, 64, 65, 66, 
 -	69, 71, 77, 78, 79, 83, 124, 9, 
 -	13, 97, 107, 103, 114, 117, 110, 110, 
 -	58, 10, 10, 10, 32, 35, 37, 42, 
 -	64, 65, 69, 71, 77, 78, 79, 83, 
 -	9, 13, 10, 95, 10, 70, 10, 69, 
 -	10, 65, 10, 84, 10, 85, 10, 82, 
 -	10, 69, 10, 95, 10, 69, 10, 78, 
 -	10, 68, 10, 95, 10, 37, 10, 32, 
 -	10, 98, 10, 115, 10, 116, 10, 114, 
 -	10, 97, 10, 107, 10, 116, 10, 32, 
 -	10, 83, 10, 99, 10, 101, 10, 110, 
 -	10, 97, 10, 114, 10, 105, 10, 111, 
 -	10, 58, 10, 103, 10, 101, 10, 110, 
 -	10, 115, 10, 107, 10, 97, 10, 112, 
 -	10, 105, 10, 116, 10, 116, 10, 101, 
 -	10, 110, -61, 10, -91, 10, 10, 114, 
 -	10, 103, -61, 10, 99, -91, 10, 10, 
 -	101, 10, 110, 10, 97, 10, 114, 10, 
 -	105, 10, 111, 10, 58, 109, 10, 97, 
 -	10, 108, 103, 107, 101, 110, 115, 107, 
 -	97, 112, 58, 10, 10, 10, 32, 35, 
 -	37, 64, 65, 66, 69, 83, 9, 13, 
 -	10, 95, 10, 70, 10, 69, 10, 65, 
 -	10, 84, 10, 85, 10, 82, 10, 69, 
 -	10, 95, 10, 69, 10, 78, 10, 68, 
 -	10, 95, 10, 37, 10, 98, 10, 115, 
 -	10, 116, 10, 114, 10, 97, 10, 107, 
 -	10, 116, 10, 32, 10, 83, 10, 99, 
 -	10, 101, 10, 110, 10, 97, 10, 114, 
 -	10, 105, 10, 111, 10, 58, 10, 97, 
 -	10, 107, 10, 103, 10, 114, 10, 117, 
 -	10, 110, 10, 110, 10, 103, 107, 10, 
 -	101, 10, 110, 10, 115, 10, 107, 10, 
 -	97, 10, 112, 10, 115, 10, 101, 10, 
 -	109, 10, 112, 10, 108, 10, 101, 10, 
 -	114, 10, 99, 10, 101, 10, 110, 10, 
 -	97, 10, 114, 10, 105, 10, 111, 10, 
 -	58, 109, 10, 97, 10, 108, 115, 101, 
 -	109, 112, 108, 101, 114, 58, 10, 10, 
 -	10, 32, 35, 69, 124, 9, 13, 10, 
 -	103, 10, 101, 10, 110, 10, 115, 10, 
 -	107, 10, 97, 10, 112, 10, 58, 105, 
 -	116, 116, 101, 110, -61, -91, 114, 103, 
 -	-61, 99, -91, 101, 110, 97, 114, 105, 
 -	111, 58, 109, 10, 10, 10, 32, 35, 
 -	37, 42, 64, 65, 66, 69, 71, 77, 
 -	78, 79, 83, 9, 13, 10, 95, 10, 
 -	70, 10, 69, 10, 65, 10, 84, 10, 
 -	85, 10, 82, 10, 69, 10, 95, 10, 
 -	69, 10, 78, 10, 68, 10, 95, 10, 
 -	37, 10, 32, 10, 98, 10, 115, 10, 
 -	116, 10, 114, 10, 97, 10, 107, 10, 
 -	116, 10, 32, 10, 83, 10, 99, 10, 
 -	101, 10, 110, 10, 97, 10, 114, 10, 
 -	105, 10, 111, 10, 58, 10, 97, 10, 
 -	107, 10, 103, 10, 114, 10, 117, 10, 
 -	110, 10, 110, 10, 103, 10, 101, 10, 
 -	110, 10, 115, 10, 107, 10, 97, 10, 
 -	112, 10, 105, 10, 116, 10, 116, 10, 
 -	101, 10, 110, -61, 10, -91, 10, 10, 
 -	114, 10, 103, -61, 10, 99, -91, 10, 
 -	10, 101, 10, 110, 10, 97, 10, 114, 
 -	10, 105, 10, 111, 10, 58, 109, 10, 
 -	97, 10, 108, 97, 108, 32, 124, 9, 
 -	13, 10, 32, 92, 124, 9, 13, 10, 
 -	92, 124, 10, 92, 10, 32, 92, 124, 
 -	9, 13, 10, 32, 34, 35, 37, 42, 
 -	64, 65, 66, 69, 71, 77, 78, 79, 
 -	83, 124, 9, 13, 10, 103, 10, 101, 
 -	10, 110, 10, 115, 10, 107, 10, 97, 
 -	10, 112, 10, 58, 10, 105, 10, 116, 
 -	10, 116, 10, 101, 10, 110, -61, 10, 
 -	-91, 10, 10, 114, 10, 103, -61, 10, 
 -	99, -91, 10, 10, 101, 10, 110, 10, 
 -	97, 10, 114, 10, 105, 10, 111, 0
 -};
 -
 -static const char _lexer_single_lengths[] = {
 -	0, 17, 1, 1, 16, 1, 1, 2, 
 -	2, 3, 3, 3, 3, 2, 2, 2, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	2, 2, 3, 5, 3, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	12, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	16, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 13, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 3, 2, 2, 2, 
 -	2, 2, 2, 2, 3, 2, 2, 2, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 9, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	3, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 3, 2, 2, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 5, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 2, 1, 1, 1, 
 -	1, 1, 1, 1, 2, 1, 1, 14, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 3, 
 -	2, 2, 2, 2, 2, 2, 2, 3, 
 -	2, 2, 1, 1, 2, 4, 3, 2, 
 -	4, 16, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 3, 2, 2, 2, 2, 
 -	2, 2, 2, 0
 -};
 -
 -static const char _lexer_range_lengths[] = {
 -	0, 1, 0, 0, 1, 0, 0, 0, 
 -	0, 1, 1, 1, 1, 1, 1, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 1, 1, 1, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	1, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	1, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 1, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 1, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 1, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 1, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 1, 1, 0, 0, 
 -	1, 1, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0
 -};
 -
 -static const short _lexer_index_offsets[] = {
 -	0, 0, 19, 21, 23, 41, 43, 45, 
 -	48, 51, 56, 61, 66, 71, 75, 79, 
 -	82, 84, 86, 88, 90, 92, 94, 96, 
 -	98, 100, 102, 104, 106, 108, 110, 112, 
 -	114, 117, 120, 125, 132, 137, 139, 141, 
 -	143, 145, 147, 149, 151, 153, 155, 157, 
 -	159, 161, 163, 165, 167, 169, 171, 173, 
 -	175, 189, 192, 195, 198, 201, 204, 207, 
 -	210, 213, 216, 219, 222, 225, 228, 231, 
 -	234, 252, 254, 256, 258, 260, 262, 264, 
 -	266, 268, 270, 272, 287, 290, 293, 296, 
 -	299, 302, 305, 308, 311, 314, 317, 320, 
 -	323, 326, 329, 332, 335, 338, 341, 344, 
 -	347, 350, 353, 356, 359, 362, 365, 368, 
 -	371, 374, 377, 380, 383, 386, 389, 392, 
 -	395, 398, 401, 404, 407, 410, 413, 416, 
 -	419, 422, 425, 428, 431, 435, 438, 441, 
 -	444, 447, 450, 453, 456, 460, 463, 466, 
 -	469, 471, 473, 475, 477, 479, 481, 483, 
 -	485, 487, 498, 501, 504, 507, 510, 513, 
 -	516, 519, 522, 525, 528, 531, 534, 537, 
 -	540, 543, 546, 549, 552, 555, 558, 561, 
 -	564, 567, 570, 573, 576, 579, 582, 585, 
 -	588, 591, 594, 597, 600, 603, 606, 609, 
 -	612, 616, 619, 622, 625, 628, 631, 634, 
 -	637, 640, 643, 646, 649, 652, 655, 658, 
 -	661, 664, 667, 670, 673, 676, 680, 683, 
 -	686, 688, 690, 692, 694, 696, 698, 700, 
 -	702, 704, 706, 713, 716, 719, 722, 725, 
 -	728, 731, 734, 737, 739, 741, 743, 745, 
 -	747, 749, 751, 753, 755, 758, 760, 762, 
 -	764, 766, 768, 770, 772, 775, 777, 779, 
 -	795, 798, 801, 804, 807, 810, 813, 816, 
 -	819, 822, 825, 828, 831, 834, 837, 840, 
 -	843, 846, 849, 852, 855, 858, 861, 864, 
 -	867, 870, 873, 876, 879, 882, 885, 888, 
 -	891, 894, 897, 900, 903, 906, 909, 912, 
 -	915, 918, 921, 924, 927, 930, 933, 936, 
 -	939, 942, 945, 948, 951, 954, 957, 960, 
 -	964, 967, 970, 973, 976, 979, 982, 985, 
 -	989, 992, 995, 997, 999, 1003, 1009, 1013, 
 -	1016, 1022, 1040, 1043, 1046, 1049, 1052, 1055, 
 -	1058, 1061, 1064, 1067, 1070, 1073, 1076, 1079, 
 -	1082, 1085, 1088, 1091, 1095, 1098, 1101, 1104, 
 -	1107, 1110, 1113, 1116
 -};
 -
 -static const short _lexer_trans_targs[] = {
 -	2, 4, 4, 5, 15, 17, 31, 34, 
 -	37, 73, 143, 235, 238, 240, 243, 244, 
 -	324, 4, 0, 3, 0, 4, 0, 4, 
 -	4, 5, 15, 17, 31, 34, 37, 73, 
 -	143, 235, 238, 240, 243, 244, 324, 4, 
 -	0, 6, 0, 7, 0, 9, 8, 8, 
 -	9, 8, 8, 10, 10, 11, 10, 10, 
 -	10, 10, 11, 10, 10, 10, 10, 12, 
 -	10, 10, 10, 10, 13, 10, 10, 4, 
 -	14, 14, 0, 4, 14, 14, 0, 4, 
 -	16, 15, 4, 0, 18, 0, 19, 0, 
 -	20, 0, 21, 0, 22, 0, 23, 0, 
 -	24, 0, 25, 0, 26, 0, 27, 0, 
 -	28, 0, 29, 0, 30, 0, 355, 0, 
 -	32, 0, 4, 16, 33, 4, 16, 33, 
 -	0, 0, 0, 0, 35, 36, 4, 36, 
 -	36, 34, 35, 35, 4, 36, 34, 36, 
 -	0, 38, 0, 39, 0, 40, 0, 41, 
 -	0, 42, 0, 43, 0, 44, 0, 45, 
 -	0, 46, 0, 47, 0, 48, 0, 49, 
 -	0, 50, 0, 51, 0, 52, 0, 53, 
 -	0, 54, 0, 56, 55, 56, 55, 56, 
 -	56, 4, 57, 71, 4, 330, 338, 341, 
 -	343, 346, 347, 56, 55, 56, 58, 55, 
 -	56, 59, 55, 56, 60, 55, 56, 61, 
 -	55, 56, 62, 55, 56, 63, 55, 56, 
 -	64, 55, 56, 65, 55, 56, 66, 55, 
 -	56, 67, 55, 56, 68, 55, 56, 69, 
 -	55, 56, 70, 55, 56, 4, 55, 56, 
 -	72, 55, 4, 4, 5, 15, 17, 31, 
 -	34, 37, 73, 143, 235, 238, 240, 243, 
 -	244, 324, 4, 0, 74, 0, 75, 0, 
 -	76, 0, 77, 0, 78, 0, 79, 0, 
 -	80, 0, 81, 0, 83, 82, 83, 82, 
 -	83, 83, 4, 84, 98, 4, 99, 116, 
 -	123, 126, 128, 131, 132, 83, 82, 83, 
 -	85, 82, 83, 86, 82, 83, 87, 82, 
 -	83, 88, 82, 83, 89, 82, 83, 90, 
 -	82, 83, 91, 82, 83, 92, 82, 83, 
 -	93, 82, 83, 94, 82, 83, 95, 82, 
 -	83, 96, 82, 83, 97, 82, 83, 4, 
 -	82, 83, 72, 82, 83, 100, 82, 83, 
 -	101, 82, 83, 102, 82, 83, 103, 82, 
 -	83, 104, 82, 83, 105, 82, 83, 106, 
 -	82, 83, 107, 82, 83, 108, 82, 83, 
 -	109, 82, 83, 110, 82, 83, 111, 82, 
 -	83, 112, 82, 83, 113, 82, 83, 114, 
 -	82, 83, 115, 82, 83, 72, 82, 83, 
 -	117, 82, 83, 118, 82, 83, 119, 82, 
 -	83, 120, 82, 83, 121, 82, 83, 122, 
 -	82, 83, 115, 82, 83, 124, 82, 83, 
 -	125, 82, 83, 98, 82, 83, 127, 82, 
 -	83, 98, 82, 129, 83, 82, 130, 83, 
 -	82, 83, 98, 82, 83, 98, 82, 133, 
 -	83, 134, 82, 98, 83, 82, 83, 135, 
 -	82, 83, 136, 82, 83, 137, 82, 83, 
 -	138, 82, 83, 139, 82, 83, 140, 82, 
 -	83, 72, 141, 82, 83, 142, 82, 83, 
 -	115, 82, 144, 216, 0, 145, 0, 146, 
 -	0, 147, 0, 148, 0, 149, 0, 150, 
 -	0, 151, 0, 153, 152, 153, 152, 153, 
 -	153, 4, 154, 4, 168, 185, 192, 206, 
 -	153, 152, 153, 155, 152, 153, 156, 152, 
 -	153, 157, 152, 153, 158, 152, 153, 159, 
 -	152, 153, 160, 152, 153, 161, 152, 153, 
 -	162, 152, 153, 163, 152, 153, 164, 152, 
 -	153, 165, 152, 153, 166, 152, 153, 167, 
 -	152, 153, 4, 152, 153, 169, 152, 153, 
 -	170, 152, 153, 171, 152, 153, 172, 152, 
 -	153, 173, 152, 153, 174, 152, 153, 175, 
 -	152, 153, 176, 152, 153, 177, 152, 153, 
 -	178, 152, 153, 179, 152, 153, 180, 152, 
 -	153, 181, 152, 153, 182, 152, 153, 183, 
 -	152, 153, 184, 152, 153, 72, 152, 153, 
 -	186, 152, 153, 187, 152, 153, 188, 152, 
 -	153, 189, 152, 153, 190, 152, 153, 191, 
 -	152, 153, 184, 152, 153, 193, 199, 152, 
 -	153, 194, 152, 153, 195, 152, 153, 196, 
 -	152, 153, 197, 152, 153, 198, 152, 153, 
 -	184, 152, 153, 200, 152, 153, 201, 152, 
 -	153, 202, 152, 153, 203, 152, 153, 204, 
 -	152, 153, 205, 152, 153, 184, 152, 153, 
 -	207, 152, 153, 208, 152, 153, 209, 152, 
 -	153, 210, 152, 153, 211, 152, 153, 212, 
 -	152, 153, 213, 152, 153, 72, 214, 152, 
 -	153, 215, 152, 153, 184, 152, 217, 0, 
 -	218, 0, 219, 0, 220, 0, 221, 0, 
 -	222, 0, 223, 0, 224, 0, 226, 225, 
 -	226, 225, 226, 226, 4, 227, 4, 226, 
 -	225, 226, 228, 225, 226, 229, 225, 226, 
 -	230, 225, 226, 231, 225, 226, 232, 225, 
 -	226, 233, 225, 226, 234, 225, 226, 72, 
 -	225, 236, 0, 237, 0, 31, 0, 239, 
 -	0, 31, 0, 241, 0, 242, 0, 31, 
 -	0, 31, 0, 245, 246, 0, 31, 0, 
 -	247, 0, 248, 0, 249, 0, 250, 0, 
 -	251, 0, 252, 0, 253, 322, 0, 255, 
 -	254, 255, 254, 255, 255, 4, 256, 270, 
 -	4, 271, 288, 295, 302, 305, 307, 310, 
 -	311, 255, 254, 255, 257, 254, 255, 258, 
 -	254, 255, 259, 254, 255, 260, 254, 255, 
 -	261, 254, 255, 262, 254, 255, 263, 254, 
 -	255, 264, 254, 255, 265, 254, 255, 266, 
 -	254, 255, 267, 254, 255, 268, 254, 255, 
 -	269, 254, 255, 4, 254, 255, 72, 254, 
 -	255, 272, 254, 255, 273, 254, 255, 274, 
 -	254, 255, 275, 254, 255, 276, 254, 255, 
 -	277, 254, 255, 278, 254, 255, 279, 254, 
 -	255, 280, 254, 255, 281, 254, 255, 282, 
 -	254, 255, 283, 254, 255, 284, 254, 255, 
 -	285, 254, 255, 286, 254, 255, 287, 254, 
 -	255, 72, 254, 255, 289, 254, 255, 290, 
 -	254, 255, 291, 254, 255, 292, 254, 255, 
 -	293, 254, 255, 294, 254, 255, 287, 254, 
 -	255, 296, 254, 255, 297, 254, 255, 298, 
 -	254, 255, 299, 254, 255, 300, 254, 255, 
 -	301, 254, 255, 287, 254, 255, 303, 254, 
 -	255, 304, 254, 255, 270, 254, 255, 306, 
 -	254, 255, 270, 254, 308, 255, 254, 309, 
 -	255, 254, 255, 270, 254, 255, 270, 254, 
 -	312, 255, 313, 254, 270, 255, 254, 255, 
 -	314, 254, 255, 315, 254, 255, 316, 254, 
 -	255, 317, 254, 255, 318, 254, 255, 319, 
 -	254, 255, 72, 320, 254, 255, 321, 254, 
 -	255, 287, 254, 323, 0, 53, 0, 324, 
 -	325, 324, 0, 329, 328, 327, 325, 328, 
 -	326, 0, 327, 325, 326, 0, 327, 326, 
 -	329, 328, 327, 325, 328, 326, 329, 329, 
 -	5, 15, 17, 31, 34, 37, 73, 143, 
 -	235, 238, 240, 243, 244, 324, 329, 0, 
 -	56, 331, 55, 56, 332, 55, 56, 333, 
 -	55, 56, 334, 55, 56, 335, 55, 56, 
 -	336, 55, 56, 337, 55, 56, 72, 55, 
 -	56, 339, 55, 56, 340, 55, 56, 71, 
 -	55, 56, 342, 55, 56, 71, 55, 344, 
 -	56, 55, 345, 56, 55, 56, 71, 55, 
 -	56, 71, 55, 348, 56, 349, 55, 71, 
 -	56, 55, 56, 350, 55, 56, 351, 55, 
 -	56, 352, 55, 56, 353, 55, 56, 354, 
 -	55, 56, 337, 55, 0, 0
 -};
 -
 -static const unsigned char _lexer_trans_actions[] = {
 -	0, 54, 0, 5, 1, 0, 29, 1, 
 -	29, 29, 29, 29, 29, 29, 29, 29, 
 -	35, 0, 43, 0, 43, 0, 43, 54, 
 -	0, 5, 1, 0, 29, 1, 29, 29, 
 -	29, 29, 29, 29, 29, 29, 35, 0, 
 -	43, 0, 43, 0, 43, 139, 48, 9, 
 -	106, 11, 0, 134, 45, 45, 45, 3, 
 -	122, 33, 33, 33, 0, 122, 33, 33, 
 -	33, 0, 122, 33, 0, 33, 0, 102, 
 -	7, 7, 43, 54, 0, 0, 43, 114, 
 -	25, 0, 54, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 149, 126, 57, 110, 23, 0, 
 -	43, 43, 43, 43, 0, 27, 118, 27, 
 -	27, 51, 27, 0, 54, 0, 1, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 144, 57, 54, 0, 54, 
 -	0, 78, 33, 84, 78, 84, 84, 84, 
 -	84, 84, 84, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 19, 0, 54, 
 -	19, 0, 130, 31, 60, 57, 31, 63, 
 -	57, 63, 63, 63, 63, 63, 63, 63, 
 -	63, 66, 31, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 144, 57, 54, 0, 
 -	54, 0, 72, 33, 84, 72, 84, 84, 
 -	84, 84, 84, 84, 84, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 15, 
 -	0, 54, 15, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 15, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 0, 54, 0, 0, 54, 
 -	0, 54, 0, 0, 54, 0, 0, 0, 
 -	54, 0, 0, 0, 54, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 15, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 0, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 144, 57, 54, 0, 54, 
 -	0, 69, 33, 69, 84, 84, 84, 84, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 13, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 13, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 13, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 144, 57, 
 -	54, 0, 54, 0, 81, 84, 81, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 21, 
 -	0, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 0, 43, 144, 
 -	57, 54, 0, 54, 0, 75, 33, 84, 
 -	75, 84, 84, 84, 84, 84, 84, 84, 
 -	84, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 17, 0, 54, 17, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 17, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 0, 54, 0, 0, 
 -	54, 0, 54, 0, 0, 54, 0, 0, 
 -	0, 54, 0, 0, 0, 54, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 17, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 0, 43, 0, 43, 0, 
 -	0, 0, 43, 54, 37, 37, 87, 37, 
 -	37, 43, 0, 39, 0, 43, 0, 0, 
 -	54, 0, 0, 39, 0, 0, 54, 0, 
 -	93, 90, 41, 96, 90, 96, 96, 96, 
 -	96, 96, 96, 96, 96, 99, 0, 43, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 19, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 0, 
 -	54, 0, 0, 54, 0, 54, 0, 0, 
 -	54, 0, 0, 0, 54, 0, 0, 0, 
 -	54, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 0, 0
 -};
 -
 -static const unsigned char _lexer_eof_actions[] = {
 -	0, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43
 -};
 -
 -static const int lexer_start = 1;
 -static const int lexer_first_final = 355;
 -static const int lexer_error = 0;
 -
 -static const int lexer_en_main = 1;
 -
 -
 -#line 258 "ragel/i18n/no.c.rl"
 -
 -static VALUE 
 -unindent(VALUE con, int start_col)
 -{
 -  VALUE re;
 -  /* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */
 -  char pat[32]; 
 -  snprintf(pat, 32, "^[\t ]{0,%d}", start_col); 
 -  re = rb_reg_regcomp(rb_str_new2(pat));
 -  rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2(""));
 -
 -  return Qnil;
 -
 -}
 -
 -static void 
 -store_kw_con(VALUE listener, const char * event_name, 
 -             const char * keyword_at, size_t keyword_length, 
 -             const char * at,         size_t length, 
 -             int current_line)
 -{
 -  VALUE con = Qnil, kw = Qnil;
 -  kw = ENCODED_STR_NEW(keyword_at, keyword_length);
 -  con = ENCODED_STR_NEW(at, length);
 -  rb_funcall(con, rb_intern("strip!"), 0);
 -  rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); 
 -}
 -
 -static void
 -store_multiline_kw_con(VALUE listener, const char * event_name,
 -                      const char * keyword_at, size_t keyword_length,
 -                      const char * at,         size_t length,
 -                      int current_line, int start_col)
 -{
 -  VALUE split;
 -  VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil;
 -
 -  kw = ENCODED_STR_NEW(keyword_at, keyword_length);
 -  con = ENCODED_STR_NEW(at, length);
 -
 -  unindent(con, start_col);
 -  
 -  split = rb_str_split(con, "\n");
 -
 -  name = rb_funcall(split, rb_intern("shift"), 0);
 -  desc = rb_ary_join(split, rb_str_new2( "\n" ));
 -
 -  if( name == Qnil ) 
 -  {
 -    name = rb_str_new2("");
 -  }
 -  if( rb_funcall(desc, rb_intern("size"), 0) == 0) 
 -  {
 -    desc = rb_str_new2("");
 -  }
 -  rb_funcall(name, rb_intern("strip!"), 0);
 -  rb_funcall(desc, rb_intern("rstrip!"), 0);
 -  rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); 
 -}
 -
 -static void 
 -store_attr(VALUE listener, const char * attr_type,
 -           const char * at, size_t length, 
 -           int line)
 -{
 -  VALUE val = ENCODED_STR_NEW(at, length);
 -  rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line));
 -}
 -static void 
 -store_docstring_content(VALUE listener, 
 -          int start_col, 
 -          const char *type_at, size_t type_length,
 -          const char *at, size_t length, 
 -          int current_line)
 -{
 -  VALUE re2;
 -  VALUE unescape_escaped_quotes;
 -  VALUE con = ENCODED_STR_NEW(at, length);
 -  VALUE con_type = ENCODED_STR_NEW(type_at, type_length);
 -
 -  unindent(con, start_col);
 -
 -  re2 = rb_reg_regcomp(rb_str_new2("\r\\Z"));
 -  unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\""));
 -  rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2(""));
 -  rb_funcall(con_type, rb_intern("strip!"), 0);
 -  rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\""));
 -  rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line));
 -}
 -static void 
 -raise_lexer_error(const char * at, int line)
 -{ 
 -  rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at);
 -}
 -
 -static void lexer_init(lexer_state *lexer) {
 -  lexer->content_start = 0;
 -  lexer->content_end = 0;
 -  lexer->content_len = 0;
 -  lexer->docstring_content_type_start = 0;
 -  lexer->docstring_content_type_end = 0;
 -  lexer->mark = 0;
 -  lexer->keyword_start = 0;
 -  lexer->keyword_end = 0;
 -  lexer->next_keyword_start = 0;
 -  lexer->line_number = 1;
 -  lexer->last_newline = 0;
 -  lexer->final_newline = 0;
 -  lexer->start_col = 0;
 -}
 -
 -static VALUE CLexer_alloc(VALUE klass)
 -{
 -  VALUE obj;
 -  lexer_state *lxr = ALLOC(lexer_state);
 -  lexer_init(lxr);
 -
 -  obj = Data_Wrap_Struct(klass, NULL, -1, lxr);
 -
 -  return obj;
 -}
 -
 -static VALUE CLexer_init(VALUE self, VALUE listener)
 -{
 -  lexer_state *lxr; 
 -  rb_iv_set(self, "@listener", listener);
 -  
 -  lxr = NULL;
 -  DATA_GET(self, lexer_state, lxr);
 -  lexer_init(lxr);
 -  
 -  return self;
 -}
 -
 -static VALUE CLexer_scan(VALUE self, VALUE input)
 -{
 -  VALUE input_copy;
 -  char *data;
 -  size_t len;
 -  VALUE listener = rb_iv_get(self, "@listener");
 -
 -  lexer_state *lexer;
 -  lexer = NULL;
 -  DATA_GET(self, lexer_state, lexer);
 -
 -  input_copy = rb_str_dup(input);
 -
 -  rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%"));
 -  data = RSTRING_PTR(input_copy);
 -  len = RSTRING_LEN(input_copy);
 -  
 -  if (len == 0) { 
 -    rb_raise(rb_eGherkinLexingError, "No content to lex.");
 -  } else {
 -
 -    const char *p, *pe, *eof;
 -    int cs = 0;
 -    
 -    VALUE current_row = Qnil;
 -
 -    p = data;
 -    pe = data + len;
 -    eof = pe;
 -    
 -    assert(*pe == '\0' && "pointer does not end on NULL");
 -    
 -    
 -#line 915 "ext/gherkin_lexer_no/gherkin_lexer_no.c"
 -	{
 -	cs = lexer_start;
 -	}
 -
 -#line 425 "ragel/i18n/no.c.rl"
 -    
 -#line 922 "ext/gherkin_lexer_no/gherkin_lexer_no.c"
 -	{
 -	int _klen;
 -	unsigned int _trans;
 -	const char *_acts;
 -	unsigned int _nacts;
 -	const char *_keys;
 -
 -	if ( p == pe )
 -		goto _test_eof;
 -	if ( cs == 0 )
 -		goto _out;
 -_resume:
 -	_keys = _lexer_trans_keys + _lexer_key_offsets[cs];
 -	_trans = _lexer_index_offsets[cs];
 -
 -	_klen = _lexer_single_lengths[cs];
 -	if ( _klen > 0 ) {
 -		const char *_lower = _keys;
 -		const char *_mid;
 -		const char *_upper = _keys + _klen - 1;
 -		while (1) {
 -			if ( _upper < _lower )
 -				break;
 -
 -			_mid = _lower + ((_upper-_lower) >> 1);
 -			if ( (*p) < *_mid )
 -				_upper = _mid - 1;
 -			else if ( (*p) > *_mid )
 -				_lower = _mid + 1;
 -			else {
 -				_trans += (unsigned int)(_mid - _keys);
 -				goto _match;
 -			}
 -		}
 -		_keys += _klen;
 -		_trans += _klen;
 -	}
 -
 -	_klen = _lexer_range_lengths[cs];
 -	if ( _klen > 0 ) {
 -		const char *_lower = _keys;
 -		const char *_mid;
 -		const char *_upper = _keys + (_klen<<1) - 2;
 -		while (1) {
 -			if ( _upper < _lower )
 -				break;
 -
 -			_mid = _lower + (((_upper-_lower) >> 1) & ~1);
 -			if ( (*p) < _mid[0] )
 -				_upper = _mid - 2;
 -			else if ( (*p) > _mid[1] )
 -				_lower = _mid + 2;
 -			else {
 -				_trans += (unsigned int)((_mid - _keys)>>1);
 -				goto _match;
 -			}
 -		}
 -		_trans += _klen;
 -	}
 -
 -_match:
 -	cs = _lexer_trans_targs[_trans];
 -
 -	if ( _lexer_trans_actions[_trans] == 0 )
 -		goto _again;
 -
 -	_acts = _lexer_actions + _lexer_trans_actions[_trans];
 -	_nacts = (unsigned int) *_acts++;
 -	while ( _nacts-- > 0 )
 -	{
 -		switch ( *_acts++ )
 -		{
 -	case 0:
 -#line 83 "ragel/i18n/no.c.rl"
 -	{
 -		MARK(content_start, p);
 -    lexer->current_line = lexer->line_number;
 -    lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2;
 -  }
 -	break;
 -	case 1:
 -#line 89 "ragel/i18n/no.c.rl"
 -	{
 -    MARK(content_start, p);
 -  }
 -	break;
 -	case 2:
 -#line 93 "ragel/i18n/no.c.rl"
 -	{
 -    lexer->current_line = lexer->line_number;
 -    lexer->start_col = p - data - lexer->last_newline;
 -  }
 -	break;
 -	case 3:
 -#line 98 "ragel/i18n/no.c.rl"
 -	{
 -    int len = LEN(content_start, PTR_TO(final_newline));
 -    int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end));
 -
 -    if (len < 0) len = 0;
 -    if (type_len < 0) len = 0;
 -
 -    store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line);
 -  }
 -	break;
 -	case 4:
 -#line 108 "ragel/i18n/no.c.rl"
 -	{ 
 -    MARK(docstring_content_type_start, p);
 -  }
 -	break;
 -	case 5:
 -#line 112 "ragel/i18n/no.c.rl"
 -	{ 
 -    MARK(docstring_content_type_end, p);
 -  }
 -	break;
 -	case 6:
 -#line 116 "ragel/i18n/no.c.rl"
 -	{
 -    STORE_KW_END_CON(feature);
 -  }
 -	break;
 -	case 7:
 -#line 120 "ragel/i18n/no.c.rl"
 -	{
 -    STORE_KW_END_CON(background);
 -  }
 -	break;
 -	case 8:
 -#line 124 "ragel/i18n/no.c.rl"
 -	{
 -    STORE_KW_END_CON(scenario);
 -  }
 -	break;
 -	case 9:
 -#line 128 "ragel/i18n/no.c.rl"
 -	{
 -    STORE_KW_END_CON(scenario_outline);
 -  }
 -	break;
 -	case 10:
 -#line 132 "ragel/i18n/no.c.rl"
 -	{
 -    STORE_KW_END_CON(examples);
 -  }
 -	break;
 -	case 11:
 -#line 136 "ragel/i18n/no.c.rl"
 -	{
 -    store_kw_con(listener, "step",
 -      PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
 -      PTR_TO(content_start), LEN(content_start, p), 
 -      lexer->current_line);
 -  }
 -	break;
 -	case 12:
 -#line 143 "ragel/i18n/no.c.rl"
 -	{
 -    STORE_ATTR(comment);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 13:
 -#line 148 "ragel/i18n/no.c.rl"
 -	{
 -    STORE_ATTR(tag);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 14:
 -#line 153 "ragel/i18n/no.c.rl"
 -	{
 -    lexer->line_number += 1;
 -    MARK(final_newline, p);
 -  }
 -	break;
 -	case 15:
 -#line 158 "ragel/i18n/no.c.rl"
 -	{
 -    MARK(last_newline, p + 1);
 -  }
 -	break;
 -	case 16:
 -#line 162 "ragel/i18n/no.c.rl"
 -	{
 -    if (lexer->mark == 0) {
 -      MARK(mark, p);
 -    }
 -  }
 -	break;
 -	case 17:
 -#line 168 "ragel/i18n/no.c.rl"
 -	{
 -    MARK(keyword_end, p);
 -    MARK(keyword_start, PTR_TO(mark));
 -    MARK(content_start, p + 1);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 18:
 -#line 175 "ragel/i18n/no.c.rl"
 -	{
 -    MARK(content_end, p);
 -  }
 -	break;
 -	case 19:
 -#line 179 "ragel/i18n/no.c.rl"
 -	{
 -    p = p - 1;
 -    lexer->current_line = lexer->line_number;
 -    current_row = rb_ary_new();
 -  }
 -	break;
 -	case 20:
 -#line 185 "ragel/i18n/no.c.rl"
 -	{
 -		MARK(content_start, p);
 -  }
 -	break;
 -	case 21:
 -#line 189 "ragel/i18n/no.c.rl"
 -	{
 -    VALUE re_pipe, re_newline, re_backslash;
 -    VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
 -    rb_funcall(con, rb_intern("strip!"), 0);
 -    re_pipe      = rb_reg_regcomp(rb_str_new2("\\\\\\|"));
 -    re_newline   = rb_reg_regcomp(rb_str_new2("\\\\n"));
 -    re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_pipe,      rb_str_new2("|"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_newline,   rb_str_new2("\n"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\"));
 -
 -    rb_ary_push(current_row, con);
 -  }
 -	break;
 -	case 22:
 -#line 203 "ragel/i18n/no.c.rl"
 -	{
 -    rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
 -  }
 -	break;
 -	case 23:
 -#line 207 "ragel/i18n/no.c.rl"
 -	{
 -    int line;
 -    if (cs < lexer_first_final) {
 -      size_t count = 0;
 -      VALUE newstr_val;
 -      char *newstr;
 -      int newstr_count = 0;        
 -      size_t len;
 -      const char *buff;
 -      if (lexer->last_newline != 0) {
 -        len = LEN(last_newline, eof);
 -        buff = PTR_TO(last_newline);
 -      } else {
 -        len = strlen(data);
 -        buff = data;
 -      }
 -
 -      /* Allocate as a ruby string so that it gets cleaned up by GC */
 -      newstr_val = rb_str_new(buff, len);
 -      newstr = RSTRING_PTR(newstr_val);
 -
 -
 -      for (count = 0; count < len; count++) {
 -        if(buff[count] == 10) {
 -          newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
 -          break;
 -        } else {
 -          if (buff[count] == '%') {
 -            newstr[newstr_count++] = buff[count];
 -            newstr[newstr_count] = buff[count];
 -          } else {
 -            newstr[newstr_count] = buff[count];
 -          }
 -        }
 -        newstr_count++;
 -      }
 -
 -      line = lexer->line_number;
 -      lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
 -      raise_lexer_error(newstr, line);
 -    } else {
 -      rb_funcall(listener, rb_intern("eof"), 0);
 -    }
 -  }
 -	break;
 -#line 1212 "ext/gherkin_lexer_no/gherkin_lexer_no.c"
 -		}
 -	}
 -
 -_again:
 -	if ( cs == 0 )
 -		goto _out;
 -	if ( ++p != pe )
 -		goto _resume;
 -	_test_eof: {}
 -	if ( p == eof )
 -	{
 -	const char *__acts = _lexer_actions + _lexer_eof_actions[cs];
 -	unsigned int __nacts = (unsigned int) *__acts++;
 -	while ( __nacts-- > 0 ) {
 -		switch ( *__acts++ ) {
 -	case 23:
 -#line 207 "ragel/i18n/no.c.rl"
 -	{
 -    int line;
 -    if (cs < lexer_first_final) {
 -      size_t count = 0;
 -      VALUE newstr_val;
 -      char *newstr;
 -      int newstr_count = 0;        
 -      size_t len;
 -      const char *buff;
 -      if (lexer->last_newline != 0) {
 -        len = LEN(last_newline, eof);
 -        buff = PTR_TO(last_newline);
 -      } else {
 -        len = strlen(data);
 -        buff = data;
 -      }
 -
 -      /* Allocate as a ruby string so that it gets cleaned up by GC */
 -      newstr_val = rb_str_new(buff, len);
 -      newstr = RSTRING_PTR(newstr_val);
 -
 -
 -      for (count = 0; count < len; count++) {
 -        if(buff[count] == 10) {
 -          newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
 -          break;
 -        } else {
 -          if (buff[count] == '%') {
 -            newstr[newstr_count++] = buff[count];
 -            newstr[newstr_count] = buff[count];
 -          } else {
 -            newstr[newstr_count] = buff[count];
 -          }
 -        }
 -        newstr_count++;
 -      }
 -
 -      line = lexer->line_number;
 -      lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
 -      raise_lexer_error(newstr, line);
 -    } else {
 -      rb_funcall(listener, rb_intern("eof"), 0);
 -    }
 -  }
 -	break;
 -#line 1275 "ext/gherkin_lexer_no/gherkin_lexer_no.c"
 -		}
 -	}
 -	}
 -
 -	_out: {}
 -	}
 -
 -#line 426 "ragel/i18n/no.c.rl"
 -
 -    assert(p <= pe && "data overflow after parsing execute");
 -    assert(lexer->content_start <= len && "content starts after data end");
 -    assert(lexer->mark < len && "mark is after data end");
 -    
 -    /* Reset lexer by re-initializing the whole thing */
 -    lexer_init(lexer);
 -
 -    if (cs == lexer_error) {
 -      rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails.");
 -    } else {
 -      return Qtrue;
 -    }
 -  }
 -}
 -
 -void Init_gherkin_lexer_no()
 -{
 -  mGherkin = rb_define_module("Gherkin");
 -  mGherkinLexer = rb_define_module_under(mGherkin, "Lexer");
 -  rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError"));
 -
 -  mCLexer = rb_define_module_under(mGherkin, "CLexer");
 -  cI18nLexer = rb_define_class_under(mCLexer, "No", rb_cObject);
 -  rb_define_alloc_func(cI18nLexer, CLexer_alloc);
 -  rb_define_method(cI18nLexer, "initialize", CLexer_init, 1);
 -  rb_define_method(cI18nLexer, "scan", CLexer_scan, 1);
 -}
 -
diff --cc ext/gherkin_lexer_pl/extconf.rb
index eae9dd0,eae9dd0..0000000
deleted file mode 100644,100644
--- a/ext/gherkin_lexer_pl/extconf.rb
+++ /dev/null
@@@ -1,6 -1,6 +1,0 @@@
--require 'mkmf'
--CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags']
--$CFLAGS << ' -O0 -Wall' if CONFIG['CC'] =~ /gcc|clang/
--dir_config("gherkin_lexer_pl")
--have_library("c", "main")
--create_makefile("gherkin_lexer_pl")
diff --cc ext/gherkin_lexer_pl/gherkin_lexer_pl.c
index 04a71b1,e3d337c..0000000
deleted file mode 100644,100644
--- a/ext/gherkin_lexer_pl/gherkin_lexer_pl.c
+++ /dev/null
@@@ -1,1738 -1,1738 +1,0 @@@
--
- #line 1 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/pl.c.rl"
- #include <assert.h>
- #include <ruby.h>
- 
- #if defined(_WIN32)
- #include <stddef.h>
- #endif
- 
- #ifdef HAVE_RUBY_RE_H
- #include <ruby/re.h>
- #else
- #include <re.h>
- #endif
- 
- #ifdef HAVE_RUBY_ENCODING_H
- #include <ruby/encoding.h>
- #define ENCODED_STR_NEW(ptr, len) \
-     rb_enc_str_new(ptr, len, rb_utf8_encoding())
- #else
- #define ENCODED_STR_NEW(ptr, len) \
-     rb_str_new(ptr, len)
- #endif
- 
- #ifndef RSTRING_PTR
- #define RSTRING_PTR(s) (RSTRING(s)->ptr)
- #endif
- 
- #ifndef RSTRING_LEN
- #define RSTRING_LEN(s) (RSTRING(s)->len)
- #endif
- 
- #define DATA_GET(FROM, TYPE, NAME) \
-   Data_Get_Struct(FROM, TYPE, NAME); \
-   if (NAME == NULL) { \
-     rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \
-   }
-  
- typedef struct lexer_state {
-   int content_len;
-   int line_number;
-   int current_line;
-   int start_col;
-   size_t mark;
-   size_t keyword_start;
-   size_t keyword_end;
-   size_t next_keyword_start;
-   size_t content_start;
-   size_t content_end;
-   size_t docstring_content_type_start;
-   size_t docstring_content_type_end;
-   size_t query_start;
-   size_t last_newline;
-   size_t final_newline;
- } lexer_state;
- 
- static VALUE mGherkin;
- static VALUE mGherkinLexer;
- static VALUE mCLexer;
- static VALUE cI18nLexer;
- static VALUE rb_eGherkinLexingError;
- 
- #define LEN(AT, P) (P - data - lexer->AT)
- #define MARK(M, P) (lexer->M = (P) - data)
- #define PTR_TO(P) (data + lexer->P)
- 
- #define STORE_KW_END_CON(EVENT) \
-   store_multiline_kw_con(listener, # EVENT, \
-     PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \
-     PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \
-     lexer->current_line, lexer->start_col); \
-     if (lexer->content_end != 0) { \
-       p = PTR_TO(content_end - 1); \
-     } \
-     lexer->content_end = 0
- 
- #define STORE_ATTR(ATTR) \
-     store_attr(listener, # ATTR, \
-       PTR_TO(content_start), LEN(content_start, p), \
-       lexer->line_number)
- 
- 
- #line 254 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/pl.c.rl"
- 
- 
- /** Data **/
- 
- #line 89 "ext/gherkin_lexer_pl/gherkin_lexer_pl.c"
- static const char _lexer_actions[] = {
- 	0, 1, 0, 1, 1, 1, 2, 1, 
- 	3, 1, 4, 1, 5, 1, 6, 1, 
- 	7, 1, 8, 1, 9, 1, 10, 1, 
- 	11, 1, 12, 1, 13, 1, 16, 1, 
- 	17, 1, 18, 1, 19, 1, 20, 1, 
- 	21, 1, 22, 1, 23, 2, 1, 18, 
- 	2, 4, 5, 2, 13, 0, 2, 14, 
- 	15, 2, 17, 0, 2, 17, 2, 2, 
- 	17, 16, 2, 17, 19, 2, 18, 6, 
- 	2, 18, 7, 2, 18, 8, 2, 18, 
- 	9, 2, 18, 10, 2, 18, 16, 2, 
- 	20, 21, 2, 22, 0, 2, 22, 2, 
- 	2, 22, 16, 2, 22, 19, 3, 3, 
- 	14, 15, 3, 5, 14, 15, 3, 11, 
- 	14, 15, 3, 12, 14, 15, 3, 13, 
- 	14, 15, 3, 14, 15, 18, 3, 17, 
- 	0, 11, 3, 17, 14, 15, 4, 1, 
- 	14, 15, 18, 4, 4, 5, 14, 15, 
- 	4, 17, 0, 14, 15, 5, 17, 0, 
- 	11, 14, 15
- };
- 
- static const short _lexer_key_offsets[] = {
- 	0, 0, 23, 24, 25, 47, 48, 49, 
- 	51, 53, 58, 63, 68, 73, 77, 81, 
- 	83, 84, 85, 86, 87, 88, 89, 90, 
- 	91, 92, 93, 94, 95, 96, 97, 98, 
- 	99, 101, 103, 108, 115, 120, 122, 123, 
- 	124, 125, 126, 127, 128, 129, 130, 143, 
- 	145, 147, 149, 151, 153, 155, 157, 159, 
- 	161, 163, 165, 167, 169, 171, 173, 175, 
- 	177, 179, 181, 183, 205, 206, 207, 208, 
- 	209, 210, 211, 212, 213, 214, 215, 217, 
- 	218, 219, 220, 221, 222, 223, 224, 225, 
- 	226, 227, 228, 229, 230, 232, 233, 234, 
- 	235, 236, 237, 238, 239, 240, 241, 242, 
- 	243, 244, 245, 246, 247, 248, 249, 250, 
- 	251, 252, 253, 254, 255, 256, 257, 258, 
- 	268, 270, 272, 274, 276, 278, 280, 282, 
- 	284, 286, 288, 290, 292, 294, 296, 298, 
- 	300, 302, 304, 306, 308, 310, 312, 314, 
- 	316, 318, 320, 322, 324, 326, 328, 330, 
- 	332, 334, 336, 338, 340, 342, 344, 346, 
- 	348, 350, 352, 353, 354, 355, 356, 357, 
- 	358, 359, 360, 361, 362, 363, 383, 385, 
- 	387, 389, 391, 393, 395, 397, 399, 401, 
- 	403, 405, 407, 409, 411, 413, 416, 418, 
- 	420, 422, 424, 426, 428, 430, 432, 434, 
- 	436, 438, 440, 442, 444, 446, 448, 451, 
- 	453, 455, 457, 459, 461, 463, 465, 467, 
- 	469, 471, 473, 475, 477, 479, 481, 483, 
- 	485, 487, 489, 491, 493, 495, 497, 499, 
- 	501, 503, 505, 507, 509, 512, 514, 516, 
- 	518, 520, 522, 524, 526, 528, 530, 532, 
- 	534, 536, 538, 540, 542, 544, 546, 548, 
- 	550, 552, 554, 556, 558, 560, 563, 565, 
- 	567, 569, 571, 573, 575, 577, 579, 581, 
- 	583, 585, 587, 589, 592, 594, 596, 598, 
- 	600, 602, 604, 606, 608, 610, 612, 614, 
- 	615, 616, 617, 618, 619, 620, 621, 622, 
- 	623, 624, 625, 626, 627, 628, 629, 630, 
- 	631, 632, 633, 634, 654, 656, 658, 660, 
- 	662, 664, 666, 668, 670, 672, 674, 676, 
- 	678, 680, 682, 684, 687, 689, 691, 693, 
- 	695, 697, 699, 701, 703, 705, 707, 709, 
- 	711, 713, 715, 717, 719, 722, 724, 726, 
- 	728, 730, 732, 734, 736, 738, 740, 742, 
- 	744, 746, 748, 750, 752, 754, 756, 758, 
- 	760, 762, 764, 766, 768, 770, 772, 774, 
- 	776, 778, 780, 782, 784, 786, 788, 790, 
- 	792, 794, 796, 798, 801, 803, 805, 807, 
- 	809, 811, 813, 815, 817, 819, 821, 823, 
- 	825, 827, 829, 831, 833, 835, 837, 839, 
- 	840, 841, 842, 843, 844, 845, 846, 847, 
- 	848, 849, 850, 851, 852, 854, 855, 856, 
- 	857, 858, 859, 860, 861, 862, 863, 864, 
- 	865, 885, 887, 889, 891, 893, 895, 897, 
- 	899, 901, 903, 905, 907, 909, 911, 913, 
- 	915, 918, 920, 922, 924, 926, 928, 930, 
- 	932, 934, 936, 938, 940, 942, 944, 946, 
- 	948, 950, 953, 955, 957, 959, 961, 963, 
- 	965, 967, 969, 971, 973, 975, 977, 979, 
- 	981, 983, 985, 987, 989, 991, 993, 995, 
- 	997, 999, 1001, 1003, 1005, 1007, 1009, 1011, 
- 	1014, 1016, 1018, 1020, 1022, 1024, 1026, 1028, 
- 	1030, 1032, 1034, 1036, 1038, 1040, 1042, 1044, 
- 	1046, 1048, 1050, 1052, 1054, 1056, 1058, 1060, 
- 	1062, 1065, 1067, 1069, 1071, 1073, 1075, 1077, 
- 	1079, 1081, 1083, 1085, 1087, 1089, 1091, 1093, 
- 	1095, 1097, 1099, 1101, 1102, 1103, 1104, 1105, 
- 	1109, 1115, 1118, 1120, 1126, 1148, 1150, 1152, 
- 	1154, 1156, 1158, 1160, 1163, 1165, 1167, 1169, 
- 	1171, 1173, 1175, 1177, 1179, 1181, 1183, 1185, 
- 	1187, 1189, 1191, 1193, 1195, 1197, 1199, 1201, 
- 	1203, 1205, 1207, 1209, 1212, 1214, 1216, 1218, 
- 	1220, 1222, 1224, 1226, 1228, 1230, 1232, 1234, 
- 	1236, 1238, 1240, 1242, 1244, 1246, 1248, 1250, 
- 	1252, 1254, 1256, 1258, 1260, 1262, 1264, 1266, 
- 	1268, 1270, 1272, 1274, 1276, 1278, 1280, 1282, 
- 	1284, 1286, 1288, 1290, 1292, 1294, 1296, 1298, 
- 	1300, 1302, 1304
- };
- 
- static const char _lexer_trans_keys[] = {
- 	-17, 10, 32, 34, 35, 37, 42, 64, 
- 	65, 70, 71, 73, 74, 75, 77, 79, 
- 	80, 83, 87, 90, 124, 9, 13, -69, 
- 	-65, 10, 32, 34, 35, 37, 42, 64, 
- 	65, 70, 71, 73, 74, 75, 77, 79, 
- 	80, 83, 87, 90, 124, 9, 13, 34, 
- 	34, 10, 13, 10, 13, 10, 32, 34, 
- 	9, 13, 10, 32, 34, 9, 13, 10, 
- 	32, 34, 9, 13, 10, 32, 34, 9, 
- 	13, 10, 32, 9, 13, 10, 32, 9, 
- 	13, 10, 13, 10, 95, 70, 69, 65, 
- 	84, 85, 82, 69, 95, 69, 78, 68, 
- 	95, 37, 32, 10, 13, 10, 13, 13, 
- 	32, 64, 9, 10, 9, 10, 13, 32, 
- 	64, 11, 12, 10, 32, 64, 9, 13, 
- 	108, 115, 101, 112, 101, 107, 116, 58, 
- 	10, 10, 10, 32, 35, 37, 64, 65, 
- 	70, 80, 83, 87, 90, 9, 13, 10, 
- 	95, 10, 70, 10, 69, 10, 65, 10, 
- 	84, 10, 85, 10, 82, 10, 69, 10, 
- 	95, 10, 69, 10, 78, 10, 68, 10, 
- 	95, 10, 37, 10, 115, 10, 112, 10, 
- 	101, 10, 107, 10, 116, 10, 58, 10, 
- 	32, 34, 35, 37, 42, 64, 65, 70, 
- 	71, 73, 74, 75, 77, 79, 80, 83, 
- 	87, 90, 124, 9, 13, 117, 110, 107, 
- 	99, 106, 97, 100, 121, 101, -59, -101, 
- 	-68, 108, 105, 101, 105, 101, 97, 106, 
- 	-60, -123, 99, 114, 97, 122, 111, 114, 
- 	116, 114, 122, 101, 98, 97, 32, 98, 
- 	105, 122, 110, 101, 115, 111, 119, 122, 
- 	121, 107, -59, -126, 97, 100, 121, 58, 
- 	10, 10, 10, 32, 35, 65, 70, 80, 
- 	87, 124, 9, 13, 10, 115, 10, 112, 
- 	10, 101, 10, 107, 10, 116, 10, 58, 
- 	10, 117, 10, 110, 10, 107, 10, 99, 
- 	10, 106, 10, 97, 10, 111, 10, 116, 
- 	10, 114, 10, 122, 10, 101, 10, 98, 
- 	10, 97, 10, 32, 10, 98, 10, 105, 
- 	10, 122, 10, 110, 10, 101, 10, 115, 
- 	10, 111, 10, 119, -59, 10, -126, 10, 
- 	10, 97, -59, 10, -101, 10, 10, 99, 
- 	10, 105, 10, 119, 10, 111, -59, 10, 
- 	-101, 10, -60, 10, -121, 10, 99, 122, 
- 	101, 110, 97, 114, 105, 117, 115, 122, 
- 	58, 10, 10, 10, 32, 35, 37, 42, 
- 	64, 65, 70, 71, 73, 74, 75, 77, 
- 	79, 80, 83, 87, 90, 9, 13, 10, 
- 	95, 10, 70, 10, 69, 10, 65, 10, 
- 	84, 10, 85, 10, 82, 10, 69, 10, 
- 	95, 10, 69, 10, 78, 10, 68, 10, 
- 	95, 10, 37, 10, 32, 10, 108, 115, 
- 	10, 101, 10, 112, 10, 101, 10, 107, 
- 	10, 116, 10, 58, 10, 117, 10, 110, 
- 	10, 107, 10, 99, 10, 106, 10, 97, 
- 	10, 100, 10, 121, 10, 101, -59, 10, 
- 	-101, -68, 10, 10, 108, 10, 105, 10, 
- 	101, 10, 105, 10, 101, 10, 97, 10, 
- 	106, -60, 10, -123, 10, 10, 99, 10, 
- 	114, 10, 97, 10, 122, 10, 111, 10, 
- 	116, 10, 114, 10, 122, 10, 101, 10, 
- 	98, 10, 97, 10, 32, 10, 98, 10, 
- 	105, 10, 122, 10, 110, 10, 101, 10, 
- 	115, 10, 111, 10, 119, 10, 99, 122, 
- 	10, 101, 10, 110, 10, 97, 10, 114, 
- 	10, 105, 10, 117, 10, 115, 10, 122, 
- 	10, 97, 10, 98, 10, 108, 10, 111, 
- 	10, 110, 10, 32, 10, 115, 10, 99, 
- 	10, 101, 10, 110, 10, 97, 10, 114, 
- 	10, 105, 10, 117, 10, 115, 10, 122, 
- 	-59, 10, 116, -126, 10, 10, 97, -59, 
- 	10, -101, 10, 10, 99, 10, 105, 10, 
- 	119, 10, 111, -59, 10, -101, 10, -60, 
- 	10, -121, 10, 10, 97, -59, 10, 107, 
- 	-126, 10, 10, 111, -59, 10, -68, 10, 
- 	10, 101, 10, 110, 10, 105, -59, 10, 
- 	-126, 10, 10, 97, 10, 100, 97, 98, 
- 	108, 111, 110, 32, 115, 99, 101, 110, 
- 	97, 114, 105, 117, 115, 122, 97, 58, 
- 	10, 10, 10, 32, 35, 37, 42, 64, 
- 	65, 70, 71, 73, 74, 75, 77, 79, 
- 	80, 83, 87, 90, 9, 13, 10, 95, 
- 	10, 70, 10, 69, 10, 65, 10, 84, 
- 	10, 85, 10, 82, 10, 69, 10, 95, 
- 	10, 69, 10, 78, 10, 68, 10, 95, 
- 	10, 37, 10, 32, 10, 108, 115, 10, 
- 	101, 10, 112, 10, 101, 10, 107, 10, 
- 	116, 10, 58, 10, 117, 10, 110, 10, 
- 	107, 10, 99, 10, 106, 10, 97, 10, 
- 	100, 10, 121, 10, 101, -59, 10, -101, 
- 	-68, 10, 10, 108, 10, 105, 10, 101, 
- 	10, 105, 10, 101, 10, 97, 10, 106, 
- 	-60, 10, -123, 10, 10, 99, 10, 114, 
- 	10, 97, 10, 122, 10, 111, 10, 116, 
- 	10, 114, 10, 122, 10, 101, 10, 98, 
- 	10, 97, 10, 32, 10, 98, 10, 105, 
- 	10, 122, 10, 110, 10, 101, 10, 115, 
- 	10, 111, 10, 119, 10, 99, 10, 101, 
- 	10, 110, 10, 97, 10, 114, 10, 105, 
- 	10, 117, 10, 115, 10, 122, -59, 10, 
- 	116, -126, 10, 10, 97, -59, 10, -101, 
- 	10, 10, 99, 10, 105, 10, 119, 10, 
- 	111, -59, 10, -101, 10, -60, 10, -121, 
- 	10, 10, 97, 10, 107, -59, 10, -126, 
- 	10, 10, 97, 10, 100, -59, 116, -126, 
- 	97, -59, -101, 99, 105, 119, 111, -59, 
- 	-101, -60, -121, 97, -59, 107, -126, 111, 
- 	-59, -68, 101, 110, 105, 97, 58, 10, 
- 	10, 10, 32, 35, 37, 42, 64, 65, 
- 	70, 71, 73, 74, 75, 77, 79, 80, 
- 	83, 87, 90, 9, 13, 10, 95, 10, 
- 	70, 10, 69, 10, 65, 10, 84, 10, 
- 	85, 10, 82, 10, 69, 10, 95, 10, 
- 	69, 10, 78, 10, 68, 10, 95, 10, 
- 	37, 10, 32, 10, 108, 115, 10, 101, 
- 	10, 112, 10, 101, 10, 107, 10, 116, 
- 	10, 58, 10, 117, 10, 110, 10, 107, 
- 	10, 99, 10, 106, 10, 97, 10, 100, 
- 	10, 121, 10, 101, -59, 10, -101, -68, 
- 	10, 10, 108, 10, 105, 10, 101, 10, 
- 	105, 10, 101, 10, 97, 10, 106, -60, 
- 	10, -123, 10, 10, 99, 10, 114, 10, 
- 	97, 10, 122, 10, 111, 10, 116, 10, 
- 	114, 10, 122, 10, 101, 10, 98, 10, 
- 	97, 10, 32, 10, 98, 10, 105, 10, 
- 	122, 10, 110, 10, 101, 10, 115, 10, 
- 	111, 10, 119, 10, 99, 122, 10, 101, 
- 	10, 110, 10, 97, 10, 114, 10, 105, 
- 	10, 117, 10, 115, 10, 122, 10, 97, 
- 	10, 98, 10, 108, 10, 111, 10, 110, 
- 	10, 32, 10, 115, 10, 99, 10, 101, 
- 	10, 110, 10, 97, 10, 114, 10, 105, 
- 	10, 117, 10, 115, 10, 122, -59, 10, 
- 	116, -126, 10, 10, 97, -59, 10, -101, 
- 	10, 10, 99, 10, 105, 10, 119, 10, 
- 	111, -59, 10, -101, 10, -60, 10, -121, 
- 	10, 10, 97, 10, 107, -59, 10, -126, 
- 	10, 10, 97, 10, 100, -59, -126, 97, 
- 	100, 32, 124, 9, 13, 10, 32, 92, 
- 	124, 9, 13, 10, 92, 124, 10, 92, 
- 	10, 32, 92, 124, 9, 13, 10, 32, 
- 	34, 35, 37, 42, 64, 65, 70, 71, 
- 	73, 74, 75, 77, 79, 80, 83, 87, 
- 	90, 124, 9, 13, 10, 117, 10, 110, 
- 	10, 107, 10, 99, 10, 106, 10, 97, 
- 	10, 111, 114, 10, 116, 10, 114, 10, 
- 	122, 10, 101, 10, 98, 10, 97, 10, 
- 	32, 10, 98, 10, 105, 10, 122, 10, 
- 	110, 10, 101, 10, 115, 10, 111, 10, 
- 	119, 10, 122, 10, 121, 10, 107, -59, 
- 	10, -126, 10, 10, 97, 10, 100, 10, 
- 	121, 10, 99, 122, 10, 101, 10, 110, 
- 	10, 97, 10, 114, 10, 105, 10, 117, 
- 	10, 115, 10, 122, 10, 97, 10, 98, 
- 	10, 108, 10, 111, 10, 110, 10, 32, 
- 	10, 115, 10, 99, 10, 101, 10, 110, 
- 	10, 97, 10, 114, 10, 105, 10, 117, 
- 	10, 115, 10, 122, -59, 10, -126, 10, 
- 	10, 97, -59, 10, -101, 10, 10, 99, 
- 	10, 105, 10, 119, 10, 111, -59, 10, 
- 	-101, 10, -60, 10, -121, 10, 10, 97, 
- 	-59, 10, -126, 10, 10, 111, -59, 10, 
- 	-68, 10, 10, 101, 10, 110, 10, 105, 
- 	0
- };
- 
- static const char _lexer_single_lengths[] = {
- 	0, 21, 1, 1, 20, 1, 1, 2, 
- 	2, 3, 3, 3, 3, 2, 2, 2, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	2, 2, 3, 5, 3, 2, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 11, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 20, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 2, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 2, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 8, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 18, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 3, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 3, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 3, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 3, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 3, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 18, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 3, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 3, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 3, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 2, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	18, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	3, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 3, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 3, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	3, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 1, 1, 1, 1, 2, 
- 	4, 3, 2, 4, 20, 2, 2, 2, 
- 	2, 2, 2, 3, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 3, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 0
- };
- 
- static const char _lexer_range_lengths[] = {
- 	0, 1, 0, 0, 1, 0, 0, 0, 
- 	0, 1, 1, 1, 1, 1, 1, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 1, 1, 1, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 1, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 1, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 1, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 1, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 1, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	1, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 1, 
- 	1, 0, 0, 1, 1, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0
- };
- 
- static const short _lexer_index_offsets[] = {
- 	0, 0, 23, 25, 27, 49, 51, 53, 
- 	56, 59, 64, 69, 74, 79, 83, 87, 
- 	90, 92, 94, 96, 98, 100, 102, 104, 
- 	106, 108, 110, 112, 114, 116, 118, 120, 
- 	122, 125, 128, 133, 140, 145, 148, 150, 
- 	152, 154, 156, 158, 160, 162, 164, 177, 
- 	180, 183, 186, 189, 192, 195, 198, 201, 
- 	204, 207, 210, 213, 216, 219, 222, 225, 
- 	228, 231, 234, 237, 259, 261, 263, 265, 
- 	267, 269, 271, 273, 275, 277, 279, 282, 
- 	284, 286, 288, 290, 292, 294, 296, 298, 
- 	300, 302, 304, 306, 308, 311, 313, 315, 
- 	317, 319, 321, 323, 325, 327, 329, 331, 
- 	333, 335, 337, 339, 341, 343, 345, 347, 
- 	349, 351, 353, 355, 357, 359, 361, 363, 
- 	373, 376, 379, 382, 385, 388, 391, 394, 
- 	397, 400, 403, 406, 409, 412, 415, 418, 
- 	421, 424, 427, 430, 433, 436, 439, 442, 
- 	445, 448, 451, 454, 457, 460, 463, 466, 
- 	469, 472, 475, 478, 481, 484, 487, 490, 
- 	493, 496, 499, 501, 503, 505, 507, 509, 
- 	511, 513, 515, 517, 519, 521, 541, 544, 
- 	547, 550, 553, 556, 559, 562, 565, 568, 
- 	571, 574, 577, 580, 583, 586, 590, 593, 
- 	596, 599, 602, 605, 608, 611, 614, 617, 
- 	620, 623, 626, 629, 632, 635, 638, 642, 
- 	645, 648, 651, 654, 657, 660, 663, 666, 
- 	669, 672, 675, 678, 681, 684, 687, 690, 
- 	693, 696, 699, 702, 705, 708, 711, 714, 
- 	717, 720, 723, 726, 729, 733, 736, 739, 
- 	742, 745, 748, 751, 754, 757, 760, 763, 
- 	766, 769, 772, 775, 778, 781, 784, 787, 
- 	790, 793, 796, 799, 802, 805, 809, 812, 
- 	815, 818, 821, 824, 827, 830, 833, 836, 
- 	839, 842, 845, 848, 852, 855, 858, 861, 
- 	864, 867, 870, 873, 876, 879, 882, 885, 
- 	887, 889, 891, 893, 895, 897, 899, 901, 
- 	903, 905, 907, 909, 911, 913, 915, 917, 
- 	919, 921, 923, 925, 945, 948, 951, 954, 
- 	957, 960, 963, 966, 969, 972, 975, 978, 
- 	981, 984, 987, 990, 994, 997, 1000, 1003, 
- 	1006, 1009, 1012, 1015, 1018, 1021, 1024, 1027, 
- 	1030, 1033, 1036, 1039, 1042, 1046, 1049, 1052, 
- 	1055, 1058, 1061, 1064, 1067, 1070, 1073, 1076, 
- 	1079, 1082, 1085, 1088, 1091, 1094, 1097, 1100, 
- 	1103, 1106, 1109, 1112, 1115, 1118, 1121, 1124, 
- 	1127, 1130, 1133, 1136, 1139, 1142, 1145, 1148, 
- 	1151, 1154, 1157, 1160, 1164, 1167, 1170, 1173, 
- 	1176, 1179, 1182, 1185, 1188, 1191, 1194, 1197, 
- 	1200, 1203, 1206, 1209, 1212, 1215, 1218, 1221, 
- 	1223, 1225, 1227, 1229, 1231, 1233, 1235, 1237, 
- 	1239, 1241, 1243, 1245, 1247, 1250, 1252, 1254, 
- 	1256, 1258, 1260, 1262, 1264, 1266, 1268, 1270, 
- 	1272, 1292, 1295, 1298, 1301, 1304, 1307, 1310, 
- 	1313, 1316, 1319, 1322, 1325, 1328, 1331, 1334, 
- 	1337, 1341, 1344, 1347, 1350, 1353, 1356, 1359, 
- 	1362, 1365, 1368, 1371, 1374, 1377, 1380, 1383, 
- 	1386, 1389, 1393, 1396, 1399, 1402, 1405, 1408, 
- 	1411, 1414, 1417, 1420, 1423, 1426, 1429, 1432, 
- 	1435, 1438, 1441, 1444, 1447, 1450, 1453, 1456, 
- 	1459, 1462, 1465, 1468, 1471, 1474, 1477, 1480, 
- 	1484, 1487, 1490, 1493, 1496, 1499, 1502, 1505, 
- 	1508, 1511, 1514, 1517, 1520, 1523, 1526, 1529, 
- 	1532, 1535, 1538, 1541, 1544, 1547, 1550, 1553, 
- 	1556, 1560, 1563, 1566, 1569, 1572, 1575, 1578, 
- 	1581, 1584, 1587, 1590, 1593, 1596, 1599, 1602, 
- 	1605, 1608, 1611, 1614, 1616, 1618, 1620, 1622, 
- 	1626, 1632, 1636, 1639, 1645, 1667, 1670, 1673, 
- 	1676, 1679, 1682, 1685, 1689, 1692, 1695, 1698, 
- 	1701, 1704, 1707, 1710, 1713, 1716, 1719, 1722, 
- 	1725, 1728, 1731, 1734, 1737, 1740, 1743, 1746, 
- 	1749, 1752, 1755, 1758, 1762, 1765, 1768, 1771, 
- 	1774, 1777, 1780, 1783, 1786, 1789, 1792, 1795, 
- 	1798, 1801, 1804, 1807, 1810, 1813, 1816, 1819, 
- 	1822, 1825, 1828, 1831, 1834, 1837, 1840, 1843, 
- 	1846, 1849, 1852, 1855, 1858, 1861, 1864, 1867, 
- 	1870, 1873, 1876, 1879, 1882, 1885, 1888, 1891, 
- 	1894, 1897, 1900
- };
- 
- static const short _lexer_trans_targs[] = {
- 	2, 4, 4, 5, 15, 17, 31, 34, 
- 	37, 68, 74, 31, 76, 82, 84, 89, 
- 	92, 161, 398, 411, 535, 4, 0, 3, 
- 	0, 4, 0, 4, 4, 5, 15, 17, 
- 	31, 34, 37, 68, 74, 31, 76, 82, 
- 	84, 89, 92, 161, 398, 411, 535, 4, 
- 	0, 6, 0, 7, 0, 9, 8, 8, 
- 	9, 8, 8, 10, 10, 11, 10, 10, 
- 	10, 10, 11, 10, 10, 10, 10, 12, 
- 	10, 10, 10, 10, 13, 10, 10, 4, 
- 	14, 14, 0, 4, 14, 14, 0, 4, 
- 	16, 15, 4, 0, 18, 0, 19, 0, 
- 	20, 0, 21, 0, 22, 0, 23, 0, 
- 	24, 0, 25, 0, 26, 0, 27, 0, 
- 	28, 0, 29, 0, 30, 0, 618, 0, 
- 	32, 0, 4, 16, 33, 4, 16, 33, 
- 	0, 0, 0, 0, 35, 36, 4, 36, 
- 	36, 34, 35, 35, 4, 36, 34, 36, 
- 	0, 38, 39, 0, 31, 0, 40, 0, 
- 	41, 0, 42, 0, 43, 0, 44, 0, 
- 	46, 45, 46, 45, 46, 46, 4, 47, 
- 	4, 61, 541, 547, 571, 596, 609, 46, 
- 	45, 46, 48, 45, 46, 49, 45, 46, 
- 	50, 45, 46, 51, 45, 46, 52, 45, 
- 	46, 53, 45, 46, 54, 45, 46, 55, 
- 	45, 46, 56, 45, 46, 57, 45, 46, 
- 	58, 45, 46, 59, 45, 46, 60, 45, 
- 	46, 4, 45, 46, 62, 45, 46, 63, 
- 	45, 46, 64, 45, 46, 65, 45, 46, 
- 	66, 45, 46, 67, 45, 4, 4, 5, 
- 	15, 17, 31, 34, 37, 68, 74, 31, 
- 	76, 82, 84, 89, 92, 161, 398, 411, 
- 	535, 4, 0, 69, 0, 70, 0, 71, 
- 	0, 72, 0, 73, 0, 43, 0, 75, 
- 	0, 31, 0, 77, 0, 78, 0, 79, 
- 	81, 0, 80, 0, 31, 0, 79, 0, 
- 	83, 0, 74, 0, 85, 0, 86, 0, 
- 	87, 0, 88, 0, 31, 0, 90, 0, 
- 	91, 0, 31, 0, 93, 108, 0, 94, 
- 	0, 95, 0, 96, 0, 97, 0, 98, 
- 	0, 99, 0, 100, 0, 101, 0, 102, 
- 	0, 103, 0, 104, 0, 105, 0, 106, 
- 	0, 107, 0, 73, 0, 109, 0, 110, 
- 	0, 111, 0, 112, 0, 113, 0, 114, 
- 	0, 115, 0, 116, 0, 117, 0, 119, 
- 	118, 119, 118, 119, 119, 4, 120, 126, 
- 	132, 148, 4, 119, 118, 119, 121, 118, 
- 	119, 122, 118, 119, 123, 118, 119, 124, 
- 	118, 119, 125, 118, 119, 67, 118, 119, 
- 	127, 118, 119, 128, 118, 119, 129, 118, 
- 	119, 130, 118, 119, 131, 118, 119, 125, 
- 	118, 119, 133, 118, 119, 134, 118, 119, 
- 	135, 118, 119, 136, 118, 119, 137, 118, 
- 	119, 138, 118, 119, 139, 118, 119, 140, 
- 	118, 119, 141, 118, 119, 142, 118, 119, 
- 	143, 118, 119, 144, 118, 119, 145, 118, 
- 	119, 146, 118, 119, 147, 118, 119, 131, 
- 	118, 149, 119, 118, 150, 119, 118, 119, 
- 	151, 118, 152, 119, 118, 153, 119, 118, 
- 	119, 154, 118, 119, 155, 118, 119, 156, 
- 	118, 119, 157, 118, 158, 119, 118, 159, 
- 	119, 118, 160, 119, 118, 125, 119, 118, 
- 	162, 287, 0, 163, 0, 164, 0, 165, 
- 	0, 166, 0, 167, 0, 168, 0, 169, 
- 	0, 170, 0, 171, 0, 173, 172, 173, 
- 	172, 173, 173, 4, 174, 188, 4, 189, 
- 	196, 202, 188, 204, 210, 212, 217, 220, 
- 	236, 261, 274, 173, 172, 173, 175, 172, 
- 	173, 176, 172, 173, 177, 172, 173, 178, 
- 	172, 173, 179, 172, 173, 180, 172, 173, 
- 	181, 172, 173, 182, 172, 173, 183, 172, 
- 	173, 184, 172, 173, 185, 172, 173, 186, 
- 	172, 173, 187, 172, 173, 4, 172, 173, 
- 	67, 172, 173, 190, 191, 172, 173, 188, 
- 	172, 173, 192, 172, 173, 193, 172, 173, 
- 	194, 172, 173, 195, 172, 173, 67, 172, 
- 	173, 197, 172, 173, 198, 172, 173, 199, 
- 	172, 173, 200, 172, 173, 201, 172, 173, 
- 	195, 172, 173, 203, 172, 173, 188, 172, 
- 	173, 205, 172, 206, 173, 172, 207, 209, 
- 	173, 172, 173, 208, 172, 173, 188, 172, 
- 	173, 207, 172, 173, 211, 172, 173, 202, 
- 	172, 173, 213, 172, 173, 214, 172, 215, 
- 	173, 172, 216, 173, 172, 173, 188, 172, 
- 	173, 218, 172, 173, 219, 172, 173, 188, 
- 	172, 173, 221, 172, 173, 222, 172, 173, 
- 	223, 172, 173, 224, 172, 173, 225, 172, 
- 	173, 226, 172, 173, 227, 172, 173, 228, 
- 	172, 173, 229, 172, 173, 230, 172, 173, 
- 	231, 172, 173, 232, 172, 173, 233, 172, 
- 	173, 234, 172, 173, 235, 172, 173, 201, 
- 	172, 173, 237, 245, 172, 173, 238, 172, 
- 	173, 239, 172, 173, 240, 172, 173, 241, 
- 	172, 173, 242, 172, 173, 243, 172, 173, 
- 	244, 172, 173, 195, 172, 173, 246, 172, 
- 	173, 247, 172, 173, 248, 172, 173, 249, 
- 	172, 173, 250, 172, 173, 251, 172, 173, 
- 	252, 172, 173, 253, 172, 173, 254, 172, 
- 	173, 255, 172, 173, 256, 172, 173, 257, 
- 	172, 173, 258, 172, 173, 259, 172, 173, 
- 	260, 172, 173, 201, 172, 262, 173, 211, 
- 	172, 263, 173, 172, 173, 264, 172, 265, 
- 	173, 172, 266, 173, 172, 173, 267, 172, 
- 	173, 268, 172, 173, 269, 172, 173, 270, 
- 	172, 271, 173, 172, 272, 173, 172, 273, 
- 	173, 172, 195, 173, 172, 173, 275, 172, 
- 	276, 173, 283, 172, 277, 173, 172, 173, 
- 	278, 172, 279, 173, 172, 280, 173, 172, 
- 	173, 281, 172, 173, 282, 172, 173, 201, 
- 	172, 284, 173, 172, 285, 173, 172, 173, 
- 	286, 172, 173, 212, 172, 288, 0, 289, 
- 	0, 290, 0, 291, 0, 292, 0, 293, 
- 	0, 294, 0, 295, 0, 296, 0, 297, 
- 	0, 298, 0, 299, 0, 300, 0, 301, 
- 	0, 302, 0, 303, 0, 304, 0, 305, 
- 	0, 307, 306, 307, 306, 307, 307, 4, 
- 	308, 322, 4, 323, 330, 336, 322, 338, 
- 	344, 346, 351, 354, 370, 379, 392, 307, 
- 	306, 307, 309, 306, 307, 310, 306, 307, 
- 	311, 306, 307, 312, 306, 307, 313, 306, 
- 	307, 314, 306, 307, 315, 306, 307, 316, 
- 	306, 307, 317, 306, 307, 318, 306, 307, 
- 	319, 306, 307, 320, 306, 307, 321, 306, 
- 	307, 4, 306, 307, 67, 306, 307, 324, 
- 	325, 306, 307, 322, 306, 307, 326, 306, 
- 	307, 327, 306, 307, 328, 306, 307, 329, 
- 	306, 307, 67, 306, 307, 331, 306, 307, 
- 	332, 306, 307, 333, 306, 307, 334, 306, 
- 	307, 335, 306, 307, 329, 306, 307, 337, 
- 	306, 307, 322, 306, 307, 339, 306, 340, 
- 	307, 306, 341, 343, 307, 306, 307, 342, 
- 	306, 307, 322, 306, 307, 341, 306, 307, 
- 	345, 306, 307, 336, 306, 307, 347, 306, 
- 	307, 348, 306, 349, 307, 306, 350, 307, 
- 	306, 307, 322, 306, 307, 352, 306, 307, 
- 	353, 306, 307, 322, 306, 307, 355, 306, 
- 	307, 356, 306, 307, 357, 306, 307, 358, 
- 	306, 307, 359, 306, 307, 360, 306, 307, 
- 	361, 306, 307, 362, 306, 307, 363, 306, 
- 	307, 364, 306, 307, 365, 306, 307, 366, 
- 	306, 307, 367, 306, 307, 368, 306, 307, 
- 	369, 306, 307, 335, 306, 307, 371, 306, 
- 	307, 372, 306, 307, 373, 306, 307, 374, 
- 	306, 307, 375, 306, 307, 376, 306, 307, 
- 	377, 306, 307, 378, 306, 307, 329, 306, 
- 	380, 307, 345, 306, 381, 307, 306, 307, 
- 	382, 306, 383, 307, 306, 384, 307, 306, 
- 	307, 385, 306, 307, 386, 306, 307, 387, 
- 	306, 307, 388, 306, 389, 307, 306, 390, 
- 	307, 306, 391, 307, 306, 329, 307, 306, 
- 	307, 393, 306, 307, 394, 306, 395, 307, 
- 	306, 396, 307, 306, 307, 397, 306, 307, 
- 	346, 306, 399, 83, 0, 400, 0, 401, 
- 	0, 402, 0, 403, 0, 404, 0, 405, 
- 	0, 406, 0, 407, 0, 408, 0, 409, 
- 	0, 410, 0, 43, 0, 412, 0, 413, 
- 	531, 0, 414, 0, 415, 0, 416, 0, 
- 	417, 0, 418, 0, 419, 0, 420, 0, 
- 	421, 0, 422, 0, 424, 423, 424, 423, 
- 	424, 424, 4, 425, 439, 4, 440, 447, 
- 	453, 439, 455, 461, 463, 468, 471, 487, 
- 	512, 525, 424, 423, 424, 426, 423, 424, 
- 	427, 423, 424, 428, 423, 424, 429, 423, 
- 	424, 430, 423, 424, 431, 423, 424, 432, 
- 	423, 424, 433, 423, 424, 434, 423, 424, 
- 	435, 423, 424, 436, 423, 424, 437, 423, 
- 	424, 438, 423, 424, 4, 423, 424, 67, 
- 	423, 424, 441, 442, 423, 424, 439, 423, 
- 	424, 443, 423, 424, 444, 423, 424, 445, 
- 	423, 424, 446, 423, 424, 67, 423, 424, 
- 	448, 423, 424, 449, 423, 424, 450, 423, 
- 	424, 451, 423, 424, 452, 423, 424, 446, 
- 	423, 424, 454, 423, 424, 439, 423, 424, 
- 	456, 423, 457, 424, 423, 458, 460, 424, 
- 	423, 424, 459, 423, 424, 439, 423, 424, 
- 	458, 423, 424, 462, 423, 424, 453, 423, 
- 	424, 464, 423, 424, 465, 423, 466, 424, 
- 	423, 467, 424, 423, 424, 439, 423, 424, 
- 	469, 423, 424, 470, 423, 424, 439, 423, 
- 	424, 472, 423, 424, 473, 423, 424, 474, 
- 	423, 424, 475, 423, 424, 476, 423, 424, 
- 	477, 423, 424, 478, 423, 424, 479, 423, 
- 	424, 480, 423, 424, 481, 423, 424, 482, 
- 	423, 424, 483, 423, 424, 484, 423, 424, 
- 	485, 423, 424, 486, 423, 424, 452, 423, 
- 	424, 488, 496, 423, 424, 489, 423, 424, 
- 	490, 423, 424, 491, 423, 424, 492, 423, 
- 	424, 493, 423, 424, 494, 423, 424, 495, 
- 	423, 424, 446, 423, 424, 497, 423, 424, 
- 	498, 423, 424, 499, 423, 424, 500, 423, 
- 	424, 501, 423, 424, 502, 423, 424, 503, 
- 	423, 424, 504, 423, 424, 505, 423, 424, 
- 	506, 423, 424, 507, 423, 424, 508, 423, 
- 	424, 509, 423, 424, 510, 423, 424, 511, 
- 	423, 424, 452, 423, 513, 424, 462, 423, 
- 	514, 424, 423, 424, 515, 423, 516, 424, 
- 	423, 517, 424, 423, 424, 518, 423, 424, 
- 	519, 423, 424, 520, 423, 424, 521, 423, 
- 	522, 424, 423, 523, 424, 423, 524, 424, 
- 	423, 446, 424, 423, 424, 526, 423, 424, 
- 	527, 423, 528, 424, 423, 529, 424, 423, 
- 	424, 530, 423, 424, 463, 423, 532, 0, 
- 	533, 0, 534, 0, 84, 0, 535, 536, 
- 	535, 0, 540, 539, 538, 536, 539, 537, 
- 	0, 538, 536, 537, 0, 538, 537, 540, 
- 	539, 538, 536, 539, 537, 540, 540, 5, 
- 	15, 17, 31, 34, 37, 68, 74, 31, 
- 	76, 82, 84, 89, 92, 161, 398, 411, 
- 	535, 540, 0, 46, 542, 45, 46, 543, 
- 	45, 46, 544, 45, 46, 545, 45, 46, 
- 	546, 45, 46, 66, 45, 46, 548, 563, 
- 	45, 46, 549, 45, 46, 550, 45, 46, 
- 	551, 45, 46, 552, 45, 46, 553, 45, 
- 	46, 554, 45, 46, 555, 45, 46, 556, 
- 	45, 46, 557, 45, 46, 558, 45, 46, 
- 	559, 45, 46, 560, 45, 46, 561, 45, 
- 	46, 562, 45, 46, 546, 45, 46, 564, 
- 	45, 46, 565, 45, 46, 566, 45, 567, 
- 	46, 45, 568, 46, 45, 46, 569, 45, 
- 	46, 570, 45, 46, 66, 45, 46, 572, 
- 	580, 45, 46, 573, 45, 46, 574, 45, 
- 	46, 575, 45, 46, 576, 45, 46, 577, 
- 	45, 46, 578, 45, 46, 579, 45, 46, 
- 	66, 45, 46, 581, 45, 46, 582, 45, 
- 	46, 583, 45, 46, 584, 45, 46, 585, 
- 	45, 46, 586, 45, 46, 587, 45, 46, 
- 	588, 45, 46, 589, 45, 46, 590, 45, 
- 	46, 591, 45, 46, 592, 45, 46, 593, 
- 	45, 46, 594, 45, 46, 595, 45, 46, 
- 	546, 45, 597, 46, 45, 598, 46, 45, 
- 	46, 599, 45, 600, 46, 45, 601, 46, 
- 	45, 46, 602, 45, 46, 603, 45, 46, 
- 	604, 45, 46, 605, 45, 606, 46, 45, 
- 	607, 46, 45, 608, 46, 45, 66, 46, 
- 	45, 46, 610, 45, 611, 46, 45, 612, 
- 	46, 45, 46, 613, 45, 614, 46, 45, 
- 	615, 46, 45, 46, 616, 45, 46, 617, 
- 	45, 46, 546, 45, 0, 0
- };
- 
- static const unsigned char _lexer_trans_actions[] = {
- 	0, 54, 0, 5, 1, 0, 29, 1, 
- 	29, 29, 29, 29, 29, 29, 29, 29, 
- 	29, 29, 29, 29, 35, 0, 43, 0, 
- 	43, 0, 43, 54, 0, 5, 1, 0, 
- 	29, 1, 29, 29, 29, 29, 29, 29, 
- 	29, 29, 29, 29, 29, 29, 35, 0, 
- 	43, 0, 43, 0, 43, 139, 48, 9, 
- 	106, 11, 0, 134, 45, 45, 45, 3, 
- 	122, 33, 33, 33, 0, 122, 33, 33, 
- 	33, 0, 122, 33, 0, 33, 0, 102, 
- 	7, 7, 43, 54, 0, 0, 43, 114, 
- 	25, 0, 54, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 149, 126, 57, 110, 23, 0, 
- 	43, 43, 43, 43, 0, 27, 118, 27, 
- 	27, 51, 27, 0, 54, 0, 1, 0, 
- 	43, 0, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	144, 57, 54, 0, 54, 0, 69, 33, 
- 	69, 84, 84, 84, 84, 84, 84, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 13, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 13, 0, 130, 31, 60, 
- 	57, 31, 63, 57, 63, 63, 63, 63, 
- 	63, 63, 63, 63, 63, 63, 63, 63, 
- 	66, 31, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 144, 
- 	57, 54, 0, 54, 0, 81, 84, 84, 
- 	84, 84, 81, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 21, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 0, 54, 0, 0, 54, 0, 54, 
- 	0, 0, 0, 54, 0, 0, 54, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 144, 57, 54, 
- 	0, 54, 0, 75, 33, 84, 75, 84, 
- 	84, 84, 84, 84, 84, 84, 84, 84, 
- 	84, 84, 84, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 17, 0, 54, 
- 	17, 0, 54, 0, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 17, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 0, 54, 0, 0, 0, 
- 	54, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 0, 
- 	54, 0, 0, 54, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 0, 54, 0, 
- 	0, 0, 54, 0, 54, 0, 0, 0, 
- 	54, 0, 0, 54, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 54, 0, 0, 
- 	0, 54, 0, 0, 0, 54, 0, 54, 
- 	0, 0, 0, 54, 0, 0, 54, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 0, 54, 0, 0, 54, 0, 54, 
- 	0, 0, 54, 0, 0, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 144, 57, 54, 0, 54, 0, 78, 
- 	33, 84, 78, 84, 84, 84, 84, 84, 
- 	84, 84, 84, 84, 84, 84, 84, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 19, 0, 54, 19, 0, 54, 0, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 19, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 0, 
- 	54, 0, 0, 0, 54, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 0, 54, 0, 0, 54, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	0, 54, 0, 0, 0, 54, 0, 54, 
- 	0, 0, 0, 54, 0, 0, 54, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	54, 0, 0, 54, 0, 0, 0, 54, 
- 	0, 0, 54, 0, 54, 0, 0, 54, 
- 	0, 0, 0, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 144, 57, 54, 0, 
- 	54, 0, 72, 33, 84, 72, 84, 84, 
- 	84, 84, 84, 84, 84, 84, 84, 84, 
- 	84, 84, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 15, 0, 54, 15, 
- 	0, 54, 0, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 15, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 0, 54, 0, 0, 0, 54, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 0, 54, 
- 	0, 0, 54, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 0, 54, 0, 0, 
- 	0, 54, 0, 54, 0, 0, 0, 54, 
- 	0, 0, 54, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 54, 0, 0, 54, 
- 	0, 0, 0, 54, 0, 0, 54, 0, 
- 	54, 0, 0, 54, 0, 0, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 0, 
- 	0, 43, 54, 37, 37, 87, 37, 37, 
- 	43, 0, 39, 0, 43, 0, 0, 54, 
- 	0, 0, 39, 0, 0, 54, 0, 93, 
- 	90, 41, 96, 90, 96, 96, 96, 96, 
- 	96, 96, 96, 96, 96, 96, 96, 96, 
- 	99, 0, 43, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 0, 
- 	54, 0, 0, 54, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 0, 54, 0, 0, 54, 0, 
- 	54, 0, 0, 0, 54, 0, 0, 54, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 54, 0, 0, 0, 54, 0, 0, 
- 	54, 0, 54, 0, 0, 0, 54, 0, 
- 	0, 54, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 0, 0
- };
- 
- static const unsigned char _lexer_eof_actions[] = {
- 	0, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43
- };
- 
- static const int lexer_start = 1;
- static const int lexer_first_final = 618;
- static const int lexer_error = 0;
- 
- static const int lexer_en_main = 1;
- 
- 
- #line 258 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/pl.c.rl"
- 
- static VALUE 
- unindent(VALUE con, int start_col)
- {
-   VALUE re;
-   // Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters
-   char pat[32]; 
-   snprintf(pat, 32, "^[\t ]{0,%d}", start_col); 
-   re = rb_reg_regcomp(rb_str_new2(pat));
-   rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2(""));
- 
-   return Qnil;
- 
- }
- 
- static void 
- store_kw_con(VALUE listener, const char * event_name, 
-              const char * keyword_at, size_t keyword_length, 
-              const char * at,         size_t length, 
-              int current_line)
- {
-   VALUE con = Qnil, kw = Qnil;
-   kw = ENCODED_STR_NEW(keyword_at, keyword_length);
-   con = ENCODED_STR_NEW(at, length);
-   rb_funcall(con, rb_intern("strip!"), 0);
-   rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); 
- }
- 
- static void
- store_multiline_kw_con(VALUE listener, const char * event_name,
-                       const char * keyword_at, size_t keyword_length,
-                       const char * at,         size_t length,
-                       int current_line, int start_col)
- {
-   VALUE split;
-   VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil;
- 
-   kw = ENCODED_STR_NEW(keyword_at, keyword_length);
-   con = ENCODED_STR_NEW(at, length);
- 
-   unindent(con, start_col);
-   
-   split = rb_str_split(con, "\n");
- 
-   name = rb_funcall(split, rb_intern("shift"), 0);
-   desc = rb_ary_join(split, rb_str_new2( "\n" ));
- 
-   if( name == Qnil ) 
-   {
-     name = rb_str_new2("");
-   }
-   if( rb_funcall(desc, rb_intern("size"), 0) == 0) 
-   {
-     desc = rb_str_new2("");
-   }
-   rb_funcall(name, rb_intern("strip!"), 0);
-   rb_funcall(desc, rb_intern("rstrip!"), 0);
-   rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); 
- }
- 
- static void 
- store_attr(VALUE listener, const char * attr_type,
-            const char * at, size_t length, 
-            int line)
- {
-   VALUE val = ENCODED_STR_NEW(at, length);
-   rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line));
- }
- static void 
- store_docstring_content(VALUE listener, 
-           int start_col, 
-           const char *type_at, size_t type_length,
-           const char *at, size_t length, 
-           int current_line)
- {
-   VALUE re2;
-   VALUE unescape_escaped_quotes;
-   VALUE con = ENCODED_STR_NEW(at, length);
-   VALUE con_type = ENCODED_STR_NEW(type_at, type_length);
- 
-   unindent(con, start_col);
- 
-   re2 = rb_reg_regcomp(rb_str_new2("\r\\Z"));
-   unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\""));
-   rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2(""));
-   rb_funcall(con_type, rb_intern("strip!"), 0);
-   rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\""));
-   rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line));
- }
- static void 
- raise_lexer_error(const char * at, int line)
- { 
-   rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at);
- }
- 
- static void lexer_init(lexer_state *lexer) {
-   lexer->content_start = 0;
-   lexer->content_end = 0;
-   lexer->content_len = 0;
-   lexer->docstring_content_type_start = 0;
-   lexer->docstring_content_type_end = 0;
-   lexer->mark = 0;
-   lexer->keyword_start = 0;
-   lexer->keyword_end = 0;
-   lexer->next_keyword_start = 0;
-   lexer->line_number = 1;
-   lexer->last_newline = 0;
-   lexer->final_newline = 0;
-   lexer->start_col = 0;
- }
- 
- static VALUE CLexer_alloc(VALUE klass)
- {
-   VALUE obj;
-   lexer_state *lxr = ALLOC(lexer_state);
-   lexer_init(lxr);
- 
-   obj = Data_Wrap_Struct(klass, NULL, -1, lxr);
- 
-   return obj;
- }
- 
- static VALUE CLexer_init(VALUE self, VALUE listener)
- {
-   lexer_state *lxr; 
-   rb_iv_set(self, "@listener", listener);
-   
-   lxr = NULL;
-   DATA_GET(self, lexer_state, lxr);
-   lexer_init(lxr);
-   
-   return self;
- }
- 
- static VALUE CLexer_scan(VALUE self, VALUE input)
- {
-   VALUE input_copy;
-   char *data;
-   size_t len;
-   VALUE listener = rb_iv_get(self, "@listener");
- 
-   lexer_state *lexer;
-   lexer = NULL;
-   DATA_GET(self, lexer_state, lexer);
- 
-   input_copy = rb_str_dup(input);
- 
-   rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%"));
-   data = RSTRING_PTR(input_copy);
-   len = RSTRING_LEN(input_copy);
-   
-   if (len == 0) { 
-     rb_raise(rb_eGherkinLexingError, "No content to lex.");
-   } else {
- 
-     const char *p, *pe, *eof;
-     int cs = 0;
-     
-     VALUE current_row = Qnil;
- 
-     p = data;
-     pe = data + len;
-     eof = pe;
-     
-     assert(*pe == '\0' && "pointer does not end on NULL");
-     
-     
- #line 1342 "ext/gherkin_lexer_pl/gherkin_lexer_pl.c"
- 	{
- 	cs = lexer_start;
- 	}
- 
- #line 425 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/pl.c.rl"
-     
- #line 1349 "ext/gherkin_lexer_pl/gherkin_lexer_pl.c"
- 	{
- 	int _klen;
- 	unsigned int _trans;
- 	const char *_acts;
- 	unsigned int _nacts;
- 	const char *_keys;
- 
- 	if ( p == pe )
- 		goto _test_eof;
- 	if ( cs == 0 )
- 		goto _out;
- _resume:
- 	_keys = _lexer_trans_keys + _lexer_key_offsets[cs];
- 	_trans = _lexer_index_offsets[cs];
- 
- 	_klen = _lexer_single_lengths[cs];
- 	if ( _klen > 0 ) {
- 		const char *_lower = _keys;
- 		const char *_mid;
- 		const char *_upper = _keys + _klen - 1;
- 		while (1) {
- 			if ( _upper < _lower )
- 				break;
- 
- 			_mid = _lower + ((_upper-_lower) >> 1);
- 			if ( (*p) < *_mid )
- 				_upper = _mid - 1;
- 			else if ( (*p) > *_mid )
- 				_lower = _mid + 1;
- 			else {
- 				_trans += (_mid - _keys);
- 				goto _match;
- 			}
- 		}
- 		_keys += _klen;
- 		_trans += _klen;
- 	}
- 
- 	_klen = _lexer_range_lengths[cs];
- 	if ( _klen > 0 ) {
- 		const char *_lower = _keys;
- 		const char *_mid;
- 		const char *_upper = _keys + (_klen<<1) - 2;
- 		while (1) {
- 			if ( _upper < _lower )
- 				break;
- 
- 			_mid = _lower + (((_upper-_lower) >> 1) & ~1);
- 			if ( (*p) < _mid[0] )
- 				_upper = _mid - 2;
- 			else if ( (*p) > _mid[1] )
- 				_lower = _mid + 2;
- 			else {
- 				_trans += ((_mid - _keys)>>1);
- 				goto _match;
- 			}
- 		}
- 		_trans += _klen;
- 	}
- 
- _match:
- 	cs = _lexer_trans_targs[_trans];
- 
- 	if ( _lexer_trans_actions[_trans] == 0 )
- 		goto _again;
- 
- 	_acts = _lexer_actions + _lexer_trans_actions[_trans];
- 	_nacts = (unsigned int) *_acts++;
- 	while ( _nacts-- > 0 )
- 	{
- 		switch ( *_acts++ )
- 		{
- 	case 0:
- #line 83 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/pl.c.rl"
- 	{
- 		MARK(content_start, p);
-     lexer->current_line = lexer->line_number;
-     lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2;
-   }
- 	break;
- 	case 1:
- #line 89 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/pl.c.rl"
- 	{
-     MARK(content_start, p);
-   }
- 	break;
- 	case 2:
- #line 93 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/pl.c.rl"
- 	{
-     lexer->current_line = lexer->line_number;
-     lexer->start_col = p - data - lexer->last_newline;
-   }
- 	break;
- 	case 3:
- #line 98 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/pl.c.rl"
- 	{
-     int len = LEN(content_start, PTR_TO(final_newline));
-     int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end));
- 
-     if (len < 0) len = 0;
-     if (type_len < 0) len = 0;
- 
-     store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line);
-   }
- 	break;
- 	case 4:
- #line 108 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/pl.c.rl"
- 	{ 
-     MARK(docstring_content_type_start, p);
-   }
- 	break;
- 	case 5:
- #line 112 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/pl.c.rl"
- 	{ 
-     MARK(docstring_content_type_end, p);
-   }
- 	break;
- 	case 6:
- #line 116 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/pl.c.rl"
- 	{
-     STORE_KW_END_CON(feature);
-   }
- 	break;
- 	case 7:
- #line 120 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/pl.c.rl"
- 	{
-     STORE_KW_END_CON(background);
-   }
- 	break;
- 	case 8:
- #line 124 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/pl.c.rl"
- 	{
-     STORE_KW_END_CON(scenario);
-   }
- 	break;
- 	case 9:
- #line 128 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/pl.c.rl"
- 	{
-     STORE_KW_END_CON(scenario_outline);
-   }
- 	break;
- 	case 10:
- #line 132 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/pl.c.rl"
- 	{
-     STORE_KW_END_CON(examples);
-   }
- 	break;
- 	case 11:
- #line 136 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/pl.c.rl"
- 	{
-     store_kw_con(listener, "step",
-       PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-       PTR_TO(content_start), LEN(content_start, p), 
-       lexer->current_line);
-   }
- 	break;
- 	case 12:
- #line 143 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/pl.c.rl"
- 	{
-     STORE_ATTR(comment);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 13:
- #line 148 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/pl.c.rl"
- 	{
-     STORE_ATTR(tag);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 14:
- #line 153 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/pl.c.rl"
- 	{
-     lexer->line_number += 1;
-     MARK(final_newline, p);
-   }
- 	break;
- 	case 15:
- #line 158 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/pl.c.rl"
- 	{
-     MARK(last_newline, p + 1);
-   }
- 	break;
- 	case 16:
- #line 162 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/pl.c.rl"
- 	{
-     if (lexer->mark == 0) {
-       MARK(mark, p);
-     }
-   }
- 	break;
- 	case 17:
- #line 168 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/pl.c.rl"
- 	{
-     MARK(keyword_end, p);
-     MARK(keyword_start, PTR_TO(mark));
-     MARK(content_start, p + 1);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 18:
- #line 175 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/pl.c.rl"
- 	{
-     MARK(content_end, p);
-   }
- 	break;
- 	case 19:
- #line 179 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/pl.c.rl"
- 	{
-     p = p - 1;
-     lexer->current_line = lexer->line_number;
-     current_row = rb_ary_new();
-   }
- 	break;
- 	case 20:
- #line 185 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/pl.c.rl"
- 	{
- 		MARK(content_start, p);
-   }
- 	break;
- 	case 21:
- #line 189 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/pl.c.rl"
- 	{
-     VALUE re_pipe, re_newline, re_backslash;
-     VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
-     rb_funcall(con, rb_intern("strip!"), 0);
-     re_pipe      = rb_reg_regcomp(rb_str_new2("\\\\\\|"));
-     re_newline   = rb_reg_regcomp(rb_str_new2("\\\\n"));
-     re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_pipe,      rb_str_new2("|"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_newline,   rb_str_new2("\n"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\"));
- 
-     rb_ary_push(current_row, con);
-   }
- 	break;
- 	case 22:
- #line 203 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/pl.c.rl"
- 	{
-     rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
-   }
- 	break;
- 	case 23:
- #line 207 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/pl.c.rl"
- 	{
-     int line;
-     if (cs < lexer_first_final) {
-       size_t count = 0;
-       VALUE newstr_val;
-       char *newstr;
-       int newstr_count = 0;        
-       size_t len;
-       const char *buff;
-       if (lexer->last_newline != 0) {
-         len = LEN(last_newline, eof);
-         buff = PTR_TO(last_newline);
-       } else {
-         len = strlen(data);
-         buff = data;
-       }
- 
-       // Allocate as a ruby string so that it gets cleaned up by GC
-       newstr_val = rb_str_new(buff, len);
-       newstr = RSTRING_PTR(newstr_val);
- 
- 
-       for (count = 0; count < len; count++) {
-         if(buff[count] == 10) {
-           newstr[newstr_count] = '\0'; // terminate new string at first newline found
-           break;
-         } else {
-           if (buff[count] == '%') {
-             newstr[newstr_count++] = buff[count];
-             newstr[newstr_count] = buff[count];
-           } else {
-             newstr[newstr_count] = buff[count];
-           }
-         }
-         newstr_count++;
-       }
- 
-       line = lexer->line_number;
-       lexer_init(lexer); // Re-initialize so we can scan again with the same lexer
-       raise_lexer_error(newstr, line);
-     } else {
-       rb_funcall(listener, rb_intern("eof"), 0);
-     }
-   }
- 	break;
- #line 1639 "ext/gherkin_lexer_pl/gherkin_lexer_pl.c"
- 		}
- 	}
- 
- _again:
- 	if ( cs == 0 )
- 		goto _out;
- 	if ( ++p != pe )
- 		goto _resume;
- 	_test_eof: {}
- 	if ( p == eof )
- 	{
- 	const char *__acts = _lexer_actions + _lexer_eof_actions[cs];
- 	unsigned int __nacts = (unsigned int) *__acts++;
- 	while ( __nacts-- > 0 ) {
- 		switch ( *__acts++ ) {
- 	case 23:
- #line 207 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/pl.c.rl"
- 	{
-     int line;
-     if (cs < lexer_first_final) {
-       size_t count = 0;
-       VALUE newstr_val;
-       char *newstr;
-       int newstr_count = 0;        
-       size_t len;
-       const char *buff;
-       if (lexer->last_newline != 0) {
-         len = LEN(last_newline, eof);
-         buff = PTR_TO(last_newline);
-       } else {
-         len = strlen(data);
-         buff = data;
-       }
- 
-       // Allocate as a ruby string so that it gets cleaned up by GC
-       newstr_val = rb_str_new(buff, len);
-       newstr = RSTRING_PTR(newstr_val);
- 
- 
-       for (count = 0; count < len; count++) {
-         if(buff[count] == 10) {
-           newstr[newstr_count] = '\0'; // terminate new string at first newline found
-           break;
-         } else {
-           if (buff[count] == '%') {
-             newstr[newstr_count++] = buff[count];
-             newstr[newstr_count] = buff[count];
-           } else {
-             newstr[newstr_count] = buff[count];
-           }
-         }
-         newstr_count++;
-       }
- 
-       line = lexer->line_number;
-       lexer_init(lexer); // Re-initialize so we can scan again with the same lexer
-       raise_lexer_error(newstr, line);
-     } else {
-       rb_funcall(listener, rb_intern("eof"), 0);
-     }
-   }
- 	break;
- #line 1702 "ext/gherkin_lexer_pl/gherkin_lexer_pl.c"
- 		}
- 	}
- 	}
- 
- 	_out: {}
- 	}
- 
- #line 426 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/pl.c.rl"
- 
-     assert(p <= pe && "data overflow after parsing execute");
-     assert(lexer->content_start <= len && "content starts after data end");
-     assert(lexer->mark < len && "mark is after data end");
-     
-     // Reset lexer by re-initializing the whole thing
-     lexer_init(lexer);
- 
-     if (cs == lexer_error) {
-       rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails.");
-     } else {
-       return Qtrue;
-     }
-   }
- }
- 
- void Init_gherkin_lexer_pl()
- {
-   mGherkin = rb_define_module("Gherkin");
-   mGherkinLexer = rb_define_module_under(mGherkin, "Lexer");
-   rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError"));
- 
-   mCLexer = rb_define_module_under(mGherkin, "CLexer");
-   cI18nLexer = rb_define_class_under(mCLexer, "Pl", rb_cObject);
-   rb_define_alloc_func(cI18nLexer, CLexer_alloc);
-   rb_define_method(cI18nLexer, "initialize", CLexer_init, 1);
-   rb_define_method(cI18nLexer, "scan", CLexer_scan, 1);
- }
- 
 -#line 1 "ragel/i18n/pl.c.rl"
 -#include <assert.h>
 -#include <ruby.h>
 -
 -#if defined(_WIN32)
 -#include <stddef.h>
 -#endif
 -
 -#ifdef HAVE_RUBY_RE_H
 -#include <ruby/re.h>
 -#else
 -#include <re.h>
 -#endif
 -
 -#ifdef HAVE_RUBY_ENCODING_H
 -#include <ruby/encoding.h>
 -#define ENCODED_STR_NEW(ptr, len) \
 -    rb_enc_str_new(ptr, len, rb_utf8_encoding())
 -#else
 -#define ENCODED_STR_NEW(ptr, len) \
 -    rb_str_new(ptr, len)
 -#endif
 -
 -#ifndef RSTRING_PTR
 -#define RSTRING_PTR(s) (RSTRING(s)->ptr)
 -#endif
 -
 -#ifndef RSTRING_LEN
 -#define RSTRING_LEN(s) (RSTRING(s)->len)
 -#endif
 -
 -#define DATA_GET(FROM, TYPE, NAME) \
 -  Data_Get_Struct(FROM, TYPE, NAME); \
 -  if (NAME == NULL) { \
 -    rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \
 -  }
 - 
 -typedef struct lexer_state {
 -  int content_len;
 -  int line_number;
 -  int current_line;
 -  int start_col;
 -  size_t mark;
 -  size_t keyword_start;
 -  size_t keyword_end;
 -  size_t next_keyword_start;
 -  size_t content_start;
 -  size_t content_end;
 -  size_t docstring_content_type_start;
 -  size_t docstring_content_type_end;
 -  size_t query_start;
 -  size_t last_newline;
 -  size_t final_newline;
 -} lexer_state;
 -
 -static VALUE mGherkin;
 -static VALUE mGherkinLexer;
 -static VALUE mCLexer;
 -static VALUE cI18nLexer;
 -static VALUE rb_eGherkinLexingError;
 -
 -#define LEN(AT, P) (P - data - lexer->AT)
 -#define MARK(M, P) (lexer->M = (P) - data)
 -#define PTR_TO(P) (data + lexer->P)
 -
 -#define STORE_KW_END_CON(EVENT) \
 -  store_multiline_kw_con(listener, # EVENT, \
 -    PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \
 -    PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \
 -    lexer->current_line, lexer->start_col); \
 -    if (lexer->content_end != 0) { \
 -      p = PTR_TO(content_end - 1); \
 -    } \
 -    lexer->content_end = 0
 -
 -#define STORE_ATTR(ATTR) \
 -    store_attr(listener, # ATTR, \
 -      PTR_TO(content_start), LEN(content_start, p), \
 -      lexer->line_number)
 -
 -
 -#line 254 "ragel/i18n/pl.c.rl"
 -
 -
 -/** Data **/
 -
 -#line 89 "ext/gherkin_lexer_pl/gherkin_lexer_pl.c"
 -static const char _lexer_actions[] = {
 -	0, 1, 0, 1, 1, 1, 2, 1, 
 -	3, 1, 4, 1, 5, 1, 6, 1, 
 -	7, 1, 8, 1, 9, 1, 10, 1, 
 -	11, 1, 12, 1, 13, 1, 16, 1, 
 -	17, 1, 18, 1, 19, 1, 20, 1, 
 -	21, 1, 22, 1, 23, 2, 1, 18, 
 -	2, 4, 5, 2, 13, 0, 2, 14, 
 -	15, 2, 17, 0, 2, 17, 2, 2, 
 -	17, 16, 2, 17, 19, 2, 18, 6, 
 -	2, 18, 7, 2, 18, 8, 2, 18, 
 -	9, 2, 18, 10, 2, 18, 16, 2, 
 -	20, 21, 2, 22, 0, 2, 22, 2, 
 -	2, 22, 16, 2, 22, 19, 3, 3, 
 -	14, 15, 3, 5, 14, 15, 3, 11, 
 -	14, 15, 3, 12, 14, 15, 3, 13, 
 -	14, 15, 3, 14, 15, 18, 3, 17, 
 -	0, 11, 3, 17, 14, 15, 4, 1, 
 -	14, 15, 18, 4, 4, 5, 14, 15, 
 -	4, 17, 0, 14, 15, 5, 17, 0, 
 -	11, 14, 15
 -};
 -
 -static const short _lexer_key_offsets[] = {
 -	0, 0, 23, 24, 25, 47, 48, 49, 
 -	51, 53, 58, 63, 68, 73, 77, 81, 
 -	83, 84, 85, 86, 87, 88, 89, 90, 
 -	91, 92, 93, 94, 95, 96, 97, 98, 
 -	99, 101, 103, 108, 115, 120, 122, 123, 
 -	124, 125, 126, 127, 128, 129, 130, 143, 
 -	145, 147, 149, 151, 153, 155, 157, 159, 
 -	161, 163, 165, 167, 169, 171, 173, 175, 
 -	177, 179, 181, 183, 205, 206, 207, 208, 
 -	209, 210, 211, 212, 213, 214, 215, 217, 
 -	218, 219, 220, 221, 222, 223, 224, 225, 
 -	226, 227, 228, 229, 230, 232, 233, 234, 
 -	235, 236, 237, 238, 239, 240, 241, 242, 
 -	243, 244, 245, 246, 247, 248, 249, 250, 
 -	251, 252, 253, 254, 255, 256, 257, 258, 
 -	268, 270, 272, 274, 276, 278, 280, 282, 
 -	284, 286, 288, 290, 292, 294, 296, 298, 
 -	300, 302, 304, 306, 308, 310, 312, 314, 
 -	316, 318, 320, 322, 324, 326, 328, 330, 
 -	332, 334, 336, 338, 340, 342, 344, 346, 
 -	348, 350, 352, 353, 354, 355, 356, 357, 
 -	358, 359, 360, 361, 362, 363, 383, 385, 
 -	387, 389, 391, 393, 395, 397, 399, 401, 
 -	403, 405, 407, 409, 411, 413, 416, 418, 
 -	420, 422, 424, 426, 428, 430, 432, 434, 
 -	436, 438, 440, 442, 444, 446, 448, 451, 
 -	453, 455, 457, 459, 461, 463, 465, 467, 
 -	469, 471, 473, 475, 477, 479, 481, 483, 
 -	485, 487, 489, 491, 493, 495, 497, 499, 
 -	501, 503, 505, 507, 509, 512, 514, 516, 
 -	518, 520, 522, 524, 526, 528, 530, 532, 
 -	534, 536, 538, 540, 542, 544, 546, 548, 
 -	550, 552, 554, 556, 558, 560, 563, 565, 
 -	567, 569, 571, 573, 575, 577, 579, 581, 
 -	583, 585, 587, 589, 592, 594, 596, 598, 
 -	600, 602, 604, 606, 608, 610, 612, 614, 
 -	615, 616, 617, 618, 619, 620, 621, 622, 
 -	623, 624, 625, 626, 627, 628, 629, 630, 
 -	631, 632, 633, 634, 654, 656, 658, 660, 
 -	662, 664, 666, 668, 670, 672, 674, 676, 
 -	678, 680, 682, 684, 687, 689, 691, 693, 
 -	695, 697, 699, 701, 703, 705, 707, 709, 
 -	711, 713, 715, 717, 719, 722, 724, 726, 
 -	728, 730, 732, 734, 736, 738, 740, 742, 
 -	744, 746, 748, 750, 752, 754, 756, 758, 
 -	760, 762, 764, 766, 768, 770, 772, 774, 
 -	776, 778, 780, 782, 784, 786, 788, 790, 
 -	792, 794, 796, 798, 801, 803, 805, 807, 
 -	809, 811, 813, 815, 817, 819, 821, 823, 
 -	825, 827, 829, 831, 833, 835, 837, 839, 
 -	840, 841, 842, 843, 844, 845, 846, 847, 
 -	848, 849, 850, 851, 852, 854, 855, 856, 
 -	857, 858, 859, 860, 861, 862, 863, 864, 
 -	865, 885, 887, 889, 891, 893, 895, 897, 
 -	899, 901, 903, 905, 907, 909, 911, 913, 
 -	915, 918, 920, 922, 924, 926, 928, 930, 
 -	932, 934, 936, 938, 940, 942, 944, 946, 
 -	948, 950, 953, 955, 957, 959, 961, 963, 
 -	965, 967, 969, 971, 973, 975, 977, 979, 
 -	981, 983, 985, 987, 989, 991, 993, 995, 
 -	997, 999, 1001, 1003, 1005, 1007, 1009, 1011, 
 -	1014, 1016, 1018, 1020, 1022, 1024, 1026, 1028, 
 -	1030, 1032, 1034, 1036, 1038, 1040, 1042, 1044, 
 -	1046, 1048, 1050, 1052, 1054, 1056, 1058, 1060, 
 -	1062, 1065, 1067, 1069, 1071, 1073, 1075, 1077, 
 -	1079, 1081, 1083, 1085, 1087, 1089, 1091, 1093, 
 -	1095, 1097, 1099, 1101, 1102, 1103, 1104, 1105, 
 -	1109, 1115, 1118, 1120, 1126, 1148, 1150, 1152, 
 -	1154, 1156, 1158, 1160, 1163, 1165, 1167, 1169, 
 -	1171, 1173, 1175, 1177, 1179, 1181, 1183, 1185, 
 -	1187, 1189, 1191, 1193, 1195, 1197, 1199, 1201, 
 -	1203, 1205, 1207, 1209, 1212, 1214, 1216, 1218, 
 -	1220, 1222, 1224, 1226, 1228, 1230, 1232, 1234, 
 -	1236, 1238, 1240, 1242, 1244, 1246, 1248, 1250, 
 -	1252, 1254, 1256, 1258, 1260, 1262, 1264, 1266, 
 -	1268, 1270, 1272, 1274, 1276, 1278, 1280, 1282, 
 -	1284, 1286, 1288, 1290, 1292, 1294, 1296, 1298, 
 -	1300, 1302, 1304
 -};
 -
 -static const char _lexer_trans_keys[] = {
 -	-17, 10, 32, 34, 35, 37, 42, 64, 
 -	65, 70, 71, 73, 74, 75, 77, 79, 
 -	80, 83, 87, 90, 124, 9, 13, -69, 
 -	-65, 10, 32, 34, 35, 37, 42, 64, 
 -	65, 70, 71, 73, 74, 75, 77, 79, 
 -	80, 83, 87, 90, 124, 9, 13, 34, 
 -	34, 10, 13, 10, 13, 10, 32, 34, 
 -	9, 13, 10, 32, 34, 9, 13, 10, 
 -	32, 34, 9, 13, 10, 32, 34, 9, 
 -	13, 10, 32, 9, 13, 10, 32, 9, 
 -	13, 10, 13, 10, 95, 70, 69, 65, 
 -	84, 85, 82, 69, 95, 69, 78, 68, 
 -	95, 37, 32, 10, 13, 10, 13, 13, 
 -	32, 64, 9, 10, 9, 10, 13, 32, 
 -	64, 11, 12, 10, 32, 64, 9, 13, 
 -	108, 115, 101, 112, 101, 107, 116, 58, 
 -	10, 10, 10, 32, 35, 37, 64, 65, 
 -	70, 80, 83, 87, 90, 9, 13, 10, 
 -	95, 10, 70, 10, 69, 10, 65, 10, 
 -	84, 10, 85, 10, 82, 10, 69, 10, 
 -	95, 10, 69, 10, 78, 10, 68, 10, 
 -	95, 10, 37, 10, 115, 10, 112, 10, 
 -	101, 10, 107, 10, 116, 10, 58, 10, 
 -	32, 34, 35, 37, 42, 64, 65, 70, 
 -	71, 73, 74, 75, 77, 79, 80, 83, 
 -	87, 90, 124, 9, 13, 117, 110, 107, 
 -	99, 106, 97, 100, 121, 101, -59, -101, 
 -	-68, 108, 105, 101, 105, 101, 97, 106, 
 -	-60, -123, 99, 114, 97, 122, 111, 114, 
 -	116, 114, 122, 101, 98, 97, 32, 98, 
 -	105, 122, 110, 101, 115, 111, 119, 122, 
 -	121, 107, -59, -126, 97, 100, 121, 58, 
 -	10, 10, 10, 32, 35, 65, 70, 80, 
 -	87, 124, 9, 13, 10, 115, 10, 112, 
 -	10, 101, 10, 107, 10, 116, 10, 58, 
 -	10, 117, 10, 110, 10, 107, 10, 99, 
 -	10, 106, 10, 97, 10, 111, 10, 116, 
 -	10, 114, 10, 122, 10, 101, 10, 98, 
 -	10, 97, 10, 32, 10, 98, 10, 105, 
 -	10, 122, 10, 110, 10, 101, 10, 115, 
 -	10, 111, 10, 119, -59, 10, -126, 10, 
 -	10, 97, -59, 10, -101, 10, 10, 99, 
 -	10, 105, 10, 119, 10, 111, -59, 10, 
 -	-101, 10, -60, 10, -121, 10, 99, 122, 
 -	101, 110, 97, 114, 105, 117, 115, 122, 
 -	58, 10, 10, 10, 32, 35, 37, 42, 
 -	64, 65, 70, 71, 73, 74, 75, 77, 
 -	79, 80, 83, 87, 90, 9, 13, 10, 
 -	95, 10, 70, 10, 69, 10, 65, 10, 
 -	84, 10, 85, 10, 82, 10, 69, 10, 
 -	95, 10, 69, 10, 78, 10, 68, 10, 
 -	95, 10, 37, 10, 32, 10, 108, 115, 
 -	10, 101, 10, 112, 10, 101, 10, 107, 
 -	10, 116, 10, 58, 10, 117, 10, 110, 
 -	10, 107, 10, 99, 10, 106, 10, 97, 
 -	10, 100, 10, 121, 10, 101, -59, 10, 
 -	-101, -68, 10, 10, 108, 10, 105, 10, 
 -	101, 10, 105, 10, 101, 10, 97, 10, 
 -	106, -60, 10, -123, 10, 10, 99, 10, 
 -	114, 10, 97, 10, 122, 10, 111, 10, 
 -	116, 10, 114, 10, 122, 10, 101, 10, 
 -	98, 10, 97, 10, 32, 10, 98, 10, 
 -	105, 10, 122, 10, 110, 10, 101, 10, 
 -	115, 10, 111, 10, 119, 10, 99, 122, 
 -	10, 101, 10, 110, 10, 97, 10, 114, 
 -	10, 105, 10, 117, 10, 115, 10, 122, 
 -	10, 97, 10, 98, 10, 108, 10, 111, 
 -	10, 110, 10, 32, 10, 115, 10, 99, 
 -	10, 101, 10, 110, 10, 97, 10, 114, 
 -	10, 105, 10, 117, 10, 115, 10, 122, 
 -	-59, 10, 116, -126, 10, 10, 97, -59, 
 -	10, -101, 10, 10, 99, 10, 105, 10, 
 -	119, 10, 111, -59, 10, -101, 10, -60, 
 -	10, -121, 10, 10, 97, -59, 10, 107, 
 -	-126, 10, 10, 111, -59, 10, -68, 10, 
 -	10, 101, 10, 110, 10, 105, -59, 10, 
 -	-126, 10, 10, 97, 10, 100, 97, 98, 
 -	108, 111, 110, 32, 115, 99, 101, 110, 
 -	97, 114, 105, 117, 115, 122, 97, 58, 
 -	10, 10, 10, 32, 35, 37, 42, 64, 
 -	65, 70, 71, 73, 74, 75, 77, 79, 
 -	80, 83, 87, 90, 9, 13, 10, 95, 
 -	10, 70, 10, 69, 10, 65, 10, 84, 
 -	10, 85, 10, 82, 10, 69, 10, 95, 
 -	10, 69, 10, 78, 10, 68, 10, 95, 
 -	10, 37, 10, 32, 10, 108, 115, 10, 
 -	101, 10, 112, 10, 101, 10, 107, 10, 
 -	116, 10, 58, 10, 117, 10, 110, 10, 
 -	107, 10, 99, 10, 106, 10, 97, 10, 
 -	100, 10, 121, 10, 101, -59, 10, -101, 
 -	-68, 10, 10, 108, 10, 105, 10, 101, 
 -	10, 105, 10, 101, 10, 97, 10, 106, 
 -	-60, 10, -123, 10, 10, 99, 10, 114, 
 -	10, 97, 10, 122, 10, 111, 10, 116, 
 -	10, 114, 10, 122, 10, 101, 10, 98, 
 -	10, 97, 10, 32, 10, 98, 10, 105, 
 -	10, 122, 10, 110, 10, 101, 10, 115, 
 -	10, 111, 10, 119, 10, 99, 10, 101, 
 -	10, 110, 10, 97, 10, 114, 10, 105, 
 -	10, 117, 10, 115, 10, 122, -59, 10, 
 -	116, -126, 10, 10, 97, -59, 10, -101, 
 -	10, 10, 99, 10, 105, 10, 119, 10, 
 -	111, -59, 10, -101, 10, -60, 10, -121, 
 -	10, 10, 97, 10, 107, -59, 10, -126, 
 -	10, 10, 97, 10, 100, -59, 116, -126, 
 -	97, -59, -101, 99, 105, 119, 111, -59, 
 -	-101, -60, -121, 97, -59, 107, -126, 111, 
 -	-59, -68, 101, 110, 105, 97, 58, 10, 
 -	10, 10, 32, 35, 37, 42, 64, 65, 
 -	70, 71, 73, 74, 75, 77, 79, 80, 
 -	83, 87, 90, 9, 13, 10, 95, 10, 
 -	70, 10, 69, 10, 65, 10, 84, 10, 
 -	85, 10, 82, 10, 69, 10, 95, 10, 
 -	69, 10, 78, 10, 68, 10, 95, 10, 
 -	37, 10, 32, 10, 108, 115, 10, 101, 
 -	10, 112, 10, 101, 10, 107, 10, 116, 
 -	10, 58, 10, 117, 10, 110, 10, 107, 
 -	10, 99, 10, 106, 10, 97, 10, 100, 
 -	10, 121, 10, 101, -59, 10, -101, -68, 
 -	10, 10, 108, 10, 105, 10, 101, 10, 
 -	105, 10, 101, 10, 97, 10, 106, -60, 
 -	10, -123, 10, 10, 99, 10, 114, 10, 
 -	97, 10, 122, 10, 111, 10, 116, 10, 
 -	114, 10, 122, 10, 101, 10, 98, 10, 
 -	97, 10, 32, 10, 98, 10, 105, 10, 
 -	122, 10, 110, 10, 101, 10, 115, 10, 
 -	111, 10, 119, 10, 99, 122, 10, 101, 
 -	10, 110, 10, 97, 10, 114, 10, 105, 
 -	10, 117, 10, 115, 10, 122, 10, 97, 
 -	10, 98, 10, 108, 10, 111, 10, 110, 
 -	10, 32, 10, 115, 10, 99, 10, 101, 
 -	10, 110, 10, 97, 10, 114, 10, 105, 
 -	10, 117, 10, 115, 10, 122, -59, 10, 
 -	116, -126, 10, 10, 97, -59, 10, -101, 
 -	10, 10, 99, 10, 105, 10, 119, 10, 
 -	111, -59, 10, -101, 10, -60, 10, -121, 
 -	10, 10, 97, 10, 107, -59, 10, -126, 
 -	10, 10, 97, 10, 100, -59, -126, 97, 
 -	100, 32, 124, 9, 13, 10, 32, 92, 
 -	124, 9, 13, 10, 92, 124, 10, 92, 
 -	10, 32, 92, 124, 9, 13, 10, 32, 
 -	34, 35, 37, 42, 64, 65, 70, 71, 
 -	73, 74, 75, 77, 79, 80, 83, 87, 
 -	90, 124, 9, 13, 10, 117, 10, 110, 
 -	10, 107, 10, 99, 10, 106, 10, 97, 
 -	10, 111, 114, 10, 116, 10, 114, 10, 
 -	122, 10, 101, 10, 98, 10, 97, 10, 
 -	32, 10, 98, 10, 105, 10, 122, 10, 
 -	110, 10, 101, 10, 115, 10, 111, 10, 
 -	119, 10, 122, 10, 121, 10, 107, -59, 
 -	10, -126, 10, 10, 97, 10, 100, 10, 
 -	121, 10, 99, 122, 10, 101, 10, 110, 
 -	10, 97, 10, 114, 10, 105, 10, 117, 
 -	10, 115, 10, 122, 10, 97, 10, 98, 
 -	10, 108, 10, 111, 10, 110, 10, 32, 
 -	10, 115, 10, 99, 10, 101, 10, 110, 
 -	10, 97, 10, 114, 10, 105, 10, 117, 
 -	10, 115, 10, 122, -59, 10, -126, 10, 
 -	10, 97, -59, 10, -101, 10, 10, 99, 
 -	10, 105, 10, 119, 10, 111, -59, 10, 
 -	-101, 10, -60, 10, -121, 10, 10, 97, 
 -	-59, 10, -126, 10, 10, 111, -59, 10, 
 -	-68, 10, 10, 101, 10, 110, 10, 105, 
 -	0
 -};
 -
 -static const char _lexer_single_lengths[] = {
 -	0, 21, 1, 1, 20, 1, 1, 2, 
 -	2, 3, 3, 3, 3, 2, 2, 2, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	2, 2, 3, 5, 3, 2, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 11, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 20, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 2, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 2, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 8, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 18, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 3, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 3, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 3, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 3, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 3, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 18, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 3, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 3, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 3, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 2, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	18, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	3, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 3, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 3, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	3, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 1, 1, 1, 1, 2, 
 -	4, 3, 2, 4, 20, 2, 2, 2, 
 -	2, 2, 2, 3, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 3, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 0
 -};
 -
 -static const char _lexer_range_lengths[] = {
 -	0, 1, 0, 0, 1, 0, 0, 0, 
 -	0, 1, 1, 1, 1, 1, 1, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 1, 1, 1, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 1, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 1, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 1, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 1, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 1, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	1, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 1, 
 -	1, 0, 0, 1, 1, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0
 -};
 -
 -static const short _lexer_index_offsets[] = {
 -	0, 0, 23, 25, 27, 49, 51, 53, 
 -	56, 59, 64, 69, 74, 79, 83, 87, 
 -	90, 92, 94, 96, 98, 100, 102, 104, 
 -	106, 108, 110, 112, 114, 116, 118, 120, 
 -	122, 125, 128, 133, 140, 145, 148, 150, 
 -	152, 154, 156, 158, 160, 162, 164, 177, 
 -	180, 183, 186, 189, 192, 195, 198, 201, 
 -	204, 207, 210, 213, 216, 219, 222, 225, 
 -	228, 231, 234, 237, 259, 261, 263, 265, 
 -	267, 269, 271, 273, 275, 277, 279, 282, 
 -	284, 286, 288, 290, 292, 294, 296, 298, 
 -	300, 302, 304, 306, 308, 311, 313, 315, 
 -	317, 319, 321, 323, 325, 327, 329, 331, 
 -	333, 335, 337, 339, 341, 343, 345, 347, 
 -	349, 351, 353, 355, 357, 359, 361, 363, 
 -	373, 376, 379, 382, 385, 388, 391, 394, 
 -	397, 400, 403, 406, 409, 412, 415, 418, 
 -	421, 424, 427, 430, 433, 436, 439, 442, 
 -	445, 448, 451, 454, 457, 460, 463, 466, 
 -	469, 472, 475, 478, 481, 484, 487, 490, 
 -	493, 496, 499, 501, 503, 505, 507, 509, 
 -	511, 513, 515, 517, 519, 521, 541, 544, 
 -	547, 550, 553, 556, 559, 562, 565, 568, 
 -	571, 574, 577, 580, 583, 586, 590, 593, 
 -	596, 599, 602, 605, 608, 611, 614, 617, 
 -	620, 623, 626, 629, 632, 635, 638, 642, 
 -	645, 648, 651, 654, 657, 660, 663, 666, 
 -	669, 672, 675, 678, 681, 684, 687, 690, 
 -	693, 696, 699, 702, 705, 708, 711, 714, 
 -	717, 720, 723, 726, 729, 733, 736, 739, 
 -	742, 745, 748, 751, 754, 757, 760, 763, 
 -	766, 769, 772, 775, 778, 781, 784, 787, 
 -	790, 793, 796, 799, 802, 805, 809, 812, 
 -	815, 818, 821, 824, 827, 830, 833, 836, 
 -	839, 842, 845, 848, 852, 855, 858, 861, 
 -	864, 867, 870, 873, 876, 879, 882, 885, 
 -	887, 889, 891, 893, 895, 897, 899, 901, 
 -	903, 905, 907, 909, 911, 913, 915, 917, 
 -	919, 921, 923, 925, 945, 948, 951, 954, 
 -	957, 960, 963, 966, 969, 972, 975, 978, 
 -	981, 984, 987, 990, 994, 997, 1000, 1003, 
 -	1006, 1009, 1012, 1015, 1018, 1021, 1024, 1027, 
 -	1030, 1033, 1036, 1039, 1042, 1046, 1049, 1052, 
 -	1055, 1058, 1061, 1064, 1067, 1070, 1073, 1076, 
 -	1079, 1082, 1085, 1088, 1091, 1094, 1097, 1100, 
 -	1103, 1106, 1109, 1112, 1115, 1118, 1121, 1124, 
 -	1127, 1130, 1133, 1136, 1139, 1142, 1145, 1148, 
 -	1151, 1154, 1157, 1160, 1164, 1167, 1170, 1173, 
 -	1176, 1179, 1182, 1185, 1188, 1191, 1194, 1197, 
 -	1200, 1203, 1206, 1209, 1212, 1215, 1218, 1221, 
 -	1223, 1225, 1227, 1229, 1231, 1233, 1235, 1237, 
 -	1239, 1241, 1243, 1245, 1247, 1250, 1252, 1254, 
 -	1256, 1258, 1260, 1262, 1264, 1266, 1268, 1270, 
 -	1272, 1292, 1295, 1298, 1301, 1304, 1307, 1310, 
 -	1313, 1316, 1319, 1322, 1325, 1328, 1331, 1334, 
 -	1337, 1341, 1344, 1347, 1350, 1353, 1356, 1359, 
 -	1362, 1365, 1368, 1371, 1374, 1377, 1380, 1383, 
 -	1386, 1389, 1393, 1396, 1399, 1402, 1405, 1408, 
 -	1411, 1414, 1417, 1420, 1423, 1426, 1429, 1432, 
 -	1435, 1438, 1441, 1444, 1447, 1450, 1453, 1456, 
 -	1459, 1462, 1465, 1468, 1471, 1474, 1477, 1480, 
 -	1484, 1487, 1490, 1493, 1496, 1499, 1502, 1505, 
 -	1508, 1511, 1514, 1517, 1520, 1523, 1526, 1529, 
 -	1532, 1535, 1538, 1541, 1544, 1547, 1550, 1553, 
 -	1556, 1560, 1563, 1566, 1569, 1572, 1575, 1578, 
 -	1581, 1584, 1587, 1590, 1593, 1596, 1599, 1602, 
 -	1605, 1608, 1611, 1614, 1616, 1618, 1620, 1622, 
 -	1626, 1632, 1636, 1639, 1645, 1667, 1670, 1673, 
 -	1676, 1679, 1682, 1685, 1689, 1692, 1695, 1698, 
 -	1701, 1704, 1707, 1710, 1713, 1716, 1719, 1722, 
 -	1725, 1728, 1731, 1734, 1737, 1740, 1743, 1746, 
 -	1749, 1752, 1755, 1758, 1762, 1765, 1768, 1771, 
 -	1774, 1777, 1780, 1783, 1786, 1789, 1792, 1795, 
 -	1798, 1801, 1804, 1807, 1810, 1813, 1816, 1819, 
 -	1822, 1825, 1828, 1831, 1834, 1837, 1840, 1843, 
 -	1846, 1849, 1852, 1855, 1858, 1861, 1864, 1867, 
 -	1870, 1873, 1876, 1879, 1882, 1885, 1888, 1891, 
 -	1894, 1897, 1900
 -};
 -
 -static const short _lexer_trans_targs[] = {
 -	2, 4, 4, 5, 15, 17, 31, 34, 
 -	37, 68, 74, 31, 76, 82, 84, 89, 
 -	92, 161, 398, 411, 535, 4, 0, 3, 
 -	0, 4, 0, 4, 4, 5, 15, 17, 
 -	31, 34, 37, 68, 74, 31, 76, 82, 
 -	84, 89, 92, 161, 398, 411, 535, 4, 
 -	0, 6, 0, 7, 0, 9, 8, 8, 
 -	9, 8, 8, 10, 10, 11, 10, 10, 
 -	10, 10, 11, 10, 10, 10, 10, 12, 
 -	10, 10, 10, 10, 13, 10, 10, 4, 
 -	14, 14, 0, 4, 14, 14, 0, 4, 
 -	16, 15, 4, 0, 18, 0, 19, 0, 
 -	20, 0, 21, 0, 22, 0, 23, 0, 
 -	24, 0, 25, 0, 26, 0, 27, 0, 
 -	28, 0, 29, 0, 30, 0, 618, 0, 
 -	32, 0, 4, 16, 33, 4, 16, 33, 
 -	0, 0, 0, 0, 35, 36, 4, 36, 
 -	36, 34, 35, 35, 4, 36, 34, 36, 
 -	0, 38, 39, 0, 31, 0, 40, 0, 
 -	41, 0, 42, 0, 43, 0, 44, 0, 
 -	46, 45, 46, 45, 46, 46, 4, 47, 
 -	4, 61, 541, 547, 571, 596, 609, 46, 
 -	45, 46, 48, 45, 46, 49, 45, 46, 
 -	50, 45, 46, 51, 45, 46, 52, 45, 
 -	46, 53, 45, 46, 54, 45, 46, 55, 
 -	45, 46, 56, 45, 46, 57, 45, 46, 
 -	58, 45, 46, 59, 45, 46, 60, 45, 
 -	46, 4, 45, 46, 62, 45, 46, 63, 
 -	45, 46, 64, 45, 46, 65, 45, 46, 
 -	66, 45, 46, 67, 45, 4, 4, 5, 
 -	15, 17, 31, 34, 37, 68, 74, 31, 
 -	76, 82, 84, 89, 92, 161, 398, 411, 
 -	535, 4, 0, 69, 0, 70, 0, 71, 
 -	0, 72, 0, 73, 0, 43, 0, 75, 
 -	0, 31, 0, 77, 0, 78, 0, 79, 
 -	81, 0, 80, 0, 31, 0, 79, 0, 
 -	83, 0, 74, 0, 85, 0, 86, 0, 
 -	87, 0, 88, 0, 31, 0, 90, 0, 
 -	91, 0, 31, 0, 93, 108, 0, 94, 
 -	0, 95, 0, 96, 0, 97, 0, 98, 
 -	0, 99, 0, 100, 0, 101, 0, 102, 
 -	0, 103, 0, 104, 0, 105, 0, 106, 
 -	0, 107, 0, 73, 0, 109, 0, 110, 
 -	0, 111, 0, 112, 0, 113, 0, 114, 
 -	0, 115, 0, 116, 0, 117, 0, 119, 
 -	118, 119, 118, 119, 119, 4, 120, 126, 
 -	132, 148, 4, 119, 118, 119, 121, 118, 
 -	119, 122, 118, 119, 123, 118, 119, 124, 
 -	118, 119, 125, 118, 119, 67, 118, 119, 
 -	127, 118, 119, 128, 118, 119, 129, 118, 
 -	119, 130, 118, 119, 131, 118, 119, 125, 
 -	118, 119, 133, 118, 119, 134, 118, 119, 
 -	135, 118, 119, 136, 118, 119, 137, 118, 
 -	119, 138, 118, 119, 139, 118, 119, 140, 
 -	118, 119, 141, 118, 119, 142, 118, 119, 
 -	143, 118, 119, 144, 118, 119, 145, 118, 
 -	119, 146, 118, 119, 147, 118, 119, 131, 
 -	118, 149, 119, 118, 150, 119, 118, 119, 
 -	151, 118, 152, 119, 118, 153, 119, 118, 
 -	119, 154, 118, 119, 155, 118, 119, 156, 
 -	118, 119, 157, 118, 158, 119, 118, 159, 
 -	119, 118, 160, 119, 118, 125, 119, 118, 
 -	162, 287, 0, 163, 0, 164, 0, 165, 
 -	0, 166, 0, 167, 0, 168, 0, 169, 
 -	0, 170, 0, 171, 0, 173, 172, 173, 
 -	172, 173, 173, 4, 174, 188, 4, 189, 
 -	196, 202, 188, 204, 210, 212, 217, 220, 
 -	236, 261, 274, 173, 172, 173, 175, 172, 
 -	173, 176, 172, 173, 177, 172, 173, 178, 
 -	172, 173, 179, 172, 173, 180, 172, 173, 
 -	181, 172, 173, 182, 172, 173, 183, 172, 
 -	173, 184, 172, 173, 185, 172, 173, 186, 
 -	172, 173, 187, 172, 173, 4, 172, 173, 
 -	67, 172, 173, 190, 191, 172, 173, 188, 
 -	172, 173, 192, 172, 173, 193, 172, 173, 
 -	194, 172, 173, 195, 172, 173, 67, 172, 
 -	173, 197, 172, 173, 198, 172, 173, 199, 
 -	172, 173, 200, 172, 173, 201, 172, 173, 
 -	195, 172, 173, 203, 172, 173, 188, 172, 
 -	173, 205, 172, 206, 173, 172, 207, 209, 
 -	173, 172, 173, 208, 172, 173, 188, 172, 
 -	173, 207, 172, 173, 211, 172, 173, 202, 
 -	172, 173, 213, 172, 173, 214, 172, 215, 
 -	173, 172, 216, 173, 172, 173, 188, 172, 
 -	173, 218, 172, 173, 219, 172, 173, 188, 
 -	172, 173, 221, 172, 173, 222, 172, 173, 
 -	223, 172, 173, 224, 172, 173, 225, 172, 
 -	173, 226, 172, 173, 227, 172, 173, 228, 
 -	172, 173, 229, 172, 173, 230, 172, 173, 
 -	231, 172, 173, 232, 172, 173, 233, 172, 
 -	173, 234, 172, 173, 235, 172, 173, 201, 
 -	172, 173, 237, 245, 172, 173, 238, 172, 
 -	173, 239, 172, 173, 240, 172, 173, 241, 
 -	172, 173, 242, 172, 173, 243, 172, 173, 
 -	244, 172, 173, 195, 172, 173, 246, 172, 
 -	173, 247, 172, 173, 248, 172, 173, 249, 
 -	172, 173, 250, 172, 173, 251, 172, 173, 
 -	252, 172, 173, 253, 172, 173, 254, 172, 
 -	173, 255, 172, 173, 256, 172, 173, 257, 
 -	172, 173, 258, 172, 173, 259, 172, 173, 
 -	260, 172, 173, 201, 172, 262, 173, 211, 
 -	172, 263, 173, 172, 173, 264, 172, 265, 
 -	173, 172, 266, 173, 172, 173, 267, 172, 
 -	173, 268, 172, 173, 269, 172, 173, 270, 
 -	172, 271, 173, 172, 272, 173, 172, 273, 
 -	173, 172, 195, 173, 172, 173, 275, 172, 
 -	276, 173, 283, 172, 277, 173, 172, 173, 
 -	278, 172, 279, 173, 172, 280, 173, 172, 
 -	173, 281, 172, 173, 282, 172, 173, 201, 
 -	172, 284, 173, 172, 285, 173, 172, 173, 
 -	286, 172, 173, 212, 172, 288, 0, 289, 
 -	0, 290, 0, 291, 0, 292, 0, 293, 
 -	0, 294, 0, 295, 0, 296, 0, 297, 
 -	0, 298, 0, 299, 0, 300, 0, 301, 
 -	0, 302, 0, 303, 0, 304, 0, 305, 
 -	0, 307, 306, 307, 306, 307, 307, 4, 
 -	308, 322, 4, 323, 330, 336, 322, 338, 
 -	344, 346, 351, 354, 370, 379, 392, 307, 
 -	306, 307, 309, 306, 307, 310, 306, 307, 
 -	311, 306, 307, 312, 306, 307, 313, 306, 
 -	307, 314, 306, 307, 315, 306, 307, 316, 
 -	306, 307, 317, 306, 307, 318, 306, 307, 
 -	319, 306, 307, 320, 306, 307, 321, 306, 
 -	307, 4, 306, 307, 67, 306, 307, 324, 
 -	325, 306, 307, 322, 306, 307, 326, 306, 
 -	307, 327, 306, 307, 328, 306, 307, 329, 
 -	306, 307, 67, 306, 307, 331, 306, 307, 
 -	332, 306, 307, 333, 306, 307, 334, 306, 
 -	307, 335, 306, 307, 329, 306, 307, 337, 
 -	306, 307, 322, 306, 307, 339, 306, 340, 
 -	307, 306, 341, 343, 307, 306, 307, 342, 
 -	306, 307, 322, 306, 307, 341, 306, 307, 
 -	345, 306, 307, 336, 306, 307, 347, 306, 
 -	307, 348, 306, 349, 307, 306, 350, 307, 
 -	306, 307, 322, 306, 307, 352, 306, 307, 
 -	353, 306, 307, 322, 306, 307, 355, 306, 
 -	307, 356, 306, 307, 357, 306, 307, 358, 
 -	306, 307, 359, 306, 307, 360, 306, 307, 
 -	361, 306, 307, 362, 306, 307, 363, 306, 
 -	307, 364, 306, 307, 365, 306, 307, 366, 
 -	306, 307, 367, 306, 307, 368, 306, 307, 
 -	369, 306, 307, 335, 306, 307, 371, 306, 
 -	307, 372, 306, 307, 373, 306, 307, 374, 
 -	306, 307, 375, 306, 307, 376, 306, 307, 
 -	377, 306, 307, 378, 306, 307, 329, 306, 
 -	380, 307, 345, 306, 381, 307, 306, 307, 
 -	382, 306, 383, 307, 306, 384, 307, 306, 
 -	307, 385, 306, 307, 386, 306, 307, 387, 
 -	306, 307, 388, 306, 389, 307, 306, 390, 
 -	307, 306, 391, 307, 306, 329, 307, 306, 
 -	307, 393, 306, 307, 394, 306, 395, 307, 
 -	306, 396, 307, 306, 307, 397, 306, 307, 
 -	346, 306, 399, 83, 0, 400, 0, 401, 
 -	0, 402, 0, 403, 0, 404, 0, 405, 
 -	0, 406, 0, 407, 0, 408, 0, 409, 
 -	0, 410, 0, 43, 0, 412, 0, 413, 
 -	531, 0, 414, 0, 415, 0, 416, 0, 
 -	417, 0, 418, 0, 419, 0, 420, 0, 
 -	421, 0, 422, 0, 424, 423, 424, 423, 
 -	424, 424, 4, 425, 439, 4, 440, 447, 
 -	453, 439, 455, 461, 463, 468, 471, 487, 
 -	512, 525, 424, 423, 424, 426, 423, 424, 
 -	427, 423, 424, 428, 423, 424, 429, 423, 
 -	424, 430, 423, 424, 431, 423, 424, 432, 
 -	423, 424, 433, 423, 424, 434, 423, 424, 
 -	435, 423, 424, 436, 423, 424, 437, 423, 
 -	424, 438, 423, 424, 4, 423, 424, 67, 
 -	423, 424, 441, 442, 423, 424, 439, 423, 
 -	424, 443, 423, 424, 444, 423, 424, 445, 
 -	423, 424, 446, 423, 424, 67, 423, 424, 
 -	448, 423, 424, 449, 423, 424, 450, 423, 
 -	424, 451, 423, 424, 452, 423, 424, 446, 
 -	423, 424, 454, 423, 424, 439, 423, 424, 
 -	456, 423, 457, 424, 423, 458, 460, 424, 
 -	423, 424, 459, 423, 424, 439, 423, 424, 
 -	458, 423, 424, 462, 423, 424, 453, 423, 
 -	424, 464, 423, 424, 465, 423, 466, 424, 
 -	423, 467, 424, 423, 424, 439, 423, 424, 
 -	469, 423, 424, 470, 423, 424, 439, 423, 
 -	424, 472, 423, 424, 473, 423, 424, 474, 
 -	423, 424, 475, 423, 424, 476, 423, 424, 
 -	477, 423, 424, 478, 423, 424, 479, 423, 
 -	424, 480, 423, 424, 481, 423, 424, 482, 
 -	423, 424, 483, 423, 424, 484, 423, 424, 
 -	485, 423, 424, 486, 423, 424, 452, 423, 
 -	424, 488, 496, 423, 424, 489, 423, 424, 
 -	490, 423, 424, 491, 423, 424, 492, 423, 
 -	424, 493, 423, 424, 494, 423, 424, 495, 
 -	423, 424, 446, 423, 424, 497, 423, 424, 
 -	498, 423, 424, 499, 423, 424, 500, 423, 
 -	424, 501, 423, 424, 502, 423, 424, 503, 
 -	423, 424, 504, 423, 424, 505, 423, 424, 
 -	506, 423, 424, 507, 423, 424, 508, 423, 
 -	424, 509, 423, 424, 510, 423, 424, 511, 
 -	423, 424, 452, 423, 513, 424, 462, 423, 
 -	514, 424, 423, 424, 515, 423, 516, 424, 
 -	423, 517, 424, 423, 424, 518, 423, 424, 
 -	519, 423, 424, 520, 423, 424, 521, 423, 
 -	522, 424, 423, 523, 424, 423, 524, 424, 
 -	423, 446, 424, 423, 424, 526, 423, 424, 
 -	527, 423, 528, 424, 423, 529, 424, 423, 
 -	424, 530, 423, 424, 463, 423, 532, 0, 
 -	533, 0, 534, 0, 84, 0, 535, 536, 
 -	535, 0, 540, 539, 538, 536, 539, 537, 
 -	0, 538, 536, 537, 0, 538, 537, 540, 
 -	539, 538, 536, 539, 537, 540, 540, 5, 
 -	15, 17, 31, 34, 37, 68, 74, 31, 
 -	76, 82, 84, 89, 92, 161, 398, 411, 
 -	535, 540, 0, 46, 542, 45, 46, 543, 
 -	45, 46, 544, 45, 46, 545, 45, 46, 
 -	546, 45, 46, 66, 45, 46, 548, 563, 
 -	45, 46, 549, 45, 46, 550, 45, 46, 
 -	551, 45, 46, 552, 45, 46, 553, 45, 
 -	46, 554, 45, 46, 555, 45, 46, 556, 
 -	45, 46, 557, 45, 46, 558, 45, 46, 
 -	559, 45, 46, 560, 45, 46, 561, 45, 
 -	46, 562, 45, 46, 546, 45, 46, 564, 
 -	45, 46, 565, 45, 46, 566, 45, 567, 
 -	46, 45, 568, 46, 45, 46, 569, 45, 
 -	46, 570, 45, 46, 66, 45, 46, 572, 
 -	580, 45, 46, 573, 45, 46, 574, 45, 
 -	46, 575, 45, 46, 576, 45, 46, 577, 
 -	45, 46, 578, 45, 46, 579, 45, 46, 
 -	66, 45, 46, 581, 45, 46, 582, 45, 
 -	46, 583, 45, 46, 584, 45, 46, 585, 
 -	45, 46, 586, 45, 46, 587, 45, 46, 
 -	588, 45, 46, 589, 45, 46, 590, 45, 
 -	46, 591, 45, 46, 592, 45, 46, 593, 
 -	45, 46, 594, 45, 46, 595, 45, 46, 
 -	546, 45, 597, 46, 45, 598, 46, 45, 
 -	46, 599, 45, 600, 46, 45, 601, 46, 
 -	45, 46, 602, 45, 46, 603, 45, 46, 
 -	604, 45, 46, 605, 45, 606, 46, 45, 
 -	607, 46, 45, 608, 46, 45, 66, 46, 
 -	45, 46, 610, 45, 611, 46, 45, 612, 
 -	46, 45, 46, 613, 45, 614, 46, 45, 
 -	615, 46, 45, 46, 616, 45, 46, 617, 
 -	45, 46, 546, 45, 0, 0
 -};
 -
 -static const unsigned char _lexer_trans_actions[] = {
 -	0, 54, 0, 5, 1, 0, 29, 1, 
 -	29, 29, 29, 29, 29, 29, 29, 29, 
 -	29, 29, 29, 29, 35, 0, 43, 0, 
 -	43, 0, 43, 54, 0, 5, 1, 0, 
 -	29, 1, 29, 29, 29, 29, 29, 29, 
 -	29, 29, 29, 29, 29, 29, 35, 0, 
 -	43, 0, 43, 0, 43, 139, 48, 9, 
 -	106, 11, 0, 134, 45, 45, 45, 3, 
 -	122, 33, 33, 33, 0, 122, 33, 33, 
 -	33, 0, 122, 33, 0, 33, 0, 102, 
 -	7, 7, 43, 54, 0, 0, 43, 114, 
 -	25, 0, 54, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 149, 126, 57, 110, 23, 0, 
 -	43, 43, 43, 43, 0, 27, 118, 27, 
 -	27, 51, 27, 0, 54, 0, 1, 0, 
 -	43, 0, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	144, 57, 54, 0, 54, 0, 69, 33, 
 -	69, 84, 84, 84, 84, 84, 84, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 13, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 13, 0, 130, 31, 60, 
 -	57, 31, 63, 57, 63, 63, 63, 63, 
 -	63, 63, 63, 63, 63, 63, 63, 63, 
 -	66, 31, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 144, 
 -	57, 54, 0, 54, 0, 81, 84, 84, 
 -	84, 84, 81, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 21, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 0, 54, 0, 0, 54, 0, 54, 
 -	0, 0, 0, 54, 0, 0, 54, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 144, 57, 54, 
 -	0, 54, 0, 75, 33, 84, 75, 84, 
 -	84, 84, 84, 84, 84, 84, 84, 84, 
 -	84, 84, 84, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 17, 0, 54, 
 -	17, 0, 54, 0, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 17, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 0, 54, 0, 0, 0, 
 -	54, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 0, 
 -	54, 0, 0, 54, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 0, 54, 0, 
 -	0, 0, 54, 0, 54, 0, 0, 0, 
 -	54, 0, 0, 54, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 54, 0, 0, 
 -	0, 54, 0, 0, 0, 54, 0, 54, 
 -	0, 0, 0, 54, 0, 0, 54, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 0, 54, 0, 0, 54, 0, 54, 
 -	0, 0, 54, 0, 0, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 144, 57, 54, 0, 54, 0, 78, 
 -	33, 84, 78, 84, 84, 84, 84, 84, 
 -	84, 84, 84, 84, 84, 84, 84, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 19, 0, 54, 19, 0, 54, 0, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 19, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 0, 
 -	54, 0, 0, 0, 54, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 0, 54, 0, 0, 54, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	0, 54, 0, 0, 0, 54, 0, 54, 
 -	0, 0, 0, 54, 0, 0, 54, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	54, 0, 0, 54, 0, 0, 0, 54, 
 -	0, 0, 54, 0, 54, 0, 0, 54, 
 -	0, 0, 0, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 144, 57, 54, 0, 
 -	54, 0, 72, 33, 84, 72, 84, 84, 
 -	84, 84, 84, 84, 84, 84, 84, 84, 
 -	84, 84, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 15, 0, 54, 15, 
 -	0, 54, 0, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 15, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 0, 54, 0, 0, 0, 54, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 0, 54, 
 -	0, 0, 54, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 0, 54, 0, 0, 
 -	0, 54, 0, 54, 0, 0, 0, 54, 
 -	0, 0, 54, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 54, 0, 0, 54, 
 -	0, 0, 0, 54, 0, 0, 54, 0, 
 -	54, 0, 0, 54, 0, 0, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 0, 
 -	0, 43, 54, 37, 37, 87, 37, 37, 
 -	43, 0, 39, 0, 43, 0, 0, 54, 
 -	0, 0, 39, 0, 0, 54, 0, 93, 
 -	90, 41, 96, 90, 96, 96, 96, 96, 
 -	96, 96, 96, 96, 96, 96, 96, 96, 
 -	99, 0, 43, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 0, 
 -	54, 0, 0, 54, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 0, 54, 0, 0, 54, 0, 
 -	54, 0, 0, 0, 54, 0, 0, 54, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 54, 0, 0, 0, 54, 0, 0, 
 -	54, 0, 54, 0, 0, 0, 54, 0, 
 -	0, 54, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 0, 0
 -};
 -
 -static const unsigned char _lexer_eof_actions[] = {
 -	0, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43
 -};
 -
 -static const int lexer_start = 1;
 -static const int lexer_first_final = 618;
 -static const int lexer_error = 0;
 -
 -static const int lexer_en_main = 1;
 -
 -
 -#line 258 "ragel/i18n/pl.c.rl"
 -
 -static VALUE 
 -unindent(VALUE con, int start_col)
 -{
 -  VALUE re;
 -  /* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */
 -  char pat[32]; 
 -  snprintf(pat, 32, "^[\t ]{0,%d}", start_col); 
 -  re = rb_reg_regcomp(rb_str_new2(pat));
 -  rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2(""));
 -
 -  return Qnil;
 -
 -}
 -
 -static void 
 -store_kw_con(VALUE listener, const char * event_name, 
 -             const char * keyword_at, size_t keyword_length, 
 -             const char * at,         size_t length, 
 -             int current_line)
 -{
 -  VALUE con = Qnil, kw = Qnil;
 -  kw = ENCODED_STR_NEW(keyword_at, keyword_length);
 -  con = ENCODED_STR_NEW(at, length);
 -  rb_funcall(con, rb_intern("strip!"), 0);
 -  rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); 
 -}
 -
 -static void
 -store_multiline_kw_con(VALUE listener, const char * event_name,
 -                      const char * keyword_at, size_t keyword_length,
 -                      const char * at,         size_t length,
 -                      int current_line, int start_col)
 -{
 -  VALUE split;
 -  VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil;
 -
 -  kw = ENCODED_STR_NEW(keyword_at, keyword_length);
 -  con = ENCODED_STR_NEW(at, length);
 -
 -  unindent(con, start_col);
 -  
 -  split = rb_str_split(con, "\n");
 -
 -  name = rb_funcall(split, rb_intern("shift"), 0);
 -  desc = rb_ary_join(split, rb_str_new2( "\n" ));
 -
 -  if( name == Qnil ) 
 -  {
 -    name = rb_str_new2("");
 -  }
 -  if( rb_funcall(desc, rb_intern("size"), 0) == 0) 
 -  {
 -    desc = rb_str_new2("");
 -  }
 -  rb_funcall(name, rb_intern("strip!"), 0);
 -  rb_funcall(desc, rb_intern("rstrip!"), 0);
 -  rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); 
 -}
 -
 -static void 
 -store_attr(VALUE listener, const char * attr_type,
 -           const char * at, size_t length, 
 -           int line)
 -{
 -  VALUE val = ENCODED_STR_NEW(at, length);
 -  rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line));
 -}
 -static void 
 -store_docstring_content(VALUE listener, 
 -          int start_col, 
 -          const char *type_at, size_t type_length,
 -          const char *at, size_t length, 
 -          int current_line)
 -{
 -  VALUE re2;
 -  VALUE unescape_escaped_quotes;
 -  VALUE con = ENCODED_STR_NEW(at, length);
 -  VALUE con_type = ENCODED_STR_NEW(type_at, type_length);
 -
 -  unindent(con, start_col);
 -
 -  re2 = rb_reg_regcomp(rb_str_new2("\r\\Z"));
 -  unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\""));
 -  rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2(""));
 -  rb_funcall(con_type, rb_intern("strip!"), 0);
 -  rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\""));
 -  rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line));
 -}
 -static void 
 -raise_lexer_error(const char * at, int line)
 -{ 
 -  rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at);
 -}
 -
 -static void lexer_init(lexer_state *lexer) {
 -  lexer->content_start = 0;
 -  lexer->content_end = 0;
 -  lexer->content_len = 0;
 -  lexer->docstring_content_type_start = 0;
 -  lexer->docstring_content_type_end = 0;
 -  lexer->mark = 0;
 -  lexer->keyword_start = 0;
 -  lexer->keyword_end = 0;
 -  lexer->next_keyword_start = 0;
 -  lexer->line_number = 1;
 -  lexer->last_newline = 0;
 -  lexer->final_newline = 0;
 -  lexer->start_col = 0;
 -}
 -
 -static VALUE CLexer_alloc(VALUE klass)
 -{
 -  VALUE obj;
 -  lexer_state *lxr = ALLOC(lexer_state);
 -  lexer_init(lxr);
 -
 -  obj = Data_Wrap_Struct(klass, NULL, -1, lxr);
 -
 -  return obj;
 -}
 -
 -static VALUE CLexer_init(VALUE self, VALUE listener)
 -{
 -  lexer_state *lxr; 
 -  rb_iv_set(self, "@listener", listener);
 -  
 -  lxr = NULL;
 -  DATA_GET(self, lexer_state, lxr);
 -  lexer_init(lxr);
 -  
 -  return self;
 -}
 -
 -static VALUE CLexer_scan(VALUE self, VALUE input)
 -{
 -  VALUE input_copy;
 -  char *data;
 -  size_t len;
 -  VALUE listener = rb_iv_get(self, "@listener");
 -
 -  lexer_state *lexer;
 -  lexer = NULL;
 -  DATA_GET(self, lexer_state, lexer);
 -
 -  input_copy = rb_str_dup(input);
 -
 -  rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%"));
 -  data = RSTRING_PTR(input_copy);
 -  len = RSTRING_LEN(input_copy);
 -  
 -  if (len == 0) { 
 -    rb_raise(rb_eGherkinLexingError, "No content to lex.");
 -  } else {
 -
 -    const char *p, *pe, *eof;
 -    int cs = 0;
 -    
 -    VALUE current_row = Qnil;
 -
 -    p = data;
 -    pe = data + len;
 -    eof = pe;
 -    
 -    assert(*pe == '\0' && "pointer does not end on NULL");
 -    
 -    
 -#line 1342 "ext/gherkin_lexer_pl/gherkin_lexer_pl.c"
 -	{
 -	cs = lexer_start;
 -	}
 -
 -#line 425 "ragel/i18n/pl.c.rl"
 -    
 -#line 1349 "ext/gherkin_lexer_pl/gherkin_lexer_pl.c"
 -	{
 -	int _klen;
 -	unsigned int _trans;
 -	const char *_acts;
 -	unsigned int _nacts;
 -	const char *_keys;
 -
 -	if ( p == pe )
 -		goto _test_eof;
 -	if ( cs == 0 )
 -		goto _out;
 -_resume:
 -	_keys = _lexer_trans_keys + _lexer_key_offsets[cs];
 -	_trans = _lexer_index_offsets[cs];
 -
 -	_klen = _lexer_single_lengths[cs];
 -	if ( _klen > 0 ) {
 -		const char *_lower = _keys;
 -		const char *_mid;
 -		const char *_upper = _keys + _klen - 1;
 -		while (1) {
 -			if ( _upper < _lower )
 -				break;
 -
 -			_mid = _lower + ((_upper-_lower) >> 1);
 -			if ( (*p) < *_mid )
 -				_upper = _mid - 1;
 -			else if ( (*p) > *_mid )
 -				_lower = _mid + 1;
 -			else {
 -				_trans += (unsigned int)(_mid - _keys);
 -				goto _match;
 -			}
 -		}
 -		_keys += _klen;
 -		_trans += _klen;
 -	}
 -
 -	_klen = _lexer_range_lengths[cs];
 -	if ( _klen > 0 ) {
 -		const char *_lower = _keys;
 -		const char *_mid;
 -		const char *_upper = _keys + (_klen<<1) - 2;
 -		while (1) {
 -			if ( _upper < _lower )
 -				break;
 -
 -			_mid = _lower + (((_upper-_lower) >> 1) & ~1);
 -			if ( (*p) < _mid[0] )
 -				_upper = _mid - 2;
 -			else if ( (*p) > _mid[1] )
 -				_lower = _mid + 2;
 -			else {
 -				_trans += (unsigned int)((_mid - _keys)>>1);
 -				goto _match;
 -			}
 -		}
 -		_trans += _klen;
 -	}
 -
 -_match:
 -	cs = _lexer_trans_targs[_trans];
 -
 -	if ( _lexer_trans_actions[_trans] == 0 )
 -		goto _again;
 -
 -	_acts = _lexer_actions + _lexer_trans_actions[_trans];
 -	_nacts = (unsigned int) *_acts++;
 -	while ( _nacts-- > 0 )
 -	{
 -		switch ( *_acts++ )
 -		{
 -	case 0:
 -#line 83 "ragel/i18n/pl.c.rl"
 -	{
 -		MARK(content_start, p);
 -    lexer->current_line = lexer->line_number;
 -    lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2;
 -  }
 -	break;
 -	case 1:
 -#line 89 "ragel/i18n/pl.c.rl"
 -	{
 -    MARK(content_start, p);
 -  }
 -	break;
 -	case 2:
 -#line 93 "ragel/i18n/pl.c.rl"
 -	{
 -    lexer->current_line = lexer->line_number;
 -    lexer->start_col = p - data - lexer->last_newline;
 -  }
 -	break;
 -	case 3:
 -#line 98 "ragel/i18n/pl.c.rl"
 -	{
 -    int len = LEN(content_start, PTR_TO(final_newline));
 -    int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end));
 -
 -    if (len < 0) len = 0;
 -    if (type_len < 0) len = 0;
 -
 -    store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line);
 -  }
 -	break;
 -	case 4:
 -#line 108 "ragel/i18n/pl.c.rl"
 -	{ 
 -    MARK(docstring_content_type_start, p);
 -  }
 -	break;
 -	case 5:
 -#line 112 "ragel/i18n/pl.c.rl"
 -	{ 
 -    MARK(docstring_content_type_end, p);
 -  }
 -	break;
 -	case 6:
 -#line 116 "ragel/i18n/pl.c.rl"
 -	{
 -    STORE_KW_END_CON(feature);
 -  }
 -	break;
 -	case 7:
 -#line 120 "ragel/i18n/pl.c.rl"
 -	{
 -    STORE_KW_END_CON(background);
 -  }
 -	break;
 -	case 8:
 -#line 124 "ragel/i18n/pl.c.rl"
 -	{
 -    STORE_KW_END_CON(scenario);
 -  }
 -	break;
 -	case 9:
 -#line 128 "ragel/i18n/pl.c.rl"
 -	{
 -    STORE_KW_END_CON(scenario_outline);
 -  }
 -	break;
 -	case 10:
 -#line 132 "ragel/i18n/pl.c.rl"
 -	{
 -    STORE_KW_END_CON(examples);
 -  }
 -	break;
 -	case 11:
 -#line 136 "ragel/i18n/pl.c.rl"
 -	{
 -    store_kw_con(listener, "step",
 -      PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
 -      PTR_TO(content_start), LEN(content_start, p), 
 -      lexer->current_line);
 -  }
 -	break;
 -	case 12:
 -#line 143 "ragel/i18n/pl.c.rl"
 -	{
 -    STORE_ATTR(comment);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 13:
 -#line 148 "ragel/i18n/pl.c.rl"
 -	{
 -    STORE_ATTR(tag);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 14:
 -#line 153 "ragel/i18n/pl.c.rl"
 -	{
 -    lexer->line_number += 1;
 -    MARK(final_newline, p);
 -  }
 -	break;
 -	case 15:
 -#line 158 "ragel/i18n/pl.c.rl"
 -	{
 -    MARK(last_newline, p + 1);
 -  }
 -	break;
 -	case 16:
 -#line 162 "ragel/i18n/pl.c.rl"
 -	{
 -    if (lexer->mark == 0) {
 -      MARK(mark, p);
 -    }
 -  }
 -	break;
 -	case 17:
 -#line 168 "ragel/i18n/pl.c.rl"
 -	{
 -    MARK(keyword_end, p);
 -    MARK(keyword_start, PTR_TO(mark));
 -    MARK(content_start, p + 1);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 18:
 -#line 175 "ragel/i18n/pl.c.rl"
 -	{
 -    MARK(content_end, p);
 -  }
 -	break;
 -	case 19:
 -#line 179 "ragel/i18n/pl.c.rl"
 -	{
 -    p = p - 1;
 -    lexer->current_line = lexer->line_number;
 -    current_row = rb_ary_new();
 -  }
 -	break;
 -	case 20:
 -#line 185 "ragel/i18n/pl.c.rl"
 -	{
 -		MARK(content_start, p);
 -  }
 -	break;
 -	case 21:
 -#line 189 "ragel/i18n/pl.c.rl"
 -	{
 -    VALUE re_pipe, re_newline, re_backslash;
 -    VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
 -    rb_funcall(con, rb_intern("strip!"), 0);
 -    re_pipe      = rb_reg_regcomp(rb_str_new2("\\\\\\|"));
 -    re_newline   = rb_reg_regcomp(rb_str_new2("\\\\n"));
 -    re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_pipe,      rb_str_new2("|"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_newline,   rb_str_new2("\n"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\"));
 -
 -    rb_ary_push(current_row, con);
 -  }
 -	break;
 -	case 22:
 -#line 203 "ragel/i18n/pl.c.rl"
 -	{
 -    rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
 -  }
 -	break;
 -	case 23:
 -#line 207 "ragel/i18n/pl.c.rl"
 -	{
 -    int line;
 -    if (cs < lexer_first_final) {
 -      size_t count = 0;
 -      VALUE newstr_val;
 -      char *newstr;
 -      int newstr_count = 0;        
 -      size_t len;
 -      const char *buff;
 -      if (lexer->last_newline != 0) {
 -        len = LEN(last_newline, eof);
 -        buff = PTR_TO(last_newline);
 -      } else {
 -        len = strlen(data);
 -        buff = data;
 -      }
 -
 -      /* Allocate as a ruby string so that it gets cleaned up by GC */
 -      newstr_val = rb_str_new(buff, len);
 -      newstr = RSTRING_PTR(newstr_val);
 -
 -
 -      for (count = 0; count < len; count++) {
 -        if(buff[count] == 10) {
 -          newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
 -          break;
 -        } else {
 -          if (buff[count] == '%') {
 -            newstr[newstr_count++] = buff[count];
 -            newstr[newstr_count] = buff[count];
 -          } else {
 -            newstr[newstr_count] = buff[count];
 -          }
 -        }
 -        newstr_count++;
 -      }
 -
 -      line = lexer->line_number;
 -      lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
 -      raise_lexer_error(newstr, line);
 -    } else {
 -      rb_funcall(listener, rb_intern("eof"), 0);
 -    }
 -  }
 -	break;
 -#line 1639 "ext/gherkin_lexer_pl/gherkin_lexer_pl.c"
 -		}
 -	}
 -
 -_again:
 -	if ( cs == 0 )
 -		goto _out;
 -	if ( ++p != pe )
 -		goto _resume;
 -	_test_eof: {}
 -	if ( p == eof )
 -	{
 -	const char *__acts = _lexer_actions + _lexer_eof_actions[cs];
 -	unsigned int __nacts = (unsigned int) *__acts++;
 -	while ( __nacts-- > 0 ) {
 -		switch ( *__acts++ ) {
 -	case 23:
 -#line 207 "ragel/i18n/pl.c.rl"
 -	{
 -    int line;
 -    if (cs < lexer_first_final) {
 -      size_t count = 0;
 -      VALUE newstr_val;
 -      char *newstr;
 -      int newstr_count = 0;        
 -      size_t len;
 -      const char *buff;
 -      if (lexer->last_newline != 0) {
 -        len = LEN(last_newline, eof);
 -        buff = PTR_TO(last_newline);
 -      } else {
 -        len = strlen(data);
 -        buff = data;
 -      }
 -
 -      /* Allocate as a ruby string so that it gets cleaned up by GC */
 -      newstr_val = rb_str_new(buff, len);
 -      newstr = RSTRING_PTR(newstr_val);
 -
 -
 -      for (count = 0; count < len; count++) {
 -        if(buff[count] == 10) {
 -          newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
 -          break;
 -        } else {
 -          if (buff[count] == '%') {
 -            newstr[newstr_count++] = buff[count];
 -            newstr[newstr_count] = buff[count];
 -          } else {
 -            newstr[newstr_count] = buff[count];
 -          }
 -        }
 -        newstr_count++;
 -      }
 -
 -      line = lexer->line_number;
 -      lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
 -      raise_lexer_error(newstr, line);
 -    } else {
 -      rb_funcall(listener, rb_intern("eof"), 0);
 -    }
 -  }
 -	break;
 -#line 1702 "ext/gherkin_lexer_pl/gherkin_lexer_pl.c"
 -		}
 -	}
 -	}
 -
 -	_out: {}
 -	}
 -
 -#line 426 "ragel/i18n/pl.c.rl"
 -
 -    assert(p <= pe && "data overflow after parsing execute");
 -    assert(lexer->content_start <= len && "content starts after data end");
 -    assert(lexer->mark < len && "mark is after data end");
 -    
 -    /* Reset lexer by re-initializing the whole thing */
 -    lexer_init(lexer);
 -
 -    if (cs == lexer_error) {
 -      rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails.");
 -    } else {
 -      return Qtrue;
 -    }
 -  }
 -}
 -
 -void Init_gherkin_lexer_pl()
 -{
 -  mGherkin = rb_define_module("Gherkin");
 -  mGherkinLexer = rb_define_module_under(mGherkin, "Lexer");
 -  rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError"));
 -
 -  mCLexer = rb_define_module_under(mGherkin, "CLexer");
 -  cI18nLexer = rb_define_class_under(mCLexer, "Pl", rb_cObject);
 -  rb_define_alloc_func(cI18nLexer, CLexer_alloc);
 -  rb_define_method(cI18nLexer, "initialize", CLexer_init, 1);
 -  rb_define_method(cI18nLexer, "scan", CLexer_scan, 1);
 -}
 -
diff --cc ext/gherkin_lexer_pt/extconf.rb
index 053b4e4,053b4e4..0000000
deleted file mode 100644,100644
--- a/ext/gherkin_lexer_pt/extconf.rb
+++ /dev/null
@@@ -1,6 -1,6 +1,0 @@@
--require 'mkmf'
--CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags']
--$CFLAGS << ' -O0 -Wall' if CONFIG['CC'] =~ /gcc|clang/
--dir_config("gherkin_lexer_pt")
--have_library("c", "main")
--create_makefile("gherkin_lexer_pt")
diff --cc ext/gherkin_lexer_pt/gherkin_lexer_pt.c
index adbaed5,b30111d..0000000
deleted file mode 100644,100644
--- a/ext/gherkin_lexer_pt/gherkin_lexer_pt.c
+++ /dev/null
@@@ -1,1711 -1,1711 +1,0 @@@
--
- #line 1 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/pt.c.rl"
- #include <assert.h>
- #include <ruby.h>
- 
- #if defined(_WIN32)
- #include <stddef.h>
- #endif
- 
- #ifdef HAVE_RUBY_RE_H
- #include <ruby/re.h>
- #else
- #include <re.h>
- #endif
- 
- #ifdef HAVE_RUBY_ENCODING_H
- #include <ruby/encoding.h>
- #define ENCODED_STR_NEW(ptr, len) \
-     rb_enc_str_new(ptr, len, rb_utf8_encoding())
- #else
- #define ENCODED_STR_NEW(ptr, len) \
-     rb_str_new(ptr, len)
- #endif
- 
- #ifndef RSTRING_PTR
- #define RSTRING_PTR(s) (RSTRING(s)->ptr)
- #endif
- 
- #ifndef RSTRING_LEN
- #define RSTRING_LEN(s) (RSTRING(s)->len)
- #endif
- 
- #define DATA_GET(FROM, TYPE, NAME) \
-   Data_Get_Struct(FROM, TYPE, NAME); \
-   if (NAME == NULL) { \
-     rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \
-   }
-  
- typedef struct lexer_state {
-   int content_len;
-   int line_number;
-   int current_line;
-   int start_col;
-   size_t mark;
-   size_t keyword_start;
-   size_t keyword_end;
-   size_t next_keyword_start;
-   size_t content_start;
-   size_t content_end;
-   size_t docstring_content_type_start;
-   size_t docstring_content_type_end;
-   size_t query_start;
-   size_t last_newline;
-   size_t final_newline;
- } lexer_state;
- 
- static VALUE mGherkin;
- static VALUE mGherkinLexer;
- static VALUE mCLexer;
- static VALUE cI18nLexer;
- static VALUE rb_eGherkinLexingError;
- 
- #define LEN(AT, P) (P - data - lexer->AT)
- #define MARK(M, P) (lexer->M = (P) - data)
- #define PTR_TO(P) (data + lexer->P)
- 
- #define STORE_KW_END_CON(EVENT) \
-   store_multiline_kw_con(listener, # EVENT, \
-     PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \
-     PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \
-     lexer->current_line, lexer->start_col); \
-     if (lexer->content_end != 0) { \
-       p = PTR_TO(content_end - 1); \
-     } \
-     lexer->content_end = 0
- 
- #define STORE_ATTR(ATTR) \
-     store_attr(listener, # ATTR, \
-       PTR_TO(content_start), LEN(content_start, p), \
-       lexer->line_number)
- 
- 
- #line 254 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/pt.c.rl"
- 
- 
- /** Data **/
- 
- #line 89 "ext/gherkin_lexer_pt/gherkin_lexer_pt.c"
- static const char _lexer_actions[] = {
- 	0, 1, 0, 1, 1, 1, 2, 1, 
- 	3, 1, 4, 1, 5, 1, 6, 1, 
- 	7, 1, 8, 1, 9, 1, 10, 1, 
- 	11, 1, 12, 1, 13, 1, 16, 1, 
- 	17, 1, 18, 1, 19, 1, 20, 1, 
- 	21, 1, 22, 1, 23, 2, 1, 18, 
- 	2, 4, 5, 2, 13, 0, 2, 14, 
- 	15, 2, 17, 0, 2, 17, 2, 2, 
- 	17, 16, 2, 17, 19, 2, 18, 6, 
- 	2, 18, 7, 2, 18, 8, 2, 18, 
- 	9, 2, 18, 10, 2, 18, 16, 2, 
- 	20, 21, 2, 22, 0, 2, 22, 2, 
- 	2, 22, 16, 2, 22, 19, 3, 3, 
- 	14, 15, 3, 5, 14, 15, 3, 11, 
- 	14, 15, 3, 12, 14, 15, 3, 13, 
- 	14, 15, 3, 14, 15, 18, 3, 17, 
- 	0, 11, 3, 17, 14, 15, 4, 1, 
- 	14, 15, 18, 4, 4, 5, 14, 15, 
- 	4, 17, 0, 14, 15, 5, 17, 0, 
- 	11, 14, 15
- };
- 
- static const short _lexer_key_offsets[] = {
- 	0, 0, 17, 18, 19, 35, 36, 37, 
- 	39, 41, 46, 51, 56, 61, 65, 69, 
- 	71, 72, 73, 74, 75, 76, 77, 78, 
- 	79, 80, 81, 82, 83, 84, 85, 86, 
- 	87, 89, 91, 96, 103, 108, 111, 112, 
- 	113, 114, 115, 116, 117, 119, 120, 121, 
- 	122, 123, 124, 125, 126, 127, 128, 139, 
- 	141, 143, 145, 147, 149, 151, 153, 155, 
- 	157, 159, 161, 163, 165, 167, 171, 173, 
- 	175, 177, 179, 181, 183, 186, 188, 190, 
- 	192, 194, 196, 198, 200, 216, 218, 219, 
- 	221, 223, 224, 225, 226, 227, 228, 230, 
- 	231, 232, 233, 234, 235, 236, 237, 238, 
- 	239, 240, 241, 242, 243, 244, 245, 246, 
- 	247, 248, 249, 263, 265, 267, 269, 271, 
- 	273, 275, 277, 279, 281, 283, 285, 287, 
- 	289, 291, 293, 296, 298, 300, 302, 304, 
- 	306, 308, 311, 313, 315, 317, 319, 321, 
- 	323, 325, 327, 330, 332, 334, 336, 338, 
- 	340, 342, 345, 348, 351, 353, 356, 358, 
- 	360, 362, 364, 366, 368, 370, 372, 374, 
- 	376, 378, 380, 382, 384, 386, 388, 390, 
- 	392, 394, 396, 398, 399, 400, 401, 402, 
- 	403, 404, 405, 406, 407, 408, 412, 413, 
- 	415, 416, 417, 418, 419, 420, 421, 422, 
- 	423, 424, 425, 426, 427, 428, 429, 431, 
- 	432, 433, 434, 435, 436, 437, 438, 439, 
- 	440, 448, 450, 452, 454, 456, 458, 460, 
- 	462, 465, 467, 469, 471, 473, 475, 477, 
- 	479, 481, 483, 485, 487, 489, 491, 493, 
- 	495, 497, 499, 501, 503, 505, 506, 507, 
- 	509, 510, 511, 512, 513, 514, 515, 516, 
- 	517, 518, 519, 520, 521, 522, 523, 537, 
- 	539, 541, 543, 545, 547, 549, 551, 553, 
- 	555, 557, 559, 561, 563, 565, 567, 570, 
- 	572, 574, 576, 578, 580, 582, 585, 587, 
- 	589, 591, 593, 595, 597, 599, 601, 604, 
- 	606, 608, 610, 612, 615, 617, 620, 623, 
- 	625, 627, 629, 631, 633, 636, 638, 640, 
- 	642, 644, 646, 648, 650, 652, 654, 656, 
- 	658, 660, 662, 664, 666, 668, 670, 672, 
- 	674, 676, 678, 680, 684, 686, 689, 691, 
- 	693, 695, 697, 699, 701, 703, 705, 707, 
- 	709, 711, 713, 715, 717, 719, 721, 723, 
- 	725, 727, 729, 731, 733, 735, 737, 739, 
- 	741, 743, 745, 747, 749, 751, 753, 754, 
- 	755, 756, 757, 758, 759, 763, 769, 772, 
- 	774, 780, 796, 798, 801, 803, 805, 807, 
- 	809, 813, 815, 817, 819, 821, 823, 825, 
- 	827, 829, 831, 833, 835, 837, 839, 841, 
- 	843, 845, 847, 849, 851, 854, 856, 858, 
- 	860, 862, 864, 866, 868, 870, 872, 874, 
- 	876, 878, 880, 882, 884, 886, 888, 890, 
- 	892, 894, 896, 898, 900, 902, 904, 907, 
- 	909, 911, 913, 915, 917, 919, 921, 923, 
- 	925, 927, 929, 931, 934, 936, 938, 940, 
- 	942, 944, 946, 948, 950, 953, 955, 957, 
- 	959, 961, 963, 965, 967, 969, 971, 973, 
- 	974, 976, 977, 978, 979, 980, 983, 984, 
- 	985, 986, 987, 988, 989, 990, 991, 992, 
- 	1006, 1008, 1010, 1012, 1014, 1016, 1018, 1020, 
- 	1022, 1024, 1026, 1028, 1030, 1032, 1034, 1036, 
- 	1040, 1042, 1044, 1046, 1048, 1050, 1052, 1055, 
- 	1057, 1059, 1061, 1063, 1065, 1067, 1069, 1071, 
- 	1074, 1076, 1078, 1080, 1082, 1085, 1087, 1089, 
- 	1091, 1093, 1095, 1097, 1099, 1101, 1103, 1105, 
- 	1107, 1109, 1111, 1114, 1116, 1119, 1122, 1124, 
- 	1126, 1128, 1130, 1132, 1135, 1137, 1139, 1141, 
- 	1143, 1145, 1147, 1149, 1151, 1153, 1155, 1157, 
- 	1159, 1161, 1163, 1165, 1167, 1169, 1171, 1173, 
- 	1175, 1177, 1179, 1181, 1183, 1185, 1189, 1191, 
- 	1194, 1196, 1198, 1200, 1202, 1204, 1206, 1208, 
- 	1210, 1212, 1214, 1216, 1218, 1220, 1222, 1225, 
- 	1227, 1229, 1232, 1234, 1236, 1238, 1240, 1242, 
- 	1244, 1246, 1248, 1250, 1252, 1254, 1256, 1258, 
- 	1260, 1262, 1264, 1265, 1266, 1267, 1268, 1269
- };
- 
- static const char _lexer_trans_keys[] = {
- 	-17, 10, 32, 34, 35, 37, 42, 64, 
- 	67, 68, 69, 70, 77, 81, 124, 9, 
- 	13, -69, -65, 10, 32, 34, 35, 37, 
- 	42, 64, 67, 68, 69, 70, 77, 81, 
- 	124, 9, 13, 34, 34, 10, 13, 10, 
- 	13, 10, 32, 34, 9, 13, 10, 32, 
- 	34, 9, 13, 10, 32, 34, 9, 13, 
- 	10, 32, 34, 9, 13, 10, 32, 9, 
- 	13, 10, 32, 9, 13, 10, 13, 10, 
- 	95, 70, 69, 65, 84, 85, 82, 69, 
- 	95, 69, 78, 68, 95, 37, 32, 10, 
- 	13, 10, 13, 13, 32, 64, 9, 10, 
- 	9, 10, 13, 32, 64, 11, 12, 10, 
- 	32, 64, 9, 13, 97, 101, 111, 114, 
- 	97, 99, 116, 101, 114, -61, 105, -83, 
- 	115, 116, 105, 99, 97, 58, 10, 10, 
- 	10, 32, 35, 37, 64, 67, 68, 69, 
- 	70, 9, 13, 10, 95, 10, 70, 10, 
- 	69, 10, 65, 10, 84, 10, 85, 10, 
- 	82, 10, 69, 10, 95, 10, 69, 10, 
- 	78, 10, 68, 10, 95, 10, 37, 10, 
- 	97, 101, 111, 10, 114, 10, 97, 10, 
- 	99, 10, 116, 10, 101, 10, 114, -61, 
- 	10, 105, -83, 10, 10, 115, 10, 116, 
- 	10, 105, 10, 99, 10, 97, 10, 58, 
- 	10, 32, 34, 35, 37, 42, 64, 67, 
- 	68, 69, 70, 77, 81, 124, 9, 13, 
- 	97, 101, 100, 97, 111, 32, 115, 108, 
- 	105, 110, 101, 97, -61, 99, -89, -61, 
- 	-93, 111, 32, 100, 111, 32, 67, 101, 
- 	110, -61, -95, 114, 105, 111, 58, 10, 
- 	10, 10, 32, 35, 37, 42, 64, 67, 
- 	68, 69, 70, 77, 81, 9, 13, 10, 
- 	95, 10, 70, 10, 69, 10, 65, 10, 
- 	84, 10, 85, 10, 82, 10, 69, 10, 
- 	95, 10, 69, 10, 78, 10, 68, 10, 
- 	95, 10, 37, 10, 32, 10, 97, 101, 
- 	10, 114, 10, 97, 10, 99, 10, 116, 
- 	10, 101, 10, 114, -61, 10, 105, -83, 
- 	10, 10, 115, 10, 116, 10, 105, 10, 
- 	99, 10, 97, 10, 58, 10, 110, -61, 
- 	10, 97, -95, 10, 10, 114, 10, 105, 
- 	10, 111, 10, 97, 10, 100, 10, 97, 
- 	111, 10, 32, 115, 10, 32, 110, 10, 
- 	116, -61, 10, 97, -93, 10, 10, 111, 
- 	10, 117, 10, 110, 10, 99, 10, 105, 
- 	10, 111, 10, 110, 10, 97, 10, 108, 
- 	10, 105, 10, 100, 10, 97, 10, 100, 
- 	10, 101, 10, 97, 10, 115, 10, 117, 
- 	10, 97, 10, 110, 10, 100, 97, 111, 
- 	32, 100, 111, 32, 67, 101, 110, 97, 
- 	32, 110, 115, 120, 116, -61, 97, -93, 
- 	111, 113, 117, 101, 109, 97, 32, 100, 
- 	111, 32, 67, 101, 110, -61, 97, 101, 
- 	109, 112, 108, 111, 115, 58, 10, 10, 
- 	10, 32, 35, 67, 70, 124, 9, 13, 
- 	10, 97, 10, 114, 10, 97, 10, 99, 
- 	10, 116, 10, 101, 10, 114, -61, 10, 
- 	105, -83, 10, 10, 115, 10, 116, 10, 
- 	105, 10, 99, 10, 97, 10, 58, 10, 
- 	117, 10, 110, 10, 99, 10, 105, 10, 
- 	111, 10, 110, 10, 97, 10, 108, 10, 
- 	105, 10, 100, 10, 97, 10, 100, 10, 
- 	101, 117, 110, 99, 100, 105, 111, 110, 
- 	97, 108, 105, 100, 97, 100, 101, 111, 
- 	58, 10, 10, 10, 32, 35, 37, 42, 
- 	64, 67, 68, 69, 70, 77, 81, 9, 
- 	13, 10, 95, 10, 70, 10, 69, 10, 
- 	65, 10, 84, 10, 85, 10, 82, 10, 
- 	69, 10, 95, 10, 69, 10, 78, 10, 
- 	68, 10, 95, 10, 37, 10, 32, 10, 
- 	97, 101, 10, 114, 10, 97, 10, 99, 
- 	10, 116, 10, 101, 10, 114, -61, 10, 
- 	105, -83, 10, 10, 115, 10, 116, 10, 
- 	105, 10, 99, 10, 97, 10, 58, 10, 
- 	110, -61, 10, 97, -95, 10, 10, 114, 
- 	10, 105, 10, 111, 10, 97, 101, 10, 
- 	100, 10, 97, 111, 10, 32, 115, 10, 
- 	108, 10, 105, 10, 110, 10, 101, 10, 
- 	97, -61, 10, 99, -89, 10, -61, 10, 
- 	-93, 10, 10, 111, 10, 32, 10, 100, 
- 	10, 111, 10, 32, 10, 67, 10, 101, 
- 	10, 110, -61, 10, 10, 97, 10, 111, 
- 	10, 32, 10, 100, 10, 111, 10, 32, 
- 	10, 67, 10, 101, 10, 110, 10, 97, 
- 	10, 32, 110, 115, 10, 116, -61, 10, 
- 	97, -93, 10, 10, 111, 10, 113, 10, 
- 	117, 10, 101, 10, 109, 10, 97, 10, 
- 	32, 10, 100, 10, 111, 10, 32, 10, 
- 	67, 10, 101, 10, 117, 10, 110, 10, 
- 	99, 10, 105, 10, 111, 10, 110, 10, 
- 	97, 10, 108, 10, 105, 10, 100, 10, 
- 	97, 10, 100, 10, 101, 10, 97, 10, 
- 	115, 10, 117, 10, 97, 10, 110, 10, 
- 	100, 97, 115, 117, 97, 110, 100, 32, 
- 	124, 9, 13, 10, 32, 92, 124, 9, 
- 	13, 10, 92, 124, 10, 92, 10, 32, 
- 	92, 124, 9, 13, 10, 32, 34, 35, 
- 	37, 42, 64, 67, 68, 69, 70, 77, 
- 	81, 124, 9, 13, 10, 110, -61, 10, 
- 	97, -95, 10, 10, 114, 10, 105, 10, 
- 	111, 10, 32, 58, 115, 10, 100, 10, 
- 	101, 10, 32, 10, 70, 10, 117, 10, 
- 	110, 10, 100, 10, 111, 10, 110, 10, 
- 	116, 10, 101, 10, 120, 10, 116, 10, 
- 	101, 10, 108, 10, 105, 10, 110, 10, 
- 	101, 10, 97, -61, 10, 99, -89, 10, 
- 	-61, 10, -93, 10, 10, 111, 10, 32, 
- 	10, 100, 10, 111, 10, 32, 10, 67, 
- 	10, 101, 10, 110, -61, 10, -95, 10, 
- 	10, 114, 10, 105, 10, 97, 10, 111, 
- 	10, 32, 10, 100, 10, 111, 10, 32, 
- 	10, 67, 10, 101, 10, 110, 10, 97, 
- 	10, 115, 120, 10, 113, 10, 117, 10, 
- 	101, 10, 109, 10, 97, 10, 32, 10, 
- 	100, 10, 111, 10, 32, 10, 67, 10, 
- 	101, 10, 110, -61, 10, 97, 10, 101, 
- 	10, 109, 10, 112, 10, 108, 10, 111, 
- 	10, 115, 10, 117, 10, 110, 10, 99, 
- 	100, 10, 105, 10, 111, 10, 110, 10, 
- 	97, 10, 108, 10, 105, 10, 100, 10, 
- 	97, 10, 100, 10, 101, 110, -61, 97, 
- 	-95, 114, 105, 111, 32, 58, 115, 100, 
- 	101, 32, 70, 117, 110, 100, 10, 10, 
- 	10, 32, 35, 37, 42, 64, 67, 68, 
- 	69, 70, 77, 81, 9, 13, 10, 95, 
- 	10, 70, 10, 69, 10, 65, 10, 84, 
- 	10, 85, 10, 82, 10, 69, 10, 95, 
- 	10, 69, 10, 78, 10, 68, 10, 95, 
- 	10, 37, 10, 32, 10, 97, 101, 111, 
- 	10, 114, 10, 97, 10, 99, 10, 116, 
- 	10, 101, 10, 114, -61, 10, 105, -83, 
- 	10, 10, 115, 10, 116, 10, 105, 10, 
- 	99, 10, 97, 10, 58, 10, 110, -61, 
- 	10, 97, -95, 10, 10, 114, 10, 105, 
- 	10, 111, 10, 32, 58, 10, 100, 10, 
- 	101, 10, 32, 10, 70, 10, 117, 10, 
- 	110, 10, 100, 10, 111, 10, 110, 10, 
- 	116, 10, 101, 10, 120, 10, 116, 10, 
- 	97, 101, 10, 100, 10, 97, 111, 10, 
- 	32, 115, 10, 108, 10, 105, 10, 110, 
- 	10, 101, 10, 97, -61, 10, 99, -89, 
- 	10, -61, 10, -93, 10, 10, 111, 10, 
- 	32, 10, 100, 10, 111, 10, 32, 10, 
- 	67, 10, 101, 10, 110, -61, 10, -95, 
- 	10, 10, 114, 10, 105, 10, 97, 10, 
- 	111, 10, 32, 10, 100, 10, 111, 10, 
- 	32, 10, 67, 10, 101, 10, 110, 10, 
- 	97, 10, 32, 110, 115, 10, 116, -61, 
- 	10, 97, -93, 10, 10, 111, 10, 113, 
- 	10, 117, 10, 101, 10, 109, 10, 97, 
- 	10, 32, 10, 100, 10, 111, 10, 32, 
- 	10, 67, 10, 101, 10, 110, -61, 10, 
- 	97, 10, 117, 10, 110, 10, 99, 100, 
- 	10, 105, 10, 111, 10, 110, 10, 97, 
- 	10, 108, 10, 105, 10, 100, 10, 97, 
- 	10, 100, 10, 101, 10, 97, 10, 115, 
- 	10, 117, 10, 97, 10, 110, 10, 100, 
- 	110, 116, 101, 120, 116, 0
- };
- 
- static const char _lexer_single_lengths[] = {
- 	0, 15, 1, 1, 14, 1, 1, 2, 
- 	2, 3, 3, 3, 3, 2, 2, 2, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	2, 2, 3, 5, 3, 3, 1, 1, 
- 	1, 1, 1, 1, 2, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 9, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 4, 2, 2, 
- 	2, 2, 2, 2, 3, 2, 2, 2, 
- 	2, 2, 2, 2, 14, 2, 1, 2, 
- 	2, 1, 1, 1, 1, 1, 2, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 12, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 3, 2, 2, 2, 2, 2, 
- 	2, 3, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 3, 2, 2, 2, 2, 2, 
- 	2, 3, 3, 3, 2, 3, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 4, 1, 2, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 2, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	6, 2, 2, 2, 2, 2, 2, 2, 
- 	3, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 1, 1, 2, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 12, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 3, 2, 
- 	2, 2, 2, 2, 2, 3, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 3, 2, 
- 	2, 2, 2, 3, 2, 3, 3, 2, 
- 	2, 2, 2, 2, 3, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 4, 2, 3, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 1, 1, 
- 	1, 1, 1, 1, 2, 4, 3, 2, 
- 	4, 14, 2, 3, 2, 2, 2, 2, 
- 	4, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 3, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 3, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 3, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 3, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 1, 
- 	2, 1, 1, 1, 1, 3, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 12, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 4, 
- 	2, 2, 2, 2, 2, 2, 3, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 3, 
- 	2, 2, 2, 2, 3, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 3, 2, 3, 3, 2, 2, 
- 	2, 2, 2, 3, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 4, 2, 3, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 3, 2, 
- 	2, 3, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 1, 1, 1, 1, 1, 0
- };
- 
- static const char _lexer_range_lengths[] = {
- 	0, 1, 0, 0, 1, 0, 0, 0, 
- 	0, 1, 1, 1, 1, 1, 1, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 1, 1, 1, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 1, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 1, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 1, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	1, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 1, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 1, 1, 0, 0, 
- 	1, 1, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 1, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0
- };
- 
- static const short _lexer_index_offsets[] = {
- 	0, 0, 17, 19, 21, 37, 39, 41, 
- 	44, 47, 52, 57, 62, 67, 71, 75, 
- 	78, 80, 82, 84, 86, 88, 90, 92, 
- 	94, 96, 98, 100, 102, 104, 106, 108, 
- 	110, 113, 116, 121, 128, 133, 137, 139, 
- 	141, 143, 145, 147, 149, 152, 154, 156, 
- 	158, 160, 162, 164, 166, 168, 170, 181, 
- 	184, 187, 190, 193, 196, 199, 202, 205, 
- 	208, 211, 214, 217, 220, 223, 228, 231, 
- 	234, 237, 240, 243, 246, 250, 253, 256, 
- 	259, 262, 265, 268, 271, 287, 290, 292, 
- 	295, 298, 300, 302, 304, 306, 308, 311, 
- 	313, 315, 317, 319, 321, 323, 325, 327, 
- 	329, 331, 333, 335, 337, 339, 341, 343, 
- 	345, 347, 349, 363, 366, 369, 372, 375, 
- 	378, 381, 384, 387, 390, 393, 396, 399, 
- 	402, 405, 408, 412, 415, 418, 421, 424, 
- 	427, 430, 434, 437, 440, 443, 446, 449, 
- 	452, 455, 458, 462, 465, 468, 471, 474, 
- 	477, 480, 484, 488, 492, 495, 499, 502, 
- 	505, 508, 511, 514, 517, 520, 523, 526, 
- 	529, 532, 535, 538, 541, 544, 547, 550, 
- 	553, 556, 559, 562, 564, 566, 568, 570, 
- 	572, 574, 576, 578, 580, 582, 587, 589, 
- 	592, 594, 596, 598, 600, 602, 604, 606, 
- 	608, 610, 612, 614, 616, 618, 620, 623, 
- 	625, 627, 629, 631, 633, 635, 637, 639, 
- 	641, 649, 652, 655, 658, 661, 664, 667, 
- 	670, 674, 677, 680, 683, 686, 689, 692, 
- 	695, 698, 701, 704, 707, 710, 713, 716, 
- 	719, 722, 725, 728, 731, 734, 736, 738, 
- 	741, 743, 745, 747, 749, 751, 753, 755, 
- 	757, 759, 761, 763, 765, 767, 769, 783, 
- 	786, 789, 792, 795, 798, 801, 804, 807, 
- 	810, 813, 816, 819, 822, 825, 828, 832, 
- 	835, 838, 841, 844, 847, 850, 854, 857, 
- 	860, 863, 866, 869, 872, 875, 878, 882, 
- 	885, 888, 891, 894, 898, 901, 905, 909, 
- 	912, 915, 918, 921, 924, 928, 931, 934, 
- 	937, 940, 943, 946, 949, 952, 955, 958, 
- 	961, 964, 967, 970, 973, 976, 979, 982, 
- 	985, 988, 991, 994, 999, 1002, 1006, 1009, 
- 	1012, 1015, 1018, 1021, 1024, 1027, 1030, 1033, 
- 	1036, 1039, 1042, 1045, 1048, 1051, 1054, 1057, 
- 	1060, 1063, 1066, 1069, 1072, 1075, 1078, 1081, 
- 	1084, 1087, 1090, 1093, 1096, 1099, 1102, 1104, 
- 	1106, 1108, 1110, 1112, 1114, 1118, 1124, 1128, 
- 	1131, 1137, 1153, 1156, 1160, 1163, 1166, 1169, 
- 	1172, 1177, 1180, 1183, 1186, 1189, 1192, 1195, 
- 	1198, 1201, 1204, 1207, 1210, 1213, 1216, 1219, 
- 	1222, 1225, 1228, 1231, 1234, 1238, 1241, 1244, 
- 	1247, 1250, 1253, 1256, 1259, 1262, 1265, 1268, 
- 	1271, 1274, 1277, 1280, 1283, 1286, 1289, 1292, 
- 	1295, 1298, 1301, 1304, 1307, 1310, 1313, 1317, 
- 	1320, 1323, 1326, 1329, 1332, 1335, 1338, 1341, 
- 	1344, 1347, 1350, 1353, 1357, 1360, 1363, 1366, 
- 	1369, 1372, 1375, 1378, 1381, 1385, 1388, 1391, 
- 	1394, 1397, 1400, 1403, 1406, 1409, 1412, 1415, 
- 	1417, 1420, 1422, 1424, 1426, 1428, 1432, 1434, 
- 	1436, 1438, 1440, 1442, 1444, 1446, 1448, 1450, 
- 	1464, 1467, 1470, 1473, 1476, 1479, 1482, 1485, 
- 	1488, 1491, 1494, 1497, 1500, 1503, 1506, 1509, 
- 	1514, 1517, 1520, 1523, 1526, 1529, 1532, 1536, 
- 	1539, 1542, 1545, 1548, 1551, 1554, 1557, 1560, 
- 	1564, 1567, 1570, 1573, 1576, 1580, 1583, 1586, 
- 	1589, 1592, 1595, 1598, 1601, 1604, 1607, 1610, 
- 	1613, 1616, 1619, 1623, 1626, 1630, 1634, 1637, 
- 	1640, 1643, 1646, 1649, 1653, 1656, 1659, 1662, 
- 	1665, 1668, 1671, 1674, 1677, 1680, 1683, 1686, 
- 	1689, 1692, 1695, 1698, 1701, 1704, 1707, 1710, 
- 	1713, 1716, 1719, 1722, 1725, 1728, 1733, 1736, 
- 	1740, 1743, 1746, 1749, 1752, 1755, 1758, 1761, 
- 	1764, 1767, 1770, 1773, 1776, 1779, 1782, 1786, 
- 	1789, 1792, 1796, 1799, 1802, 1805, 1808, 1811, 
- 	1814, 1817, 1820, 1823, 1826, 1829, 1832, 1835, 
- 	1838, 1841, 1844, 1846, 1848, 1850, 1852, 1854
- };
- 
- static const short _lexer_trans_targs[] = {
- 	2, 4, 4, 5, 15, 17, 31, 34, 
- 	37, 85, 189, 245, 366, 368, 372, 4, 
- 	0, 3, 0, 4, 0, 4, 4, 5, 
- 	15, 17, 31, 34, 37, 85, 189, 245, 
- 	366, 368, 372, 4, 0, 6, 0, 7, 
- 	0, 9, 8, 8, 9, 8, 8, 10, 
- 	10, 11, 10, 10, 10, 10, 11, 10, 
- 	10, 10, 10, 12, 10, 10, 10, 10, 
- 	13, 10, 10, 4, 14, 14, 0, 4, 
- 	14, 14, 0, 4, 16, 15, 4, 0, 
- 	18, 0, 19, 0, 20, 0, 21, 0, 
- 	22, 0, 23, 0, 24, 0, 25, 0, 
- 	26, 0, 27, 0, 28, 0, 29, 0, 
- 	30, 0, 607, 0, 32, 0, 4, 16, 
- 	33, 4, 16, 33, 0, 0, 0, 0, 
- 	35, 36, 4, 36, 36, 34, 35, 35, 
- 	4, 36, 34, 36, 0, 38, 463, 602, 
- 	0, 39, 0, 40, 0, 41, 0, 42, 
- 	0, 43, 0, 44, 0, 45, 46, 0, 
- 	46, 0, 47, 0, 48, 0, 49, 0, 
- 	50, 0, 51, 0, 52, 0, 54, 53, 
- 	54, 53, 54, 54, 4, 55, 4, 69, 
- 	398, 430, 450, 54, 53, 54, 56, 53, 
- 	54, 57, 53, 54, 58, 53, 54, 59, 
- 	53, 54, 60, 53, 54, 61, 53, 54, 
- 	62, 53, 54, 63, 53, 54, 64, 53, 
- 	54, 65, 53, 54, 66, 53, 54, 67, 
- 	53, 54, 68, 53, 54, 4, 53, 54, 
- 	70, 378, 393, 53, 54, 71, 53, 54, 
- 	72, 53, 54, 73, 53, 54, 74, 53, 
- 	54, 75, 53, 54, 76, 53, 77, 54, 
- 	78, 53, 78, 54, 53, 54, 79, 53, 
- 	54, 80, 53, 54, 81, 53, 54, 82, 
- 	53, 54, 83, 53, 54, 84, 53, 4, 
- 	4, 5, 15, 17, 31, 34, 37, 85, 
- 	189, 245, 366, 368, 372, 4, 0, 86, 
- 	89, 0, 87, 0, 88, 88, 0, 32, 
- 	31, 0, 90, 0, 91, 0, 92, 0, 
- 	93, 0, 94, 0, 95, 179, 0, 96, 
- 	0, 97, 0, 98, 0, 99, 0, 100, 
- 	0, 101, 0, 102, 0, 103, 0, 104, 
- 	0, 105, 0, 106, 0, 107, 0, 108, 
- 	0, 109, 0, 110, 0, 111, 0, 112, 
- 	0, 114, 113, 114, 113, 114, 114, 4, 
- 	115, 129, 4, 130, 151, 155, 160, 173, 
- 	175, 114, 113, 114, 116, 113, 114, 117, 
- 	113, 114, 118, 113, 114, 119, 113, 114, 
- 	120, 113, 114, 121, 113, 114, 122, 113, 
- 	114, 123, 113, 114, 124, 113, 114, 125, 
- 	113, 114, 126, 113, 114, 127, 113, 114, 
- 	128, 113, 114, 4, 113, 114, 84, 113, 
- 	114, 131, 145, 113, 114, 132, 113, 114, 
- 	133, 113, 114, 134, 113, 114, 135, 113, 
- 	114, 136, 113, 114, 137, 113, 138, 114, 
- 	139, 113, 139, 114, 113, 114, 140, 113, 
- 	114, 141, 113, 114, 142, 113, 114, 143, 
- 	113, 114, 144, 113, 114, 84, 113, 114, 
- 	146, 113, 147, 114, 148, 113, 148, 114, 
- 	113, 114, 149, 113, 114, 150, 113, 114, 
- 	144, 113, 114, 152, 113, 114, 153, 113, 
- 	114, 154, 154, 113, 114, 84, 129, 113, 
- 	114, 84, 156, 113, 114, 157, 113, 158, 
- 	114, 159, 113, 159, 114, 113, 114, 129, 
- 	113, 114, 161, 113, 114, 162, 113, 114, 
- 	163, 113, 114, 164, 113, 114, 165, 113, 
- 	114, 166, 113, 114, 167, 113, 114, 168, 
- 	113, 114, 169, 113, 114, 170, 113, 114, 
- 	171, 113, 114, 172, 113, 114, 144, 113, 
- 	114, 174, 113, 114, 129, 113, 114, 176, 
- 	113, 114, 177, 113, 114, 178, 113, 114, 
- 	159, 113, 180, 0, 181, 0, 182, 0, 
- 	183, 0, 184, 0, 185, 0, 186, 0, 
- 	187, 0, 188, 0, 108, 0, 32, 190, 
- 	194, 207, 0, 191, 0, 192, 193, 0, 
- 	193, 0, 31, 0, 195, 0, 196, 0, 
- 	197, 0, 198, 0, 199, 0, 200, 0, 
- 	201, 0, 202, 0, 203, 0, 204, 0, 
- 	205, 0, 206, 0, 107, 108, 0, 208, 
- 	0, 209, 0, 210, 0, 211, 0, 212, 
- 	0, 213, 0, 214, 0, 216, 215, 216, 
- 	215, 216, 216, 4, 217, 232, 4, 216, 
- 	215, 216, 218, 215, 216, 219, 215, 216, 
- 	220, 215, 216, 221, 215, 216, 222, 215, 
- 	216, 223, 215, 216, 224, 215, 225, 216, 
- 	226, 215, 226, 216, 215, 216, 227, 215, 
- 	216, 228, 215, 216, 229, 215, 216, 230, 
- 	215, 216, 231, 215, 216, 84, 215, 216, 
- 	233, 215, 216, 234, 215, 216, 235, 215, 
- 	216, 236, 215, 216, 237, 215, 216, 238, 
- 	215, 216, 239, 215, 216, 240, 215, 216, 
- 	241, 215, 216, 242, 215, 216, 243, 215, 
- 	216, 244, 215, 216, 231, 215, 246, 0, 
- 	247, 0, 248, 258, 0, 249, 0, 250, 
- 	0, 251, 0, 252, 0, 253, 0, 254, 
- 	0, 255, 0, 256, 0, 257, 0, 51, 
- 	0, 259, 0, 260, 0, 262, 261, 262, 
- 	261, 262, 262, 4, 263, 277, 4, 278, 
- 	299, 331, 347, 360, 362, 262, 261, 262, 
- 	264, 261, 262, 265, 261, 262, 266, 261, 
- 	262, 267, 261, 262, 268, 261, 262, 269, 
- 	261, 262, 270, 261, 262, 271, 261, 262, 
- 	272, 261, 262, 273, 261, 262, 274, 261, 
- 	262, 275, 261, 262, 276, 261, 262, 4, 
- 	261, 262, 84, 261, 262, 279, 293, 261, 
- 	262, 280, 261, 262, 281, 261, 262, 282, 
- 	261, 262, 283, 261, 262, 284, 261, 262, 
- 	285, 261, 286, 262, 287, 261, 287, 262, 
- 	261, 262, 288, 261, 262, 289, 261, 262, 
- 	290, 261, 262, 291, 261, 262, 292, 261, 
- 	262, 84, 261, 262, 294, 261, 295, 262, 
- 	296, 261, 296, 262, 261, 262, 297, 261, 
- 	262, 298, 261, 262, 292, 261, 262, 300, 
- 	303, 261, 262, 301, 261, 262, 302, 302, 
- 	261, 262, 84, 277, 261, 262, 304, 261, 
- 	262, 305, 261, 262, 306, 261, 262, 307, 
- 	261, 262, 308, 261, 309, 262, 321, 261, 
- 	310, 262, 261, 311, 262, 261, 312, 262, 
- 	261, 262, 313, 261, 262, 314, 261, 262, 
- 	315, 261, 262, 316, 261, 262, 317, 261, 
- 	262, 318, 261, 262, 319, 261, 262, 320, 
- 	261, 295, 262, 261, 262, 322, 261, 262, 
- 	323, 261, 262, 324, 261, 262, 325, 261, 
- 	262, 326, 261, 262, 327, 261, 262, 328, 
- 	261, 262, 329, 261, 262, 330, 261, 262, 
- 	296, 261, 262, 84, 332, 336, 261, 262, 
- 	333, 261, 334, 262, 335, 261, 335, 262, 
- 	261, 262, 277, 261, 262, 337, 261, 262, 
- 	338, 261, 262, 339, 261, 262, 340, 261, 
- 	262, 341, 261, 262, 342, 261, 262, 343, 
- 	261, 262, 344, 261, 262, 345, 261, 262, 
- 	346, 261, 262, 293, 261, 262, 348, 261, 
- 	262, 349, 261, 262, 350, 261, 262, 351, 
- 	261, 262, 352, 261, 262, 353, 261, 262, 
- 	354, 261, 262, 355, 261, 262, 356, 261, 
- 	262, 357, 261, 262, 358, 261, 262, 359, 
- 	261, 262, 292, 261, 262, 361, 261, 262, 
- 	277, 261, 262, 363, 261, 262, 364, 261, 
- 	262, 365, 261, 262, 335, 261, 367, 0, 
- 	31, 0, 369, 0, 370, 0, 371, 0, 
- 	193, 0, 372, 373, 372, 0, 377, 376, 
- 	375, 373, 376, 374, 0, 375, 373, 374, 
- 	0, 375, 374, 377, 376, 375, 373, 376, 
- 	374, 377, 377, 5, 15, 17, 31, 34, 
- 	37, 85, 189, 245, 366, 368, 372, 377, 
- 	0, 54, 379, 53, 380, 54, 381, 53, 
- 	381, 54, 53, 54, 382, 53, 54, 383, 
- 	53, 54, 384, 53, 54, 385, 84, 83, 
- 	53, 54, 386, 53, 54, 387, 53, 54, 
- 	388, 53, 54, 389, 53, 54, 390, 53, 
- 	54, 391, 53, 54, 392, 53, 54, 83, 
- 	53, 54, 394, 53, 54, 395, 53, 54, 
- 	396, 53, 54, 397, 53, 54, 392, 53, 
- 	54, 399, 53, 54, 400, 53, 54, 401, 
- 	53, 54, 402, 53, 54, 403, 53, 54, 
- 	404, 53, 405, 54, 420, 53, 406, 54, 
- 	53, 407, 54, 53, 408, 54, 53, 54, 
- 	409, 53, 54, 410, 53, 54, 411, 53, 
- 	54, 412, 53, 54, 413, 53, 54, 414, 
- 	53, 54, 415, 53, 54, 416, 53, 417, 
- 	54, 53, 418, 54, 53, 54, 419, 53, 
- 	54, 392, 53, 54, 421, 53, 54, 422, 
- 	53, 54, 423, 53, 54, 424, 53, 54, 
- 	425, 53, 54, 426, 53, 54, 427, 53, 
- 	54, 428, 53, 54, 429, 53, 54, 418, 
- 	53, 54, 431, 444, 53, 54, 432, 53, 
- 	54, 433, 53, 54, 434, 53, 54, 435, 
- 	53, 54, 436, 53, 54, 437, 53, 54, 
- 	438, 53, 54, 439, 53, 54, 440, 53, 
- 	54, 441, 53, 54, 442, 53, 54, 443, 
- 	53, 417, 54, 418, 53, 54, 445, 53, 
- 	54, 446, 53, 54, 447, 53, 54, 448, 
- 	53, 54, 449, 53, 54, 83, 53, 54, 
- 	451, 53, 54, 452, 53, 54, 453, 392, 
- 	53, 54, 454, 53, 54, 455, 53, 54, 
- 	456, 53, 54, 457, 53, 54, 458, 53, 
- 	54, 459, 53, 54, 460, 53, 54, 461, 
- 	53, 54, 462, 53, 54, 83, 53, 464, 
- 	0, 465, 466, 0, 466, 0, 467, 0, 
- 	468, 0, 469, 0, 470, 477, 213, 0, 
- 	471, 0, 472, 0, 473, 0, 474, 0, 
- 	475, 0, 476, 0, 258, 0, 479, 478, 
- 	479, 478, 479, 479, 4, 480, 494, 4, 
- 	495, 530, 565, 583, 596, 598, 479, 478, 
- 	479, 481, 478, 479, 482, 478, 479, 483, 
- 	478, 479, 484, 478, 479, 485, 478, 479, 
- 	486, 478, 479, 487, 478, 479, 488, 478, 
- 	479, 489, 478, 479, 490, 478, 479, 491, 
- 	478, 479, 492, 478, 479, 493, 478, 479, 
- 	4, 478, 479, 84, 478, 479, 496, 510, 
- 	525, 478, 479, 497, 478, 479, 498, 478, 
- 	479, 499, 478, 479, 500, 478, 479, 501, 
- 	478, 479, 502, 478, 503, 479, 504, 478, 
- 	504, 479, 478, 479, 505, 478, 479, 506, 
- 	478, 479, 507, 478, 479, 508, 478, 479, 
- 	509, 478, 479, 84, 478, 479, 511, 478, 
- 	512, 479, 513, 478, 513, 479, 478, 479, 
- 	514, 478, 479, 515, 478, 479, 516, 478, 
- 	479, 517, 84, 478, 479, 518, 478, 479, 
- 	519, 478, 479, 520, 478, 479, 521, 478, 
- 	479, 522, 478, 479, 523, 478, 479, 524, 
- 	478, 479, 509, 478, 479, 526, 478, 479, 
- 	527, 478, 479, 528, 478, 479, 529, 478, 
- 	479, 524, 478, 479, 531, 534, 478, 479, 
- 	532, 478, 479, 533, 533, 478, 479, 84, 
- 	494, 478, 479, 535, 478, 479, 536, 478, 
- 	479, 537, 478, 479, 538, 478, 479, 539, 
- 	478, 540, 479, 555, 478, 541, 479, 478, 
- 	542, 479, 478, 543, 479, 478, 479, 544, 
- 	478, 479, 545, 478, 479, 546, 478, 479, 
- 	547, 478, 479, 548, 478, 479, 549, 478, 
- 	479, 550, 478, 479, 551, 478, 552, 479, 
- 	478, 553, 479, 478, 479, 554, 478, 479, 
- 	524, 478, 479, 556, 478, 479, 557, 478, 
- 	479, 558, 478, 479, 559, 478, 479, 560, 
- 	478, 479, 561, 478, 479, 562, 478, 479, 
- 	563, 478, 479, 564, 478, 479, 553, 478, 
- 	479, 84, 566, 570, 478, 479, 567, 478, 
- 	568, 479, 569, 478, 569, 479, 478, 479, 
- 	494, 478, 479, 571, 478, 479, 572, 478, 
- 	479, 573, 478, 479, 574, 478, 479, 575, 
- 	478, 479, 576, 478, 479, 577, 478, 479, 
- 	578, 478, 479, 579, 478, 479, 580, 478, 
- 	479, 581, 478, 479, 582, 478, 552, 479, 
- 	553, 478, 479, 584, 478, 479, 585, 478, 
- 	479, 586, 524, 478, 479, 587, 478, 479, 
- 	588, 478, 479, 589, 478, 479, 590, 478, 
- 	479, 591, 478, 479, 592, 478, 479, 593, 
- 	478, 479, 594, 478, 479, 595, 478, 479, 
- 	509, 478, 479, 597, 478, 479, 494, 478, 
- 	479, 599, 478, 479, 600, 478, 479, 601, 
- 	478, 479, 569, 478, 603, 0, 604, 0, 
- 	605, 0, 606, 0, 258, 0, 0, 0
- };
- 
- static const unsigned char _lexer_trans_actions[] = {
- 	0, 54, 0, 5, 1, 0, 29, 1, 
- 	29, 29, 29, 29, 29, 29, 35, 0, 
- 	43, 0, 43, 0, 43, 54, 0, 5, 
- 	1, 0, 29, 1, 29, 29, 29, 29, 
- 	29, 29, 35, 0, 43, 0, 43, 0, 
- 	43, 139, 48, 9, 106, 11, 0, 134, 
- 	45, 45, 45, 3, 122, 33, 33, 33, 
- 	0, 122, 33, 33, 33, 0, 122, 33, 
- 	0, 33, 0, 102, 7, 7, 43, 54, 
- 	0, 0, 43, 114, 25, 0, 54, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 149, 126, 
- 	57, 110, 23, 0, 43, 43, 43, 43, 
- 	0, 27, 118, 27, 27, 51, 27, 0, 
- 	54, 0, 1, 0, 43, 0, 0, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 144, 57, 
- 	54, 0, 54, 0, 69, 33, 69, 84, 
- 	84, 84, 84, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 13, 0, 54, 
- 	0, 0, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 0, 54, 
- 	0, 0, 0, 54, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 13, 0, 130, 
- 	31, 60, 57, 31, 63, 57, 63, 63, 
- 	63, 63, 63, 63, 66, 31, 43, 0, 
- 	0, 43, 0, 43, 0, 0, 43, 0, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 144, 57, 54, 0, 54, 0, 78, 
- 	33, 84, 78, 84, 84, 84, 84, 84, 
- 	84, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 19, 0, 54, 19, 0, 
- 	54, 0, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 0, 54, 
- 	0, 0, 0, 54, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 19, 0, 54, 
- 	0, 0, 0, 54, 0, 0, 0, 54, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 0, 54, 19, 0, 0, 
- 	54, 19, 0, 0, 54, 0, 0, 0, 
- 	54, 0, 0, 0, 54, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 0, 
- 	0, 0, 43, 0, 43, 0, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 144, 57, 54, 
- 	0, 54, 0, 81, 84, 84, 81, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 0, 54, 
- 	0, 0, 0, 54, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 21, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 0, 43, 
- 	0, 43, 0, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 144, 57, 54, 
- 	0, 54, 0, 72, 33, 84, 72, 84, 
- 	84, 84, 84, 84, 84, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 15, 
- 	0, 54, 15, 0, 54, 0, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 0, 54, 0, 0, 0, 54, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 15, 0, 54, 0, 0, 0, 54, 
- 	0, 0, 0, 54, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	0, 54, 15, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 0, 54, 0, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 0, 54, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 15, 0, 0, 0, 54, 
- 	0, 0, 0, 54, 0, 0, 0, 54, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 0, 0, 43, 54, 37, 
- 	37, 87, 37, 37, 43, 0, 39, 0, 
- 	43, 0, 0, 54, 0, 0, 39, 0, 
- 	0, 54, 0, 93, 90, 41, 96, 90, 
- 	96, 96, 96, 96, 96, 96, 99, 0, 
- 	43, 54, 0, 0, 0, 54, 0, 0, 
- 	0, 54, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 13, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 0, 54, 0, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 0, 
- 	54, 0, 0, 54, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 0, 
- 	43, 0, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 0, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 144, 57, 
- 	54, 0, 54, 0, 75, 33, 84, 75, 
- 	84, 84, 84, 84, 84, 84, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	17, 0, 54, 17, 0, 54, 0, 0, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 0, 54, 0, 0, 
- 	0, 54, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 17, 0, 54, 0, 0, 
- 	0, 54, 0, 0, 0, 54, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 17, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 0, 54, 17, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 0, 54, 0, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 0, 54, 
- 	0, 0, 54, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 17, 0, 0, 0, 54, 0, 0, 
- 	0, 54, 0, 0, 0, 54, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 0
- };
- 
- static const unsigned char _lexer_eof_actions[] = {
- 	0, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43
- };
- 
- static const int lexer_start = 1;
- static const int lexer_first_final = 607;
- static const int lexer_error = 0;
- 
- static const int lexer_en_main = 1;
- 
- 
- #line 258 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/pt.c.rl"
- 
- static VALUE 
- unindent(VALUE con, int start_col)
- {
-   VALUE re;
-   // Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters
-   char pat[32]; 
-   snprintf(pat, 32, "^[\t ]{0,%d}", start_col); 
-   re = rb_reg_regcomp(rb_str_new2(pat));
-   rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2(""));
- 
-   return Qnil;
- 
- }
- 
- static void 
- store_kw_con(VALUE listener, const char * event_name, 
-              const char * keyword_at, size_t keyword_length, 
-              const char * at,         size_t length, 
-              int current_line)
- {
-   VALUE con = Qnil, kw = Qnil;
-   kw = ENCODED_STR_NEW(keyword_at, keyword_length);
-   con = ENCODED_STR_NEW(at, length);
-   rb_funcall(con, rb_intern("strip!"), 0);
-   rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); 
- }
- 
- static void
- store_multiline_kw_con(VALUE listener, const char * event_name,
-                       const char * keyword_at, size_t keyword_length,
-                       const char * at,         size_t length,
-                       int current_line, int start_col)
- {
-   VALUE split;
-   VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil;
- 
-   kw = ENCODED_STR_NEW(keyword_at, keyword_length);
-   con = ENCODED_STR_NEW(at, length);
- 
-   unindent(con, start_col);
-   
-   split = rb_str_split(con, "\n");
- 
-   name = rb_funcall(split, rb_intern("shift"), 0);
-   desc = rb_ary_join(split, rb_str_new2( "\n" ));
- 
-   if( name == Qnil ) 
-   {
-     name = rb_str_new2("");
-   }
-   if( rb_funcall(desc, rb_intern("size"), 0) == 0) 
-   {
-     desc = rb_str_new2("");
-   }
-   rb_funcall(name, rb_intern("strip!"), 0);
-   rb_funcall(desc, rb_intern("rstrip!"), 0);
-   rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); 
- }
- 
- static void 
- store_attr(VALUE listener, const char * attr_type,
-            const char * at, size_t length, 
-            int line)
- {
-   VALUE val = ENCODED_STR_NEW(at, length);
-   rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line));
- }
- static void 
- store_docstring_content(VALUE listener, 
-           int start_col, 
-           const char *type_at, size_t type_length,
-           const char *at, size_t length, 
-           int current_line)
- {
-   VALUE re2;
-   VALUE unescape_escaped_quotes;
-   VALUE con = ENCODED_STR_NEW(at, length);
-   VALUE con_type = ENCODED_STR_NEW(type_at, type_length);
- 
-   unindent(con, start_col);
- 
-   re2 = rb_reg_regcomp(rb_str_new2("\r\\Z"));
-   unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\""));
-   rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2(""));
-   rb_funcall(con_type, rb_intern("strip!"), 0);
-   rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\""));
-   rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line));
- }
- static void 
- raise_lexer_error(const char * at, int line)
- { 
-   rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at);
- }
- 
- static void lexer_init(lexer_state *lexer) {
-   lexer->content_start = 0;
-   lexer->content_end = 0;
-   lexer->content_len = 0;
-   lexer->docstring_content_type_start = 0;
-   lexer->docstring_content_type_end = 0;
-   lexer->mark = 0;
-   lexer->keyword_start = 0;
-   lexer->keyword_end = 0;
-   lexer->next_keyword_start = 0;
-   lexer->line_number = 1;
-   lexer->last_newline = 0;
-   lexer->final_newline = 0;
-   lexer->start_col = 0;
- }
- 
- static VALUE CLexer_alloc(VALUE klass)
- {
-   VALUE obj;
-   lexer_state *lxr = ALLOC(lexer_state);
-   lexer_init(lxr);
- 
-   obj = Data_Wrap_Struct(klass, NULL, -1, lxr);
- 
-   return obj;
- }
- 
- static VALUE CLexer_init(VALUE self, VALUE listener)
- {
-   lexer_state *lxr; 
-   rb_iv_set(self, "@listener", listener);
-   
-   lxr = NULL;
-   DATA_GET(self, lexer_state, lxr);
-   lexer_init(lxr);
-   
-   return self;
- }
- 
- static VALUE CLexer_scan(VALUE self, VALUE input)
- {
-   VALUE input_copy;
-   char *data;
-   size_t len;
-   VALUE listener = rb_iv_get(self, "@listener");
- 
-   lexer_state *lexer;
-   lexer = NULL;
-   DATA_GET(self, lexer_state, lexer);
- 
-   input_copy = rb_str_dup(input);
- 
-   rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%"));
-   data = RSTRING_PTR(input_copy);
-   len = RSTRING_LEN(input_copy);
-   
-   if (len == 0) { 
-     rb_raise(rb_eGherkinLexingError, "No content to lex.");
-   } else {
- 
-     const char *p, *pe, *eof;
-     int cs = 0;
-     
-     VALUE current_row = Qnil;
- 
-     p = data;
-     pe = data + len;
-     eof = pe;
-     
-     assert(*pe == '\0' && "pointer does not end on NULL");
-     
-     
- #line 1315 "ext/gherkin_lexer_pt/gherkin_lexer_pt.c"
- 	{
- 	cs = lexer_start;
- 	}
- 
- #line 425 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/pt.c.rl"
-     
- #line 1322 "ext/gherkin_lexer_pt/gherkin_lexer_pt.c"
- 	{
- 	int _klen;
- 	unsigned int _trans;
- 	const char *_acts;
- 	unsigned int _nacts;
- 	const char *_keys;
- 
- 	if ( p == pe )
- 		goto _test_eof;
- 	if ( cs == 0 )
- 		goto _out;
- _resume:
- 	_keys = _lexer_trans_keys + _lexer_key_offsets[cs];
- 	_trans = _lexer_index_offsets[cs];
- 
- 	_klen = _lexer_single_lengths[cs];
- 	if ( _klen > 0 ) {
- 		const char *_lower = _keys;
- 		const char *_mid;
- 		const char *_upper = _keys + _klen - 1;
- 		while (1) {
- 			if ( _upper < _lower )
- 				break;
- 
- 			_mid = _lower + ((_upper-_lower) >> 1);
- 			if ( (*p) < *_mid )
- 				_upper = _mid - 1;
- 			else if ( (*p) > *_mid )
- 				_lower = _mid + 1;
- 			else {
- 				_trans += (_mid - _keys);
- 				goto _match;
- 			}
- 		}
- 		_keys += _klen;
- 		_trans += _klen;
- 	}
- 
- 	_klen = _lexer_range_lengths[cs];
- 	if ( _klen > 0 ) {
- 		const char *_lower = _keys;
- 		const char *_mid;
- 		const char *_upper = _keys + (_klen<<1) - 2;
- 		while (1) {
- 			if ( _upper < _lower )
- 				break;
- 
- 			_mid = _lower + (((_upper-_lower) >> 1) & ~1);
- 			if ( (*p) < _mid[0] )
- 				_upper = _mid - 2;
- 			else if ( (*p) > _mid[1] )
- 				_lower = _mid + 2;
- 			else {
- 				_trans += ((_mid - _keys)>>1);
- 				goto _match;
- 			}
- 		}
- 		_trans += _klen;
- 	}
- 
- _match:
- 	cs = _lexer_trans_targs[_trans];
- 
- 	if ( _lexer_trans_actions[_trans] == 0 )
- 		goto _again;
- 
- 	_acts = _lexer_actions + _lexer_trans_actions[_trans];
- 	_nacts = (unsigned int) *_acts++;
- 	while ( _nacts-- > 0 )
- 	{
- 		switch ( *_acts++ )
- 		{
- 	case 0:
- #line 83 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/pt.c.rl"
- 	{
- 		MARK(content_start, p);
-     lexer->current_line = lexer->line_number;
-     lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2;
-   }
- 	break;
- 	case 1:
- #line 89 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/pt.c.rl"
- 	{
-     MARK(content_start, p);
-   }
- 	break;
- 	case 2:
- #line 93 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/pt.c.rl"
- 	{
-     lexer->current_line = lexer->line_number;
-     lexer->start_col = p - data - lexer->last_newline;
-   }
- 	break;
- 	case 3:
- #line 98 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/pt.c.rl"
- 	{
-     int len = LEN(content_start, PTR_TO(final_newline));
-     int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end));
- 
-     if (len < 0) len = 0;
-     if (type_len < 0) len = 0;
- 
-     store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line);
-   }
- 	break;
- 	case 4:
- #line 108 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/pt.c.rl"
- 	{ 
-     MARK(docstring_content_type_start, p);
-   }
- 	break;
- 	case 5:
- #line 112 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/pt.c.rl"
- 	{ 
-     MARK(docstring_content_type_end, p);
-   }
- 	break;
- 	case 6:
- #line 116 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/pt.c.rl"
- 	{
-     STORE_KW_END_CON(feature);
-   }
- 	break;
- 	case 7:
- #line 120 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/pt.c.rl"
- 	{
-     STORE_KW_END_CON(background);
-   }
- 	break;
- 	case 8:
- #line 124 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/pt.c.rl"
- 	{
-     STORE_KW_END_CON(scenario);
-   }
- 	break;
- 	case 9:
- #line 128 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/pt.c.rl"
- 	{
-     STORE_KW_END_CON(scenario_outline);
-   }
- 	break;
- 	case 10:
- #line 132 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/pt.c.rl"
- 	{
-     STORE_KW_END_CON(examples);
-   }
- 	break;
- 	case 11:
- #line 136 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/pt.c.rl"
- 	{
-     store_kw_con(listener, "step",
-       PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-       PTR_TO(content_start), LEN(content_start, p), 
-       lexer->current_line);
-   }
- 	break;
- 	case 12:
- #line 143 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/pt.c.rl"
- 	{
-     STORE_ATTR(comment);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 13:
- #line 148 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/pt.c.rl"
- 	{
-     STORE_ATTR(tag);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 14:
- #line 153 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/pt.c.rl"
- 	{
-     lexer->line_number += 1;
-     MARK(final_newline, p);
-   }
- 	break;
- 	case 15:
- #line 158 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/pt.c.rl"
- 	{
-     MARK(last_newline, p + 1);
-   }
- 	break;
- 	case 16:
- #line 162 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/pt.c.rl"
- 	{
-     if (lexer->mark == 0) {
-       MARK(mark, p);
-     }
-   }
- 	break;
- 	case 17:
- #line 168 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/pt.c.rl"
- 	{
-     MARK(keyword_end, p);
-     MARK(keyword_start, PTR_TO(mark));
-     MARK(content_start, p + 1);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 18:
- #line 175 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/pt.c.rl"
- 	{
-     MARK(content_end, p);
-   }
- 	break;
- 	case 19:
- #line 179 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/pt.c.rl"
- 	{
-     p = p - 1;
-     lexer->current_line = lexer->line_number;
-     current_row = rb_ary_new();
-   }
- 	break;
- 	case 20:
- #line 185 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/pt.c.rl"
- 	{
- 		MARK(content_start, p);
-   }
- 	break;
- 	case 21:
- #line 189 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/pt.c.rl"
- 	{
-     VALUE re_pipe, re_newline, re_backslash;
-     VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
-     rb_funcall(con, rb_intern("strip!"), 0);
-     re_pipe      = rb_reg_regcomp(rb_str_new2("\\\\\\|"));
-     re_newline   = rb_reg_regcomp(rb_str_new2("\\\\n"));
-     re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_pipe,      rb_str_new2("|"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_newline,   rb_str_new2("\n"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\"));
- 
-     rb_ary_push(current_row, con);
-   }
- 	break;
- 	case 22:
- #line 203 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/pt.c.rl"
- 	{
-     rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
-   }
- 	break;
- 	case 23:
- #line 207 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/pt.c.rl"
- 	{
-     int line;
-     if (cs < lexer_first_final) {
-       size_t count = 0;
-       VALUE newstr_val;
-       char *newstr;
-       int newstr_count = 0;        
-       size_t len;
-       const char *buff;
-       if (lexer->last_newline != 0) {
-         len = LEN(last_newline, eof);
-         buff = PTR_TO(last_newline);
-       } else {
-         len = strlen(data);
-         buff = data;
-       }
- 
-       // Allocate as a ruby string so that it gets cleaned up by GC
-       newstr_val = rb_str_new(buff, len);
-       newstr = RSTRING_PTR(newstr_val);
- 
- 
-       for (count = 0; count < len; count++) {
-         if(buff[count] == 10) {
-           newstr[newstr_count] = '\0'; // terminate new string at first newline found
-           break;
-         } else {
-           if (buff[count] == '%') {
-             newstr[newstr_count++] = buff[count];
-             newstr[newstr_count] = buff[count];
-           } else {
-             newstr[newstr_count] = buff[count];
-           }
-         }
-         newstr_count++;
-       }
- 
-       line = lexer->line_number;
-       lexer_init(lexer); // Re-initialize so we can scan again with the same lexer
-       raise_lexer_error(newstr, line);
-     } else {
-       rb_funcall(listener, rb_intern("eof"), 0);
-     }
-   }
- 	break;
- #line 1612 "ext/gherkin_lexer_pt/gherkin_lexer_pt.c"
- 		}
- 	}
- 
- _again:
- 	if ( cs == 0 )
- 		goto _out;
- 	if ( ++p != pe )
- 		goto _resume;
- 	_test_eof: {}
- 	if ( p == eof )
- 	{
- 	const char *__acts = _lexer_actions + _lexer_eof_actions[cs];
- 	unsigned int __nacts = (unsigned int) *__acts++;
- 	while ( __nacts-- > 0 ) {
- 		switch ( *__acts++ ) {
- 	case 23:
- #line 207 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/pt.c.rl"
- 	{
-     int line;
-     if (cs < lexer_first_final) {
-       size_t count = 0;
-       VALUE newstr_val;
-       char *newstr;
-       int newstr_count = 0;        
-       size_t len;
-       const char *buff;
-       if (lexer->last_newline != 0) {
-         len = LEN(last_newline, eof);
-         buff = PTR_TO(last_newline);
-       } else {
-         len = strlen(data);
-         buff = data;
-       }
- 
-       // Allocate as a ruby string so that it gets cleaned up by GC
-       newstr_val = rb_str_new(buff, len);
-       newstr = RSTRING_PTR(newstr_val);
- 
- 
-       for (count = 0; count < len; count++) {
-         if(buff[count] == 10) {
-           newstr[newstr_count] = '\0'; // terminate new string at first newline found
-           break;
-         } else {
-           if (buff[count] == '%') {
-             newstr[newstr_count++] = buff[count];
-             newstr[newstr_count] = buff[count];
-           } else {
-             newstr[newstr_count] = buff[count];
-           }
-         }
-         newstr_count++;
-       }
- 
-       line = lexer->line_number;
-       lexer_init(lexer); // Re-initialize so we can scan again with the same lexer
-       raise_lexer_error(newstr, line);
-     } else {
-       rb_funcall(listener, rb_intern("eof"), 0);
-     }
-   }
- 	break;
- #line 1675 "ext/gherkin_lexer_pt/gherkin_lexer_pt.c"
- 		}
- 	}
- 	}
- 
- 	_out: {}
- 	}
- 
- #line 426 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/pt.c.rl"
- 
-     assert(p <= pe && "data overflow after parsing execute");
-     assert(lexer->content_start <= len && "content starts after data end");
-     assert(lexer->mark < len && "mark is after data end");
-     
-     // Reset lexer by re-initializing the whole thing
-     lexer_init(lexer);
- 
-     if (cs == lexer_error) {
-       rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails.");
-     } else {
-       return Qtrue;
-     }
-   }
- }
- 
- void Init_gherkin_lexer_pt()
- {
-   mGherkin = rb_define_module("Gherkin");
-   mGherkinLexer = rb_define_module_under(mGherkin, "Lexer");
-   rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError"));
- 
-   mCLexer = rb_define_module_under(mGherkin, "CLexer");
-   cI18nLexer = rb_define_class_under(mCLexer, "Pt", rb_cObject);
-   rb_define_alloc_func(cI18nLexer, CLexer_alloc);
-   rb_define_method(cI18nLexer, "initialize", CLexer_init, 1);
-   rb_define_method(cI18nLexer, "scan", CLexer_scan, 1);
- }
- 
 -#line 1 "ragel/i18n/pt.c.rl"
 -#include <assert.h>
 -#include <ruby.h>
 -
 -#if defined(_WIN32)
 -#include <stddef.h>
 -#endif
 -
 -#ifdef HAVE_RUBY_RE_H
 -#include <ruby/re.h>
 -#else
 -#include <re.h>
 -#endif
 -
 -#ifdef HAVE_RUBY_ENCODING_H
 -#include <ruby/encoding.h>
 -#define ENCODED_STR_NEW(ptr, len) \
 -    rb_enc_str_new(ptr, len, rb_utf8_encoding())
 -#else
 -#define ENCODED_STR_NEW(ptr, len) \
 -    rb_str_new(ptr, len)
 -#endif
 -
 -#ifndef RSTRING_PTR
 -#define RSTRING_PTR(s) (RSTRING(s)->ptr)
 -#endif
 -
 -#ifndef RSTRING_LEN
 -#define RSTRING_LEN(s) (RSTRING(s)->len)
 -#endif
 -
 -#define DATA_GET(FROM, TYPE, NAME) \
 -  Data_Get_Struct(FROM, TYPE, NAME); \
 -  if (NAME == NULL) { \
 -    rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \
 -  }
 - 
 -typedef struct lexer_state {
 -  int content_len;
 -  int line_number;
 -  int current_line;
 -  int start_col;
 -  size_t mark;
 -  size_t keyword_start;
 -  size_t keyword_end;
 -  size_t next_keyword_start;
 -  size_t content_start;
 -  size_t content_end;
 -  size_t docstring_content_type_start;
 -  size_t docstring_content_type_end;
 -  size_t query_start;
 -  size_t last_newline;
 -  size_t final_newline;
 -} lexer_state;
 -
 -static VALUE mGherkin;
 -static VALUE mGherkinLexer;
 -static VALUE mCLexer;
 -static VALUE cI18nLexer;
 -static VALUE rb_eGherkinLexingError;
 -
 -#define LEN(AT, P) (P - data - lexer->AT)
 -#define MARK(M, P) (lexer->M = (P) - data)
 -#define PTR_TO(P) (data + lexer->P)
 -
 -#define STORE_KW_END_CON(EVENT) \
 -  store_multiline_kw_con(listener, # EVENT, \
 -    PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \
 -    PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \
 -    lexer->current_line, lexer->start_col); \
 -    if (lexer->content_end != 0) { \
 -      p = PTR_TO(content_end - 1); \
 -    } \
 -    lexer->content_end = 0
 -
 -#define STORE_ATTR(ATTR) \
 -    store_attr(listener, # ATTR, \
 -      PTR_TO(content_start), LEN(content_start, p), \
 -      lexer->line_number)
 -
 -
 -#line 254 "ragel/i18n/pt.c.rl"
 -
 -
 -/** Data **/
 -
 -#line 89 "ext/gherkin_lexer_pt/gherkin_lexer_pt.c"
 -static const char _lexer_actions[] = {
 -	0, 1, 0, 1, 1, 1, 2, 1, 
 -	3, 1, 4, 1, 5, 1, 6, 1, 
 -	7, 1, 8, 1, 9, 1, 10, 1, 
 -	11, 1, 12, 1, 13, 1, 16, 1, 
 -	17, 1, 18, 1, 19, 1, 20, 1, 
 -	21, 1, 22, 1, 23, 2, 1, 18, 
 -	2, 4, 5, 2, 13, 0, 2, 14, 
 -	15, 2, 17, 0, 2, 17, 2, 2, 
 -	17, 16, 2, 17, 19, 2, 18, 6, 
 -	2, 18, 7, 2, 18, 8, 2, 18, 
 -	9, 2, 18, 10, 2, 18, 16, 2, 
 -	20, 21, 2, 22, 0, 2, 22, 2, 
 -	2, 22, 16, 2, 22, 19, 3, 3, 
 -	14, 15, 3, 5, 14, 15, 3, 11, 
 -	14, 15, 3, 12, 14, 15, 3, 13, 
 -	14, 15, 3, 14, 15, 18, 3, 17, 
 -	0, 11, 3, 17, 14, 15, 4, 1, 
 -	14, 15, 18, 4, 4, 5, 14, 15, 
 -	4, 17, 0, 14, 15, 5, 17, 0, 
 -	11, 14, 15
 -};
 -
 -static const short _lexer_key_offsets[] = {
 -	0, 0, 17, 18, 19, 35, 36, 37, 
 -	39, 41, 46, 51, 56, 61, 65, 69, 
 -	71, 72, 73, 74, 75, 76, 77, 78, 
 -	79, 80, 81, 82, 83, 84, 85, 86, 
 -	87, 89, 91, 96, 103, 108, 111, 112, 
 -	113, 114, 115, 116, 117, 119, 120, 121, 
 -	122, 123, 124, 125, 126, 127, 128, 139, 
 -	141, 143, 145, 147, 149, 151, 153, 155, 
 -	157, 159, 161, 163, 165, 167, 171, 173, 
 -	175, 177, 179, 181, 183, 186, 188, 190, 
 -	192, 194, 196, 198, 200, 216, 218, 219, 
 -	221, 223, 224, 225, 226, 227, 228, 230, 
 -	231, 232, 233, 234, 235, 236, 237, 238, 
 -	239, 240, 241, 242, 243, 244, 245, 246, 
 -	247, 248, 249, 263, 265, 267, 269, 271, 
 -	273, 275, 277, 279, 281, 283, 285, 287, 
 -	289, 291, 293, 296, 298, 300, 302, 304, 
 -	306, 308, 311, 313, 315, 317, 319, 321, 
 -	323, 325, 327, 330, 332, 334, 336, 338, 
 -	340, 342, 345, 348, 351, 353, 356, 358, 
 -	360, 362, 364, 366, 368, 370, 372, 374, 
 -	376, 378, 380, 382, 384, 386, 388, 390, 
 -	392, 394, 396, 398, 399, 400, 401, 402, 
 -	403, 404, 405, 406, 407, 408, 412, 413, 
 -	415, 416, 417, 418, 419, 420, 421, 422, 
 -	423, 424, 425, 426, 427, 428, 429, 431, 
 -	432, 433, 434, 435, 436, 437, 438, 439, 
 -	440, 448, 450, 452, 454, 456, 458, 460, 
 -	462, 465, 467, 469, 471, 473, 475, 477, 
 -	479, 481, 483, 485, 487, 489, 491, 493, 
 -	495, 497, 499, 501, 503, 505, 506, 507, 
 -	509, 510, 511, 512, 513, 514, 515, 516, 
 -	517, 518, 519, 520, 521, 522, 523, 537, 
 -	539, 541, 543, 545, 547, 549, 551, 553, 
 -	555, 557, 559, 561, 563, 565, 567, 570, 
 -	572, 574, 576, 578, 580, 582, 585, 587, 
 -	589, 591, 593, 595, 597, 599, 601, 604, 
 -	606, 608, 610, 612, 615, 617, 620, 623, 
 -	625, 627, 629, 631, 633, 636, 638, 640, 
 -	642, 644, 646, 648, 650, 652, 654, 656, 
 -	658, 660, 662, 664, 666, 668, 670, 672, 
 -	674, 676, 678, 680, 684, 686, 689, 691, 
 -	693, 695, 697, 699, 701, 703, 705, 707, 
 -	709, 711, 713, 715, 717, 719, 721, 723, 
 -	725, 727, 729, 731, 733, 735, 737, 739, 
 -	741, 743, 745, 747, 749, 751, 753, 754, 
 -	755, 756, 757, 758, 759, 763, 769, 772, 
 -	774, 780, 796, 798, 801, 803, 805, 807, 
 -	809, 813, 815, 817, 819, 821, 823, 825, 
 -	827, 829, 831, 833, 835, 837, 839, 841, 
 -	843, 845, 847, 849, 851, 854, 856, 858, 
 -	860, 862, 864, 866, 868, 870, 872, 874, 
 -	876, 878, 880, 882, 884, 886, 888, 890, 
 -	892, 894, 896, 898, 900, 902, 904, 907, 
 -	909, 911, 913, 915, 917, 919, 921, 923, 
 -	925, 927, 929, 931, 934, 936, 938, 940, 
 -	942, 944, 946, 948, 950, 953, 955, 957, 
 -	959, 961, 963, 965, 967, 969, 971, 973, 
 -	974, 976, 977, 978, 979, 980, 983, 984, 
 -	985, 986, 987, 988, 989, 990, 991, 992, 
 -	1006, 1008, 1010, 1012, 1014, 1016, 1018, 1020, 
 -	1022, 1024, 1026, 1028, 1030, 1032, 1034, 1036, 
 -	1040, 1042, 1044, 1046, 1048, 1050, 1052, 1055, 
 -	1057, 1059, 1061, 1063, 1065, 1067, 1069, 1071, 
 -	1074, 1076, 1078, 1080, 1082, 1085, 1087, 1089, 
 -	1091, 1093, 1095, 1097, 1099, 1101, 1103, 1105, 
 -	1107, 1109, 1111, 1114, 1116, 1119, 1122, 1124, 
 -	1126, 1128, 1130, 1132, 1135, 1137, 1139, 1141, 
 -	1143, 1145, 1147, 1149, 1151, 1153, 1155, 1157, 
 -	1159, 1161, 1163, 1165, 1167, 1169, 1171, 1173, 
 -	1175, 1177, 1179, 1181, 1183, 1185, 1189, 1191, 
 -	1194, 1196, 1198, 1200, 1202, 1204, 1206, 1208, 
 -	1210, 1212, 1214, 1216, 1218, 1220, 1222, 1225, 
 -	1227, 1229, 1232, 1234, 1236, 1238, 1240, 1242, 
 -	1244, 1246, 1248, 1250, 1252, 1254, 1256, 1258, 
 -	1260, 1262, 1264, 1265, 1266, 1267, 1268, 1269
 -};
 -
 -static const char _lexer_trans_keys[] = {
 -	-17, 10, 32, 34, 35, 37, 42, 64, 
 -	67, 68, 69, 70, 77, 81, 124, 9, 
 -	13, -69, -65, 10, 32, 34, 35, 37, 
 -	42, 64, 67, 68, 69, 70, 77, 81, 
 -	124, 9, 13, 34, 34, 10, 13, 10, 
 -	13, 10, 32, 34, 9, 13, 10, 32, 
 -	34, 9, 13, 10, 32, 34, 9, 13, 
 -	10, 32, 34, 9, 13, 10, 32, 9, 
 -	13, 10, 32, 9, 13, 10, 13, 10, 
 -	95, 70, 69, 65, 84, 85, 82, 69, 
 -	95, 69, 78, 68, 95, 37, 32, 10, 
 -	13, 10, 13, 13, 32, 64, 9, 10, 
 -	9, 10, 13, 32, 64, 11, 12, 10, 
 -	32, 64, 9, 13, 97, 101, 111, 114, 
 -	97, 99, 116, 101, 114, -61, 105, -83, 
 -	115, 116, 105, 99, 97, 58, 10, 10, 
 -	10, 32, 35, 37, 64, 67, 68, 69, 
 -	70, 9, 13, 10, 95, 10, 70, 10, 
 -	69, 10, 65, 10, 84, 10, 85, 10, 
 -	82, 10, 69, 10, 95, 10, 69, 10, 
 -	78, 10, 68, 10, 95, 10, 37, 10, 
 -	97, 101, 111, 10, 114, 10, 97, 10, 
 -	99, 10, 116, 10, 101, 10, 114, -61, 
 -	10, 105, -83, 10, 10, 115, 10, 116, 
 -	10, 105, 10, 99, 10, 97, 10, 58, 
 -	10, 32, 34, 35, 37, 42, 64, 67, 
 -	68, 69, 70, 77, 81, 124, 9, 13, 
 -	97, 101, 100, 97, 111, 32, 115, 108, 
 -	105, 110, 101, 97, -61, 99, -89, -61, 
 -	-93, 111, 32, 100, 111, 32, 67, 101, 
 -	110, -61, -95, 114, 105, 111, 58, 10, 
 -	10, 10, 32, 35, 37, 42, 64, 67, 
 -	68, 69, 70, 77, 81, 9, 13, 10, 
 -	95, 10, 70, 10, 69, 10, 65, 10, 
 -	84, 10, 85, 10, 82, 10, 69, 10, 
 -	95, 10, 69, 10, 78, 10, 68, 10, 
 -	95, 10, 37, 10, 32, 10, 97, 101, 
 -	10, 114, 10, 97, 10, 99, 10, 116, 
 -	10, 101, 10, 114, -61, 10, 105, -83, 
 -	10, 10, 115, 10, 116, 10, 105, 10, 
 -	99, 10, 97, 10, 58, 10, 110, -61, 
 -	10, 97, -95, 10, 10, 114, 10, 105, 
 -	10, 111, 10, 97, 10, 100, 10, 97, 
 -	111, 10, 32, 115, 10, 32, 110, 10, 
 -	116, -61, 10, 97, -93, 10, 10, 111, 
 -	10, 117, 10, 110, 10, 99, 10, 105, 
 -	10, 111, 10, 110, 10, 97, 10, 108, 
 -	10, 105, 10, 100, 10, 97, 10, 100, 
 -	10, 101, 10, 97, 10, 115, 10, 117, 
 -	10, 97, 10, 110, 10, 100, 97, 111, 
 -	32, 100, 111, 32, 67, 101, 110, 97, 
 -	32, 110, 115, 120, 116, -61, 97, -93, 
 -	111, 113, 117, 101, 109, 97, 32, 100, 
 -	111, 32, 67, 101, 110, -61, 97, 101, 
 -	109, 112, 108, 111, 115, 58, 10, 10, 
 -	10, 32, 35, 67, 70, 124, 9, 13, 
 -	10, 97, 10, 114, 10, 97, 10, 99, 
 -	10, 116, 10, 101, 10, 114, -61, 10, 
 -	105, -83, 10, 10, 115, 10, 116, 10, 
 -	105, 10, 99, 10, 97, 10, 58, 10, 
 -	117, 10, 110, 10, 99, 10, 105, 10, 
 -	111, 10, 110, 10, 97, 10, 108, 10, 
 -	105, 10, 100, 10, 97, 10, 100, 10, 
 -	101, 117, 110, 99, 100, 105, 111, 110, 
 -	97, 108, 105, 100, 97, 100, 101, 111, 
 -	58, 10, 10, 10, 32, 35, 37, 42, 
 -	64, 67, 68, 69, 70, 77, 81, 9, 
 -	13, 10, 95, 10, 70, 10, 69, 10, 
 -	65, 10, 84, 10, 85, 10, 82, 10, 
 -	69, 10, 95, 10, 69, 10, 78, 10, 
 -	68, 10, 95, 10, 37, 10, 32, 10, 
 -	97, 101, 10, 114, 10, 97, 10, 99, 
 -	10, 116, 10, 101, 10, 114, -61, 10, 
 -	105, -83, 10, 10, 115, 10, 116, 10, 
 -	105, 10, 99, 10, 97, 10, 58, 10, 
 -	110, -61, 10, 97, -95, 10, 10, 114, 
 -	10, 105, 10, 111, 10, 97, 101, 10, 
 -	100, 10, 97, 111, 10, 32, 115, 10, 
 -	108, 10, 105, 10, 110, 10, 101, 10, 
 -	97, -61, 10, 99, -89, 10, -61, 10, 
 -	-93, 10, 10, 111, 10, 32, 10, 100, 
 -	10, 111, 10, 32, 10, 67, 10, 101, 
 -	10, 110, -61, 10, 10, 97, 10, 111, 
 -	10, 32, 10, 100, 10, 111, 10, 32, 
 -	10, 67, 10, 101, 10, 110, 10, 97, 
 -	10, 32, 110, 115, 10, 116, -61, 10, 
 -	97, -93, 10, 10, 111, 10, 113, 10, 
 -	117, 10, 101, 10, 109, 10, 97, 10, 
 -	32, 10, 100, 10, 111, 10, 32, 10, 
 -	67, 10, 101, 10, 117, 10, 110, 10, 
 -	99, 10, 105, 10, 111, 10, 110, 10, 
 -	97, 10, 108, 10, 105, 10, 100, 10, 
 -	97, 10, 100, 10, 101, 10, 97, 10, 
 -	115, 10, 117, 10, 97, 10, 110, 10, 
 -	100, 97, 115, 117, 97, 110, 100, 32, 
 -	124, 9, 13, 10, 32, 92, 124, 9, 
 -	13, 10, 92, 124, 10, 92, 10, 32, 
 -	92, 124, 9, 13, 10, 32, 34, 35, 
 -	37, 42, 64, 67, 68, 69, 70, 77, 
 -	81, 124, 9, 13, 10, 110, -61, 10, 
 -	97, -95, 10, 10, 114, 10, 105, 10, 
 -	111, 10, 32, 58, 115, 10, 100, 10, 
 -	101, 10, 32, 10, 70, 10, 117, 10, 
 -	110, 10, 100, 10, 111, 10, 110, 10, 
 -	116, 10, 101, 10, 120, 10, 116, 10, 
 -	101, 10, 108, 10, 105, 10, 110, 10, 
 -	101, 10, 97, -61, 10, 99, -89, 10, 
 -	-61, 10, -93, 10, 10, 111, 10, 32, 
 -	10, 100, 10, 111, 10, 32, 10, 67, 
 -	10, 101, 10, 110, -61, 10, -95, 10, 
 -	10, 114, 10, 105, 10, 97, 10, 111, 
 -	10, 32, 10, 100, 10, 111, 10, 32, 
 -	10, 67, 10, 101, 10, 110, 10, 97, 
 -	10, 115, 120, 10, 113, 10, 117, 10, 
 -	101, 10, 109, 10, 97, 10, 32, 10, 
 -	100, 10, 111, 10, 32, 10, 67, 10, 
 -	101, 10, 110, -61, 10, 97, 10, 101, 
 -	10, 109, 10, 112, 10, 108, 10, 111, 
 -	10, 115, 10, 117, 10, 110, 10, 99, 
 -	100, 10, 105, 10, 111, 10, 110, 10, 
 -	97, 10, 108, 10, 105, 10, 100, 10, 
 -	97, 10, 100, 10, 101, 110, -61, 97, 
 -	-95, 114, 105, 111, 32, 58, 115, 100, 
 -	101, 32, 70, 117, 110, 100, 10, 10, 
 -	10, 32, 35, 37, 42, 64, 67, 68, 
 -	69, 70, 77, 81, 9, 13, 10, 95, 
 -	10, 70, 10, 69, 10, 65, 10, 84, 
 -	10, 85, 10, 82, 10, 69, 10, 95, 
 -	10, 69, 10, 78, 10, 68, 10, 95, 
 -	10, 37, 10, 32, 10, 97, 101, 111, 
 -	10, 114, 10, 97, 10, 99, 10, 116, 
 -	10, 101, 10, 114, -61, 10, 105, -83, 
 -	10, 10, 115, 10, 116, 10, 105, 10, 
 -	99, 10, 97, 10, 58, 10, 110, -61, 
 -	10, 97, -95, 10, 10, 114, 10, 105, 
 -	10, 111, 10, 32, 58, 10, 100, 10, 
 -	101, 10, 32, 10, 70, 10, 117, 10, 
 -	110, 10, 100, 10, 111, 10, 110, 10, 
 -	116, 10, 101, 10, 120, 10, 116, 10, 
 -	97, 101, 10, 100, 10, 97, 111, 10, 
 -	32, 115, 10, 108, 10, 105, 10, 110, 
 -	10, 101, 10, 97, -61, 10, 99, -89, 
 -	10, -61, 10, -93, 10, 10, 111, 10, 
 -	32, 10, 100, 10, 111, 10, 32, 10, 
 -	67, 10, 101, 10, 110, -61, 10, -95, 
 -	10, 10, 114, 10, 105, 10, 97, 10, 
 -	111, 10, 32, 10, 100, 10, 111, 10, 
 -	32, 10, 67, 10, 101, 10, 110, 10, 
 -	97, 10, 32, 110, 115, 10, 116, -61, 
 -	10, 97, -93, 10, 10, 111, 10, 113, 
 -	10, 117, 10, 101, 10, 109, 10, 97, 
 -	10, 32, 10, 100, 10, 111, 10, 32, 
 -	10, 67, 10, 101, 10, 110, -61, 10, 
 -	97, 10, 117, 10, 110, 10, 99, 100, 
 -	10, 105, 10, 111, 10, 110, 10, 97, 
 -	10, 108, 10, 105, 10, 100, 10, 97, 
 -	10, 100, 10, 101, 10, 97, 10, 115, 
 -	10, 117, 10, 97, 10, 110, 10, 100, 
 -	110, 116, 101, 120, 116, 0
 -};
 -
 -static const char _lexer_single_lengths[] = {
 -	0, 15, 1, 1, 14, 1, 1, 2, 
 -	2, 3, 3, 3, 3, 2, 2, 2, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	2, 2, 3, 5, 3, 3, 1, 1, 
 -	1, 1, 1, 1, 2, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 9, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 4, 2, 2, 
 -	2, 2, 2, 2, 3, 2, 2, 2, 
 -	2, 2, 2, 2, 14, 2, 1, 2, 
 -	2, 1, 1, 1, 1, 1, 2, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 12, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 3, 2, 2, 2, 2, 2, 
 -	2, 3, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 3, 2, 2, 2, 2, 2, 
 -	2, 3, 3, 3, 2, 3, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 4, 1, 2, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 2, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	6, 2, 2, 2, 2, 2, 2, 2, 
 -	3, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 1, 1, 2, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 12, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 3, 2, 
 -	2, 2, 2, 2, 2, 3, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 3, 2, 
 -	2, 2, 2, 3, 2, 3, 3, 2, 
 -	2, 2, 2, 2, 3, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 4, 2, 3, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 1, 1, 
 -	1, 1, 1, 1, 2, 4, 3, 2, 
 -	4, 14, 2, 3, 2, 2, 2, 2, 
 -	4, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 3, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 3, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 3, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 3, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 1, 
 -	2, 1, 1, 1, 1, 3, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 12, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 4, 
 -	2, 2, 2, 2, 2, 2, 3, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 3, 
 -	2, 2, 2, 2, 3, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 3, 2, 3, 3, 2, 2, 
 -	2, 2, 2, 3, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 4, 2, 3, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 3, 2, 
 -	2, 3, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 1, 1, 1, 1, 1, 0
 -};
 -
 -static const char _lexer_range_lengths[] = {
 -	0, 1, 0, 0, 1, 0, 0, 0, 
 -	0, 1, 1, 1, 1, 1, 1, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 1, 1, 1, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 1, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 1, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 1, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	1, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 1, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 1, 1, 0, 0, 
 -	1, 1, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 1, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0
 -};
 -
 -static const short _lexer_index_offsets[] = {
 -	0, 0, 17, 19, 21, 37, 39, 41, 
 -	44, 47, 52, 57, 62, 67, 71, 75, 
 -	78, 80, 82, 84, 86, 88, 90, 92, 
 -	94, 96, 98, 100, 102, 104, 106, 108, 
 -	110, 113, 116, 121, 128, 133, 137, 139, 
 -	141, 143, 145, 147, 149, 152, 154, 156, 
 -	158, 160, 162, 164, 166, 168, 170, 181, 
 -	184, 187, 190, 193, 196, 199, 202, 205, 
 -	208, 211, 214, 217, 220, 223, 228, 231, 
 -	234, 237, 240, 243, 246, 250, 253, 256, 
 -	259, 262, 265, 268, 271, 287, 290, 292, 
 -	295, 298, 300, 302, 304, 306, 308, 311, 
 -	313, 315, 317, 319, 321, 323, 325, 327, 
 -	329, 331, 333, 335, 337, 339, 341, 343, 
 -	345, 347, 349, 363, 366, 369, 372, 375, 
 -	378, 381, 384, 387, 390, 393, 396, 399, 
 -	402, 405, 408, 412, 415, 418, 421, 424, 
 -	427, 430, 434, 437, 440, 443, 446, 449, 
 -	452, 455, 458, 462, 465, 468, 471, 474, 
 -	477, 480, 484, 488, 492, 495, 499, 502, 
 -	505, 508, 511, 514, 517, 520, 523, 526, 
 -	529, 532, 535, 538, 541, 544, 547, 550, 
 -	553, 556, 559, 562, 564, 566, 568, 570, 
 -	572, 574, 576, 578, 580, 582, 587, 589, 
 -	592, 594, 596, 598, 600, 602, 604, 606, 
 -	608, 610, 612, 614, 616, 618, 620, 623, 
 -	625, 627, 629, 631, 633, 635, 637, 639, 
 -	641, 649, 652, 655, 658, 661, 664, 667, 
 -	670, 674, 677, 680, 683, 686, 689, 692, 
 -	695, 698, 701, 704, 707, 710, 713, 716, 
 -	719, 722, 725, 728, 731, 734, 736, 738, 
 -	741, 743, 745, 747, 749, 751, 753, 755, 
 -	757, 759, 761, 763, 765, 767, 769, 783, 
 -	786, 789, 792, 795, 798, 801, 804, 807, 
 -	810, 813, 816, 819, 822, 825, 828, 832, 
 -	835, 838, 841, 844, 847, 850, 854, 857, 
 -	860, 863, 866, 869, 872, 875, 878, 882, 
 -	885, 888, 891, 894, 898, 901, 905, 909, 
 -	912, 915, 918, 921, 924, 928, 931, 934, 
 -	937, 940, 943, 946, 949, 952, 955, 958, 
 -	961, 964, 967, 970, 973, 976, 979, 982, 
 -	985, 988, 991, 994, 999, 1002, 1006, 1009, 
 -	1012, 1015, 1018, 1021, 1024, 1027, 1030, 1033, 
 -	1036, 1039, 1042, 1045, 1048, 1051, 1054, 1057, 
 -	1060, 1063, 1066, 1069, 1072, 1075, 1078, 1081, 
 -	1084, 1087, 1090, 1093, 1096, 1099, 1102, 1104, 
 -	1106, 1108, 1110, 1112, 1114, 1118, 1124, 1128, 
 -	1131, 1137, 1153, 1156, 1160, 1163, 1166, 1169, 
 -	1172, 1177, 1180, 1183, 1186, 1189, 1192, 1195, 
 -	1198, 1201, 1204, 1207, 1210, 1213, 1216, 1219, 
 -	1222, 1225, 1228, 1231, 1234, 1238, 1241, 1244, 
 -	1247, 1250, 1253, 1256, 1259, 1262, 1265, 1268, 
 -	1271, 1274, 1277, 1280, 1283, 1286, 1289, 1292, 
 -	1295, 1298, 1301, 1304, 1307, 1310, 1313, 1317, 
 -	1320, 1323, 1326, 1329, 1332, 1335, 1338, 1341, 
 -	1344, 1347, 1350, 1353, 1357, 1360, 1363, 1366, 
 -	1369, 1372, 1375, 1378, 1381, 1385, 1388, 1391, 
 -	1394, 1397, 1400, 1403, 1406, 1409, 1412, 1415, 
 -	1417, 1420, 1422, 1424, 1426, 1428, 1432, 1434, 
 -	1436, 1438, 1440, 1442, 1444, 1446, 1448, 1450, 
 -	1464, 1467, 1470, 1473, 1476, 1479, 1482, 1485, 
 -	1488, 1491, 1494, 1497, 1500, 1503, 1506, 1509, 
 -	1514, 1517, 1520, 1523, 1526, 1529, 1532, 1536, 
 -	1539, 1542, 1545, 1548, 1551, 1554, 1557, 1560, 
 -	1564, 1567, 1570, 1573, 1576, 1580, 1583, 1586, 
 -	1589, 1592, 1595, 1598, 1601, 1604, 1607, 1610, 
 -	1613, 1616, 1619, 1623, 1626, 1630, 1634, 1637, 
 -	1640, 1643, 1646, 1649, 1653, 1656, 1659, 1662, 
 -	1665, 1668, 1671, 1674, 1677, 1680, 1683, 1686, 
 -	1689, 1692, 1695, 1698, 1701, 1704, 1707, 1710, 
 -	1713, 1716, 1719, 1722, 1725, 1728, 1733, 1736, 
 -	1740, 1743, 1746, 1749, 1752, 1755, 1758, 1761, 
 -	1764, 1767, 1770, 1773, 1776, 1779, 1782, 1786, 
 -	1789, 1792, 1796, 1799, 1802, 1805, 1808, 1811, 
 -	1814, 1817, 1820, 1823, 1826, 1829, 1832, 1835, 
 -	1838, 1841, 1844, 1846, 1848, 1850, 1852, 1854
 -};
 -
 -static const short _lexer_trans_targs[] = {
 -	2, 4, 4, 5, 15, 17, 31, 34, 
 -	37, 85, 189, 245, 366, 368, 372, 4, 
 -	0, 3, 0, 4, 0, 4, 4, 5, 
 -	15, 17, 31, 34, 37, 85, 189, 245, 
 -	366, 368, 372, 4, 0, 6, 0, 7, 
 -	0, 9, 8, 8, 9, 8, 8, 10, 
 -	10, 11, 10, 10, 10, 10, 11, 10, 
 -	10, 10, 10, 12, 10, 10, 10, 10, 
 -	13, 10, 10, 4, 14, 14, 0, 4, 
 -	14, 14, 0, 4, 16, 15, 4, 0, 
 -	18, 0, 19, 0, 20, 0, 21, 0, 
 -	22, 0, 23, 0, 24, 0, 25, 0, 
 -	26, 0, 27, 0, 28, 0, 29, 0, 
 -	30, 0, 607, 0, 32, 0, 4, 16, 
 -	33, 4, 16, 33, 0, 0, 0, 0, 
 -	35, 36, 4, 36, 36, 34, 35, 35, 
 -	4, 36, 34, 36, 0, 38, 463, 602, 
 -	0, 39, 0, 40, 0, 41, 0, 42, 
 -	0, 43, 0, 44, 0, 45, 46, 0, 
 -	46, 0, 47, 0, 48, 0, 49, 0, 
 -	50, 0, 51, 0, 52, 0, 54, 53, 
 -	54, 53, 54, 54, 4, 55, 4, 69, 
 -	398, 430, 450, 54, 53, 54, 56, 53, 
 -	54, 57, 53, 54, 58, 53, 54, 59, 
 -	53, 54, 60, 53, 54, 61, 53, 54, 
 -	62, 53, 54, 63, 53, 54, 64, 53, 
 -	54, 65, 53, 54, 66, 53, 54, 67, 
 -	53, 54, 68, 53, 54, 4, 53, 54, 
 -	70, 378, 393, 53, 54, 71, 53, 54, 
 -	72, 53, 54, 73, 53, 54, 74, 53, 
 -	54, 75, 53, 54, 76, 53, 77, 54, 
 -	78, 53, 78, 54, 53, 54, 79, 53, 
 -	54, 80, 53, 54, 81, 53, 54, 82, 
 -	53, 54, 83, 53, 54, 84, 53, 4, 
 -	4, 5, 15, 17, 31, 34, 37, 85, 
 -	189, 245, 366, 368, 372, 4, 0, 86, 
 -	89, 0, 87, 0, 88, 88, 0, 32, 
 -	31, 0, 90, 0, 91, 0, 92, 0, 
 -	93, 0, 94, 0, 95, 179, 0, 96, 
 -	0, 97, 0, 98, 0, 99, 0, 100, 
 -	0, 101, 0, 102, 0, 103, 0, 104, 
 -	0, 105, 0, 106, 0, 107, 0, 108, 
 -	0, 109, 0, 110, 0, 111, 0, 112, 
 -	0, 114, 113, 114, 113, 114, 114, 4, 
 -	115, 129, 4, 130, 151, 155, 160, 173, 
 -	175, 114, 113, 114, 116, 113, 114, 117, 
 -	113, 114, 118, 113, 114, 119, 113, 114, 
 -	120, 113, 114, 121, 113, 114, 122, 113, 
 -	114, 123, 113, 114, 124, 113, 114, 125, 
 -	113, 114, 126, 113, 114, 127, 113, 114, 
 -	128, 113, 114, 4, 113, 114, 84, 113, 
 -	114, 131, 145, 113, 114, 132, 113, 114, 
 -	133, 113, 114, 134, 113, 114, 135, 113, 
 -	114, 136, 113, 114, 137, 113, 138, 114, 
 -	139, 113, 139, 114, 113, 114, 140, 113, 
 -	114, 141, 113, 114, 142, 113, 114, 143, 
 -	113, 114, 144, 113, 114, 84, 113, 114, 
 -	146, 113, 147, 114, 148, 113, 148, 114, 
 -	113, 114, 149, 113, 114, 150, 113, 114, 
 -	144, 113, 114, 152, 113, 114, 153, 113, 
 -	114, 154, 154, 113, 114, 84, 129, 113, 
 -	114, 84, 156, 113, 114, 157, 113, 158, 
 -	114, 159, 113, 159, 114, 113, 114, 129, 
 -	113, 114, 161, 113, 114, 162, 113, 114, 
 -	163, 113, 114, 164, 113, 114, 165, 113, 
 -	114, 166, 113, 114, 167, 113, 114, 168, 
 -	113, 114, 169, 113, 114, 170, 113, 114, 
 -	171, 113, 114, 172, 113, 114, 144, 113, 
 -	114, 174, 113, 114, 129, 113, 114, 176, 
 -	113, 114, 177, 113, 114, 178, 113, 114, 
 -	159, 113, 180, 0, 181, 0, 182, 0, 
 -	183, 0, 184, 0, 185, 0, 186, 0, 
 -	187, 0, 188, 0, 108, 0, 32, 190, 
 -	194, 207, 0, 191, 0, 192, 193, 0, 
 -	193, 0, 31, 0, 195, 0, 196, 0, 
 -	197, 0, 198, 0, 199, 0, 200, 0, 
 -	201, 0, 202, 0, 203, 0, 204, 0, 
 -	205, 0, 206, 0, 107, 108, 0, 208, 
 -	0, 209, 0, 210, 0, 211, 0, 212, 
 -	0, 213, 0, 214, 0, 216, 215, 216, 
 -	215, 216, 216, 4, 217, 232, 4, 216, 
 -	215, 216, 218, 215, 216, 219, 215, 216, 
 -	220, 215, 216, 221, 215, 216, 222, 215, 
 -	216, 223, 215, 216, 224, 215, 225, 216, 
 -	226, 215, 226, 216, 215, 216, 227, 215, 
 -	216, 228, 215, 216, 229, 215, 216, 230, 
 -	215, 216, 231, 215, 216, 84, 215, 216, 
 -	233, 215, 216, 234, 215, 216, 235, 215, 
 -	216, 236, 215, 216, 237, 215, 216, 238, 
 -	215, 216, 239, 215, 216, 240, 215, 216, 
 -	241, 215, 216, 242, 215, 216, 243, 215, 
 -	216, 244, 215, 216, 231, 215, 246, 0, 
 -	247, 0, 248, 258, 0, 249, 0, 250, 
 -	0, 251, 0, 252, 0, 253, 0, 254, 
 -	0, 255, 0, 256, 0, 257, 0, 51, 
 -	0, 259, 0, 260, 0, 262, 261, 262, 
 -	261, 262, 262, 4, 263, 277, 4, 278, 
 -	299, 331, 347, 360, 362, 262, 261, 262, 
 -	264, 261, 262, 265, 261, 262, 266, 261, 
 -	262, 267, 261, 262, 268, 261, 262, 269, 
 -	261, 262, 270, 261, 262, 271, 261, 262, 
 -	272, 261, 262, 273, 261, 262, 274, 261, 
 -	262, 275, 261, 262, 276, 261, 262, 4, 
 -	261, 262, 84, 261, 262, 279, 293, 261, 
 -	262, 280, 261, 262, 281, 261, 262, 282, 
 -	261, 262, 283, 261, 262, 284, 261, 262, 
 -	285, 261, 286, 262, 287, 261, 287, 262, 
 -	261, 262, 288, 261, 262, 289, 261, 262, 
 -	290, 261, 262, 291, 261, 262, 292, 261, 
 -	262, 84, 261, 262, 294, 261, 295, 262, 
 -	296, 261, 296, 262, 261, 262, 297, 261, 
 -	262, 298, 261, 262, 292, 261, 262, 300, 
 -	303, 261, 262, 301, 261, 262, 302, 302, 
 -	261, 262, 84, 277, 261, 262, 304, 261, 
 -	262, 305, 261, 262, 306, 261, 262, 307, 
 -	261, 262, 308, 261, 309, 262, 321, 261, 
 -	310, 262, 261, 311, 262, 261, 312, 262, 
 -	261, 262, 313, 261, 262, 314, 261, 262, 
 -	315, 261, 262, 316, 261, 262, 317, 261, 
 -	262, 318, 261, 262, 319, 261, 262, 320, 
 -	261, 295, 262, 261, 262, 322, 261, 262, 
 -	323, 261, 262, 324, 261, 262, 325, 261, 
 -	262, 326, 261, 262, 327, 261, 262, 328, 
 -	261, 262, 329, 261, 262, 330, 261, 262, 
 -	296, 261, 262, 84, 332, 336, 261, 262, 
 -	333, 261, 334, 262, 335, 261, 335, 262, 
 -	261, 262, 277, 261, 262, 337, 261, 262, 
 -	338, 261, 262, 339, 261, 262, 340, 261, 
 -	262, 341, 261, 262, 342, 261, 262, 343, 
 -	261, 262, 344, 261, 262, 345, 261, 262, 
 -	346, 261, 262, 293, 261, 262, 348, 261, 
 -	262, 349, 261, 262, 350, 261, 262, 351, 
 -	261, 262, 352, 261, 262, 353, 261, 262, 
 -	354, 261, 262, 355, 261, 262, 356, 261, 
 -	262, 357, 261, 262, 358, 261, 262, 359, 
 -	261, 262, 292, 261, 262, 361, 261, 262, 
 -	277, 261, 262, 363, 261, 262, 364, 261, 
 -	262, 365, 261, 262, 335, 261, 367, 0, 
 -	31, 0, 369, 0, 370, 0, 371, 0, 
 -	193, 0, 372, 373, 372, 0, 377, 376, 
 -	375, 373, 376, 374, 0, 375, 373, 374, 
 -	0, 375, 374, 377, 376, 375, 373, 376, 
 -	374, 377, 377, 5, 15, 17, 31, 34, 
 -	37, 85, 189, 245, 366, 368, 372, 377, 
 -	0, 54, 379, 53, 380, 54, 381, 53, 
 -	381, 54, 53, 54, 382, 53, 54, 383, 
 -	53, 54, 384, 53, 54, 385, 84, 83, 
 -	53, 54, 386, 53, 54, 387, 53, 54, 
 -	388, 53, 54, 389, 53, 54, 390, 53, 
 -	54, 391, 53, 54, 392, 53, 54, 83, 
 -	53, 54, 394, 53, 54, 395, 53, 54, 
 -	396, 53, 54, 397, 53, 54, 392, 53, 
 -	54, 399, 53, 54, 400, 53, 54, 401, 
 -	53, 54, 402, 53, 54, 403, 53, 54, 
 -	404, 53, 405, 54, 420, 53, 406, 54, 
 -	53, 407, 54, 53, 408, 54, 53, 54, 
 -	409, 53, 54, 410, 53, 54, 411, 53, 
 -	54, 412, 53, 54, 413, 53, 54, 414, 
 -	53, 54, 415, 53, 54, 416, 53, 417, 
 -	54, 53, 418, 54, 53, 54, 419, 53, 
 -	54, 392, 53, 54, 421, 53, 54, 422, 
 -	53, 54, 423, 53, 54, 424, 53, 54, 
 -	425, 53, 54, 426, 53, 54, 427, 53, 
 -	54, 428, 53, 54, 429, 53, 54, 418, 
 -	53, 54, 431, 444, 53, 54, 432, 53, 
 -	54, 433, 53, 54, 434, 53, 54, 435, 
 -	53, 54, 436, 53, 54, 437, 53, 54, 
 -	438, 53, 54, 439, 53, 54, 440, 53, 
 -	54, 441, 53, 54, 442, 53, 54, 443, 
 -	53, 417, 54, 418, 53, 54, 445, 53, 
 -	54, 446, 53, 54, 447, 53, 54, 448, 
 -	53, 54, 449, 53, 54, 83, 53, 54, 
 -	451, 53, 54, 452, 53, 54, 453, 392, 
 -	53, 54, 454, 53, 54, 455, 53, 54, 
 -	456, 53, 54, 457, 53, 54, 458, 53, 
 -	54, 459, 53, 54, 460, 53, 54, 461, 
 -	53, 54, 462, 53, 54, 83, 53, 464, 
 -	0, 465, 466, 0, 466, 0, 467, 0, 
 -	468, 0, 469, 0, 470, 477, 213, 0, 
 -	471, 0, 472, 0, 473, 0, 474, 0, 
 -	475, 0, 476, 0, 258, 0, 479, 478, 
 -	479, 478, 479, 479, 4, 480, 494, 4, 
 -	495, 530, 565, 583, 596, 598, 479, 478, 
 -	479, 481, 478, 479, 482, 478, 479, 483, 
 -	478, 479, 484, 478, 479, 485, 478, 479, 
 -	486, 478, 479, 487, 478, 479, 488, 478, 
 -	479, 489, 478, 479, 490, 478, 479, 491, 
 -	478, 479, 492, 478, 479, 493, 478, 479, 
 -	4, 478, 479, 84, 478, 479, 496, 510, 
 -	525, 478, 479, 497, 478, 479, 498, 478, 
 -	479, 499, 478, 479, 500, 478, 479, 501, 
 -	478, 479, 502, 478, 503, 479, 504, 478, 
 -	504, 479, 478, 479, 505, 478, 479, 506, 
 -	478, 479, 507, 478, 479, 508, 478, 479, 
 -	509, 478, 479, 84, 478, 479, 511, 478, 
 -	512, 479, 513, 478, 513, 479, 478, 479, 
 -	514, 478, 479, 515, 478, 479, 516, 478, 
 -	479, 517, 84, 478, 479, 518, 478, 479, 
 -	519, 478, 479, 520, 478, 479, 521, 478, 
 -	479, 522, 478, 479, 523, 478, 479, 524, 
 -	478, 479, 509, 478, 479, 526, 478, 479, 
 -	527, 478, 479, 528, 478, 479, 529, 478, 
 -	479, 524, 478, 479, 531, 534, 478, 479, 
 -	532, 478, 479, 533, 533, 478, 479, 84, 
 -	494, 478, 479, 535, 478, 479, 536, 478, 
 -	479, 537, 478, 479, 538, 478, 479, 539, 
 -	478, 540, 479, 555, 478, 541, 479, 478, 
 -	542, 479, 478, 543, 479, 478, 479, 544, 
 -	478, 479, 545, 478, 479, 546, 478, 479, 
 -	547, 478, 479, 548, 478, 479, 549, 478, 
 -	479, 550, 478, 479, 551, 478, 552, 479, 
 -	478, 553, 479, 478, 479, 554, 478, 479, 
 -	524, 478, 479, 556, 478, 479, 557, 478, 
 -	479, 558, 478, 479, 559, 478, 479, 560, 
 -	478, 479, 561, 478, 479, 562, 478, 479, 
 -	563, 478, 479, 564, 478, 479, 553, 478, 
 -	479, 84, 566, 570, 478, 479, 567, 478, 
 -	568, 479, 569, 478, 569, 479, 478, 479, 
 -	494, 478, 479, 571, 478, 479, 572, 478, 
 -	479, 573, 478, 479, 574, 478, 479, 575, 
 -	478, 479, 576, 478, 479, 577, 478, 479, 
 -	578, 478, 479, 579, 478, 479, 580, 478, 
 -	479, 581, 478, 479, 582, 478, 552, 479, 
 -	553, 478, 479, 584, 478, 479, 585, 478, 
 -	479, 586, 524, 478, 479, 587, 478, 479, 
 -	588, 478, 479, 589, 478, 479, 590, 478, 
 -	479, 591, 478, 479, 592, 478, 479, 593, 
 -	478, 479, 594, 478, 479, 595, 478, 479, 
 -	509, 478, 479, 597, 478, 479, 494, 478, 
 -	479, 599, 478, 479, 600, 478, 479, 601, 
 -	478, 479, 569, 478, 603, 0, 604, 0, 
 -	605, 0, 606, 0, 258, 0, 0, 0
 -};
 -
 -static const unsigned char _lexer_trans_actions[] = {
 -	0, 54, 0, 5, 1, 0, 29, 1, 
 -	29, 29, 29, 29, 29, 29, 35, 0, 
 -	43, 0, 43, 0, 43, 54, 0, 5, 
 -	1, 0, 29, 1, 29, 29, 29, 29, 
 -	29, 29, 35, 0, 43, 0, 43, 0, 
 -	43, 139, 48, 9, 106, 11, 0, 134, 
 -	45, 45, 45, 3, 122, 33, 33, 33, 
 -	0, 122, 33, 33, 33, 0, 122, 33, 
 -	0, 33, 0, 102, 7, 7, 43, 54, 
 -	0, 0, 43, 114, 25, 0, 54, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 149, 126, 
 -	57, 110, 23, 0, 43, 43, 43, 43, 
 -	0, 27, 118, 27, 27, 51, 27, 0, 
 -	54, 0, 1, 0, 43, 0, 0, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 144, 57, 
 -	54, 0, 54, 0, 69, 33, 69, 84, 
 -	84, 84, 84, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 13, 0, 54, 
 -	0, 0, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 0, 54, 
 -	0, 0, 0, 54, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 13, 0, 130, 
 -	31, 60, 57, 31, 63, 57, 63, 63, 
 -	63, 63, 63, 63, 66, 31, 43, 0, 
 -	0, 43, 0, 43, 0, 0, 43, 0, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 144, 57, 54, 0, 54, 0, 78, 
 -	33, 84, 78, 84, 84, 84, 84, 84, 
 -	84, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 19, 0, 54, 19, 0, 
 -	54, 0, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 0, 54, 
 -	0, 0, 0, 54, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 19, 0, 54, 
 -	0, 0, 0, 54, 0, 0, 0, 54, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 0, 54, 19, 0, 0, 
 -	54, 19, 0, 0, 54, 0, 0, 0, 
 -	54, 0, 0, 0, 54, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 0, 
 -	0, 0, 43, 0, 43, 0, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 144, 57, 54, 
 -	0, 54, 0, 81, 84, 84, 81, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 0, 54, 
 -	0, 0, 0, 54, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 21, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 0, 43, 
 -	0, 43, 0, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 144, 57, 54, 
 -	0, 54, 0, 72, 33, 84, 72, 84, 
 -	84, 84, 84, 84, 84, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 15, 
 -	0, 54, 15, 0, 54, 0, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 0, 54, 0, 0, 0, 54, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 15, 0, 54, 0, 0, 0, 54, 
 -	0, 0, 0, 54, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	0, 54, 15, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 0, 54, 0, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 0, 54, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 15, 0, 0, 0, 54, 
 -	0, 0, 0, 54, 0, 0, 0, 54, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 0, 0, 43, 54, 37, 
 -	37, 87, 37, 37, 43, 0, 39, 0, 
 -	43, 0, 0, 54, 0, 0, 39, 0, 
 -	0, 54, 0, 93, 90, 41, 96, 90, 
 -	96, 96, 96, 96, 96, 96, 99, 0, 
 -	43, 54, 0, 0, 0, 54, 0, 0, 
 -	0, 54, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 13, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 0, 54, 0, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 0, 
 -	54, 0, 0, 54, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 0, 
 -	43, 0, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 0, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 144, 57, 
 -	54, 0, 54, 0, 75, 33, 84, 75, 
 -	84, 84, 84, 84, 84, 84, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	17, 0, 54, 17, 0, 54, 0, 0, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 0, 54, 0, 0, 
 -	0, 54, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 17, 0, 54, 0, 0, 
 -	0, 54, 0, 0, 0, 54, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 17, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 0, 54, 17, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 0, 54, 0, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 0, 54, 
 -	0, 0, 54, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 17, 0, 0, 0, 54, 0, 0, 
 -	0, 54, 0, 0, 0, 54, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 0
 -};
 -
 -static const unsigned char _lexer_eof_actions[] = {
 -	0, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43
 -};
 -
 -static const int lexer_start = 1;
 -static const int lexer_first_final = 607;
 -static const int lexer_error = 0;
 -
 -static const int lexer_en_main = 1;
 -
 -
 -#line 258 "ragel/i18n/pt.c.rl"
 -
 -static VALUE 
 -unindent(VALUE con, int start_col)
 -{
 -  VALUE re;
 -  /* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */
 -  char pat[32]; 
 -  snprintf(pat, 32, "^[\t ]{0,%d}", start_col); 
 -  re = rb_reg_regcomp(rb_str_new2(pat));
 -  rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2(""));
 -
 -  return Qnil;
 -
 -}
 -
 -static void 
 -store_kw_con(VALUE listener, const char * event_name, 
 -             const char * keyword_at, size_t keyword_length, 
 -             const char * at,         size_t length, 
 -             int current_line)
 -{
 -  VALUE con = Qnil, kw = Qnil;
 -  kw = ENCODED_STR_NEW(keyword_at, keyword_length);
 -  con = ENCODED_STR_NEW(at, length);
 -  rb_funcall(con, rb_intern("strip!"), 0);
 -  rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); 
 -}
 -
 -static void
 -store_multiline_kw_con(VALUE listener, const char * event_name,
 -                      const char * keyword_at, size_t keyword_length,
 -                      const char * at,         size_t length,
 -                      int current_line, int start_col)
 -{
 -  VALUE split;
 -  VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil;
 -
 -  kw = ENCODED_STR_NEW(keyword_at, keyword_length);
 -  con = ENCODED_STR_NEW(at, length);
 -
 -  unindent(con, start_col);
 -  
 -  split = rb_str_split(con, "\n");
 -
 -  name = rb_funcall(split, rb_intern("shift"), 0);
 -  desc = rb_ary_join(split, rb_str_new2( "\n" ));
 -
 -  if( name == Qnil ) 
 -  {
 -    name = rb_str_new2("");
 -  }
 -  if( rb_funcall(desc, rb_intern("size"), 0) == 0) 
 -  {
 -    desc = rb_str_new2("");
 -  }
 -  rb_funcall(name, rb_intern("strip!"), 0);
 -  rb_funcall(desc, rb_intern("rstrip!"), 0);
 -  rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); 
 -}
 -
 -static void 
 -store_attr(VALUE listener, const char * attr_type,
 -           const char * at, size_t length, 
 -           int line)
 -{
 -  VALUE val = ENCODED_STR_NEW(at, length);
 -  rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line));
 -}
 -static void 
 -store_docstring_content(VALUE listener, 
 -          int start_col, 
 -          const char *type_at, size_t type_length,
 -          const char *at, size_t length, 
 -          int current_line)
 -{
 -  VALUE re2;
 -  VALUE unescape_escaped_quotes;
 -  VALUE con = ENCODED_STR_NEW(at, length);
 -  VALUE con_type = ENCODED_STR_NEW(type_at, type_length);
 -
 -  unindent(con, start_col);
 -
 -  re2 = rb_reg_regcomp(rb_str_new2("\r\\Z"));
 -  unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\""));
 -  rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2(""));
 -  rb_funcall(con_type, rb_intern("strip!"), 0);
 -  rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\""));
 -  rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line));
 -}
 -static void 
 -raise_lexer_error(const char * at, int line)
 -{ 
 -  rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at);
 -}
 -
 -static void lexer_init(lexer_state *lexer) {
 -  lexer->content_start = 0;
 -  lexer->content_end = 0;
 -  lexer->content_len = 0;
 -  lexer->docstring_content_type_start = 0;
 -  lexer->docstring_content_type_end = 0;
 -  lexer->mark = 0;
 -  lexer->keyword_start = 0;
 -  lexer->keyword_end = 0;
 -  lexer->next_keyword_start = 0;
 -  lexer->line_number = 1;
 -  lexer->last_newline = 0;
 -  lexer->final_newline = 0;
 -  lexer->start_col = 0;
 -}
 -
 -static VALUE CLexer_alloc(VALUE klass)
 -{
 -  VALUE obj;
 -  lexer_state *lxr = ALLOC(lexer_state);
 -  lexer_init(lxr);
 -
 -  obj = Data_Wrap_Struct(klass, NULL, -1, lxr);
 -
 -  return obj;
 -}
 -
 -static VALUE CLexer_init(VALUE self, VALUE listener)
 -{
 -  lexer_state *lxr; 
 -  rb_iv_set(self, "@listener", listener);
 -  
 -  lxr = NULL;
 -  DATA_GET(self, lexer_state, lxr);
 -  lexer_init(lxr);
 -  
 -  return self;
 -}
 -
 -static VALUE CLexer_scan(VALUE self, VALUE input)
 -{
 -  VALUE input_copy;
 -  char *data;
 -  size_t len;
 -  VALUE listener = rb_iv_get(self, "@listener");
 -
 -  lexer_state *lexer;
 -  lexer = NULL;
 -  DATA_GET(self, lexer_state, lexer);
 -
 -  input_copy = rb_str_dup(input);
 -
 -  rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%"));
 -  data = RSTRING_PTR(input_copy);
 -  len = RSTRING_LEN(input_copy);
 -  
 -  if (len == 0) { 
 -    rb_raise(rb_eGherkinLexingError, "No content to lex.");
 -  } else {
 -
 -    const char *p, *pe, *eof;
 -    int cs = 0;
 -    
 -    VALUE current_row = Qnil;
 -
 -    p = data;
 -    pe = data + len;
 -    eof = pe;
 -    
 -    assert(*pe == '\0' && "pointer does not end on NULL");
 -    
 -    
 -#line 1315 "ext/gherkin_lexer_pt/gherkin_lexer_pt.c"
 -	{
 -	cs = lexer_start;
 -	}
 -
 -#line 425 "ragel/i18n/pt.c.rl"
 -    
 -#line 1322 "ext/gherkin_lexer_pt/gherkin_lexer_pt.c"
 -	{
 -	int _klen;
 -	unsigned int _trans;
 -	const char *_acts;
 -	unsigned int _nacts;
 -	const char *_keys;
 -
 -	if ( p == pe )
 -		goto _test_eof;
 -	if ( cs == 0 )
 -		goto _out;
 -_resume:
 -	_keys = _lexer_trans_keys + _lexer_key_offsets[cs];
 -	_trans = _lexer_index_offsets[cs];
 -
 -	_klen = _lexer_single_lengths[cs];
 -	if ( _klen > 0 ) {
 -		const char *_lower = _keys;
 -		const char *_mid;
 -		const char *_upper = _keys + _klen - 1;
 -		while (1) {
 -			if ( _upper < _lower )
 -				break;
 -
 -			_mid = _lower + ((_upper-_lower) >> 1);
 -			if ( (*p) < *_mid )
 -				_upper = _mid - 1;
 -			else if ( (*p) > *_mid )
 -				_lower = _mid + 1;
 -			else {
 -				_trans += (unsigned int)(_mid - _keys);
 -				goto _match;
 -			}
 -		}
 -		_keys += _klen;
 -		_trans += _klen;
 -	}
 -
 -	_klen = _lexer_range_lengths[cs];
 -	if ( _klen > 0 ) {
 -		const char *_lower = _keys;
 -		const char *_mid;
 -		const char *_upper = _keys + (_klen<<1) - 2;
 -		while (1) {
 -			if ( _upper < _lower )
 -				break;
 -
 -			_mid = _lower + (((_upper-_lower) >> 1) & ~1);
 -			if ( (*p) < _mid[0] )
 -				_upper = _mid - 2;
 -			else if ( (*p) > _mid[1] )
 -				_lower = _mid + 2;
 -			else {
 -				_trans += (unsigned int)((_mid - _keys)>>1);
 -				goto _match;
 -			}
 -		}
 -		_trans += _klen;
 -	}
 -
 -_match:
 -	cs = _lexer_trans_targs[_trans];
 -
 -	if ( _lexer_trans_actions[_trans] == 0 )
 -		goto _again;
 -
 -	_acts = _lexer_actions + _lexer_trans_actions[_trans];
 -	_nacts = (unsigned int) *_acts++;
 -	while ( _nacts-- > 0 )
 -	{
 -		switch ( *_acts++ )
 -		{
 -	case 0:
 -#line 83 "ragel/i18n/pt.c.rl"
 -	{
 -		MARK(content_start, p);
 -    lexer->current_line = lexer->line_number;
 -    lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2;
 -  }
 -	break;
 -	case 1:
 -#line 89 "ragel/i18n/pt.c.rl"
 -	{
 -    MARK(content_start, p);
 -  }
 -	break;
 -	case 2:
 -#line 93 "ragel/i18n/pt.c.rl"
 -	{
 -    lexer->current_line = lexer->line_number;
 -    lexer->start_col = p - data - lexer->last_newline;
 -  }
 -	break;
 -	case 3:
 -#line 98 "ragel/i18n/pt.c.rl"
 -	{
 -    int len = LEN(content_start, PTR_TO(final_newline));
 -    int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end));
 -
 -    if (len < 0) len = 0;
 -    if (type_len < 0) len = 0;
 -
 -    store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line);
 -  }
 -	break;
 -	case 4:
 -#line 108 "ragel/i18n/pt.c.rl"
 -	{ 
 -    MARK(docstring_content_type_start, p);
 -  }
 -	break;
 -	case 5:
 -#line 112 "ragel/i18n/pt.c.rl"
 -	{ 
 -    MARK(docstring_content_type_end, p);
 -  }
 -	break;
 -	case 6:
 -#line 116 "ragel/i18n/pt.c.rl"
 -	{
 -    STORE_KW_END_CON(feature);
 -  }
 -	break;
 -	case 7:
 -#line 120 "ragel/i18n/pt.c.rl"
 -	{
 -    STORE_KW_END_CON(background);
 -  }
 -	break;
 -	case 8:
 -#line 124 "ragel/i18n/pt.c.rl"
 -	{
 -    STORE_KW_END_CON(scenario);
 -  }
 -	break;
 -	case 9:
 -#line 128 "ragel/i18n/pt.c.rl"
 -	{
 -    STORE_KW_END_CON(scenario_outline);
 -  }
 -	break;
 -	case 10:
 -#line 132 "ragel/i18n/pt.c.rl"
 -	{
 -    STORE_KW_END_CON(examples);
 -  }
 -	break;
 -	case 11:
 -#line 136 "ragel/i18n/pt.c.rl"
 -	{
 -    store_kw_con(listener, "step",
 -      PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
 -      PTR_TO(content_start), LEN(content_start, p), 
 -      lexer->current_line);
 -  }
 -	break;
 -	case 12:
 -#line 143 "ragel/i18n/pt.c.rl"
 -	{
 -    STORE_ATTR(comment);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 13:
 -#line 148 "ragel/i18n/pt.c.rl"
 -	{
 -    STORE_ATTR(tag);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 14:
 -#line 153 "ragel/i18n/pt.c.rl"
 -	{
 -    lexer->line_number += 1;
 -    MARK(final_newline, p);
 -  }
 -	break;
 -	case 15:
 -#line 158 "ragel/i18n/pt.c.rl"
 -	{
 -    MARK(last_newline, p + 1);
 -  }
 -	break;
 -	case 16:
 -#line 162 "ragel/i18n/pt.c.rl"
 -	{
 -    if (lexer->mark == 0) {
 -      MARK(mark, p);
 -    }
 -  }
 -	break;
 -	case 17:
 -#line 168 "ragel/i18n/pt.c.rl"
 -	{
 -    MARK(keyword_end, p);
 -    MARK(keyword_start, PTR_TO(mark));
 -    MARK(content_start, p + 1);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 18:
 -#line 175 "ragel/i18n/pt.c.rl"
 -	{
 -    MARK(content_end, p);
 -  }
 -	break;
 -	case 19:
 -#line 179 "ragel/i18n/pt.c.rl"
 -	{
 -    p = p - 1;
 -    lexer->current_line = lexer->line_number;
 -    current_row = rb_ary_new();
 -  }
 -	break;
 -	case 20:
 -#line 185 "ragel/i18n/pt.c.rl"
 -	{
 -		MARK(content_start, p);
 -  }
 -	break;
 -	case 21:
 -#line 189 "ragel/i18n/pt.c.rl"
 -	{
 -    VALUE re_pipe, re_newline, re_backslash;
 -    VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
 -    rb_funcall(con, rb_intern("strip!"), 0);
 -    re_pipe      = rb_reg_regcomp(rb_str_new2("\\\\\\|"));
 -    re_newline   = rb_reg_regcomp(rb_str_new2("\\\\n"));
 -    re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_pipe,      rb_str_new2("|"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_newline,   rb_str_new2("\n"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\"));
 -
 -    rb_ary_push(current_row, con);
 -  }
 -	break;
 -	case 22:
 -#line 203 "ragel/i18n/pt.c.rl"
 -	{
 -    rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
 -  }
 -	break;
 -	case 23:
 -#line 207 "ragel/i18n/pt.c.rl"
 -	{
 -    int line;
 -    if (cs < lexer_first_final) {
 -      size_t count = 0;
 -      VALUE newstr_val;
 -      char *newstr;
 -      int newstr_count = 0;        
 -      size_t len;
 -      const char *buff;
 -      if (lexer->last_newline != 0) {
 -        len = LEN(last_newline, eof);
 -        buff = PTR_TO(last_newline);
 -      } else {
 -        len = strlen(data);
 -        buff = data;
 -      }
 -
 -      /* Allocate as a ruby string so that it gets cleaned up by GC */
 -      newstr_val = rb_str_new(buff, len);
 -      newstr = RSTRING_PTR(newstr_val);
 -
 -
 -      for (count = 0; count < len; count++) {
 -        if(buff[count] == 10) {
 -          newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
 -          break;
 -        } else {
 -          if (buff[count] == '%') {
 -            newstr[newstr_count++] = buff[count];
 -            newstr[newstr_count] = buff[count];
 -          } else {
 -            newstr[newstr_count] = buff[count];
 -          }
 -        }
 -        newstr_count++;
 -      }
 -
 -      line = lexer->line_number;
 -      lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
 -      raise_lexer_error(newstr, line);
 -    } else {
 -      rb_funcall(listener, rb_intern("eof"), 0);
 -    }
 -  }
 -	break;
 -#line 1612 "ext/gherkin_lexer_pt/gherkin_lexer_pt.c"
 -		}
 -	}
 -
 -_again:
 -	if ( cs == 0 )
 -		goto _out;
 -	if ( ++p != pe )
 -		goto _resume;
 -	_test_eof: {}
 -	if ( p == eof )
 -	{
 -	const char *__acts = _lexer_actions + _lexer_eof_actions[cs];
 -	unsigned int __nacts = (unsigned int) *__acts++;
 -	while ( __nacts-- > 0 ) {
 -		switch ( *__acts++ ) {
 -	case 23:
 -#line 207 "ragel/i18n/pt.c.rl"
 -	{
 -    int line;
 -    if (cs < lexer_first_final) {
 -      size_t count = 0;
 -      VALUE newstr_val;
 -      char *newstr;
 -      int newstr_count = 0;        
 -      size_t len;
 -      const char *buff;
 -      if (lexer->last_newline != 0) {
 -        len = LEN(last_newline, eof);
 -        buff = PTR_TO(last_newline);
 -      } else {
 -        len = strlen(data);
 -        buff = data;
 -      }
 -
 -      /* Allocate as a ruby string so that it gets cleaned up by GC */
 -      newstr_val = rb_str_new(buff, len);
 -      newstr = RSTRING_PTR(newstr_val);
 -
 -
 -      for (count = 0; count < len; count++) {
 -        if(buff[count] == 10) {
 -          newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
 -          break;
 -        } else {
 -          if (buff[count] == '%') {
 -            newstr[newstr_count++] = buff[count];
 -            newstr[newstr_count] = buff[count];
 -          } else {
 -            newstr[newstr_count] = buff[count];
 -          }
 -        }
 -        newstr_count++;
 -      }
 -
 -      line = lexer->line_number;
 -      lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
 -      raise_lexer_error(newstr, line);
 -    } else {
 -      rb_funcall(listener, rb_intern("eof"), 0);
 -    }
 -  }
 -	break;
 -#line 1675 "ext/gherkin_lexer_pt/gherkin_lexer_pt.c"
 -		}
 -	}
 -	}
 -
 -	_out: {}
 -	}
 -
 -#line 426 "ragel/i18n/pt.c.rl"
 -
 -    assert(p <= pe && "data overflow after parsing execute");
 -    assert(lexer->content_start <= len && "content starts after data end");
 -    assert(lexer->mark < len && "mark is after data end");
 -    
 -    /* Reset lexer by re-initializing the whole thing */
 -    lexer_init(lexer);
 -
 -    if (cs == lexer_error) {
 -      rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails.");
 -    } else {
 -      return Qtrue;
 -    }
 -  }
 -}
 -
 -void Init_gherkin_lexer_pt()
 -{
 -  mGherkin = rb_define_module("Gherkin");
 -  mGherkinLexer = rb_define_module_under(mGherkin, "Lexer");
 -  rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError"));
 -
 -  mCLexer = rb_define_module_under(mGherkin, "CLexer");
 -  cI18nLexer = rb_define_class_under(mCLexer, "Pt", rb_cObject);
 -  rb_define_alloc_func(cI18nLexer, CLexer_alloc);
 -  rb_define_method(cI18nLexer, "initialize", CLexer_init, 1);
 -  rb_define_method(cI18nLexer, "scan", CLexer_scan, 1);
 -}
 -
diff --cc ext/gherkin_lexer_ro/extconf.rb
index ccda920,ccda920..0000000
deleted file mode 100644,100644
--- a/ext/gherkin_lexer_ro/extconf.rb
+++ /dev/null
@@@ -1,6 -1,6 +1,0 @@@
--require 'mkmf'
--CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags']
--$CFLAGS << ' -O0 -Wall' if CONFIG['CC'] =~ /gcc|clang/
--dir_config("gherkin_lexer_ro")
--have_library("c", "main")
--create_makefile("gherkin_lexer_ro")
diff --cc ext/gherkin_lexer_ro/gherkin_lexer_ro.c
index aedbba3,5342796..0000000
deleted file mode 100644,100644
--- a/ext/gherkin_lexer_ro/gherkin_lexer_ro.c
+++ /dev/null
@@@ -1,1427 -1,1427 +1,0 @@@
--
- #line 1 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ro.c.rl"
- #include <assert.h>
- #include <ruby.h>
- 
- #if defined(_WIN32)
- #include <stddef.h>
- #endif
- 
- #ifdef HAVE_RUBY_RE_H
- #include <ruby/re.h>
- #else
- #include <re.h>
- #endif
- 
- #ifdef HAVE_RUBY_ENCODING_H
- #include <ruby/encoding.h>
- #define ENCODED_STR_NEW(ptr, len) \
-     rb_enc_str_new(ptr, len, rb_utf8_encoding())
- #else
- #define ENCODED_STR_NEW(ptr, len) \
-     rb_str_new(ptr, len)
- #endif
- 
- #ifndef RSTRING_PTR
- #define RSTRING_PTR(s) (RSTRING(s)->ptr)
- #endif
- 
- #ifndef RSTRING_LEN
- #define RSTRING_LEN(s) (RSTRING(s)->len)
- #endif
- 
- #define DATA_GET(FROM, TYPE, NAME) \
-   Data_Get_Struct(FROM, TYPE, NAME); \
-   if (NAME == NULL) { \
-     rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \
-   }
-  
- typedef struct lexer_state {
-   int content_len;
-   int line_number;
-   int current_line;
-   int start_col;
-   size_t mark;
-   size_t keyword_start;
-   size_t keyword_end;
-   size_t next_keyword_start;
-   size_t content_start;
-   size_t content_end;
-   size_t docstring_content_type_start;
-   size_t docstring_content_type_end;
-   size_t query_start;
-   size_t last_newline;
-   size_t final_newline;
- } lexer_state;
- 
- static VALUE mGherkin;
- static VALUE mGherkinLexer;
- static VALUE mCLexer;
- static VALUE cI18nLexer;
- static VALUE rb_eGherkinLexingError;
- 
- #define LEN(AT, P) (P - data - lexer->AT)
- #define MARK(M, P) (lexer->M = (P) - data)
- #define PTR_TO(P) (data + lexer->P)
- 
- #define STORE_KW_END_CON(EVENT) \
-   store_multiline_kw_con(listener, # EVENT, \
-     PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \
-     PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \
-     lexer->current_line, lexer->start_col); \
-     if (lexer->content_end != 0) { \
-       p = PTR_TO(content_end - 1); \
-     } \
-     lexer->content_end = 0
- 
- #define STORE_ATTR(ATTR) \
-     store_attr(listener, # ATTR, \
-       PTR_TO(content_start), LEN(content_start, p), \
-       lexer->line_number)
- 
- 
- #line 254 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ro.c.rl"
- 
- 
- /** Data **/
- 
- #line 89 "ext/gherkin_lexer_ro/gherkin_lexer_ro.c"
- static const char _lexer_actions[] = {
- 	0, 1, 0, 1, 1, 1, 2, 1, 
- 	3, 1, 4, 1, 5, 1, 6, 1, 
- 	7, 1, 8, 1, 9, 1, 10, 1, 
- 	11, 1, 12, 1, 13, 1, 16, 1, 
- 	17, 1, 18, 1, 19, 1, 20, 1, 
- 	21, 1, 22, 1, 23, 2, 1, 18, 
- 	2, 4, 5, 2, 13, 0, 2, 14, 
- 	15, 2, 17, 0, 2, 17, 2, 2, 
- 	17, 16, 2, 17, 19, 2, 18, 6, 
- 	2, 18, 7, 2, 18, 8, 2, 18, 
- 	9, 2, 18, 10, 2, 18, 16, 2, 
- 	20, 21, 2, 22, 0, 2, 22, 2, 
- 	2, 22, 16, 2, 22, 19, 3, 3, 
- 	14, 15, 3, 5, 14, 15, 3, 11, 
- 	14, 15, 3, 12, 14, 15, 3, 13, 
- 	14, 15, 3, 14, 15, 18, 3, 17, 
- 	0, 11, 3, 17, 14, 15, 4, 1, 
- 	14, 15, 18, 4, 4, 5, 14, 15, 
- 	4, 17, 0, 14, 15, 5, 17, 0, 
- 	11, 14, 15
- };
- 
- static const short _lexer_key_offsets[] = {
- 	0, 0, 19, 20, 21, 22, 24, 26, 
- 	44, 45, 46, 47, 49, 51, 56, 61, 
- 	66, 71, 75, 79, 81, 82, 83, 84, 
- 	85, 86, 87, 88, 89, 90, 91, 92, 
- 	93, 94, 95, 96, 101, 108, 113, 114, 
- 	115, 116, 117, 120, 121, 122, 123, 124, 
- 	125, 126, 127, 128, 129, 130, 131, 146, 
- 	148, 150, 152, 170, 171, 175, 176, 177, 
- 	178, 179, 180, 181, 182, 185, 186, 187, 
- 	188, 189, 190, 191, 192, 193, 194, 201, 
- 	203, 205, 207, 211, 213, 215, 217, 219, 
- 	221, 223, 225, 227, 229, 231, 233, 235, 
- 	237, 238, 239, 240, 243, 244, 245, 246, 
- 	247, 248, 249, 250, 251, 252, 253, 254, 
- 	255, 256, 257, 268, 270, 272, 274, 276, 
- 	278, 280, 282, 284, 286, 288, 290, 292, 
- 	294, 296, 298, 300, 302, 304, 306, 308, 
- 	310, 312, 314, 316, 318, 320, 322, 324, 
- 	326, 328, 332, 334, 336, 338, 340, 342, 
- 	344, 346, 348, 350, 352, 354, 357, 359, 
- 	361, 363, 365, 367, 369, 371, 373, 375, 
- 	377, 379, 381, 384, 386, 388, 390, 392, 
- 	393, 396, 397, 398, 399, 400, 401, 402, 
- 	403, 404, 405, 420, 422, 424, 426, 428, 
- 	430, 432, 434, 436, 438, 440, 442, 444, 
- 	446, 448, 450, 452, 454, 456, 458, 460, 
- 	462, 464, 468, 470, 472, 474, 476, 478, 
- 	480, 482, 484, 486, 488, 493, 495, 497, 
- 	499, 501, 503, 505, 507, 511, 513, 515, 
- 	517, 521, 523, 525, 527, 529, 531, 533, 
- 	535, 537, 539, 541, 543, 545, 549, 551, 
- 	553, 555, 557, 559, 561, 563, 565, 567, 
- 	569, 571, 573, 576, 578, 580, 582, 584, 
- 	585, 586, 587, 588, 589, 590, 592, 593, 
- 	594, 595, 596, 597, 598, 599, 600, 601, 
- 	602, 603, 604, 605, 620, 622, 624, 626, 
- 	628, 630, 632, 634, 636, 638, 640, 642, 
- 	644, 646, 648, 650, 652, 654, 656, 658, 
- 	660, 662, 664, 667, 669, 671, 673, 675, 
- 	680, 682, 684, 686, 688, 690, 692, 694, 
- 	698, 700, 702, 704, 708, 710, 712, 714, 
- 	716, 718, 720, 722, 724, 726, 728, 730, 
- 	732, 734, 737, 739, 741, 743, 745, 747, 
- 	749, 753, 759, 762, 764, 770, 788, 790, 
- 	792, 794, 796, 798, 800, 802, 804, 806, 
- 	808, 810, 812, 814, 816, 818, 820, 822, 
- 	824, 826, 829, 831, 833, 835, 837, 842, 
- 	844, 846, 848, 850, 852, 854, 856, 860, 
- 	862, 864, 866, 870, 872, 874, 876, 878, 
- 	880, 882, 884, 886, 888, 890, 892, 894, 
- 	896, 900, 902, 904, 906, 908, 910, 912, 
- 	914, 916, 918, 920, 922, 924, 927, 929, 
- 	931, 933, 935, 936, 937
- };
- 
- static const char _lexer_trans_keys[] = {
- 	-59, -56, -17, 10, 32, 34, 35, 37, 
- 	42, 64, 65, 67, 68, 69, 70, 83, 
- 	124, 9, 13, -98, 105, 32, 10, 13, 
- 	10, 13, -59, -56, 10, 32, 34, 35, 
- 	37, 42, 64, 65, 67, 68, 69, 70, 
- 	83, 124, 9, 13, -104, 34, 34, 10, 
- 	13, 10, 13, 10, 32, 34, 9, 13, 
- 	10, 32, 34, 9, 13, 10, 32, 34, 
- 	9, 13, 10, 32, 34, 9, 13, 10, 
- 	32, 9, 13, 10, 32, 9, 13, 10, 
- 	13, 10, 95, 70, 69, 65, 84, 85, 
- 	82, 69, 95, 69, 78, 68, 95, 37, 
- 	13, 32, 64, 9, 10, 9, 10, 13, 
- 	32, 64, 11, 12, 10, 32, 64, 9, 
- 	13, 116, 117, 110, 99, -61, 97, 111, 
- 	-94, 110, 100, 110, 116, 101, 120, 116, 
- 	58, 10, 10, -59, -56, 10, 32, 35, 
- 	37, 42, 64, 65, 67, 68, 70, 83, 
- 	9, 13, -98, 10, 10, 105, 10, 32, 
- 	-59, -56, 10, 32, 34, 35, 37, 42, 
- 	64, 65, 67, 68, 69, 70, 83, 124, 
- 	9, 13, 97, -59, -56, 114, 116, -93, 
- 	105, 32, 102, 105, 105, -101, 32, 101, 
- 	105, 120, 101, 109, 112, 108, 101, 58, 
- 	10, 10, 10, 32, 35, 70, 124, 9, 
- 	13, 10, 117, 10, 110, 10, 99, -59, 
- 	-56, 10, 116, -93, 10, 10, 105, 10, 
- 	111, 10, 110, 10, 97, 10, 108, 10, 
- 	105, 10, 116, 10, 97, 10, 116, 10, 
- 	101, 10, 58, -101, 10, 117, 110, 99, 
- 	-59, -56, 116, -93, 105, 111, 110, 97, 
- 	108, 105, 116, 97, 116, 101, 58, 10, 
- 	10, 10, 32, 35, 37, 64, 67, 69, 
- 	70, 83, 9, 13, 10, 95, 10, 70, 
- 	10, 69, 10, 65, 10, 84, 10, 85, 
- 	10, 82, 10, 69, 10, 95, 10, 69, 
- 	10, 78, 10, 68, 10, 95, 10, 37, 
- 	10, 111, 10, 110, 10, 116, 10, 101, 
- 	10, 120, 10, 116, 10, 58, 10, 120, 
- 	10, 101, 10, 109, 10, 112, 10, 108, 
- 	10, 101, 10, 117, 10, 110, 10, 99, 
- 	-59, -56, 10, 116, -93, 10, 10, 105, 
- 	10, 111, 10, 110, 10, 97, 10, 108, 
- 	10, 105, 10, 116, 10, 97, 10, 116, 
- 	-101, 10, 10, 99, 116, 10, 101, 10, 
- 	110, 10, 97, 10, 114, 10, 105, 10, 
- 	117, 10, 114, 10, 117, 10, 99, 10, 
- 	116, 10, 117, 10, 114, -60, 10, 97, 
- 	-125, 10, 10, 32, 10, 115, 10, 99, 
- 	-101, 99, 105, 116, 101, 110, 97, 114, 
- 	105, 117, 58, 10, 10, -59, -56, 10, 
- 	32, 35, 37, 42, 64, 65, 67, 68, 
- 	70, 83, 9, 13, -98, 10, 10, 105, 
- 	10, 32, -104, 10, 10, 95, 10, 70, 
- 	10, 69, 10, 65, 10, 84, 10, 85, 
- 	10, 82, 10, 69, 10, 95, 10, 69, 
- 	10, 78, 10, 68, 10, 95, 10, 37, 
- 	10, 116, 10, 117, 10, 110, 10, 99, 
- 	-61, 10, 97, 111, -94, 10, 10, 110, 
- 	10, 100, 10, 110, 10, 116, 10, 101, 
- 	10, 120, 10, 116, 10, 58, 10, 97, 
- 	-59, -56, 10, 114, 116, -93, 10, 10, 
- 	105, 10, 32, 10, 102, 10, 105, 10, 
- 	105, -101, 10, 10, 32, 101, 105, 10, 
- 	117, 10, 110, 10, 99, -59, -56, 10, 
- 	116, -93, 10, 10, 105, 10, 111, 10, 
- 	110, 10, 97, 10, 108, 10, 105, 10, 
- 	116, 10, 97, 10, 116, 10, 101, -101, 
- 	10, 10, 99, 105, 116, 10, 101, 10, 
- 	110, 10, 97, 10, 114, 10, 105, 10, 
- 	117, 10, 114, 10, 117, 10, 99, 10, 
- 	116, 10, 117, 10, 114, -60, 10, 97, 
- 	-125, 10, 10, 32, 10, 115, 10, 99, 
- 	114, 117, 99, 116, 117, 114, -60, 97, 
- 	-125, 32, 115, 99, 101, 110, 97, 114, 
- 	105, 117, 58, 10, 10, -59, -56, 10, 
- 	32, 35, 37, 42, 64, 65, 67, 68, 
- 	70, 83, 9, 13, -98, 10, 10, 105, 
- 	10, 32, -104, 10, 10, 95, 10, 70, 
- 	10, 69, 10, 65, 10, 84, 10, 85, 
- 	10, 82, 10, 69, 10, 95, 10, 69, 
- 	10, 78, 10, 68, 10, 95, 10, 37, 
- 	10, 116, 10, 117, 10, 110, 10, 99, 
- 	-61, 10, 97, -94, 10, 10, 110, 10, 
- 	100, 10, 97, -59, -56, 10, 114, 116, 
- 	-93, 10, 10, 105, 10, 32, 10, 102, 
- 	10, 105, 10, 105, -101, 10, 10, 32, 
- 	101, 105, 10, 117, 10, 110, 10, 99, 
- 	-59, -56, 10, 116, -93, 10, 10, 105, 
- 	10, 111, 10, 110, 10, 97, 10, 108, 
- 	10, 105, 10, 116, 10, 97, 10, 116, 
- 	10, 101, 10, 58, -101, 10, 10, 99, 
- 	105, 10, 101, 10, 110, 10, 97, 10, 
- 	114, 10, 105, 10, 117, 32, 124, 9, 
- 	13, 10, 32, 92, 124, 9, 13, 10, 
- 	92, 124, 10, 92, 10, 32, 92, 124, 
- 	9, 13, -59, -56, 10, 32, 34, 35, 
- 	37, 42, 64, 65, 67, 68, 69, 70, 
- 	83, 124, 9, 13, -104, 10, 10, 95, 
- 	10, 70, 10, 69, 10, 65, 10, 84, 
- 	10, 85, 10, 82, 10, 69, 10, 95, 
- 	10, 69, 10, 78, 10, 68, 10, 95, 
- 	10, 37, 10, 116, 10, 117, 10, 110, 
- 	10, 99, -61, 10, 97, -94, 10, 10, 
- 	110, 10, 100, 10, 97, -59, -56, 10, 
- 	114, 116, -93, 10, 10, 105, 10, 32, 
- 	10, 102, 10, 105, 10, 105, -101, 10, 
- 	10, 32, 101, 105, 10, 117, 10, 110, 
- 	10, 99, -59, -56, 10, 116, -93, 10, 
- 	10, 105, 10, 111, 10, 110, 10, 97, 
- 	10, 108, 10, 105, 10, 116, 10, 97, 
- 	10, 116, 10, 101, 10, 58, -101, 10, 
- 	10, 99, 105, 116, 10, 101, 10, 110, 
- 	10, 97, 10, 114, 10, 105, 10, 117, 
- 	10, 114, 10, 117, 10, 99, 10, 116, 
- 	10, 117, 10, 114, -60, 10, 97, -125, 
- 	10, 10, 32, 10, 115, 10, 99, -69, 
- 	-65, 0
- };
- 
- static const char _lexer_single_lengths[] = {
- 	0, 17, 1, 1, 1, 2, 2, 16, 
- 	1, 1, 1, 2, 2, 3, 3, 3, 
- 	3, 2, 2, 2, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 3, 5, 3, 1, 1, 
- 	1, 1, 3, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 13, 2, 
- 	2, 2, 16, 1, 4, 1, 1, 1, 
- 	1, 1, 1, 1, 3, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 5, 2, 
- 	2, 2, 4, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	1, 1, 1, 3, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 9, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 4, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 3, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 3, 2, 2, 2, 2, 1, 
- 	3, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 13, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 4, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 5, 2, 2, 2, 
- 	2, 2, 2, 2, 4, 2, 2, 2, 
- 	4, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 4, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 3, 2, 2, 2, 2, 1, 
- 	1, 1, 1, 1, 1, 2, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 13, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 3, 2, 2, 2, 2, 5, 
- 	2, 2, 2, 2, 2, 2, 2, 4, 
- 	2, 2, 2, 4, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 3, 2, 2, 2, 2, 2, 2, 
- 	2, 4, 3, 2, 4, 16, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 3, 2, 2, 2, 2, 5, 2, 
- 	2, 2, 2, 2, 2, 2, 4, 2, 
- 	2, 2, 4, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	4, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 3, 2, 2, 
- 	2, 2, 1, 1, 0
- };
- 
- static const char _lexer_range_lengths[] = {
- 	0, 1, 0, 0, 0, 0, 0, 1, 
- 	0, 0, 0, 0, 0, 1, 1, 1, 
- 	1, 1, 1, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 1, 1, 1, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 1, 0, 
- 	0, 0, 1, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 1, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 1, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 1, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 1, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	1, 1, 0, 0, 1, 1, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0
- };
- 
- static const short _lexer_index_offsets[] = {
- 	0, 0, 19, 21, 23, 25, 28, 31, 
- 	49, 51, 53, 55, 58, 61, 66, 71, 
- 	76, 81, 85, 89, 92, 94, 96, 98, 
- 	100, 102, 104, 106, 108, 110, 112, 114, 
- 	116, 118, 120, 122, 127, 134, 139, 141, 
- 	143, 145, 147, 151, 153, 155, 157, 159, 
- 	161, 163, 165, 167, 169, 171, 173, 188, 
- 	191, 194, 197, 215, 217, 222, 224, 226, 
- 	228, 230, 232, 234, 236, 240, 242, 244, 
- 	246, 248, 250, 252, 254, 256, 258, 265, 
- 	268, 271, 274, 279, 282, 285, 288, 291, 
- 	294, 297, 300, 303, 306, 309, 312, 315, 
- 	318, 320, 322, 324, 328, 330, 332, 334, 
- 	336, 338, 340, 342, 344, 346, 348, 350, 
- 	352, 354, 356, 367, 370, 373, 376, 379, 
- 	382, 385, 388, 391, 394, 397, 400, 403, 
- 	406, 409, 412, 415, 418, 421, 424, 427, 
- 	430, 433, 436, 439, 442, 445, 448, 451, 
- 	454, 457, 462, 465, 468, 471, 474, 477, 
- 	480, 483, 486, 489, 492, 495, 499, 502, 
- 	505, 508, 511, 514, 517, 520, 523, 526, 
- 	529, 532, 535, 539, 542, 545, 548, 551, 
- 	553, 557, 559, 561, 563, 565, 567, 569, 
- 	571, 573, 575, 590, 593, 596, 599, 602, 
- 	605, 608, 611, 614, 617, 620, 623, 626, 
- 	629, 632, 635, 638, 641, 644, 647, 650, 
- 	653, 656, 661, 664, 667, 670, 673, 676, 
- 	679, 682, 685, 688, 691, 697, 700, 703, 
- 	706, 709, 712, 715, 718, 723, 726, 729, 
- 	732, 737, 740, 743, 746, 749, 752, 755, 
- 	758, 761, 764, 767, 770, 773, 778, 781, 
- 	784, 787, 790, 793, 796, 799, 802, 805, 
- 	808, 811, 814, 818, 821, 824, 827, 830, 
- 	832, 834, 836, 838, 840, 842, 845, 847, 
- 	849, 851, 853, 855, 857, 859, 861, 863, 
- 	865, 867, 869, 871, 886, 889, 892, 895, 
- 	898, 901, 904, 907, 910, 913, 916, 919, 
- 	922, 925, 928, 931, 934, 937, 940, 943, 
- 	946, 949, 952, 956, 959, 962, 965, 968, 
- 	974, 977, 980, 983, 986, 989, 992, 995, 
- 	1000, 1003, 1006, 1009, 1014, 1017, 1020, 1023, 
- 	1026, 1029, 1032, 1035, 1038, 1041, 1044, 1047, 
- 	1050, 1053, 1057, 1060, 1063, 1066, 1069, 1072, 
- 	1075, 1079, 1085, 1089, 1092, 1098, 1116, 1119, 
- 	1122, 1125, 1128, 1131, 1134, 1137, 1140, 1143, 
- 	1146, 1149, 1152, 1155, 1158, 1161, 1164, 1167, 
- 	1170, 1173, 1177, 1180, 1183, 1186, 1189, 1195, 
- 	1198, 1201, 1204, 1207, 1210, 1213, 1216, 1221, 
- 	1224, 1227, 1230, 1235, 1238, 1241, 1244, 1247, 
- 	1250, 1253, 1256, 1259, 1262, 1265, 1268, 1271, 
- 	1274, 1279, 1282, 1285, 1288, 1291, 1294, 1297, 
- 	1300, 1303, 1306, 1309, 1312, 1315, 1319, 1322, 
- 	1325, 1328, 1331, 1333, 1335
- };
- 
- static const short _lexer_trans_targs[] = {
- 	2, 8, 418, 7, 7, 9, 19, 21, 
- 	4, 35, 38, 42, 59, 69, 96, 176, 
- 	344, 7, 0, 3, 0, 4, 0, 5, 
- 	0, 7, 20, 6, 7, 20, 6, 2, 
- 	8, 7, 7, 9, 19, 21, 4, 35, 
- 	38, 42, 59, 69, 96, 176, 344, 7, 
- 	0, 3, 0, 10, 0, 11, 0, 13, 
- 	12, 12, 13, 12, 12, 14, 14, 15, 
- 	14, 14, 14, 14, 15, 14, 14, 14, 
- 	14, 16, 14, 14, 14, 14, 17, 14, 
- 	14, 7, 18, 18, 0, 7, 18, 18, 
- 	0, 7, 20, 19, 7, 0, 22, 0, 
- 	23, 0, 24, 0, 25, 0, 26, 0, 
- 	27, 0, 28, 0, 29, 0, 30, 0, 
- 	31, 0, 32, 0, 33, 0, 34, 0, 
- 	420, 0, 0, 0, 0, 0, 36, 37, 
- 	7, 37, 37, 35, 36, 36, 7, 37, 
- 	35, 37, 0, 39, 0, 40, 0, 41, 
- 	0, 3, 0, 43, 44, 46, 0, 44, 
- 	0, 45, 0, 4, 0, 47, 0, 48, 
- 	0, 49, 0, 50, 0, 51, 0, 52, 
- 	0, 54, 53, 54, 53, 55, 350, 54, 
- 	54, 7, 351, 57, 7, 365, 369, 373, 
- 	383, 400, 54, 53, 56, 54, 53, 54, 
- 	57, 53, 54, 58, 53, 2, 8, 7, 
- 	7, 9, 19, 21, 4, 35, 38, 42, 
- 	59, 69, 96, 176, 344, 7, 0, 60, 
- 	0, 61, 67, 4, 68, 0, 62, 0, 
- 	63, 0, 64, 0, 65, 0, 66, 0, 
- 	44, 0, 62, 0, 64, 63, 63, 0, 
- 	70, 0, 71, 0, 72, 0, 73, 0, 
- 	74, 0, 75, 0, 76, 0, 78, 77, 
- 	78, 77, 78, 78, 7, 79, 7, 78, 
- 	77, 78, 80, 77, 78, 81, 77, 78, 
- 	82, 77, 83, 95, 78, 84, 77, 84, 
- 	78, 77, 78, 85, 77, 78, 86, 77, 
- 	78, 87, 77, 78, 88, 77, 78, 89, 
- 	77, 78, 90, 77, 78, 91, 77, 78, 
- 	92, 77, 78, 93, 77, 78, 94, 77, 
- 	78, 58, 77, 84, 78, 77, 97, 0, 
- 	98, 0, 99, 0, 100, 175, 101, 0, 
- 	101, 0, 102, 0, 103, 0, 104, 0, 
- 	105, 0, 106, 0, 107, 0, 108, 0, 
- 	109, 0, 110, 0, 111, 0, 112, 0, 
- 	114, 113, 114, 113, 114, 114, 7, 115, 
- 	7, 129, 136, 142, 157, 114, 113, 114, 
- 	116, 113, 114, 117, 113, 114, 118, 113, 
- 	114, 119, 113, 114, 120, 113, 114, 121, 
- 	113, 114, 122, 113, 114, 123, 113, 114, 
- 	124, 113, 114, 125, 113, 114, 126, 113, 
- 	114, 127, 113, 114, 128, 113, 114, 7, 
- 	113, 114, 130, 113, 114, 131, 113, 114, 
- 	132, 113, 114, 133, 113, 114, 134, 113, 
- 	114, 135, 113, 114, 58, 113, 114, 137, 
- 	113, 114, 138, 113, 114, 139, 113, 114, 
- 	140, 113, 114, 141, 113, 114, 135, 113, 
- 	114, 143, 113, 114, 144, 113, 114, 145, 
- 	113, 146, 156, 114, 147, 113, 147, 114, 
- 	113, 114, 148, 113, 114, 149, 113, 114, 
- 	150, 113, 114, 151, 113, 114, 152, 113, 
- 	114, 153, 113, 114, 154, 113, 114, 155, 
- 	113, 114, 141, 113, 147, 114, 113, 114, 
- 	158, 164, 113, 114, 159, 113, 114, 160, 
- 	113, 114, 161, 113, 114, 162, 113, 114, 
- 	163, 113, 114, 135, 113, 114, 165, 113, 
- 	114, 166, 113, 114, 167, 113, 114, 168, 
- 	113, 114, 169, 113, 114, 170, 113, 171, 
- 	114, 172, 113, 172, 114, 113, 114, 173, 
- 	113, 114, 174, 113, 114, 158, 113, 101, 
- 	0, 177, 4, 263, 0, 178, 0, 179, 
- 	0, 180, 0, 181, 0, 182, 0, 183, 
- 	0, 184, 0, 186, 185, 186, 185, 187, 
- 	190, 186, 186, 7, 191, 189, 7, 205, 
- 	209, 219, 229, 245, 186, 185, 188, 186, 
- 	185, 186, 189, 185, 186, 58, 185, 188, 
- 	186, 185, 186, 192, 185, 186, 193, 185, 
- 	186, 194, 185, 186, 195, 185, 186, 196, 
- 	185, 186, 197, 185, 186, 198, 185, 186, 
- 	199, 185, 186, 200, 185, 186, 201, 185, 
- 	186, 202, 185, 186, 203, 185, 186, 204, 
- 	185, 186, 7, 185, 186, 206, 185, 186, 
- 	207, 185, 186, 208, 185, 186, 188, 185, 
- 	210, 186, 211, 213, 185, 211, 186, 185, 
- 	186, 212, 185, 186, 189, 185, 186, 214, 
- 	185, 186, 215, 185, 186, 216, 185, 186, 
- 	217, 185, 186, 218, 185, 186, 58, 185, 
- 	186, 220, 185, 221, 227, 186, 189, 228, 
- 	185, 222, 186, 185, 186, 223, 185, 186, 
- 	224, 185, 186, 225, 185, 186, 226, 185, 
- 	186, 211, 185, 222, 186, 185, 186, 224, 
- 	223, 223, 185, 186, 230, 185, 186, 231, 
- 	185, 186, 232, 185, 233, 244, 186, 234, 
- 	185, 234, 186, 185, 186, 235, 185, 186, 
- 	236, 185, 186, 237, 185, 186, 238, 185, 
- 	186, 239, 185, 186, 240, 185, 186, 241, 
- 	185, 186, 242, 185, 186, 243, 185, 186, 
- 	218, 185, 234, 186, 185, 186, 246, 189, 
- 	252, 185, 186, 247, 185, 186, 248, 185, 
- 	186, 249, 185, 186, 250, 185, 186, 251, 
- 	185, 186, 218, 185, 186, 253, 185, 186, 
- 	254, 185, 186, 255, 185, 186, 256, 185, 
- 	186, 257, 185, 186, 258, 185, 259, 186, 
- 	260, 185, 260, 186, 185, 186, 261, 185, 
- 	186, 262, 185, 186, 246, 185, 264, 0, 
- 	265, 0, 266, 0, 267, 0, 268, 0, 
- 	269, 0, 270, 271, 0, 271, 0, 272, 
- 	0, 273, 0, 274, 0, 275, 0, 276, 
- 	0, 277, 0, 278, 0, 279, 0, 280, 
- 	0, 281, 0, 283, 282, 283, 282, 284, 
- 	287, 283, 283, 7, 288, 286, 7, 302, 
- 	306, 310, 320, 337, 283, 282, 285, 283, 
- 	282, 283, 286, 282, 283, 58, 282, 285, 
- 	283, 282, 283, 289, 282, 283, 290, 282, 
- 	283, 291, 282, 283, 292, 282, 283, 293, 
- 	282, 283, 294, 282, 283, 295, 282, 283, 
- 	296, 282, 283, 297, 282, 283, 298, 282, 
- 	283, 299, 282, 283, 300, 282, 283, 301, 
- 	282, 283, 7, 282, 283, 303, 282, 283, 
- 	304, 282, 283, 305, 282, 283, 285, 282, 
- 	307, 283, 308, 282, 308, 283, 282, 283, 
- 	309, 282, 283, 286, 282, 283, 311, 282, 
- 	312, 318, 283, 286, 319, 282, 313, 283, 
- 	282, 283, 314, 282, 283, 315, 282, 283, 
- 	316, 282, 283, 317, 282, 283, 308, 282, 
- 	313, 283, 282, 283, 315, 314, 314, 282, 
- 	283, 321, 282, 283, 322, 282, 283, 323, 
- 	282, 324, 336, 283, 325, 282, 325, 283, 
- 	282, 283, 326, 282, 283, 327, 282, 283, 
- 	328, 282, 283, 329, 282, 283, 330, 282, 
- 	283, 331, 282, 283, 332, 282, 283, 333, 
- 	282, 283, 334, 282, 283, 335, 282, 283, 
- 	58, 282, 325, 283, 282, 283, 338, 286, 
- 	282, 283, 339, 282, 283, 340, 282, 283, 
- 	341, 282, 283, 342, 282, 283, 343, 282, 
- 	283, 335, 282, 344, 345, 344, 0, 349, 
- 	348, 347, 345, 348, 346, 0, 347, 345, 
- 	346, 0, 347, 346, 349, 348, 347, 345, 
- 	348, 346, 2, 8, 349, 349, 9, 19, 
- 	21, 4, 35, 38, 42, 59, 69, 96, 
- 	176, 344, 349, 0, 56, 54, 53, 54, 
- 	352, 53, 54, 353, 53, 54, 354, 53, 
- 	54, 355, 53, 54, 356, 53, 54, 357, 
- 	53, 54, 358, 53, 54, 359, 53, 54, 
- 	360, 53, 54, 361, 53, 54, 362, 53, 
- 	54, 363, 53, 54, 364, 53, 54, 7, 
- 	53, 54, 366, 53, 54, 367, 53, 54, 
- 	368, 53, 54, 56, 53, 370, 54, 371, 
- 	53, 371, 54, 53, 54, 372, 53, 54, 
- 	57, 53, 54, 374, 53, 375, 381, 54, 
- 	57, 382, 53, 376, 54, 53, 54, 377, 
- 	53, 54, 378, 53, 54, 379, 53, 54, 
- 	380, 53, 54, 371, 53, 376, 54, 53, 
- 	54, 378, 377, 377, 53, 54, 384, 53, 
- 	54, 385, 53, 54, 386, 53, 387, 399, 
- 	54, 388, 53, 388, 54, 53, 54, 389, 
- 	53, 54, 390, 53, 54, 391, 53, 54, 
- 	392, 53, 54, 393, 53, 54, 394, 53, 
- 	54, 395, 53, 54, 396, 53, 54, 397, 
- 	53, 54, 398, 53, 54, 58, 53, 388, 
- 	54, 53, 54, 401, 57, 407, 53, 54, 
- 	402, 53, 54, 403, 53, 54, 404, 53, 
- 	54, 405, 53, 54, 406, 53, 54, 398, 
- 	53, 54, 408, 53, 54, 409, 53, 54, 
- 	410, 53, 54, 411, 53, 54, 412, 53, 
- 	54, 413, 53, 414, 54, 415, 53, 415, 
- 	54, 53, 54, 416, 53, 54, 417, 53, 
- 	54, 401, 53, 419, 0, 7, 0, 0, 
- 	0
- };
- 
- static const unsigned char _lexer_trans_actions[] = {
- 	29, 29, 0, 54, 0, 5, 1, 0, 
- 	29, 1, 29, 29, 29, 29, 29, 29, 
- 	35, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 149, 126, 57, 110, 23, 0, 29, 
- 	29, 54, 0, 5, 1, 0, 29, 1, 
- 	29, 29, 29, 29, 29, 29, 35, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 139, 
- 	48, 9, 106, 11, 0, 134, 45, 45, 
- 	45, 3, 122, 33, 33, 33, 0, 122, 
- 	33, 33, 33, 0, 122, 33, 0, 33, 
- 	0, 102, 7, 7, 43, 54, 0, 0, 
- 	43, 114, 25, 0, 54, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 43, 43, 43, 43, 0, 27, 
- 	118, 27, 27, 51, 27, 0, 54, 0, 
- 	1, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 0, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 144, 57, 54, 0, 84, 84, 54, 
- 	0, 72, 33, 84, 72, 84, 84, 84, 
- 	84, 84, 0, 0, 0, 54, 0, 54, 
- 	0, 0, 54, 15, 0, 63, 63, 130, 
- 	31, 60, 57, 31, 63, 57, 63, 63, 
- 	63, 63, 63, 63, 66, 31, 43, 0, 
- 	43, 0, 0, 0, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 0, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 144, 57, 
- 	54, 0, 54, 0, 81, 84, 81, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 0, 0, 54, 0, 0, 0, 
- 	54, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 21, 0, 0, 54, 0, 0, 43, 
- 	0, 43, 0, 43, 0, 0, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	144, 57, 54, 0, 54, 0, 69, 33, 
- 	69, 84, 84, 84, 84, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 13, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 13, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 0, 0, 54, 0, 0, 0, 54, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 0, 54, 0, 54, 
- 	0, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 0, 
- 	54, 0, 0, 0, 54, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 0, 
- 	43, 0, 0, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 144, 57, 54, 0, 84, 
- 	84, 54, 0, 75, 33, 84, 75, 84, 
- 	84, 84, 84, 84, 0, 0, 0, 54, 
- 	0, 54, 0, 0, 54, 17, 0, 0, 
- 	54, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 17, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	0, 54, 0, 0, 0, 0, 54, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 17, 0, 
- 	54, 0, 0, 0, 0, 54, 0, 0, 
- 	0, 0, 54, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 0, 54, 0, 54, 0, 
- 	0, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 0, 0, 54, 0, 
- 	0, 0, 54, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 0, 54, 0, 54, 0, 0, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 0, 54, 
- 	0, 0, 0, 54, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 144, 57, 54, 0, 84, 
- 	84, 54, 0, 78, 33, 84, 78, 84, 
- 	84, 84, 84, 84, 0, 0, 0, 54, 
- 	0, 54, 0, 0, 54, 19, 0, 0, 
- 	54, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 19, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	0, 54, 0, 0, 0, 54, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	0, 0, 54, 0, 0, 0, 0, 54, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	0, 54, 0, 54, 0, 0, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 0, 0, 54, 0, 0, 0, 54, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	19, 0, 0, 54, 0, 54, 0, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 0, 0, 0, 43, 54, 
- 	37, 37, 87, 37, 37, 43, 0, 39, 
- 	0, 43, 0, 0, 54, 0, 0, 39, 
- 	0, 0, 96, 96, 54, 0, 93, 90, 
- 	41, 96, 90, 96, 96, 96, 96, 96, 
- 	96, 99, 0, 43, 0, 54, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 15, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 0, 54, 0, 
- 	0, 0, 54, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 0, 0, 54, 
- 	0, 0, 0, 0, 54, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 0, 54, 0, 
- 	54, 0, 0, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 0, 0, 
- 	54, 0, 0, 0, 54, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 15, 0, 0, 
- 	54, 0, 54, 0, 0, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 0, 54, 0, 0, 0, 
- 	54, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 0, 43, 0, 43, 0, 
- 	0
- };
- 
- static const unsigned char _lexer_eof_actions[] = {
- 	0, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43
- };
- 
- static const int lexer_start = 1;
- static const int lexer_first_final = 420;
- static const int lexer_error = 0;
- 
- static const int lexer_en_main = 1;
- 
- 
- #line 258 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ro.c.rl"
- 
- static VALUE 
- unindent(VALUE con, int start_col)
- {
-   VALUE re;
-   // Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters
-   char pat[32]; 
-   snprintf(pat, 32, "^[\t ]{0,%d}", start_col); 
-   re = rb_reg_regcomp(rb_str_new2(pat));
-   rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2(""));
- 
-   return Qnil;
- 
- }
- 
- static void 
- store_kw_con(VALUE listener, const char * event_name, 
-              const char * keyword_at, size_t keyword_length, 
-              const char * at,         size_t length, 
-              int current_line)
- {
-   VALUE con = Qnil, kw = Qnil;
-   kw = ENCODED_STR_NEW(keyword_at, keyword_length);
-   con = ENCODED_STR_NEW(at, length);
-   rb_funcall(con, rb_intern("strip!"), 0);
-   rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); 
- }
- 
- static void
- store_multiline_kw_con(VALUE listener, const char * event_name,
-                       const char * keyword_at, size_t keyword_length,
-                       const char * at,         size_t length,
-                       int current_line, int start_col)
- {
-   VALUE split;
-   VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil;
- 
-   kw = ENCODED_STR_NEW(keyword_at, keyword_length);
-   con = ENCODED_STR_NEW(at, length);
- 
-   unindent(con, start_col);
-   
-   split = rb_str_split(con, "\n");
- 
-   name = rb_funcall(split, rb_intern("shift"), 0);
-   desc = rb_ary_join(split, rb_str_new2( "\n" ));
- 
-   if( name == Qnil ) 
-   {
-     name = rb_str_new2("");
-   }
-   if( rb_funcall(desc, rb_intern("size"), 0) == 0) 
-   {
-     desc = rb_str_new2("");
-   }
-   rb_funcall(name, rb_intern("strip!"), 0);
-   rb_funcall(desc, rb_intern("rstrip!"), 0);
-   rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); 
- }
- 
- static void 
- store_attr(VALUE listener, const char * attr_type,
-            const char * at, size_t length, 
-            int line)
- {
-   VALUE val = ENCODED_STR_NEW(at, length);
-   rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line));
- }
- static void 
- store_docstring_content(VALUE listener, 
-           int start_col, 
-           const char *type_at, size_t type_length,
-           const char *at, size_t length, 
-           int current_line)
- {
-   VALUE re2;
-   VALUE unescape_escaped_quotes;
-   VALUE con = ENCODED_STR_NEW(at, length);
-   VALUE con_type = ENCODED_STR_NEW(type_at, type_length);
- 
-   unindent(con, start_col);
- 
-   re2 = rb_reg_regcomp(rb_str_new2("\r\\Z"));
-   unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\""));
-   rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2(""));
-   rb_funcall(con_type, rb_intern("strip!"), 0);
-   rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\""));
-   rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line));
- }
- static void 
- raise_lexer_error(const char * at, int line)
- { 
-   rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at);
- }
- 
- static void lexer_init(lexer_state *lexer) {
-   lexer->content_start = 0;
-   lexer->content_end = 0;
-   lexer->content_len = 0;
-   lexer->docstring_content_type_start = 0;
-   lexer->docstring_content_type_end = 0;
-   lexer->mark = 0;
-   lexer->keyword_start = 0;
-   lexer->keyword_end = 0;
-   lexer->next_keyword_start = 0;
-   lexer->line_number = 1;
-   lexer->last_newline = 0;
-   lexer->final_newline = 0;
-   lexer->start_col = 0;
- }
- 
- static VALUE CLexer_alloc(VALUE klass)
- {
-   VALUE obj;
-   lexer_state *lxr = ALLOC(lexer_state);
-   lexer_init(lxr);
- 
-   obj = Data_Wrap_Struct(klass, NULL, -1, lxr);
- 
-   return obj;
- }
- 
- static VALUE CLexer_init(VALUE self, VALUE listener)
- {
-   lexer_state *lxr; 
-   rb_iv_set(self, "@listener", listener);
-   
-   lxr = NULL;
-   DATA_GET(self, lexer_state, lxr);
-   lexer_init(lxr);
-   
-   return self;
- }
- 
- static VALUE CLexer_scan(VALUE self, VALUE input)
- {
-   VALUE input_copy;
-   char *data;
-   size_t len;
-   VALUE listener = rb_iv_get(self, "@listener");
- 
-   lexer_state *lexer;
-   lexer = NULL;
-   DATA_GET(self, lexer_state, lexer);
- 
-   input_copy = rb_str_dup(input);
- 
-   rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%"));
-   data = RSTRING_PTR(input_copy);
-   len = RSTRING_LEN(input_copy);
-   
-   if (len == 0) { 
-     rb_raise(rb_eGherkinLexingError, "No content to lex.");
-   } else {
- 
-     const char *p, *pe, *eof;
-     int cs = 0;
-     
-     VALUE current_row = Qnil;
- 
-     p = data;
-     pe = data + len;
-     eof = pe;
-     
-     assert(*pe == '\0' && "pointer does not end on NULL");
-     
-     
- #line 1031 "ext/gherkin_lexer_ro/gherkin_lexer_ro.c"
- 	{
- 	cs = lexer_start;
- 	}
- 
- #line 425 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ro.c.rl"
-     
- #line 1038 "ext/gherkin_lexer_ro/gherkin_lexer_ro.c"
- 	{
- 	int _klen;
- 	unsigned int _trans;
- 	const char *_acts;
- 	unsigned int _nacts;
- 	const char *_keys;
- 
- 	if ( p == pe )
- 		goto _test_eof;
- 	if ( cs == 0 )
- 		goto _out;
- _resume:
- 	_keys = _lexer_trans_keys + _lexer_key_offsets[cs];
- 	_trans = _lexer_index_offsets[cs];
- 
- 	_klen = _lexer_single_lengths[cs];
- 	if ( _klen > 0 ) {
- 		const char *_lower = _keys;
- 		const char *_mid;
- 		const char *_upper = _keys + _klen - 1;
- 		while (1) {
- 			if ( _upper < _lower )
- 				break;
- 
- 			_mid = _lower + ((_upper-_lower) >> 1);
- 			if ( (*p) < *_mid )
- 				_upper = _mid - 1;
- 			else if ( (*p) > *_mid )
- 				_lower = _mid + 1;
- 			else {
- 				_trans += (_mid - _keys);
- 				goto _match;
- 			}
- 		}
- 		_keys += _klen;
- 		_trans += _klen;
- 	}
- 
- 	_klen = _lexer_range_lengths[cs];
- 	if ( _klen > 0 ) {
- 		const char *_lower = _keys;
- 		const char *_mid;
- 		const char *_upper = _keys + (_klen<<1) - 2;
- 		while (1) {
- 			if ( _upper < _lower )
- 				break;
- 
- 			_mid = _lower + (((_upper-_lower) >> 1) & ~1);
- 			if ( (*p) < _mid[0] )
- 				_upper = _mid - 2;
- 			else if ( (*p) > _mid[1] )
- 				_lower = _mid + 2;
- 			else {
- 				_trans += ((_mid - _keys)>>1);
- 				goto _match;
- 			}
- 		}
- 		_trans += _klen;
- 	}
- 
- _match:
- 	cs = _lexer_trans_targs[_trans];
- 
- 	if ( _lexer_trans_actions[_trans] == 0 )
- 		goto _again;
- 
- 	_acts = _lexer_actions + _lexer_trans_actions[_trans];
- 	_nacts = (unsigned int) *_acts++;
- 	while ( _nacts-- > 0 )
- 	{
- 		switch ( *_acts++ )
- 		{
- 	case 0:
- #line 83 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ro.c.rl"
- 	{
- 		MARK(content_start, p);
-     lexer->current_line = lexer->line_number;
-     lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2;
-   }
- 	break;
- 	case 1:
- #line 89 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ro.c.rl"
- 	{
-     MARK(content_start, p);
-   }
- 	break;
- 	case 2:
- #line 93 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ro.c.rl"
- 	{
-     lexer->current_line = lexer->line_number;
-     lexer->start_col = p - data - lexer->last_newline;
-   }
- 	break;
- 	case 3:
- #line 98 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ro.c.rl"
- 	{
-     int len = LEN(content_start, PTR_TO(final_newline));
-     int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end));
- 
-     if (len < 0) len = 0;
-     if (type_len < 0) len = 0;
- 
-     store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line);
-   }
- 	break;
- 	case 4:
- #line 108 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ro.c.rl"
- 	{ 
-     MARK(docstring_content_type_start, p);
-   }
- 	break;
- 	case 5:
- #line 112 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ro.c.rl"
- 	{ 
-     MARK(docstring_content_type_end, p);
-   }
- 	break;
- 	case 6:
- #line 116 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ro.c.rl"
- 	{
-     STORE_KW_END_CON(feature);
-   }
- 	break;
- 	case 7:
- #line 120 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ro.c.rl"
- 	{
-     STORE_KW_END_CON(background);
-   }
- 	break;
- 	case 8:
- #line 124 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ro.c.rl"
- 	{
-     STORE_KW_END_CON(scenario);
-   }
- 	break;
- 	case 9:
- #line 128 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ro.c.rl"
- 	{
-     STORE_KW_END_CON(scenario_outline);
-   }
- 	break;
- 	case 10:
- #line 132 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ro.c.rl"
- 	{
-     STORE_KW_END_CON(examples);
-   }
- 	break;
- 	case 11:
- #line 136 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ro.c.rl"
- 	{
-     store_kw_con(listener, "step",
-       PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-       PTR_TO(content_start), LEN(content_start, p), 
-       lexer->current_line);
-   }
- 	break;
- 	case 12:
- #line 143 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ro.c.rl"
- 	{
-     STORE_ATTR(comment);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 13:
- #line 148 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ro.c.rl"
- 	{
-     STORE_ATTR(tag);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 14:
- #line 153 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ro.c.rl"
- 	{
-     lexer->line_number += 1;
-     MARK(final_newline, p);
-   }
- 	break;
- 	case 15:
- #line 158 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ro.c.rl"
- 	{
-     MARK(last_newline, p + 1);
-   }
- 	break;
- 	case 16:
- #line 162 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ro.c.rl"
- 	{
-     if (lexer->mark == 0) {
-       MARK(mark, p);
-     }
-   }
- 	break;
- 	case 17:
- #line 168 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ro.c.rl"
- 	{
-     MARK(keyword_end, p);
-     MARK(keyword_start, PTR_TO(mark));
-     MARK(content_start, p + 1);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 18:
- #line 175 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ro.c.rl"
- 	{
-     MARK(content_end, p);
-   }
- 	break;
- 	case 19:
- #line 179 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ro.c.rl"
- 	{
-     p = p - 1;
-     lexer->current_line = lexer->line_number;
-     current_row = rb_ary_new();
-   }
- 	break;
- 	case 20:
- #line 185 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ro.c.rl"
- 	{
- 		MARK(content_start, p);
-   }
- 	break;
- 	case 21:
- #line 189 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ro.c.rl"
- 	{
-     VALUE re_pipe, re_newline, re_backslash;
-     VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
-     rb_funcall(con, rb_intern("strip!"), 0);
-     re_pipe      = rb_reg_regcomp(rb_str_new2("\\\\\\|"));
-     re_newline   = rb_reg_regcomp(rb_str_new2("\\\\n"));
-     re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_pipe,      rb_str_new2("|"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_newline,   rb_str_new2("\n"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\"));
- 
-     rb_ary_push(current_row, con);
-   }
- 	break;
- 	case 22:
- #line 203 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ro.c.rl"
- 	{
-     rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
-   }
- 	break;
- 	case 23:
- #line 207 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ro.c.rl"
- 	{
-     int line;
-     if (cs < lexer_first_final) {
-       size_t count = 0;
-       VALUE newstr_val;
-       char *newstr;
-       int newstr_count = 0;        
-       size_t len;
-       const char *buff;
-       if (lexer->last_newline != 0) {
-         len = LEN(last_newline, eof);
-         buff = PTR_TO(last_newline);
-       } else {
-         len = strlen(data);
-         buff = data;
-       }
- 
-       // Allocate as a ruby string so that it gets cleaned up by GC
-       newstr_val = rb_str_new(buff, len);
-       newstr = RSTRING_PTR(newstr_val);
- 
- 
-       for (count = 0; count < len; count++) {
-         if(buff[count] == 10) {
-           newstr[newstr_count] = '\0'; // terminate new string at first newline found
-           break;
-         } else {
-           if (buff[count] == '%') {
-             newstr[newstr_count++] = buff[count];
-             newstr[newstr_count] = buff[count];
-           } else {
-             newstr[newstr_count] = buff[count];
-           }
-         }
-         newstr_count++;
-       }
- 
-       line = lexer->line_number;
-       lexer_init(lexer); // Re-initialize so we can scan again with the same lexer
-       raise_lexer_error(newstr, line);
-     } else {
-       rb_funcall(listener, rb_intern("eof"), 0);
-     }
-   }
- 	break;
- #line 1328 "ext/gherkin_lexer_ro/gherkin_lexer_ro.c"
- 		}
- 	}
- 
- _again:
- 	if ( cs == 0 )
- 		goto _out;
- 	if ( ++p != pe )
- 		goto _resume;
- 	_test_eof: {}
- 	if ( p == eof )
- 	{
- 	const char *__acts = _lexer_actions + _lexer_eof_actions[cs];
- 	unsigned int __nacts = (unsigned int) *__acts++;
- 	while ( __nacts-- > 0 ) {
- 		switch ( *__acts++ ) {
- 	case 23:
- #line 207 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ro.c.rl"
- 	{
-     int line;
-     if (cs < lexer_first_final) {
-       size_t count = 0;
-       VALUE newstr_val;
-       char *newstr;
-       int newstr_count = 0;        
-       size_t len;
-       const char *buff;
-       if (lexer->last_newline != 0) {
-         len = LEN(last_newline, eof);
-         buff = PTR_TO(last_newline);
-       } else {
-         len = strlen(data);
-         buff = data;
-       }
- 
-       // Allocate as a ruby string so that it gets cleaned up by GC
-       newstr_val = rb_str_new(buff, len);
-       newstr = RSTRING_PTR(newstr_val);
- 
- 
-       for (count = 0; count < len; count++) {
-         if(buff[count] == 10) {
-           newstr[newstr_count] = '\0'; // terminate new string at first newline found
-           break;
-         } else {
-           if (buff[count] == '%') {
-             newstr[newstr_count++] = buff[count];
-             newstr[newstr_count] = buff[count];
-           } else {
-             newstr[newstr_count] = buff[count];
-           }
-         }
-         newstr_count++;
-       }
- 
-       line = lexer->line_number;
-       lexer_init(lexer); // Re-initialize so we can scan again with the same lexer
-       raise_lexer_error(newstr, line);
-     } else {
-       rb_funcall(listener, rb_intern("eof"), 0);
-     }
-   }
- 	break;
- #line 1391 "ext/gherkin_lexer_ro/gherkin_lexer_ro.c"
- 		}
- 	}
- 	}
- 
- 	_out: {}
- 	}
- 
- #line 426 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ro.c.rl"
- 
-     assert(p <= pe && "data overflow after parsing execute");
-     assert(lexer->content_start <= len && "content starts after data end");
-     assert(lexer->mark < len && "mark is after data end");
-     
-     // Reset lexer by re-initializing the whole thing
-     lexer_init(lexer);
- 
-     if (cs == lexer_error) {
-       rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails.");
-     } else {
-       return Qtrue;
-     }
-   }
- }
- 
- void Init_gherkin_lexer_ro()
- {
-   mGherkin = rb_define_module("Gherkin");
-   mGherkinLexer = rb_define_module_under(mGherkin, "Lexer");
-   rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError"));
- 
-   mCLexer = rb_define_module_under(mGherkin, "CLexer");
-   cI18nLexer = rb_define_class_under(mCLexer, "Ro", rb_cObject);
-   rb_define_alloc_func(cI18nLexer, CLexer_alloc);
-   rb_define_method(cI18nLexer, "initialize", CLexer_init, 1);
-   rb_define_method(cI18nLexer, "scan", CLexer_scan, 1);
- }
- 
 -#line 1 "ragel/i18n/ro.c.rl"
 -#include <assert.h>
 -#include <ruby.h>
 -
 -#if defined(_WIN32)
 -#include <stddef.h>
 -#endif
 -
 -#ifdef HAVE_RUBY_RE_H
 -#include <ruby/re.h>
 -#else
 -#include <re.h>
 -#endif
 -
 -#ifdef HAVE_RUBY_ENCODING_H
 -#include <ruby/encoding.h>
 -#define ENCODED_STR_NEW(ptr, len) \
 -    rb_enc_str_new(ptr, len, rb_utf8_encoding())
 -#else
 -#define ENCODED_STR_NEW(ptr, len) \
 -    rb_str_new(ptr, len)
 -#endif
 -
 -#ifndef RSTRING_PTR
 -#define RSTRING_PTR(s) (RSTRING(s)->ptr)
 -#endif
 -
 -#ifndef RSTRING_LEN
 -#define RSTRING_LEN(s) (RSTRING(s)->len)
 -#endif
 -
 -#define DATA_GET(FROM, TYPE, NAME) \
 -  Data_Get_Struct(FROM, TYPE, NAME); \
 -  if (NAME == NULL) { \
 -    rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \
 -  }
 - 
 -typedef struct lexer_state {
 -  int content_len;
 -  int line_number;
 -  int current_line;
 -  int start_col;
 -  size_t mark;
 -  size_t keyword_start;
 -  size_t keyword_end;
 -  size_t next_keyword_start;
 -  size_t content_start;
 -  size_t content_end;
 -  size_t docstring_content_type_start;
 -  size_t docstring_content_type_end;
 -  size_t query_start;
 -  size_t last_newline;
 -  size_t final_newline;
 -} lexer_state;
 -
 -static VALUE mGherkin;
 -static VALUE mGherkinLexer;
 -static VALUE mCLexer;
 -static VALUE cI18nLexer;
 -static VALUE rb_eGherkinLexingError;
 -
 -#define LEN(AT, P) (P - data - lexer->AT)
 -#define MARK(M, P) (lexer->M = (P) - data)
 -#define PTR_TO(P) (data + lexer->P)
 -
 -#define STORE_KW_END_CON(EVENT) \
 -  store_multiline_kw_con(listener, # EVENT, \
 -    PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \
 -    PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \
 -    lexer->current_line, lexer->start_col); \
 -    if (lexer->content_end != 0) { \
 -      p = PTR_TO(content_end - 1); \
 -    } \
 -    lexer->content_end = 0
 -
 -#define STORE_ATTR(ATTR) \
 -    store_attr(listener, # ATTR, \
 -      PTR_TO(content_start), LEN(content_start, p), \
 -      lexer->line_number)
 -
 -
 -#line 254 "ragel/i18n/ro.c.rl"
 -
 -
 -/** Data **/
 -
 -#line 89 "ext/gherkin_lexer_ro/gherkin_lexer_ro.c"
 -static const char _lexer_actions[] = {
 -	0, 1, 0, 1, 1, 1, 2, 1, 
 -	3, 1, 4, 1, 5, 1, 6, 1, 
 -	7, 1, 8, 1, 9, 1, 10, 1, 
 -	11, 1, 12, 1, 13, 1, 16, 1, 
 -	17, 1, 18, 1, 19, 1, 20, 1, 
 -	21, 1, 22, 1, 23, 2, 1, 18, 
 -	2, 4, 5, 2, 13, 0, 2, 14, 
 -	15, 2, 17, 0, 2, 17, 2, 2, 
 -	17, 16, 2, 17, 19, 2, 18, 6, 
 -	2, 18, 7, 2, 18, 8, 2, 18, 
 -	9, 2, 18, 10, 2, 18, 16, 2, 
 -	20, 21, 2, 22, 0, 2, 22, 2, 
 -	2, 22, 16, 2, 22, 19, 3, 3, 
 -	14, 15, 3, 5, 14, 15, 3, 11, 
 -	14, 15, 3, 12, 14, 15, 3, 13, 
 -	14, 15, 3, 14, 15, 18, 3, 17, 
 -	0, 11, 3, 17, 14, 15, 4, 1, 
 -	14, 15, 18, 4, 4, 5, 14, 15, 
 -	4, 17, 0, 14, 15, 5, 17, 0, 
 -	11, 14, 15
 -};
 -
 -static const short _lexer_key_offsets[] = {
 -	0, 0, 19, 20, 21, 22, 24, 26, 
 -	44, 45, 46, 47, 49, 51, 56, 61, 
 -	66, 71, 75, 79, 81, 82, 83, 84, 
 -	85, 86, 87, 88, 89, 90, 91, 92, 
 -	93, 94, 95, 96, 101, 108, 113, 114, 
 -	115, 116, 117, 120, 121, 122, 123, 124, 
 -	125, 126, 127, 128, 129, 130, 131, 146, 
 -	148, 150, 152, 170, 171, 175, 176, 177, 
 -	178, 179, 180, 181, 182, 185, 186, 187, 
 -	188, 189, 190, 191, 192, 193, 194, 201, 
 -	203, 205, 207, 211, 213, 215, 217, 219, 
 -	221, 223, 225, 227, 229, 231, 233, 235, 
 -	237, 238, 239, 240, 243, 244, 245, 246, 
 -	247, 248, 249, 250, 251, 252, 253, 254, 
 -	255, 256, 257, 268, 270, 272, 274, 276, 
 -	278, 280, 282, 284, 286, 288, 290, 292, 
 -	294, 296, 298, 300, 302, 304, 306, 308, 
 -	310, 312, 314, 316, 318, 320, 322, 324, 
 -	326, 328, 332, 334, 336, 338, 340, 342, 
 -	344, 346, 348, 350, 352, 354, 357, 359, 
 -	361, 363, 365, 367, 369, 371, 373, 375, 
 -	377, 379, 381, 384, 386, 388, 390, 392, 
 -	393, 396, 397, 398, 399, 400, 401, 402, 
 -	403, 404, 405, 420, 422, 424, 426, 428, 
 -	430, 432, 434, 436, 438, 440, 442, 444, 
 -	446, 448, 450, 452, 454, 456, 458, 460, 
 -	462, 464, 468, 470, 472, 474, 476, 478, 
 -	480, 482, 484, 486, 488, 493, 495, 497, 
 -	499, 501, 503, 505, 507, 511, 513, 515, 
 -	517, 521, 523, 525, 527, 529, 531, 533, 
 -	535, 537, 539, 541, 543, 545, 549, 551, 
 -	553, 555, 557, 559, 561, 563, 565, 567, 
 -	569, 571, 573, 576, 578, 580, 582, 584, 
 -	585, 586, 587, 588, 589, 590, 592, 593, 
 -	594, 595, 596, 597, 598, 599, 600, 601, 
 -	602, 603, 604, 605, 620, 622, 624, 626, 
 -	628, 630, 632, 634, 636, 638, 640, 642, 
 -	644, 646, 648, 650, 652, 654, 656, 658, 
 -	660, 662, 664, 667, 669, 671, 673, 675, 
 -	680, 682, 684, 686, 688, 690, 692, 694, 
 -	698, 700, 702, 704, 708, 710, 712, 714, 
 -	716, 718, 720, 722, 724, 726, 728, 730, 
 -	732, 734, 737, 739, 741, 743, 745, 747, 
 -	749, 753, 759, 762, 764, 770, 788, 790, 
 -	792, 794, 796, 798, 800, 802, 804, 806, 
 -	808, 810, 812, 814, 816, 818, 820, 822, 
 -	824, 826, 829, 831, 833, 835, 837, 842, 
 -	844, 846, 848, 850, 852, 854, 856, 860, 
 -	862, 864, 866, 870, 872, 874, 876, 878, 
 -	880, 882, 884, 886, 888, 890, 892, 894, 
 -	896, 900, 902, 904, 906, 908, 910, 912, 
 -	914, 916, 918, 920, 922, 924, 927, 929, 
 -	931, 933, 935, 936, 937
 -};
 -
 -static const char _lexer_trans_keys[] = {
 -	-59, -56, -17, 10, 32, 34, 35, 37, 
 -	42, 64, 65, 67, 68, 69, 70, 83, 
 -	124, 9, 13, -98, 105, 32, 10, 13, 
 -	10, 13, -59, -56, 10, 32, 34, 35, 
 -	37, 42, 64, 65, 67, 68, 69, 70, 
 -	83, 124, 9, 13, -104, 34, 34, 10, 
 -	13, 10, 13, 10, 32, 34, 9, 13, 
 -	10, 32, 34, 9, 13, 10, 32, 34, 
 -	9, 13, 10, 32, 34, 9, 13, 10, 
 -	32, 9, 13, 10, 32, 9, 13, 10, 
 -	13, 10, 95, 70, 69, 65, 84, 85, 
 -	82, 69, 95, 69, 78, 68, 95, 37, 
 -	13, 32, 64, 9, 10, 9, 10, 13, 
 -	32, 64, 11, 12, 10, 32, 64, 9, 
 -	13, 116, 117, 110, 99, -61, 97, 111, 
 -	-94, 110, 100, 110, 116, 101, 120, 116, 
 -	58, 10, 10, -59, -56, 10, 32, 35, 
 -	37, 42, 64, 65, 67, 68, 70, 83, 
 -	9, 13, -98, 10, 10, 105, 10, 32, 
 -	-59, -56, 10, 32, 34, 35, 37, 42, 
 -	64, 65, 67, 68, 69, 70, 83, 124, 
 -	9, 13, 97, -59, -56, 114, 116, -93, 
 -	105, 32, 102, 105, 105, -101, 32, 101, 
 -	105, 120, 101, 109, 112, 108, 101, 58, 
 -	10, 10, 10, 32, 35, 70, 124, 9, 
 -	13, 10, 117, 10, 110, 10, 99, -59, 
 -	-56, 10, 116, -93, 10, 10, 105, 10, 
 -	111, 10, 110, 10, 97, 10, 108, 10, 
 -	105, 10, 116, 10, 97, 10, 116, 10, 
 -	101, 10, 58, -101, 10, 117, 110, 99, 
 -	-59, -56, 116, -93, 105, 111, 110, 97, 
 -	108, 105, 116, 97, 116, 101, 58, 10, 
 -	10, 10, 32, 35, 37, 64, 67, 69, 
 -	70, 83, 9, 13, 10, 95, 10, 70, 
 -	10, 69, 10, 65, 10, 84, 10, 85, 
 -	10, 82, 10, 69, 10, 95, 10, 69, 
 -	10, 78, 10, 68, 10, 95, 10, 37, 
 -	10, 111, 10, 110, 10, 116, 10, 101, 
 -	10, 120, 10, 116, 10, 58, 10, 120, 
 -	10, 101, 10, 109, 10, 112, 10, 108, 
 -	10, 101, 10, 117, 10, 110, 10, 99, 
 -	-59, -56, 10, 116, -93, 10, 10, 105, 
 -	10, 111, 10, 110, 10, 97, 10, 108, 
 -	10, 105, 10, 116, 10, 97, 10, 116, 
 -	-101, 10, 10, 99, 116, 10, 101, 10, 
 -	110, 10, 97, 10, 114, 10, 105, 10, 
 -	117, 10, 114, 10, 117, 10, 99, 10, 
 -	116, 10, 117, 10, 114, -60, 10, 97, 
 -	-125, 10, 10, 32, 10, 115, 10, 99, 
 -	-101, 99, 105, 116, 101, 110, 97, 114, 
 -	105, 117, 58, 10, 10, -59, -56, 10, 
 -	32, 35, 37, 42, 64, 65, 67, 68, 
 -	70, 83, 9, 13, -98, 10, 10, 105, 
 -	10, 32, -104, 10, 10, 95, 10, 70, 
 -	10, 69, 10, 65, 10, 84, 10, 85, 
 -	10, 82, 10, 69, 10, 95, 10, 69, 
 -	10, 78, 10, 68, 10, 95, 10, 37, 
 -	10, 116, 10, 117, 10, 110, 10, 99, 
 -	-61, 10, 97, 111, -94, 10, 10, 110, 
 -	10, 100, 10, 110, 10, 116, 10, 101, 
 -	10, 120, 10, 116, 10, 58, 10, 97, 
 -	-59, -56, 10, 114, 116, -93, 10, 10, 
 -	105, 10, 32, 10, 102, 10, 105, 10, 
 -	105, -101, 10, 10, 32, 101, 105, 10, 
 -	117, 10, 110, 10, 99, -59, -56, 10, 
 -	116, -93, 10, 10, 105, 10, 111, 10, 
 -	110, 10, 97, 10, 108, 10, 105, 10, 
 -	116, 10, 97, 10, 116, 10, 101, -101, 
 -	10, 10, 99, 105, 116, 10, 101, 10, 
 -	110, 10, 97, 10, 114, 10, 105, 10, 
 -	117, 10, 114, 10, 117, 10, 99, 10, 
 -	116, 10, 117, 10, 114, -60, 10, 97, 
 -	-125, 10, 10, 32, 10, 115, 10, 99, 
 -	114, 117, 99, 116, 117, 114, -60, 97, 
 -	-125, 32, 115, 99, 101, 110, 97, 114, 
 -	105, 117, 58, 10, 10, -59, -56, 10, 
 -	32, 35, 37, 42, 64, 65, 67, 68, 
 -	70, 83, 9, 13, -98, 10, 10, 105, 
 -	10, 32, -104, 10, 10, 95, 10, 70, 
 -	10, 69, 10, 65, 10, 84, 10, 85, 
 -	10, 82, 10, 69, 10, 95, 10, 69, 
 -	10, 78, 10, 68, 10, 95, 10, 37, 
 -	10, 116, 10, 117, 10, 110, 10, 99, 
 -	-61, 10, 97, -94, 10, 10, 110, 10, 
 -	100, 10, 97, -59, -56, 10, 114, 116, 
 -	-93, 10, 10, 105, 10, 32, 10, 102, 
 -	10, 105, 10, 105, -101, 10, 10, 32, 
 -	101, 105, 10, 117, 10, 110, 10, 99, 
 -	-59, -56, 10, 116, -93, 10, 10, 105, 
 -	10, 111, 10, 110, 10, 97, 10, 108, 
 -	10, 105, 10, 116, 10, 97, 10, 116, 
 -	10, 101, 10, 58, -101, 10, 10, 99, 
 -	105, 10, 101, 10, 110, 10, 97, 10, 
 -	114, 10, 105, 10, 117, 32, 124, 9, 
 -	13, 10, 32, 92, 124, 9, 13, 10, 
 -	92, 124, 10, 92, 10, 32, 92, 124, 
 -	9, 13, -59, -56, 10, 32, 34, 35, 
 -	37, 42, 64, 65, 67, 68, 69, 70, 
 -	83, 124, 9, 13, -104, 10, 10, 95, 
 -	10, 70, 10, 69, 10, 65, 10, 84, 
 -	10, 85, 10, 82, 10, 69, 10, 95, 
 -	10, 69, 10, 78, 10, 68, 10, 95, 
 -	10, 37, 10, 116, 10, 117, 10, 110, 
 -	10, 99, -61, 10, 97, -94, 10, 10, 
 -	110, 10, 100, 10, 97, -59, -56, 10, 
 -	114, 116, -93, 10, 10, 105, 10, 32, 
 -	10, 102, 10, 105, 10, 105, -101, 10, 
 -	10, 32, 101, 105, 10, 117, 10, 110, 
 -	10, 99, -59, -56, 10, 116, -93, 10, 
 -	10, 105, 10, 111, 10, 110, 10, 97, 
 -	10, 108, 10, 105, 10, 116, 10, 97, 
 -	10, 116, 10, 101, 10, 58, -101, 10, 
 -	10, 99, 105, 116, 10, 101, 10, 110, 
 -	10, 97, 10, 114, 10, 105, 10, 117, 
 -	10, 114, 10, 117, 10, 99, 10, 116, 
 -	10, 117, 10, 114, -60, 10, 97, -125, 
 -	10, 10, 32, 10, 115, 10, 99, -69, 
 -	-65, 0
 -};
 -
 -static const char _lexer_single_lengths[] = {
 -	0, 17, 1, 1, 1, 2, 2, 16, 
 -	1, 1, 1, 2, 2, 3, 3, 3, 
 -	3, 2, 2, 2, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 3, 5, 3, 1, 1, 
 -	1, 1, 3, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 13, 2, 
 -	2, 2, 16, 1, 4, 1, 1, 1, 
 -	1, 1, 1, 1, 3, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 5, 2, 
 -	2, 2, 4, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	1, 1, 1, 3, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 9, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 4, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 3, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 3, 2, 2, 2, 2, 1, 
 -	3, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 13, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 4, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 5, 2, 2, 2, 
 -	2, 2, 2, 2, 4, 2, 2, 2, 
 -	4, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 4, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 3, 2, 2, 2, 2, 1, 
 -	1, 1, 1, 1, 1, 2, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 13, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 3, 2, 2, 2, 2, 5, 
 -	2, 2, 2, 2, 2, 2, 2, 4, 
 -	2, 2, 2, 4, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 3, 2, 2, 2, 2, 2, 2, 
 -	2, 4, 3, 2, 4, 16, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 3, 2, 2, 2, 2, 5, 2, 
 -	2, 2, 2, 2, 2, 2, 4, 2, 
 -	2, 2, 4, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	4, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 3, 2, 2, 
 -	2, 2, 1, 1, 0
 -};
 -
 -static const char _lexer_range_lengths[] = {
 -	0, 1, 0, 0, 0, 0, 0, 1, 
 -	0, 0, 0, 0, 0, 1, 1, 1, 
 -	1, 1, 1, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 1, 1, 1, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 1, 0, 
 -	0, 0, 1, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 1, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 1, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 1, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 1, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	1, 1, 0, 0, 1, 1, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0
 -};
 -
 -static const short _lexer_index_offsets[] = {
 -	0, 0, 19, 21, 23, 25, 28, 31, 
 -	49, 51, 53, 55, 58, 61, 66, 71, 
 -	76, 81, 85, 89, 92, 94, 96, 98, 
 -	100, 102, 104, 106, 108, 110, 112, 114, 
 -	116, 118, 120, 122, 127, 134, 139, 141, 
 -	143, 145, 147, 151, 153, 155, 157, 159, 
 -	161, 163, 165, 167, 169, 171, 173, 188, 
 -	191, 194, 197, 215, 217, 222, 224, 226, 
 -	228, 230, 232, 234, 236, 240, 242, 244, 
 -	246, 248, 250, 252, 254, 256, 258, 265, 
 -	268, 271, 274, 279, 282, 285, 288, 291, 
 -	294, 297, 300, 303, 306, 309, 312, 315, 
 -	318, 320, 322, 324, 328, 330, 332, 334, 
 -	336, 338, 340, 342, 344, 346, 348, 350, 
 -	352, 354, 356, 367, 370, 373, 376, 379, 
 -	382, 385, 388, 391, 394, 397, 400, 403, 
 -	406, 409, 412, 415, 418, 421, 424, 427, 
 -	430, 433, 436, 439, 442, 445, 448, 451, 
 -	454, 457, 462, 465, 468, 471, 474, 477, 
 -	480, 483, 486, 489, 492, 495, 499, 502, 
 -	505, 508, 511, 514, 517, 520, 523, 526, 
 -	529, 532, 535, 539, 542, 545, 548, 551, 
 -	553, 557, 559, 561, 563, 565, 567, 569, 
 -	571, 573, 575, 590, 593, 596, 599, 602, 
 -	605, 608, 611, 614, 617, 620, 623, 626, 
 -	629, 632, 635, 638, 641, 644, 647, 650, 
 -	653, 656, 661, 664, 667, 670, 673, 676, 
 -	679, 682, 685, 688, 691, 697, 700, 703, 
 -	706, 709, 712, 715, 718, 723, 726, 729, 
 -	732, 737, 740, 743, 746, 749, 752, 755, 
 -	758, 761, 764, 767, 770, 773, 778, 781, 
 -	784, 787, 790, 793, 796, 799, 802, 805, 
 -	808, 811, 814, 818, 821, 824, 827, 830, 
 -	832, 834, 836, 838, 840, 842, 845, 847, 
 -	849, 851, 853, 855, 857, 859, 861, 863, 
 -	865, 867, 869, 871, 886, 889, 892, 895, 
 -	898, 901, 904, 907, 910, 913, 916, 919, 
 -	922, 925, 928, 931, 934, 937, 940, 943, 
 -	946, 949, 952, 956, 959, 962, 965, 968, 
 -	974, 977, 980, 983, 986, 989, 992, 995, 
 -	1000, 1003, 1006, 1009, 1014, 1017, 1020, 1023, 
 -	1026, 1029, 1032, 1035, 1038, 1041, 1044, 1047, 
 -	1050, 1053, 1057, 1060, 1063, 1066, 1069, 1072, 
 -	1075, 1079, 1085, 1089, 1092, 1098, 1116, 1119, 
 -	1122, 1125, 1128, 1131, 1134, 1137, 1140, 1143, 
 -	1146, 1149, 1152, 1155, 1158, 1161, 1164, 1167, 
 -	1170, 1173, 1177, 1180, 1183, 1186, 1189, 1195, 
 -	1198, 1201, 1204, 1207, 1210, 1213, 1216, 1221, 
 -	1224, 1227, 1230, 1235, 1238, 1241, 1244, 1247, 
 -	1250, 1253, 1256, 1259, 1262, 1265, 1268, 1271, 
 -	1274, 1279, 1282, 1285, 1288, 1291, 1294, 1297, 
 -	1300, 1303, 1306, 1309, 1312, 1315, 1319, 1322, 
 -	1325, 1328, 1331, 1333, 1335
 -};
 -
 -static const short _lexer_trans_targs[] = {
 -	2, 8, 418, 7, 7, 9, 19, 21, 
 -	4, 35, 38, 42, 59, 69, 96, 176, 
 -	344, 7, 0, 3, 0, 4, 0, 5, 
 -	0, 7, 20, 6, 7, 20, 6, 2, 
 -	8, 7, 7, 9, 19, 21, 4, 35, 
 -	38, 42, 59, 69, 96, 176, 344, 7, 
 -	0, 3, 0, 10, 0, 11, 0, 13, 
 -	12, 12, 13, 12, 12, 14, 14, 15, 
 -	14, 14, 14, 14, 15, 14, 14, 14, 
 -	14, 16, 14, 14, 14, 14, 17, 14, 
 -	14, 7, 18, 18, 0, 7, 18, 18, 
 -	0, 7, 20, 19, 7, 0, 22, 0, 
 -	23, 0, 24, 0, 25, 0, 26, 0, 
 -	27, 0, 28, 0, 29, 0, 30, 0, 
 -	31, 0, 32, 0, 33, 0, 34, 0, 
 -	420, 0, 0, 0, 0, 0, 36, 37, 
 -	7, 37, 37, 35, 36, 36, 7, 37, 
 -	35, 37, 0, 39, 0, 40, 0, 41, 
 -	0, 3, 0, 43, 44, 46, 0, 44, 
 -	0, 45, 0, 4, 0, 47, 0, 48, 
 -	0, 49, 0, 50, 0, 51, 0, 52, 
 -	0, 54, 53, 54, 53, 55, 350, 54, 
 -	54, 7, 351, 57, 7, 365, 369, 373, 
 -	383, 400, 54, 53, 56, 54, 53, 54, 
 -	57, 53, 54, 58, 53, 2, 8, 7, 
 -	7, 9, 19, 21, 4, 35, 38, 42, 
 -	59, 69, 96, 176, 344, 7, 0, 60, 
 -	0, 61, 67, 4, 68, 0, 62, 0, 
 -	63, 0, 64, 0, 65, 0, 66, 0, 
 -	44, 0, 62, 0, 64, 63, 63, 0, 
 -	70, 0, 71, 0, 72, 0, 73, 0, 
 -	74, 0, 75, 0, 76, 0, 78, 77, 
 -	78, 77, 78, 78, 7, 79, 7, 78, 
 -	77, 78, 80, 77, 78, 81, 77, 78, 
 -	82, 77, 83, 95, 78, 84, 77, 84, 
 -	78, 77, 78, 85, 77, 78, 86, 77, 
 -	78, 87, 77, 78, 88, 77, 78, 89, 
 -	77, 78, 90, 77, 78, 91, 77, 78, 
 -	92, 77, 78, 93, 77, 78, 94, 77, 
 -	78, 58, 77, 84, 78, 77, 97, 0, 
 -	98, 0, 99, 0, 100, 175, 101, 0, 
 -	101, 0, 102, 0, 103, 0, 104, 0, 
 -	105, 0, 106, 0, 107, 0, 108, 0, 
 -	109, 0, 110, 0, 111, 0, 112, 0, 
 -	114, 113, 114, 113, 114, 114, 7, 115, 
 -	7, 129, 136, 142, 157, 114, 113, 114, 
 -	116, 113, 114, 117, 113, 114, 118, 113, 
 -	114, 119, 113, 114, 120, 113, 114, 121, 
 -	113, 114, 122, 113, 114, 123, 113, 114, 
 -	124, 113, 114, 125, 113, 114, 126, 113, 
 -	114, 127, 113, 114, 128, 113, 114, 7, 
 -	113, 114, 130, 113, 114, 131, 113, 114, 
 -	132, 113, 114, 133, 113, 114, 134, 113, 
 -	114, 135, 113, 114, 58, 113, 114, 137, 
 -	113, 114, 138, 113, 114, 139, 113, 114, 
 -	140, 113, 114, 141, 113, 114, 135, 113, 
 -	114, 143, 113, 114, 144, 113, 114, 145, 
 -	113, 146, 156, 114, 147, 113, 147, 114, 
 -	113, 114, 148, 113, 114, 149, 113, 114, 
 -	150, 113, 114, 151, 113, 114, 152, 113, 
 -	114, 153, 113, 114, 154, 113, 114, 155, 
 -	113, 114, 141, 113, 147, 114, 113, 114, 
 -	158, 164, 113, 114, 159, 113, 114, 160, 
 -	113, 114, 161, 113, 114, 162, 113, 114, 
 -	163, 113, 114, 135, 113, 114, 165, 113, 
 -	114, 166, 113, 114, 167, 113, 114, 168, 
 -	113, 114, 169, 113, 114, 170, 113, 171, 
 -	114, 172, 113, 172, 114, 113, 114, 173, 
 -	113, 114, 174, 113, 114, 158, 113, 101, 
 -	0, 177, 4, 263, 0, 178, 0, 179, 
 -	0, 180, 0, 181, 0, 182, 0, 183, 
 -	0, 184, 0, 186, 185, 186, 185, 187, 
 -	190, 186, 186, 7, 191, 189, 7, 205, 
 -	209, 219, 229, 245, 186, 185, 188, 186, 
 -	185, 186, 189, 185, 186, 58, 185, 188, 
 -	186, 185, 186, 192, 185, 186, 193, 185, 
 -	186, 194, 185, 186, 195, 185, 186, 196, 
 -	185, 186, 197, 185, 186, 198, 185, 186, 
 -	199, 185, 186, 200, 185, 186, 201, 185, 
 -	186, 202, 185, 186, 203, 185, 186, 204, 
 -	185, 186, 7, 185, 186, 206, 185, 186, 
 -	207, 185, 186, 208, 185, 186, 188, 185, 
 -	210, 186, 211, 213, 185, 211, 186, 185, 
 -	186, 212, 185, 186, 189, 185, 186, 214, 
 -	185, 186, 215, 185, 186, 216, 185, 186, 
 -	217, 185, 186, 218, 185, 186, 58, 185, 
 -	186, 220, 185, 221, 227, 186, 189, 228, 
 -	185, 222, 186, 185, 186, 223, 185, 186, 
 -	224, 185, 186, 225, 185, 186, 226, 185, 
 -	186, 211, 185, 222, 186, 185, 186, 224, 
 -	223, 223, 185, 186, 230, 185, 186, 231, 
 -	185, 186, 232, 185, 233, 244, 186, 234, 
 -	185, 234, 186, 185, 186, 235, 185, 186, 
 -	236, 185, 186, 237, 185, 186, 238, 185, 
 -	186, 239, 185, 186, 240, 185, 186, 241, 
 -	185, 186, 242, 185, 186, 243, 185, 186, 
 -	218, 185, 234, 186, 185, 186, 246, 189, 
 -	252, 185, 186, 247, 185, 186, 248, 185, 
 -	186, 249, 185, 186, 250, 185, 186, 251, 
 -	185, 186, 218, 185, 186, 253, 185, 186, 
 -	254, 185, 186, 255, 185, 186, 256, 185, 
 -	186, 257, 185, 186, 258, 185, 259, 186, 
 -	260, 185, 260, 186, 185, 186, 261, 185, 
 -	186, 262, 185, 186, 246, 185, 264, 0, 
 -	265, 0, 266, 0, 267, 0, 268, 0, 
 -	269, 0, 270, 271, 0, 271, 0, 272, 
 -	0, 273, 0, 274, 0, 275, 0, 276, 
 -	0, 277, 0, 278, 0, 279, 0, 280, 
 -	0, 281, 0, 283, 282, 283, 282, 284, 
 -	287, 283, 283, 7, 288, 286, 7, 302, 
 -	306, 310, 320, 337, 283, 282, 285, 283, 
 -	282, 283, 286, 282, 283, 58, 282, 285, 
 -	283, 282, 283, 289, 282, 283, 290, 282, 
 -	283, 291, 282, 283, 292, 282, 283, 293, 
 -	282, 283, 294, 282, 283, 295, 282, 283, 
 -	296, 282, 283, 297, 282, 283, 298, 282, 
 -	283, 299, 282, 283, 300, 282, 283, 301, 
 -	282, 283, 7, 282, 283, 303, 282, 283, 
 -	304, 282, 283, 305, 282, 283, 285, 282, 
 -	307, 283, 308, 282, 308, 283, 282, 283, 
 -	309, 282, 283, 286, 282, 283, 311, 282, 
 -	312, 318, 283, 286, 319, 282, 313, 283, 
 -	282, 283, 314, 282, 283, 315, 282, 283, 
 -	316, 282, 283, 317, 282, 283, 308, 282, 
 -	313, 283, 282, 283, 315, 314, 314, 282, 
 -	283, 321, 282, 283, 322, 282, 283, 323, 
 -	282, 324, 336, 283, 325, 282, 325, 283, 
 -	282, 283, 326, 282, 283, 327, 282, 283, 
 -	328, 282, 283, 329, 282, 283, 330, 282, 
 -	283, 331, 282, 283, 332, 282, 283, 333, 
 -	282, 283, 334, 282, 283, 335, 282, 283, 
 -	58, 282, 325, 283, 282, 283, 338, 286, 
 -	282, 283, 339, 282, 283, 340, 282, 283, 
 -	341, 282, 283, 342, 282, 283, 343, 282, 
 -	283, 335, 282, 344, 345, 344, 0, 349, 
 -	348, 347, 345, 348, 346, 0, 347, 345, 
 -	346, 0, 347, 346, 349, 348, 347, 345, 
 -	348, 346, 2, 8, 349, 349, 9, 19, 
 -	21, 4, 35, 38, 42, 59, 69, 96, 
 -	176, 344, 349, 0, 56, 54, 53, 54, 
 -	352, 53, 54, 353, 53, 54, 354, 53, 
 -	54, 355, 53, 54, 356, 53, 54, 357, 
 -	53, 54, 358, 53, 54, 359, 53, 54, 
 -	360, 53, 54, 361, 53, 54, 362, 53, 
 -	54, 363, 53, 54, 364, 53, 54, 7, 
 -	53, 54, 366, 53, 54, 367, 53, 54, 
 -	368, 53, 54, 56, 53, 370, 54, 371, 
 -	53, 371, 54, 53, 54, 372, 53, 54, 
 -	57, 53, 54, 374, 53, 375, 381, 54, 
 -	57, 382, 53, 376, 54, 53, 54, 377, 
 -	53, 54, 378, 53, 54, 379, 53, 54, 
 -	380, 53, 54, 371, 53, 376, 54, 53, 
 -	54, 378, 377, 377, 53, 54, 384, 53, 
 -	54, 385, 53, 54, 386, 53, 387, 399, 
 -	54, 388, 53, 388, 54, 53, 54, 389, 
 -	53, 54, 390, 53, 54, 391, 53, 54, 
 -	392, 53, 54, 393, 53, 54, 394, 53, 
 -	54, 395, 53, 54, 396, 53, 54, 397, 
 -	53, 54, 398, 53, 54, 58, 53, 388, 
 -	54, 53, 54, 401, 57, 407, 53, 54, 
 -	402, 53, 54, 403, 53, 54, 404, 53, 
 -	54, 405, 53, 54, 406, 53, 54, 398, 
 -	53, 54, 408, 53, 54, 409, 53, 54, 
 -	410, 53, 54, 411, 53, 54, 412, 53, 
 -	54, 413, 53, 414, 54, 415, 53, 415, 
 -	54, 53, 54, 416, 53, 54, 417, 53, 
 -	54, 401, 53, 419, 0, 7, 0, 0, 
 -	0
 -};
 -
 -static const unsigned char _lexer_trans_actions[] = {
 -	29, 29, 0, 54, 0, 5, 1, 0, 
 -	29, 1, 29, 29, 29, 29, 29, 29, 
 -	35, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 149, 126, 57, 110, 23, 0, 29, 
 -	29, 54, 0, 5, 1, 0, 29, 1, 
 -	29, 29, 29, 29, 29, 29, 35, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 139, 
 -	48, 9, 106, 11, 0, 134, 45, 45, 
 -	45, 3, 122, 33, 33, 33, 0, 122, 
 -	33, 33, 33, 0, 122, 33, 0, 33, 
 -	0, 102, 7, 7, 43, 54, 0, 0, 
 -	43, 114, 25, 0, 54, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 43, 43, 43, 43, 0, 27, 
 -	118, 27, 27, 51, 27, 0, 54, 0, 
 -	1, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 0, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 144, 57, 54, 0, 84, 84, 54, 
 -	0, 72, 33, 84, 72, 84, 84, 84, 
 -	84, 84, 0, 0, 0, 54, 0, 54, 
 -	0, 0, 54, 15, 0, 63, 63, 130, 
 -	31, 60, 57, 31, 63, 57, 63, 63, 
 -	63, 63, 63, 63, 66, 31, 43, 0, 
 -	43, 0, 0, 0, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 0, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 144, 57, 
 -	54, 0, 54, 0, 81, 84, 81, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 0, 0, 54, 0, 0, 0, 
 -	54, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 21, 0, 0, 54, 0, 0, 43, 
 -	0, 43, 0, 43, 0, 0, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	144, 57, 54, 0, 54, 0, 69, 33, 
 -	69, 84, 84, 84, 84, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 13, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 13, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 0, 0, 54, 0, 0, 0, 54, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 0, 54, 0, 54, 
 -	0, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 0, 
 -	54, 0, 0, 0, 54, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 0, 
 -	43, 0, 0, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 144, 57, 54, 0, 84, 
 -	84, 54, 0, 75, 33, 84, 75, 84, 
 -	84, 84, 84, 84, 0, 0, 0, 54, 
 -	0, 54, 0, 0, 54, 17, 0, 0, 
 -	54, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 17, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	0, 54, 0, 0, 0, 0, 54, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 17, 0, 
 -	54, 0, 0, 0, 0, 54, 0, 0, 
 -	0, 0, 54, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 0, 54, 0, 54, 0, 
 -	0, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 0, 0, 54, 0, 
 -	0, 0, 54, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 0, 54, 0, 54, 0, 0, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 0, 54, 
 -	0, 0, 0, 54, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 144, 57, 54, 0, 84, 
 -	84, 54, 0, 78, 33, 84, 78, 84, 
 -	84, 84, 84, 84, 0, 0, 0, 54, 
 -	0, 54, 0, 0, 54, 19, 0, 0, 
 -	54, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 19, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	0, 54, 0, 0, 0, 54, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	0, 0, 54, 0, 0, 0, 0, 54, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	0, 54, 0, 54, 0, 0, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 0, 0, 54, 0, 0, 0, 54, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	19, 0, 0, 54, 0, 54, 0, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 0, 0, 0, 43, 54, 
 -	37, 37, 87, 37, 37, 43, 0, 39, 
 -	0, 43, 0, 0, 54, 0, 0, 39, 
 -	0, 0, 96, 96, 54, 0, 93, 90, 
 -	41, 96, 90, 96, 96, 96, 96, 96, 
 -	96, 99, 0, 43, 0, 54, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 15, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 0, 54, 0, 
 -	0, 0, 54, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 0, 0, 54, 
 -	0, 0, 0, 0, 54, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 0, 54, 0, 
 -	54, 0, 0, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 0, 0, 
 -	54, 0, 0, 0, 54, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 15, 0, 0, 
 -	54, 0, 54, 0, 0, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 0, 54, 0, 0, 0, 
 -	54, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 0, 43, 0, 43, 0, 
 -	0
 -};
 -
 -static const unsigned char _lexer_eof_actions[] = {
 -	0, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43
 -};
 -
 -static const int lexer_start = 1;
 -static const int lexer_first_final = 420;
 -static const int lexer_error = 0;
 -
 -static const int lexer_en_main = 1;
 -
 -
 -#line 258 "ragel/i18n/ro.c.rl"
 -
 -static VALUE 
 -unindent(VALUE con, int start_col)
 -{
 -  VALUE re;
 -  /* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */
 -  char pat[32]; 
 -  snprintf(pat, 32, "^[\t ]{0,%d}", start_col); 
 -  re = rb_reg_regcomp(rb_str_new2(pat));
 -  rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2(""));
 -
 -  return Qnil;
 -
 -}
 -
 -static void 
 -store_kw_con(VALUE listener, const char * event_name, 
 -             const char * keyword_at, size_t keyword_length, 
 -             const char * at,         size_t length, 
 -             int current_line)
 -{
 -  VALUE con = Qnil, kw = Qnil;
 -  kw = ENCODED_STR_NEW(keyword_at, keyword_length);
 -  con = ENCODED_STR_NEW(at, length);
 -  rb_funcall(con, rb_intern("strip!"), 0);
 -  rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); 
 -}
 -
 -static void
 -store_multiline_kw_con(VALUE listener, const char * event_name,
 -                      const char * keyword_at, size_t keyword_length,
 -                      const char * at,         size_t length,
 -                      int current_line, int start_col)
 -{
 -  VALUE split;
 -  VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil;
 -
 -  kw = ENCODED_STR_NEW(keyword_at, keyword_length);
 -  con = ENCODED_STR_NEW(at, length);
 -
 -  unindent(con, start_col);
 -  
 -  split = rb_str_split(con, "\n");
 -
 -  name = rb_funcall(split, rb_intern("shift"), 0);
 -  desc = rb_ary_join(split, rb_str_new2( "\n" ));
 -
 -  if( name == Qnil ) 
 -  {
 -    name = rb_str_new2("");
 -  }
 -  if( rb_funcall(desc, rb_intern("size"), 0) == 0) 
 -  {
 -    desc = rb_str_new2("");
 -  }
 -  rb_funcall(name, rb_intern("strip!"), 0);
 -  rb_funcall(desc, rb_intern("rstrip!"), 0);
 -  rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); 
 -}
 -
 -static void 
 -store_attr(VALUE listener, const char * attr_type,
 -           const char * at, size_t length, 
 -           int line)
 -{
 -  VALUE val = ENCODED_STR_NEW(at, length);
 -  rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line));
 -}
 -static void 
 -store_docstring_content(VALUE listener, 
 -          int start_col, 
 -          const char *type_at, size_t type_length,
 -          const char *at, size_t length, 
 -          int current_line)
 -{
 -  VALUE re2;
 -  VALUE unescape_escaped_quotes;
 -  VALUE con = ENCODED_STR_NEW(at, length);
 -  VALUE con_type = ENCODED_STR_NEW(type_at, type_length);
 -
 -  unindent(con, start_col);
 -
 -  re2 = rb_reg_regcomp(rb_str_new2("\r\\Z"));
 -  unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\""));
 -  rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2(""));
 -  rb_funcall(con_type, rb_intern("strip!"), 0);
 -  rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\""));
 -  rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line));
 -}
 -static void 
 -raise_lexer_error(const char * at, int line)
 -{ 
 -  rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at);
 -}
 -
 -static void lexer_init(lexer_state *lexer) {
 -  lexer->content_start = 0;
 -  lexer->content_end = 0;
 -  lexer->content_len = 0;
 -  lexer->docstring_content_type_start = 0;
 -  lexer->docstring_content_type_end = 0;
 -  lexer->mark = 0;
 -  lexer->keyword_start = 0;
 -  lexer->keyword_end = 0;
 -  lexer->next_keyword_start = 0;
 -  lexer->line_number = 1;
 -  lexer->last_newline = 0;
 -  lexer->final_newline = 0;
 -  lexer->start_col = 0;
 -}
 -
 -static VALUE CLexer_alloc(VALUE klass)
 -{
 -  VALUE obj;
 -  lexer_state *lxr = ALLOC(lexer_state);
 -  lexer_init(lxr);
 -
 -  obj = Data_Wrap_Struct(klass, NULL, -1, lxr);
 -
 -  return obj;
 -}
 -
 -static VALUE CLexer_init(VALUE self, VALUE listener)
 -{
 -  lexer_state *lxr; 
 -  rb_iv_set(self, "@listener", listener);
 -  
 -  lxr = NULL;
 -  DATA_GET(self, lexer_state, lxr);
 -  lexer_init(lxr);
 -  
 -  return self;
 -}
 -
 -static VALUE CLexer_scan(VALUE self, VALUE input)
 -{
 -  VALUE input_copy;
 -  char *data;
 -  size_t len;
 -  VALUE listener = rb_iv_get(self, "@listener");
 -
 -  lexer_state *lexer;
 -  lexer = NULL;
 -  DATA_GET(self, lexer_state, lexer);
 -
 -  input_copy = rb_str_dup(input);
 -
 -  rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%"));
 -  data = RSTRING_PTR(input_copy);
 -  len = RSTRING_LEN(input_copy);
 -  
 -  if (len == 0) { 
 -    rb_raise(rb_eGherkinLexingError, "No content to lex.");
 -  } else {
 -
 -    const char *p, *pe, *eof;
 -    int cs = 0;
 -    
 -    VALUE current_row = Qnil;
 -
 -    p = data;
 -    pe = data + len;
 -    eof = pe;
 -    
 -    assert(*pe == '\0' && "pointer does not end on NULL");
 -    
 -    
 -#line 1031 "ext/gherkin_lexer_ro/gherkin_lexer_ro.c"
 -	{
 -	cs = lexer_start;
 -	}
 -
 -#line 425 "ragel/i18n/ro.c.rl"
 -    
 -#line 1038 "ext/gherkin_lexer_ro/gherkin_lexer_ro.c"
 -	{
 -	int _klen;
 -	unsigned int _trans;
 -	const char *_acts;
 -	unsigned int _nacts;
 -	const char *_keys;
 -
 -	if ( p == pe )
 -		goto _test_eof;
 -	if ( cs == 0 )
 -		goto _out;
 -_resume:
 -	_keys = _lexer_trans_keys + _lexer_key_offsets[cs];
 -	_trans = _lexer_index_offsets[cs];
 -
 -	_klen = _lexer_single_lengths[cs];
 -	if ( _klen > 0 ) {
 -		const char *_lower = _keys;
 -		const char *_mid;
 -		const char *_upper = _keys + _klen - 1;
 -		while (1) {
 -			if ( _upper < _lower )
 -				break;
 -
 -			_mid = _lower + ((_upper-_lower) >> 1);
 -			if ( (*p) < *_mid )
 -				_upper = _mid - 1;
 -			else if ( (*p) > *_mid )
 -				_lower = _mid + 1;
 -			else {
 -				_trans += (unsigned int)(_mid - _keys);
 -				goto _match;
 -			}
 -		}
 -		_keys += _klen;
 -		_trans += _klen;
 -	}
 -
 -	_klen = _lexer_range_lengths[cs];
 -	if ( _klen > 0 ) {
 -		const char *_lower = _keys;
 -		const char *_mid;
 -		const char *_upper = _keys + (_klen<<1) - 2;
 -		while (1) {
 -			if ( _upper < _lower )
 -				break;
 -
 -			_mid = _lower + (((_upper-_lower) >> 1) & ~1);
 -			if ( (*p) < _mid[0] )
 -				_upper = _mid - 2;
 -			else if ( (*p) > _mid[1] )
 -				_lower = _mid + 2;
 -			else {
 -				_trans += (unsigned int)((_mid - _keys)>>1);
 -				goto _match;
 -			}
 -		}
 -		_trans += _klen;
 -	}
 -
 -_match:
 -	cs = _lexer_trans_targs[_trans];
 -
 -	if ( _lexer_trans_actions[_trans] == 0 )
 -		goto _again;
 -
 -	_acts = _lexer_actions + _lexer_trans_actions[_trans];
 -	_nacts = (unsigned int) *_acts++;
 -	while ( _nacts-- > 0 )
 -	{
 -		switch ( *_acts++ )
 -		{
 -	case 0:
 -#line 83 "ragel/i18n/ro.c.rl"
 -	{
 -		MARK(content_start, p);
 -    lexer->current_line = lexer->line_number;
 -    lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2;
 -  }
 -	break;
 -	case 1:
 -#line 89 "ragel/i18n/ro.c.rl"
 -	{
 -    MARK(content_start, p);
 -  }
 -	break;
 -	case 2:
 -#line 93 "ragel/i18n/ro.c.rl"
 -	{
 -    lexer->current_line = lexer->line_number;
 -    lexer->start_col = p - data - lexer->last_newline;
 -  }
 -	break;
 -	case 3:
 -#line 98 "ragel/i18n/ro.c.rl"
 -	{
 -    int len = LEN(content_start, PTR_TO(final_newline));
 -    int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end));
 -
 -    if (len < 0) len = 0;
 -    if (type_len < 0) len = 0;
 -
 -    store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line);
 -  }
 -	break;
 -	case 4:
 -#line 108 "ragel/i18n/ro.c.rl"
 -	{ 
 -    MARK(docstring_content_type_start, p);
 -  }
 -	break;
 -	case 5:
 -#line 112 "ragel/i18n/ro.c.rl"
 -	{ 
 -    MARK(docstring_content_type_end, p);
 -  }
 -	break;
 -	case 6:
 -#line 116 "ragel/i18n/ro.c.rl"
 -	{
 -    STORE_KW_END_CON(feature);
 -  }
 -	break;
 -	case 7:
 -#line 120 "ragel/i18n/ro.c.rl"
 -	{
 -    STORE_KW_END_CON(background);
 -  }
 -	break;
 -	case 8:
 -#line 124 "ragel/i18n/ro.c.rl"
 -	{
 -    STORE_KW_END_CON(scenario);
 -  }
 -	break;
 -	case 9:
 -#line 128 "ragel/i18n/ro.c.rl"
 -	{
 -    STORE_KW_END_CON(scenario_outline);
 -  }
 -	break;
 -	case 10:
 -#line 132 "ragel/i18n/ro.c.rl"
 -	{
 -    STORE_KW_END_CON(examples);
 -  }
 -	break;
 -	case 11:
 -#line 136 "ragel/i18n/ro.c.rl"
 -	{
 -    store_kw_con(listener, "step",
 -      PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
 -      PTR_TO(content_start), LEN(content_start, p), 
 -      lexer->current_line);
 -  }
 -	break;
 -	case 12:
 -#line 143 "ragel/i18n/ro.c.rl"
 -	{
 -    STORE_ATTR(comment);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 13:
 -#line 148 "ragel/i18n/ro.c.rl"
 -	{
 -    STORE_ATTR(tag);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 14:
 -#line 153 "ragel/i18n/ro.c.rl"
 -	{
 -    lexer->line_number += 1;
 -    MARK(final_newline, p);
 -  }
 -	break;
 -	case 15:
 -#line 158 "ragel/i18n/ro.c.rl"
 -	{
 -    MARK(last_newline, p + 1);
 -  }
 -	break;
 -	case 16:
 -#line 162 "ragel/i18n/ro.c.rl"
 -	{
 -    if (lexer->mark == 0) {
 -      MARK(mark, p);
 -    }
 -  }
 -	break;
 -	case 17:
 -#line 168 "ragel/i18n/ro.c.rl"
 -	{
 -    MARK(keyword_end, p);
 -    MARK(keyword_start, PTR_TO(mark));
 -    MARK(content_start, p + 1);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 18:
 -#line 175 "ragel/i18n/ro.c.rl"
 -	{
 -    MARK(content_end, p);
 -  }
 -	break;
 -	case 19:
 -#line 179 "ragel/i18n/ro.c.rl"
 -	{
 -    p = p - 1;
 -    lexer->current_line = lexer->line_number;
 -    current_row = rb_ary_new();
 -  }
 -	break;
 -	case 20:
 -#line 185 "ragel/i18n/ro.c.rl"
 -	{
 -		MARK(content_start, p);
 -  }
 -	break;
 -	case 21:
 -#line 189 "ragel/i18n/ro.c.rl"
 -	{
 -    VALUE re_pipe, re_newline, re_backslash;
 -    VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
 -    rb_funcall(con, rb_intern("strip!"), 0);
 -    re_pipe      = rb_reg_regcomp(rb_str_new2("\\\\\\|"));
 -    re_newline   = rb_reg_regcomp(rb_str_new2("\\\\n"));
 -    re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_pipe,      rb_str_new2("|"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_newline,   rb_str_new2("\n"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\"));
 -
 -    rb_ary_push(current_row, con);
 -  }
 -	break;
 -	case 22:
 -#line 203 "ragel/i18n/ro.c.rl"
 -	{
 -    rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
 -  }
 -	break;
 -	case 23:
 -#line 207 "ragel/i18n/ro.c.rl"
 -	{
 -    int line;
 -    if (cs < lexer_first_final) {
 -      size_t count = 0;
 -      VALUE newstr_val;
 -      char *newstr;
 -      int newstr_count = 0;        
 -      size_t len;
 -      const char *buff;
 -      if (lexer->last_newline != 0) {
 -        len = LEN(last_newline, eof);
 -        buff = PTR_TO(last_newline);
 -      } else {
 -        len = strlen(data);
 -        buff = data;
 -      }
 -
 -      /* Allocate as a ruby string so that it gets cleaned up by GC */
 -      newstr_val = rb_str_new(buff, len);
 -      newstr = RSTRING_PTR(newstr_val);
 -
 -
 -      for (count = 0; count < len; count++) {
 -        if(buff[count] == 10) {
 -          newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
 -          break;
 -        } else {
 -          if (buff[count] == '%') {
 -            newstr[newstr_count++] = buff[count];
 -            newstr[newstr_count] = buff[count];
 -          } else {
 -            newstr[newstr_count] = buff[count];
 -          }
 -        }
 -        newstr_count++;
 -      }
 -
 -      line = lexer->line_number;
 -      lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
 -      raise_lexer_error(newstr, line);
 -    } else {
 -      rb_funcall(listener, rb_intern("eof"), 0);
 -    }
 -  }
 -	break;
 -#line 1328 "ext/gherkin_lexer_ro/gherkin_lexer_ro.c"
 -		}
 -	}
 -
 -_again:
 -	if ( cs == 0 )
 -		goto _out;
 -	if ( ++p != pe )
 -		goto _resume;
 -	_test_eof: {}
 -	if ( p == eof )
 -	{
 -	const char *__acts = _lexer_actions + _lexer_eof_actions[cs];
 -	unsigned int __nacts = (unsigned int) *__acts++;
 -	while ( __nacts-- > 0 ) {
 -		switch ( *__acts++ ) {
 -	case 23:
 -#line 207 "ragel/i18n/ro.c.rl"
 -	{
 -    int line;
 -    if (cs < lexer_first_final) {
 -      size_t count = 0;
 -      VALUE newstr_val;
 -      char *newstr;
 -      int newstr_count = 0;        
 -      size_t len;
 -      const char *buff;
 -      if (lexer->last_newline != 0) {
 -        len = LEN(last_newline, eof);
 -        buff = PTR_TO(last_newline);
 -      } else {
 -        len = strlen(data);
 -        buff = data;
 -      }
 -
 -      /* Allocate as a ruby string so that it gets cleaned up by GC */
 -      newstr_val = rb_str_new(buff, len);
 -      newstr = RSTRING_PTR(newstr_val);
 -
 -
 -      for (count = 0; count < len; count++) {
 -        if(buff[count] == 10) {
 -          newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
 -          break;
 -        } else {
 -          if (buff[count] == '%') {
 -            newstr[newstr_count++] = buff[count];
 -            newstr[newstr_count] = buff[count];
 -          } else {
 -            newstr[newstr_count] = buff[count];
 -          }
 -        }
 -        newstr_count++;
 -      }
 -
 -      line = lexer->line_number;
 -      lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
 -      raise_lexer_error(newstr, line);
 -    } else {
 -      rb_funcall(listener, rb_intern("eof"), 0);
 -    }
 -  }
 -	break;
 -#line 1391 "ext/gherkin_lexer_ro/gherkin_lexer_ro.c"
 -		}
 -	}
 -	}
 -
 -	_out: {}
 -	}
 -
 -#line 426 "ragel/i18n/ro.c.rl"
 -
 -    assert(p <= pe && "data overflow after parsing execute");
 -    assert(lexer->content_start <= len && "content starts after data end");
 -    assert(lexer->mark < len && "mark is after data end");
 -    
 -    /* Reset lexer by re-initializing the whole thing */
 -    lexer_init(lexer);
 -
 -    if (cs == lexer_error) {
 -      rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails.");
 -    } else {
 -      return Qtrue;
 -    }
 -  }
 -}
 -
 -void Init_gherkin_lexer_ro()
 -{
 -  mGherkin = rb_define_module("Gherkin");
 -  mGherkinLexer = rb_define_module_under(mGherkin, "Lexer");
 -  rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError"));
 -
 -  mCLexer = rb_define_module_under(mGherkin, "CLexer");
 -  cI18nLexer = rb_define_class_under(mCLexer, "Ro", rb_cObject);
 -  rb_define_alloc_func(cI18nLexer, CLexer_alloc);
 -  rb_define_method(cI18nLexer, "initialize", CLexer_init, 1);
 -  rb_define_method(cI18nLexer, "scan", CLexer_scan, 1);
 -}
 -
diff --cc ext/gherkin_lexer_ru/extconf.rb
index 7ec714e,7ec714e..0000000
deleted file mode 100644,100644
--- a/ext/gherkin_lexer_ru/extconf.rb
+++ /dev/null
@@@ -1,6 -1,6 +1,0 @@@
--require 'mkmf'
--CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags']
--$CFLAGS << ' -O0 -Wall' if CONFIG['CC'] =~ /gcc|clang/
--dir_config("gherkin_lexer_ru")
--have_library("c", "main")
--create_makefile("gherkin_lexer_ru")
diff --cc ext/gherkin_lexer_ru/gherkin_lexer_ru.c
index 15bde16,6f95a21..0000000
deleted file mode 100644,100644
--- a/ext/gherkin_lexer_ru/gherkin_lexer_ru.c
+++ /dev/null
@@@ -1,2058 -1,2071 +1,0 @@@
--
- #line 1 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ru.c.rl"
- #include <assert.h>
- #include <ruby.h>
- 
- #if defined(_WIN32)
- #include <stddef.h>
- #endif
- 
- #ifdef HAVE_RUBY_RE_H
- #include <ruby/re.h>
- #else
- #include <re.h>
- #endif
- 
- #ifdef HAVE_RUBY_ENCODING_H
- #include <ruby/encoding.h>
- #define ENCODED_STR_NEW(ptr, len) \
-     rb_enc_str_new(ptr, len, rb_utf8_encoding())
- #else
- #define ENCODED_STR_NEW(ptr, len) \
-     rb_str_new(ptr, len)
- #endif
- 
- #ifndef RSTRING_PTR
- #define RSTRING_PTR(s) (RSTRING(s)->ptr)
- #endif
- 
- #ifndef RSTRING_LEN
- #define RSTRING_LEN(s) (RSTRING(s)->len)
- #endif
- 
- #define DATA_GET(FROM, TYPE, NAME) \
-   Data_Get_Struct(FROM, TYPE, NAME); \
-   if (NAME == NULL) { \
-     rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \
-   }
-  
- typedef struct lexer_state {
-   int content_len;
-   int line_number;
-   int current_line;
-   int start_col;
-   size_t mark;
-   size_t keyword_start;
-   size_t keyword_end;
-   size_t next_keyword_start;
-   size_t content_start;
-   size_t content_end;
-   size_t docstring_content_type_start;
-   size_t docstring_content_type_end;
-   size_t query_start;
-   size_t last_newline;
-   size_t final_newline;
- } lexer_state;
- 
- static VALUE mGherkin;
- static VALUE mGherkinLexer;
- static VALUE mCLexer;
- static VALUE cI18nLexer;
- static VALUE rb_eGherkinLexingError;
- 
- #define LEN(AT, P) (P - data - lexer->AT)
- #define MARK(M, P) (lexer->M = (P) - data)
- #define PTR_TO(P) (data + lexer->P)
- 
- #define STORE_KW_END_CON(EVENT) \
-   store_multiline_kw_con(listener, # EVENT, \
-     PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \
-     PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \
-     lexer->current_line, lexer->start_col); \
-     if (lexer->content_end != 0) { \
-       p = PTR_TO(content_end - 1); \
-     } \
-     lexer->content_end = 0
- 
- #define STORE_ATTR(ATTR) \
-     store_attr(listener, # ATTR, \
-       PTR_TO(content_start), LEN(content_start, p), \
-       lexer->line_number)
- 
- 
- #line 254 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ru.c.rl"
- 
- 
- /** Data **/
- 
- #line 89 "ext/gherkin_lexer_ru/gherkin_lexer_ru.c"
- static const char _lexer_actions[] = {
- 	0, 1, 0, 1, 1, 1, 2, 1, 
- 	3, 1, 4, 1, 5, 1, 6, 1, 
- 	7, 1, 8, 1, 9, 1, 10, 1, 
- 	11, 1, 12, 1, 13, 1, 16, 1, 
- 	17, 1, 18, 1, 19, 1, 20, 1, 
- 	21, 1, 22, 1, 23, 2, 1, 18, 
- 	2, 4, 5, 2, 13, 0, 2, 14, 
- 	15, 2, 17, 0, 2, 17, 2, 2, 
- 	17, 16, 2, 17, 19, 2, 18, 6, 
- 	2, 18, 7, 2, 18, 8, 2, 18, 
- 	9, 2, 18, 10, 2, 18, 16, 2, 
- 	20, 21, 2, 22, 0, 2, 22, 2, 
- 	2, 22, 16, 2, 22, 19, 3, 3, 
- 	14, 15, 3, 5, 14, 15, 3, 11, 
- 	14, 15, 3, 12, 14, 15, 3, 13, 
- 	14, 15, 3, 14, 15, 18, 3, 17, 
- 	0, 11, 3, 17, 14, 15, 4, 1, 
- 	14, 15, 18, 4, 4, 5, 14, 15, 
- 	4, 17, 0, 14, 15, 5, 17, 0, 
- 	11, 14, 15
- };
- 
- static const short _lexer_key_offsets[] = {
- 	0, 0, 12, 22, 23, 25, 27, 38, 
- 	39, 40, 42, 44, 49, 54, 59, 64, 
- 	68, 72, 74, 75, 76, 77, 78, 79, 
- 	80, 81, 82, 83, 84, 85, 86, 87, 
- 	88, 89, 94, 101, 106, 110, 116, 119, 
- 	121, 127, 138, 139, 141, 142, 143, 144, 
- 	145, 146, 147, 148, 149, 150, 151, 152, 
- 	153, 154, 155, 156, 157, 158, 159, 160, 
- 	161, 162, 163, 165, 166, 167, 169, 170, 
- 	171, 172, 173, 174, 175, 176, 177, 178, 
- 	179, 180, 181, 182, 183, 184, 185, 186, 
- 	195, 206, 208, 219, 221, 224, 226, 228, 
- 	230, 232, 234, 236, 238, 240, 242, 244, 
- 	246, 248, 250, 252, 254, 256, 258, 260, 
- 	262, 264, 266, 268, 271, 273, 275, 277, 
- 	279, 281, 283, 285, 287, 289, 291, 293, 
- 	295, 297, 299, 301, 303, 305, 307, 309, 
- 	311, 313, 315, 317, 319, 321, 323, 325, 
- 	327, 330, 332, 334, 336, 338, 340, 342, 
- 	344, 346, 348, 350, 352, 354, 356, 358, 
- 	361, 363, 365, 367, 369, 371, 373, 375, 
- 	377, 379, 381, 383, 385, 387, 389, 391, 
- 	393, 395, 397, 399, 401, 403, 405, 407, 
- 	409, 411, 413, 415, 417, 419, 421, 423, 
- 	425, 427, 429, 431, 433, 435, 437, 439, 
- 	441, 443, 445, 447, 449, 451, 454, 456, 
- 	458, 460, 462, 464, 466, 468, 470, 472, 
- 	474, 477, 479, 481, 483, 485, 487, 489, 
- 	491, 493, 495, 497, 499, 501, 503, 505, 
- 	507, 509, 511, 513, 515, 517, 519, 520, 
- 	521, 522, 523, 524, 525, 526, 527, 528, 
- 	529, 530, 531, 532, 533, 535, 536, 538, 
- 	539, 540, 541, 542, 543, 544, 545, 546, 
- 	547, 548, 549, 550, 551, 552, 553, 554, 
- 	555, 556, 557, 558, 559, 560, 561, 562, 
- 	563, 564, 565, 572, 575, 577, 579, 581, 
- 	583, 585, 587, 589, 591, 593, 595, 597, 
- 	599, 601, 603, 605, 607, 609, 611, 613, 
- 	615, 617, 619, 621, 623, 625, 628, 630, 
- 	632, 634, 636, 638, 640, 642, 644, 645, 
- 	646, 647, 648, 649, 650, 652, 653, 654, 
- 	655, 656, 657, 658, 659, 660, 661, 662, 
- 	663, 664, 665, 666, 667, 668, 676, 681, 
- 	683, 685, 687, 689, 691, 693, 695, 697, 
- 	699, 701, 703, 705, 707, 709, 711, 713, 
- 	715, 717, 720, 722, 724, 726, 728, 730, 
- 	732, 734, 736, 738, 740, 742, 744, 746, 
- 	748, 750, 752, 754, 756, 758, 760, 762, 
- 	764, 766, 768, 771, 773, 775, 777, 779, 
- 	781, 783, 785, 787, 789, 791, 793, 795, 
- 	797, 800, 802, 804, 806, 808, 810, 812, 
- 	814, 816, 818, 820, 822, 824, 826, 828, 
- 	830, 832, 834, 836, 838, 840, 842, 844, 
- 	846, 848, 850, 852, 854, 856, 858, 860, 
- 	862, 864, 866, 868, 870, 872, 874, 876, 
- 	878, 880, 882, 884, 886, 888, 890, 892, 
- 	894, 897, 899, 901, 903, 905, 907, 909, 
- 	911, 913, 915, 917, 919, 921, 923, 925, 
- 	927, 929, 931, 933, 935, 937, 939, 941, 
- 	942, 943, 944, 945, 946, 947, 948, 949, 
- 	950, 951, 952, 953, 954, 955, 956, 957, 
- 	958, 959, 960, 961, 962, 963, 964, 965, 
- 	966, 967, 968, 969, 970, 971, 972, 973, 
- 	974, 975, 984, 995, 997, 999, 1002, 1004, 
- 	1006, 1008, 1010, 1012, 1014, 1016, 1018, 1020, 
- 	1022, 1024, 1026, 1028, 1030, 1032, 1034, 1036, 
- 	1038, 1040, 1042, 1044, 1046, 1049, 1051, 1053, 
- 	1055, 1057, 1059, 1061, 1063, 1065, 1067, 1069, 
- 	1071, 1073, 1075, 1077, 1079, 1081, 1083, 1085, 
- 	1087, 1089, 1091, 1093, 1095, 1097, 1099, 1101, 
- 	1103, 1105, 1108, 1110, 1112, 1114, 1116, 1118, 
- 	1120, 1122, 1124, 1126, 1128, 1130, 1132, 1134, 
- 	1136, 1138, 1140, 1142, 1144, 1146, 1148, 1150, 
- 	1152, 1154, 1156, 1158, 1160, 1162, 1164, 1166, 
- 	1169, 1171, 1173, 1175, 1177, 1179, 1181, 1183, 
- 	1185, 1187, 1189, 1192, 1194, 1196, 1198, 1200, 
- 	1202, 1204, 1206, 1208, 1210, 1212, 1214, 1216, 
- 	1218, 1220, 1222, 1224, 1226, 1228, 1230, 1232, 
- 	1234, 1236, 1237, 1238, 1239, 1240, 1241, 1242, 
- 	1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 
- 	1251, 1260, 1271, 1273, 1275, 1278, 1280, 1282, 
- 	1284, 1286, 1288, 1290, 1292, 1294, 1296, 1298, 
- 	1300, 1302, 1304, 1306, 1308, 1310, 1312, 1314, 
- 	1316, 1318, 1320, 1322, 1325, 1327, 1329, 1332, 
- 	1334, 1336, 1338, 1340, 1342, 1344, 1346, 1348, 
- 	1350, 1352, 1354, 1356, 1358, 1360, 1362, 1364, 
- 	1366, 1368, 1370, 1372, 1374, 1376, 1378, 1380, 
- 	1382, 1384, 1386, 1388, 1390, 1393, 1395, 1397, 
- 	1399, 1401, 1403, 1405, 1407, 1409, 1411, 1413, 
- 	1415, 1417, 1419, 1421, 1423, 1425, 1427, 1429, 
- 	1431, 1433, 1435, 1437, 1439, 1441, 1444, 1446, 
- 	1448, 1450, 1452, 1454, 1456, 1458, 1460, 1462, 
- 	1464, 1466, 1468, 1470, 1473, 1475, 1477, 1479, 
- 	1481, 1483, 1485, 1487, 1489, 1491, 1493, 1495, 
- 	1497, 1499, 1501, 1503, 1505, 1507, 1509, 1511, 
- 	1513, 1515, 1517, 1519, 1521, 1523, 1525, 1527, 
- 	1529, 1531, 1533, 1535, 1537, 1539, 1541, 1543, 
- 	1545, 1547, 1549, 1551, 1554, 1556, 1558, 1560, 
- 	1562, 1564, 1566, 1568, 1570, 1572, 1574, 1576, 
- 	1579, 1581, 1583, 1585, 1587, 1589, 1591, 1593, 
- 	1595, 1597, 1599, 1601, 1603, 1605, 1607, 1609, 
- 	1611, 1613, 1615, 1617, 1619, 1621, 1622, 1623, 
- 	1625, 1626, 1627, 1628, 1629, 1630, 1631, 1632, 
- 	1633, 1634, 1635, 1636, 1638, 1639, 1640, 1641, 
- 	1642, 1643, 1644, 1645, 1646, 1647, 1648
- };
- 
- static const char _lexer_trans_keys[] = {
- 	-48, -17, 10, 32, 34, 35, 37, 42, 
- 	64, 124, 9, 13, -112, -108, -107, -104, 
- 	-102, -99, -97, -95, -94, -92, 32, 10, 
- 	13, 10, 13, -48, 10, 32, 34, 35, 
- 	37, 42, 64, 124, 9, 13, 34, 34, 
- 	10, 13, 10, 13, 10, 32, 34, 9, 
- 	13, 10, 32, 34, 9, 13, 10, 32, 
- 	34, 9, 13, 10, 32, 34, 9, 13, 
- 	10, 32, 9, 13, 10, 32, 9, 13, 
- 	10, 13, 10, 95, 70, 69, 65, 84, 
- 	85, 82, 69, 95, 69, 78, 68, 95, 
- 	37, 13, 32, 64, 9, 10, 9, 10, 
- 	13, 32, 64, 11, 12, 10, 32, 64, 
- 	9, 13, 32, 124, 9, 13, 10, 32, 
- 	92, 124, 9, 13, 10, 92, 124, 10, 
- 	92, 10, 32, 92, 124, 9, 13, -48, 
- 	10, 32, 34, 35, 37, 42, 64, 124, 
- 	9, 13, -48, -80, -66, -48, -67, -48, 
- 	-66, -48, -65, -47, -125, -47, -127, -47, 
- 	-126, -48, -72, -48, -68, -47, -127, -48, 
- 	-69, -48, -72, -48, 32, -66, -48, -77, 
- 	-67, -48, -76, -48, -80, -47, -126, -48, 
- 	-75, -48, -70, -47, -127, -47, -126, 58, 
- 	10, 10, -48, 10, 32, 35, 37, 42, 
- 	64, 9, 13, -112, -108, -107, -104, -102, 
- 	-99, -97, -95, -94, -92, 10, 10, 32, 
- 	-48, 10, 32, 34, 35, 37, 42, 64, 
- 	124, 9, 13, -48, 10, -80, -66, 10, 
- 	-48, 10, -67, 10, -48, 10, -66, 10, 
- 	-48, 10, -65, 10, -47, 10, -125, 10, 
- 	-47, 10, -127, 10, -47, 10, -126, 10, 
- 	-48, 10, -72, 10, -48, 10, -68, 10, 
- 	-47, 10, -127, 10, -48, 10, -69, 10, 
- 	-48, 10, -72, 10, -48, 10, 32, -66, 
- 	10, -48, 10, -77, 10, -48, 10, -76, 
- 	10, -48, 10, -80, 10, -47, 10, -126, 
- 	10, -48, 10, -66, 10, -48, 10, -68, 
- 	10, -47, 10, -125, 10, 10, 32, -48, 
- 	10, -74, 10, -48, 10, -75, 10, -47, 
- 	10, -125, 10, -47, 10, -127, 10, -47, 
- 	10, -126, 10, -47, 10, -116, 10, -48, 
- 	-47, 10, -78, 10, -48, 10, -66, 10, 
- 	-48, 10, -71, 10, -47, 10, -127, 10, 
- 	-47, 10, -126, 10, -48, 10, -78, 10, 
- 	-48, 10, -66, 10, 10, 58, -126, -122, 
- 	10, -47, 10, -128, 10, -47, 10, -125, 
- 	10, -48, 10, -70, 10, -47, 10, -126, 
- 	10, -47, 10, -125, 10, -47, 10, -128, 
- 	10, -48, 10, -80, 10, 10, 32, -47, 
- 	10, -127, 10, -47, 10, -122, 10, -48, 
- 	10, -75, 10, -48, 10, -67, 10, -48, 
- 	10, -80, 10, -47, 10, -128, 10, -48, 
- 	10, -72, 10, -47, 10, -113, 10, -48, 
- 	10, -75, 10, -48, 10, -67, 10, -48, 
- 	10, -80, 10, -47, 10, -128, 10, -48, 
- 	10, -72, 10, -48, 10, -71, 10, -48, 
- 	10, -66, 10, -48, 10, 32, -47, 10, 
- 	-125, 10, -48, 10, -67, 10, -48, 10, 
- 	-70, 10, -47, 10, -122, 10, -48, 10, 
- 	-72, 10, -48, -47, 10, -66, 10, -48, 
- 	10, -67, 10, -48, 10, -80, 10, -48, 
- 	10, -69, 10, 10, 95, 10, 70, 10, 
- 	69, 10, 65, 10, 84, 10, 85, 10, 
- 	82, 10, 69, 10, 95, 10, 69, 10, 
- 	78, 10, 68, 10, 95, 10, 37, -47, 
- 	-126, -48, -66, -48, -68, -47, -125, 32, 
- 	-48, -74, -48, -75, -47, -128, -125, -48, 
- 	-75, -72, -48, -76, -47, -117, -47, -127, 
- 	-47, -126, -48, -66, -47, -128, -48, -72, 
- 	-47, -113, -48, -68, -48, -75, -47, -128, 
- 	-47, -117, 58, 10, 10, -48, 10, 32, 
- 	35, 124, 9, 13, -95, -92, 10, -48, 
- 	10, -78, 10, -48, 10, -66, 10, -48, 
- 	10, -71, 10, -47, 10, -127, 10, -47, 
- 	10, -126, 10, -48, 10, -78, 10, -48, 
- 	10, -66, 10, 10, 58, -47, 10, -125, 
- 	10, -48, 10, -67, 10, -48, 10, -70, 
- 	10, -47, 10, -122, 10, -48, 10, -72, 
- 	10, -48, -47, 10, -66, 10, -48, 10, 
- 	-67, 10, -48, 10, -80, 10, -48, 10, 
- 	-69, 10, -113, 10, -47, -127, -47, -126, 
- 	-47, -116, -48, -47, -78, -48, -66, -48, 
- 	-71, -47, -127, -47, -126, -48, -78, -48, 
- 	-66, 58, 10, 10, -48, 10, 32, 35, 
- 	37, 64, 9, 13, -102, -97, -95, -92, 
- 	10, -48, 10, -66, 10, -48, 10, -67, 
- 	10, -47, 10, -126, 10, -48, 10, -75, 
- 	10, -48, 10, -70, 10, -47, 10, -127, 
- 	10, -47, 10, -126, 10, 10, 58, -47, 
- 	10, -128, 10, -48, 10, -75, -72, 10, 
- 	-48, 10, -76, 10, -47, 10, -117, 10, 
- 	-47, 10, -127, 10, -47, 10, -126, 10, 
- 	-48, 10, -66, 10, -47, 10, -128, 10, 
- 	-48, 10, -72, 10, -47, 10, -113, 10, 
- 	-48, 10, -68, 10, -48, 10, -75, 10, 
- 	-47, 10, -128, 10, -47, 10, -117, 10, 
- 	-48, -47, 10, -78, 10, -48, 10, -66, 
- 	10, -48, 10, -71, 10, -47, 10, -127, 
- 	10, -47, 10, -126, 10, -48, 10, -78, 
- 	10, -48, 10, -66, 10, -126, -122, 10, 
- 	-47, 10, -128, 10, -47, 10, -125, 10, 
- 	-48, 10, -70, 10, -47, 10, -126, 10, 
- 	-47, 10, -125, 10, -47, 10, -128, 10, 
- 	-48, 10, -80, 10, 10, 32, -47, 10, 
- 	-127, 10, -47, 10, -122, 10, -48, 10, 
- 	-75, 10, -48, 10, -67, 10, -48, 10, 
- 	-80, 10, -48, 10, -75, 10, -48, 10, 
- 	-67, 10, -48, 10, -80, 10, -47, 10, 
- 	-128, 10, -48, 10, -72, 10, -48, 10, 
- 	-71, 10, -47, 10, -125, 10, -48, 10, 
- 	-67, 10, -48, 10, -70, 10, -47, 10, 
- 	-122, 10, -48, 10, -72, 10, -48, -47, 
- 	10, -66, 10, -48, 10, -67, 10, -48, 
- 	10, -80, 10, -48, 10, -69, 10, 10, 
- 	95, 10, 70, 10, 69, 10, 65, 10, 
- 	84, 10, 85, 10, 82, 10, 69, 10, 
- 	95, 10, 69, 10, 78, 10, 68, 10, 
- 	95, 10, 37, -126, -122, -47, -128, -47, 
- 	-125, -48, -70, -47, -126, -47, -125, -47, 
- 	-128, -48, -80, 32, -47, -127, -47, -122, 
- 	-48, -75, -48, -67, -48, -80, -47, -128, 
- 	-48, -72, -47, -113, 58, 10, 10, -48, 
- 	10, 32, 35, 37, 42, 64, 9, 13, 
- 	-112, -108, -107, -104, -102, -99, -97, -95, 
- 	-94, -92, 10, 10, 32, -48, 10, -80, 
- 	-66, 10, -48, 10, -67, 10, -48, 10, 
- 	-66, 10, -48, 10, -65, 10, -47, 10, 
- 	-125, 10, -47, 10, -127, 10, -47, 10, 
- 	-126, 10, -48, 10, -72, 10, -48, 10, 
- 	-68, 10, -47, 10, -127, 10, -48, 10, 
- 	-69, 10, -48, 10, -72, 10, -48, 10, 
- 	32, -66, 10, -48, 10, -77, 10, -48, 
- 	10, -76, 10, -48, 10, -80, 10, -47, 
- 	10, -126, 10, -48, 10, -66, 10, -48, 
- 	10, -68, 10, -47, 10, -125, 10, 10, 
- 	32, -48, 10, -74, 10, -48, 10, -75, 
- 	10, -47, 10, -125, 10, -47, 10, -127, 
- 	10, -47, 10, -126, 10, -47, 10, -116, 
- 	10, -48, -47, 10, -78, 10, -48, 10, 
- 	-66, 10, -48, 10, -71, 10, -47, 10, 
- 	-127, 10, -47, 10, -126, 10, -48, 10, 
- 	-78, 10, -48, 10, -66, 10, 10, 58, 
- 	-122, 10, -48, 10, -75, 10, -48, 10, 
- 	-67, 10, -48, 10, -80, 10, -47, 10, 
- 	-128, 10, -48, 10, -72, 10, -48, 10, 
- 	-71, 10, -48, 10, -66, 10, -48, 10, 
- 	32, -47, 10, -125, 10, -48, 10, -67, 
- 	10, -48, 10, -70, 10, -47, 10, -122, 
- 	10, -48, 10, -72, 10, -48, -47, 10, 
- 	-66, 10, -48, 10, -67, 10, -48, 10, 
- 	-80, 10, -48, 10, -69, 10, -113, 10, 
- 	10, 95, 10, 70, 10, 69, 10, 65, 
- 	10, 84, 10, 85, 10, 82, 10, 69, 
- 	10, 95, 10, 69, 10, 78, 10, 68, 
- 	10, 95, 10, 37, -48, -75, -48, -67, 
- 	-48, -80, -47, -128, -48, -72, -48, -71, 
- 	58, 10, 10, -48, 10, 32, 35, 37, 
- 	42, 64, 9, 13, -112, -108, -107, -104, 
- 	-102, -99, -97, -95, -94, -92, 10, 10, 
- 	32, -48, 10, -80, -66, 10, -48, 10, 
- 	-67, 10, -48, 10, -66, 10, -48, 10, 
- 	-65, 10, -47, 10, -125, 10, -47, 10, 
- 	-127, 10, -47, 10, -126, 10, -48, 10, 
- 	-72, 10, -48, 10, -68, 10, -47, 10, 
- 	-127, 10, -48, 10, -69, 10, -48, 10, 
- 	-72, 10, -48, 10, 32, -66, 10, -48, 
- 	10, -77, -67, 10, -48, 10, -76, 10, 
- 	-48, 10, -80, 10, -47, 10, -126, 10, 
- 	-48, 10, -75, 10, -48, 10, -70, 10, 
- 	-47, 10, -127, 10, -47, 10, -126, 10, 
- 	10, 58, -47, 10, -126, 10, -48, 10, 
- 	-66, 10, -48, 10, -68, 10, -47, 10, 
- 	-125, 10, 10, 32, -48, 10, -74, 10, 
- 	-48, 10, -75, 10, -47, 10, -128, -125, 
- 	10, -48, 10, -75, 10, -48, 10, -76, 
- 	10, -47, 10, -117, 10, -47, 10, -127, 
- 	10, -47, 10, -126, 10, -48, 10, -66, 
- 	10, -47, 10, -128, 10, -48, 10, -72, 
- 	10, -47, 10, -113, 10, -47, 10, -127, 
- 	10, -47, 10, -126, 10, -47, 10, -116, 
- 	10, -48, -47, 10, -78, 10, -48, 10, 
- 	-66, 10, -48, 10, -71, 10, -47, 10, 
- 	-127, 10, -47, 10, -126, 10, -48, 10, 
- 	-78, 10, -48, 10, -66, 10, -126, -122, 
- 	10, -47, 10, -128, 10, -47, 10, -125, 
- 	10, -48, 10, -70, 10, -47, 10, -126, 
- 	10, -47, 10, -125, 10, -47, 10, -128, 
- 	10, -48, 10, -80, 10, 10, 32, -47, 
- 	10, -127, 10, -47, 10, -122, 10, -48, 
- 	10, -75, 10, -48, 10, -67, 10, -48, 
- 	10, -80, 10, -48, 10, -75, 10, -48, 
- 	10, -67, 10, -48, 10, -80, 10, -47, 
- 	10, -128, 10, -48, 10, -72, 10, -48, 
- 	10, -71, 10, -48, 10, -66, 10, -48, 
- 	10, 32, -77, 10, -47, 10, -125, 10, 
- 	-48, 10, -67, 10, -48, 10, -70, 10, 
- 	-47, 10, -122, 10, -48, 10, -72, 10, 
- 	-48, -47, 10, -66, 10, -48, 10, -67, 
- 	10, -48, 10, -80, 10, -48, 10, -69, 
- 	10, 10, 95, 10, 70, 10, 69, 10, 
- 	65, 10, 84, 10, 85, 10, 82, 10, 
- 	69, 10, 95, 10, 69, 10, 78, 10, 
- 	68, 10, 95, 10, 37, -48, -66, -48, 
- 	32, -77, -47, -125, -48, -67, -48, -70, 
- 	-47, -122, -48, -72, -48, -47, -66, -48, 
- 	-67, -48, -80, -48, -69, -113, -69, -65, 
- 	0
- };
- 
- static const char _lexer_single_lengths[] = {
- 	0, 10, 10, 1, 2, 2, 9, 1, 
- 	1, 2, 2, 3, 3, 3, 3, 2, 
- 	2, 2, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 3, 5, 3, 2, 4, 3, 2, 
- 	4, 9, 1, 2, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 2, 1, 1, 2, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 7, 
- 	11, 2, 9, 2, 3, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 3, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	3, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 3, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 3, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	3, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 2, 1, 2, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 5, 3, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 3, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 1, 1, 
- 	1, 1, 1, 1, 2, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 6, 5, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 3, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 3, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	3, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	3, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 7, 11, 2, 2, 3, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 3, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 3, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 3, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 3, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	7, 11, 2, 2, 3, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 3, 2, 2, 3, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 3, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 3, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 3, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 3, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 3, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 1, 1, 2, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 2, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 0
- };
- 
- static const char _lexer_range_lengths[] = {
- 	0, 1, 0, 0, 0, 0, 1, 0, 
- 	0, 0, 0, 1, 1, 1, 1, 1, 
- 	1, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 1, 1, 1, 1, 1, 0, 0, 
- 	1, 1, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 1, 
- 	0, 0, 1, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 1, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 1, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 1, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	1, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0
- };
- 
- static const short _lexer_index_offsets[] = {
- 	0, 0, 12, 23, 25, 28, 31, 42, 
- 	44, 46, 49, 52, 57, 62, 67, 72, 
- 	76, 80, 83, 85, 87, 89, 91, 93, 
- 	95, 97, 99, 101, 103, 105, 107, 109, 
- 	111, 113, 118, 125, 130, 134, 140, 144, 
- 	147, 153, 164, 166, 169, 171, 173, 175, 
- 	177, 179, 181, 183, 185, 187, 189, 191, 
- 	193, 195, 197, 199, 201, 203, 205, 207, 
- 	209, 211, 213, 216, 218, 220, 223, 225, 
- 	227, 229, 231, 233, 235, 237, 239, 241, 
- 	243, 245, 247, 249, 251, 253, 255, 257, 
- 	266, 278, 281, 292, 295, 299, 302, 305, 
- 	308, 311, 314, 317, 320, 323, 326, 329, 
- 	332, 335, 338, 341, 344, 347, 350, 353, 
- 	356, 359, 362, 365, 369, 372, 375, 378, 
- 	381, 384, 387, 390, 393, 396, 399, 402, 
- 	405, 408, 411, 414, 417, 420, 423, 426, 
- 	429, 432, 435, 438, 441, 444, 447, 450, 
- 	453, 457, 460, 463, 466, 469, 472, 475, 
- 	478, 481, 484, 487, 490, 493, 496, 499, 
- 	503, 506, 509, 512, 515, 518, 521, 524, 
- 	527, 530, 533, 536, 539, 542, 545, 548, 
- 	551, 554, 557, 560, 563, 566, 569, 572, 
- 	575, 578, 581, 584, 587, 590, 593, 596, 
- 	599, 602, 605, 608, 611, 614, 617, 620, 
- 	623, 626, 629, 632, 635, 638, 642, 645, 
- 	648, 651, 654, 657, 660, 663, 666, 669, 
- 	672, 676, 679, 682, 685, 688, 691, 694, 
- 	697, 700, 703, 706, 709, 712, 715, 718, 
- 	721, 724, 727, 730, 733, 736, 739, 741, 
- 	743, 745, 747, 749, 751, 753, 755, 757, 
- 	759, 761, 763, 765, 767, 770, 772, 775, 
- 	777, 779, 781, 783, 785, 787, 789, 791, 
- 	793, 795, 797, 799, 801, 803, 805, 807, 
- 	809, 811, 813, 815, 817, 819, 821, 823, 
- 	825, 827, 829, 836, 840, 843, 846, 849, 
- 	852, 855, 858, 861, 864, 867, 870, 873, 
- 	876, 879, 882, 885, 888, 891, 894, 897, 
- 	900, 903, 906, 909, 912, 915, 919, 922, 
- 	925, 928, 931, 934, 937, 940, 943, 945, 
- 	947, 949, 951, 953, 955, 958, 960, 962, 
- 	964, 966, 968, 970, 972, 974, 976, 978, 
- 	980, 982, 984, 986, 988, 990, 998, 1004, 
- 	1007, 1010, 1013, 1016, 1019, 1022, 1025, 1028, 
- 	1031, 1034, 1037, 1040, 1043, 1046, 1049, 1052, 
- 	1055, 1058, 1062, 1065, 1068, 1071, 1074, 1077, 
- 	1080, 1083, 1086, 1089, 1092, 1095, 1098, 1101, 
- 	1104, 1107, 1110, 1113, 1116, 1119, 1122, 1125, 
- 	1128, 1131, 1134, 1138, 1141, 1144, 1147, 1150, 
- 	1153, 1156, 1159, 1162, 1165, 1168, 1171, 1174, 
- 	1177, 1181, 1184, 1187, 1190, 1193, 1196, 1199, 
- 	1202, 1205, 1208, 1211, 1214, 1217, 1220, 1223, 
- 	1226, 1229, 1232, 1235, 1238, 1241, 1244, 1247, 
- 	1250, 1253, 1256, 1259, 1262, 1265, 1268, 1271, 
- 	1274, 1277, 1280, 1283, 1286, 1289, 1292, 1295, 
- 	1298, 1301, 1304, 1307, 1310, 1313, 1316, 1319, 
- 	1322, 1326, 1329, 1332, 1335, 1338, 1341, 1344, 
- 	1347, 1350, 1353, 1356, 1359, 1362, 1365, 1368, 
- 	1371, 1374, 1377, 1380, 1383, 1386, 1389, 1392, 
- 	1394, 1396, 1398, 1400, 1402, 1404, 1406, 1408, 
- 	1410, 1412, 1414, 1416, 1418, 1420, 1422, 1424, 
- 	1426, 1428, 1430, 1432, 1434, 1436, 1438, 1440, 
- 	1442, 1444, 1446, 1448, 1450, 1452, 1454, 1456, 
- 	1458, 1460, 1469, 1481, 1484, 1487, 1491, 1494, 
- 	1497, 1500, 1503, 1506, 1509, 1512, 1515, 1518, 
- 	1521, 1524, 1527, 1530, 1533, 1536, 1539, 1542, 
- 	1545, 1548, 1551, 1554, 1557, 1561, 1564, 1567, 
- 	1570, 1573, 1576, 1579, 1582, 1585, 1588, 1591, 
- 	1594, 1597, 1600, 1603, 1606, 1609, 1612, 1615, 
- 	1618, 1621, 1624, 1627, 1630, 1633, 1636, 1639, 
- 	1642, 1645, 1649, 1652, 1655, 1658, 1661, 1664, 
- 	1667, 1670, 1673, 1676, 1679, 1682, 1685, 1688, 
- 	1691, 1694, 1697, 1700, 1703, 1706, 1709, 1712, 
- 	1715, 1718, 1721, 1724, 1727, 1730, 1733, 1736, 
- 	1740, 1743, 1746, 1749, 1752, 1755, 1758, 1761, 
- 	1764, 1767, 1770, 1774, 1777, 1780, 1783, 1786, 
- 	1789, 1792, 1795, 1798, 1801, 1804, 1807, 1810, 
- 	1813, 1816, 1819, 1822, 1825, 1828, 1831, 1834, 
- 	1837, 1840, 1842, 1844, 1846, 1848, 1850, 1852, 
- 	1854, 1856, 1858, 1860, 1862, 1864, 1866, 1868, 
- 	1870, 1879, 1891, 1894, 1897, 1901, 1904, 1907, 
- 	1910, 1913, 1916, 1919, 1922, 1925, 1928, 1931, 
- 	1934, 1937, 1940, 1943, 1946, 1949, 1952, 1955, 
- 	1958, 1961, 1964, 1967, 1971, 1974, 1977, 1981, 
- 	1984, 1987, 1990, 1993, 1996, 1999, 2002, 2005, 
- 	2008, 2011, 2014, 2017, 2020, 2023, 2026, 2029, 
- 	2032, 2035, 2038, 2041, 2044, 2047, 2050, 2053, 
- 	2056, 2059, 2062, 2065, 2068, 2072, 2075, 2078, 
- 	2081, 2084, 2087, 2090, 2093, 2096, 2099, 2102, 
- 	2105, 2108, 2111, 2114, 2117, 2120, 2123, 2126, 
- 	2129, 2132, 2135, 2138, 2141, 2144, 2148, 2151, 
- 	2154, 2157, 2160, 2163, 2166, 2169, 2172, 2175, 
- 	2178, 2181, 2184, 2187, 2191, 2194, 2197, 2200, 
- 	2203, 2206, 2209, 2212, 2215, 2218, 2221, 2224, 
- 	2227, 2230, 2233, 2236, 2239, 2242, 2245, 2248, 
- 	2251, 2254, 2257, 2260, 2263, 2266, 2269, 2272, 
- 	2275, 2278, 2281, 2284, 2287, 2290, 2293, 2296, 
- 	2299, 2302, 2305, 2308, 2312, 2315, 2318, 2321, 
- 	2324, 2327, 2330, 2333, 2336, 2339, 2342, 2345, 
- 	2349, 2352, 2355, 2358, 2361, 2364, 2367, 2370, 
- 	2373, 2376, 2379, 2382, 2385, 2388, 2391, 2394, 
- 	2397, 2400, 2403, 2406, 2409, 2412, 2414, 2416, 
- 	2419, 2421, 2423, 2425, 2427, 2429, 2431, 2433, 
- 	2435, 2437, 2439, 2441, 2444, 2446, 2448, 2450, 
- 	2452, 2454, 2456, 2458, 2460, 2462, 2464
- };
- 
- static const short _lexer_trans_targs[] = {
- 	2, 836, 6, 6, 7, 17, 19, 3, 
- 	33, 36, 6, 0, 3, 42, 60, 3, 
- 	66, 46, 251, 324, 813, 817, 0, 4, 
- 	0, 6, 18, 5, 6, 18, 5, 2, 
- 	6, 6, 7, 17, 19, 3, 33, 36, 
- 	6, 0, 8, 0, 9, 0, 11, 10, 
- 	10, 11, 10, 10, 12, 12, 13, 12, 
- 	12, 12, 12, 13, 12, 12, 12, 12, 
- 	14, 12, 12, 12, 12, 15, 12, 12, 
- 	6, 16, 16, 0, 6, 16, 16, 0, 
- 	6, 18, 17, 6, 0, 20, 0, 21, 
- 	0, 22, 0, 23, 0, 24, 0, 25, 
- 	0, 26, 0, 27, 0, 28, 0, 29, 
- 	0, 30, 0, 31, 0, 32, 0, 838, 
- 	0, 0, 0, 0, 0, 34, 35, 6, 
- 	35, 35, 33, 34, 34, 6, 35, 33, 
- 	35, 0, 36, 37, 36, 0, 41, 40, 
- 	39, 37, 40, 38, 0, 39, 37, 38, 
- 	0, 39, 38, 41, 40, 39, 37, 40, 
- 	38, 2, 41, 41, 7, 17, 19, 3, 
- 	33, 36, 41, 0, 43, 0, 44, 48, 
- 	0, 45, 0, 46, 0, 47, 0, 3, 
- 	0, 49, 0, 50, 0, 51, 0, 52, 
- 	0, 53, 0, 54, 0, 55, 0, 56, 
- 	0, 57, 0, 58, 0, 59, 0, 3, 
- 	0, 61, 0, 62, 0, 63, 0, 64, 
- 	0, 65, 0, 3, 0, 67, 238, 0, 
- 	68, 0, 69, 0, 70, 74, 0, 71, 
- 	0, 72, 0, 73, 0, 3, 0, 75, 
- 	0, 76, 0, 77, 0, 78, 0, 79, 
- 	0, 80, 0, 81, 0, 82, 0, 83, 
- 	0, 84, 0, 85, 0, 87, 86, 87, 
- 	86, 88, 87, 87, 6, 224, 89, 6, 
- 	87, 86, 89, 91, 109, 89, 115, 95, 
- 	136, 144, 203, 206, 87, 86, 87, 90, 
- 	86, 2, 6, 6, 7, 17, 19, 3, 
- 	33, 36, 6, 0, 92, 87, 86, 93, 
- 	97, 87, 86, 94, 87, 86, 95, 87, 
- 	86, 96, 87, 86, 89, 87, 86, 98, 
- 	87, 86, 99, 87, 86, 100, 87, 86, 
- 	101, 87, 86, 102, 87, 86, 103, 87, 
- 	86, 104, 87, 86, 105, 87, 86, 106, 
- 	87, 86, 107, 87, 86, 108, 87, 86, 
- 	89, 87, 86, 110, 87, 86, 111, 87, 
- 	86, 112, 87, 86, 113, 87, 86, 114, 
- 	87, 86, 89, 87, 86, 116, 87, 123, 
- 	86, 117, 87, 86, 118, 87, 86, 119, 
- 	87, 86, 120, 87, 86, 121, 87, 86, 
- 	122, 87, 86, 89, 87, 86, 124, 87, 
- 	86, 125, 87, 86, 126, 87, 86, 127, 
- 	87, 86, 128, 87, 86, 129, 87, 86, 
- 	130, 87, 86, 131, 87, 86, 87, 132, 
- 	86, 133, 87, 86, 134, 87, 86, 135, 
- 	87, 86, 89, 87, 86, 137, 87, 86, 
- 	138, 87, 86, 139, 87, 86, 140, 87, 
- 	86, 141, 87, 86, 142, 87, 86, 143, 
- 	87, 86, 89, 87, 86, 145, 159, 87, 
- 	86, 146, 87, 86, 147, 87, 86, 148, 
- 	87, 86, 149, 87, 86, 150, 87, 86, 
- 	151, 87, 86, 152, 87, 86, 153, 87, 
- 	86, 154, 87, 86, 155, 87, 86, 156, 
- 	87, 86, 157, 87, 86, 158, 87, 86, 
- 	87, 90, 86, 160, 191, 87, 86, 161, 
- 	87, 86, 162, 87, 86, 163, 87, 86, 
- 	164, 87, 86, 165, 87, 86, 166, 87, 
- 	86, 167, 87, 86, 168, 87, 86, 169, 
- 	87, 86, 170, 87, 86, 171, 87, 86, 
- 	172, 87, 86, 173, 87, 86, 174, 87, 
- 	86, 87, 175, 86, 176, 87, 86, 177, 
- 	87, 86, 178, 87, 86, 179, 87, 86, 
- 	180, 87, 86, 181, 87, 86, 182, 87, 
- 	86, 183, 87, 86, 184, 87, 86, 185, 
- 	87, 86, 186, 87, 86, 187, 87, 86, 
- 	188, 87, 86, 189, 87, 86, 190, 87, 
- 	86, 158, 87, 86, 192, 87, 86, 193, 
- 	87, 86, 194, 87, 86, 195, 87, 86, 
- 	196, 87, 86, 197, 87, 86, 198, 87, 
- 	86, 199, 87, 86, 200, 87, 86, 201, 
- 	87, 86, 202, 87, 86, 158, 87, 86, 
- 	204, 87, 86, 205, 87, 86, 118, 87, 
- 	90, 86, 207, 87, 86, 208, 87, 86, 
- 	209, 87, 86, 210, 87, 86, 211, 87, 
- 	86, 212, 87, 86, 213, 87, 86, 214, 
- 	87, 86, 215, 87, 86, 216, 87, 86, 
- 	217, 190, 87, 86, 218, 87, 86, 219, 
- 	87, 86, 220, 87, 86, 221, 87, 86, 
- 	222, 87, 86, 223, 87, 86, 158, 87, 
- 	86, 87, 225, 86, 87, 226, 86, 87, 
- 	227, 86, 87, 228, 86, 87, 229, 86, 
- 	87, 230, 86, 87, 231, 86, 87, 232, 
- 	86, 87, 233, 86, 87, 234, 86, 87, 
- 	235, 86, 87, 236, 86, 87, 237, 86, 
- 	87, 6, 86, 239, 0, 240, 0, 241, 
- 	0, 242, 0, 243, 0, 244, 0, 245, 
- 	0, 246, 0, 247, 0, 248, 0, 249, 
- 	0, 250, 0, 3, 0, 252, 0, 253, 
- 	318, 0, 254, 0, 255, 271, 0, 256, 
- 	0, 257, 0, 258, 0, 259, 0, 260, 
- 	0, 261, 0, 262, 0, 263, 0, 264, 
- 	0, 265, 0, 266, 0, 267, 0, 268, 
- 	0, 269, 0, 270, 0, 84, 0, 272, 
- 	0, 273, 0, 274, 0, 275, 0, 276, 
- 	0, 277, 0, 278, 0, 279, 0, 280, 
- 	0, 282, 281, 282, 281, 283, 282, 282, 
- 	6, 6, 282, 281, 284, 299, 282, 281, 
- 	285, 282, 281, 286, 282, 281, 287, 282, 
- 	281, 288, 282, 281, 289, 282, 281, 290, 
- 	282, 281, 291, 282, 281, 292, 282, 281, 
- 	293, 282, 281, 294, 282, 281, 295, 282, 
- 	281, 296, 282, 281, 297, 282, 281, 298, 
- 	282, 281, 282, 90, 281, 300, 282, 281, 
- 	301, 282, 281, 302, 282, 281, 303, 282, 
- 	281, 304, 282, 281, 305, 282, 281, 306, 
- 	282, 281, 307, 282, 281, 308, 282, 281, 
- 	309, 282, 281, 310, 317, 282, 281, 311, 
- 	282, 281, 312, 282, 281, 313, 282, 281, 
- 	314, 282, 281, 315, 282, 281, 316, 282, 
- 	281, 298, 282, 281, 298, 282, 281, 319, 
- 	0, 320, 0, 321, 0, 322, 0, 323, 
- 	0, 3, 0, 325, 470, 0, 326, 0, 
- 	327, 0, 328, 0, 329, 0, 330, 0, 
- 	331, 0, 332, 0, 333, 0, 334, 0, 
- 	335, 0, 336, 0, 337, 0, 338, 0, 
- 	339, 0, 341, 340, 341, 340, 342, 341, 
- 	341, 6, 456, 6, 341, 340, 343, 358, 
- 	386, 438, 341, 340, 344, 341, 340, 345, 
- 	341, 340, 346, 341, 340, 347, 341, 340, 
- 	348, 341, 340, 349, 341, 340, 350, 341, 
- 	340, 351, 341, 340, 352, 341, 340, 353, 
- 	341, 340, 354, 341, 340, 355, 341, 340, 
- 	356, 341, 340, 357, 341, 340, 341, 90, 
- 	340, 359, 341, 340, 360, 341, 340, 361, 
- 	341, 340, 362, 378, 341, 340, 363, 341, 
- 	340, 364, 341, 340, 365, 341, 340, 366, 
- 	341, 340, 367, 341, 340, 368, 341, 340, 
- 	369, 341, 340, 370, 341, 340, 371, 341, 
- 	340, 372, 341, 340, 373, 341, 340, 374, 
- 	341, 340, 375, 341, 340, 376, 341, 340, 
- 	377, 341, 340, 357, 341, 340, 379, 341, 
- 	340, 380, 341, 340, 381, 341, 340, 382, 
- 	341, 340, 383, 341, 340, 384, 341, 340, 
- 	385, 341, 340, 357, 341, 340, 387, 400, 
- 	341, 340, 388, 341, 340, 389, 341, 340, 
- 	390, 341, 340, 391, 341, 340, 392, 341, 
- 	340, 393, 341, 340, 394, 341, 340, 395, 
- 	341, 340, 396, 341, 340, 397, 341, 340, 
- 	398, 341, 340, 399, 341, 340, 357, 341, 
- 	340, 401, 426, 341, 340, 402, 341, 340, 
- 	403, 341, 340, 404, 341, 340, 405, 341, 
- 	340, 406, 341, 340, 407, 341, 340, 408, 
- 	341, 340, 409, 341, 340, 410, 341, 340, 
- 	411, 341, 340, 412, 341, 340, 413, 341, 
- 	340, 414, 341, 340, 415, 341, 340, 341, 
- 	416, 340, 417, 341, 340, 418, 341, 340, 
- 	419, 341, 340, 420, 341, 340, 421, 341, 
- 	340, 422, 341, 340, 423, 341, 340, 424, 
- 	341, 340, 425, 341, 340, 372, 341, 340, 
- 	427, 341, 340, 428, 341, 340, 429, 341, 
- 	340, 430, 341, 340, 431, 341, 340, 432, 
- 	341, 340, 433, 341, 340, 434, 341, 340, 
- 	435, 341, 340, 436, 341, 340, 437, 341, 
- 	340, 357, 341, 340, 439, 341, 340, 440, 
- 	341, 340, 441, 341, 340, 442, 341, 340, 
- 	443, 341, 340, 444, 341, 340, 445, 341, 
- 	340, 446, 341, 340, 447, 341, 340, 448, 
- 	341, 340, 449, 377, 341, 340, 450, 341, 
- 	340, 451, 341, 340, 452, 341, 340, 453, 
- 	341, 340, 454, 341, 340, 455, 341, 340, 
- 	357, 341, 340, 341, 457, 340, 341, 458, 
- 	340, 341, 459, 340, 341, 460, 340, 341, 
- 	461, 340, 341, 462, 340, 341, 463, 340, 
- 	341, 464, 340, 341, 465, 340, 341, 466, 
- 	340, 341, 467, 340, 341, 468, 340, 341, 
- 	469, 340, 341, 6, 340, 471, 625, 0, 
- 	472, 0, 473, 0, 474, 0, 475, 0, 
- 	476, 0, 477, 0, 478, 0, 479, 0, 
- 	480, 0, 481, 0, 482, 0, 483, 0, 
- 	484, 0, 485, 0, 486, 0, 487, 0, 
- 	488, 0, 489, 0, 490, 0, 491, 0, 
- 	492, 0, 493, 0, 494, 0, 495, 0, 
- 	496, 0, 497, 0, 498, 0, 499, 0, 
- 	500, 0, 501, 0, 502, 0, 503, 0, 
- 	505, 504, 505, 504, 506, 505, 505, 6, 
- 	611, 507, 6, 505, 504, 507, 508, 526, 
- 	507, 532, 512, 553, 561, 589, 592, 505, 
- 	504, 505, 90, 504, 509, 505, 504, 510, 
- 	514, 505, 504, 511, 505, 504, 512, 505, 
- 	504, 513, 505, 504, 507, 505, 504, 515, 
- 	505, 504, 516, 505, 504, 517, 505, 504, 
- 	518, 505, 504, 519, 505, 504, 520, 505, 
- 	504, 521, 505, 504, 522, 505, 504, 523, 
- 	505, 504, 524, 505, 504, 525, 505, 504, 
- 	507, 505, 504, 527, 505, 504, 528, 505, 
- 	504, 529, 505, 504, 530, 505, 504, 531, 
- 	505, 504, 507, 505, 504, 533, 505, 540, 
- 	504, 534, 505, 504, 535, 505, 504, 536, 
- 	505, 504, 537, 505, 504, 538, 505, 504, 
- 	539, 505, 504, 507, 505, 504, 541, 505, 
- 	504, 542, 505, 504, 543, 505, 504, 544, 
- 	505, 504, 545, 505, 504, 546, 505, 504, 
- 	547, 505, 504, 548, 505, 504, 505, 549, 
- 	504, 550, 505, 504, 551, 505, 504, 552, 
- 	505, 504, 507, 505, 504, 554, 505, 504, 
- 	555, 505, 504, 556, 505, 504, 557, 505, 
- 	504, 558, 505, 504, 559, 505, 504, 560, 
- 	505, 504, 507, 505, 504, 562, 576, 505, 
- 	504, 563, 505, 504, 564, 505, 504, 565, 
- 	505, 504, 566, 505, 504, 567, 505, 504, 
- 	568, 505, 504, 569, 505, 504, 570, 505, 
- 	504, 571, 505, 504, 572, 505, 504, 573, 
- 	505, 504, 574, 505, 504, 575, 505, 504, 
- 	505, 90, 504, 577, 505, 504, 578, 505, 
- 	504, 579, 505, 504, 580, 505, 504, 581, 
- 	505, 504, 582, 505, 504, 583, 505, 504, 
- 	584, 505, 504, 585, 505, 504, 586, 505, 
- 	504, 587, 505, 504, 588, 505, 504, 575, 
- 	505, 504, 590, 505, 504, 591, 505, 504, 
- 	535, 505, 90, 504, 593, 505, 504, 594, 
- 	505, 504, 595, 505, 504, 596, 505, 504, 
- 	597, 505, 504, 598, 505, 504, 599, 505, 
- 	504, 600, 505, 504, 601, 505, 504, 602, 
- 	505, 504, 603, 610, 505, 504, 604, 505, 
- 	504, 605, 505, 504, 606, 505, 504, 607, 
- 	505, 504, 608, 505, 504, 609, 505, 504, 
- 	575, 505, 504, 575, 505, 504, 505, 612, 
- 	504, 505, 613, 504, 505, 614, 504, 505, 
- 	615, 504, 505, 616, 504, 505, 617, 504, 
- 	505, 618, 504, 505, 619, 504, 505, 620, 
- 	504, 505, 621, 504, 505, 622, 504, 505, 
- 	623, 504, 505, 624, 504, 505, 6, 504, 
- 	626, 0, 627, 0, 628, 0, 629, 0, 
- 	630, 0, 631, 0, 632, 0, 633, 0, 
- 	634, 0, 635, 0, 636, 0, 637, 0, 
- 	638, 0, 640, 639, 640, 639, 641, 640, 
- 	640, 6, 799, 642, 6, 640, 639, 642, 
- 	643, 661, 642, 667, 647, 699, 725, 777, 
- 	781, 640, 639, 640, 90, 639, 644, 640, 
- 	639, 645, 649, 640, 639, 646, 640, 639, 
- 	647, 640, 639, 648, 640, 639, 642, 640, 
- 	639, 650, 640, 639, 651, 640, 639, 652, 
- 	640, 639, 653, 640, 639, 654, 640, 639, 
- 	655, 640, 639, 656, 640, 639, 657, 640, 
- 	639, 658, 640, 639, 659, 640, 639, 660, 
- 	640, 639, 642, 640, 639, 662, 640, 639, 
- 	663, 640, 639, 664, 640, 639, 665, 640, 
- 	639, 666, 640, 639, 642, 640, 639, 668, 
- 	640, 686, 639, 669, 640, 639, 670, 640, 
- 	639, 671, 675, 640, 639, 672, 640, 639, 
- 	673, 640, 639, 674, 640, 639, 642, 640, 
- 	639, 676, 640, 639, 677, 640, 639, 678, 
- 	640, 639, 679, 640, 639, 680, 640, 639, 
- 	681, 640, 639, 682, 640, 639, 683, 640, 
- 	639, 684, 640, 639, 685, 640, 639, 640, 
- 	90, 639, 687, 640, 639, 688, 640, 639, 
- 	689, 640, 639, 690, 640, 639, 691, 640, 
- 	639, 692, 640, 639, 693, 640, 639, 694, 
- 	640, 639, 640, 695, 639, 696, 640, 639, 
- 	697, 640, 639, 698, 640, 639, 642, 640, 
- 	639, 700, 640, 639, 701, 719, 640, 639, 
- 	702, 640, 639, 703, 640, 639, 704, 640, 
- 	639, 705, 640, 639, 706, 640, 639, 707, 
- 	640, 639, 708, 640, 639, 709, 640, 639, 
- 	710, 640, 639, 711, 640, 639, 712, 640, 
- 	639, 713, 640, 639, 714, 640, 639, 715, 
- 	640, 639, 716, 640, 639, 717, 640, 639, 
- 	718, 640, 639, 685, 640, 639, 720, 640, 
- 	639, 721, 640, 639, 722, 640, 639, 723, 
- 	640, 639, 724, 640, 639, 642, 640, 639, 
- 	726, 739, 640, 639, 727, 640, 639, 728, 
- 	640, 639, 729, 640, 639, 730, 640, 639, 
- 	731, 640, 639, 732, 640, 639, 733, 640, 
- 	639, 734, 640, 639, 735, 640, 639, 736, 
- 	640, 639, 737, 640, 639, 738, 640, 639, 
- 	685, 640, 639, 740, 765, 640, 639, 741, 
- 	640, 639, 742, 640, 639, 743, 640, 639, 
- 	744, 640, 639, 745, 640, 639, 746, 640, 
- 	639, 747, 640, 639, 748, 640, 639, 749, 
- 	640, 639, 750, 640, 639, 751, 640, 639, 
- 	752, 640, 639, 753, 640, 639, 754, 640, 
- 	639, 640, 755, 639, 756, 640, 639, 757, 
- 	640, 639, 758, 640, 639, 759, 640, 639, 
- 	760, 640, 639, 761, 640, 639, 762, 640, 
- 	639, 763, 640, 639, 764, 640, 639, 713, 
- 	640, 639, 766, 640, 639, 767, 640, 639, 
- 	768, 640, 639, 769, 640, 639, 770, 640, 
- 	639, 771, 640, 639, 772, 640, 639, 773, 
- 	640, 639, 774, 640, 639, 775, 640, 639, 
- 	776, 640, 639, 685, 640, 639, 778, 640, 
- 	639, 779, 640, 639, 780, 640, 90, 639, 
- 	671, 640, 639, 782, 640, 639, 783, 640, 
- 	639, 784, 640, 639, 785, 640, 639, 786, 
- 	640, 639, 787, 640, 639, 788, 640, 639, 
- 	789, 640, 639, 790, 640, 639, 791, 640, 
- 	639, 792, 718, 640, 639, 793, 640, 639, 
- 	794, 640, 639, 795, 640, 639, 796, 640, 
- 	639, 797, 640, 639, 798, 640, 639, 685, 
- 	640, 639, 640, 800, 639, 640, 801, 639, 
- 	640, 802, 639, 640, 803, 639, 640, 804, 
- 	639, 640, 805, 639, 640, 806, 639, 640, 
- 	807, 639, 640, 808, 639, 640, 809, 639, 
- 	640, 810, 639, 640, 811, 639, 640, 812, 
- 	639, 640, 6, 639, 814, 0, 815, 0, 
- 	816, 4, 0, 70, 0, 818, 0, 819, 
- 	0, 820, 0, 821, 0, 822, 0, 823, 
- 	0, 824, 0, 825, 0, 826, 0, 827, 
- 	0, 828, 835, 0, 829, 0, 830, 0, 
- 	831, 0, 832, 0, 833, 0, 834, 0, 
- 	338, 0, 338, 0, 837, 0, 6, 0, 
- 	0, 0
- };
- 
- static const unsigned char _lexer_trans_actions[] = {
- 	29, 0, 54, 0, 5, 1, 0, 29, 
- 	1, 35, 0, 43, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 43, 0, 
- 	43, 149, 126, 57, 110, 23, 0, 29, 
- 	54, 0, 5, 1, 0, 29, 1, 35, 
- 	0, 43, 0, 43, 0, 43, 139, 48, 
- 	9, 106, 11, 0, 134, 45, 45, 45, 
- 	3, 122, 33, 33, 33, 0, 122, 33, 
- 	33, 33, 0, 122, 33, 0, 33, 0, 
- 	102, 7, 7, 43, 54, 0, 0, 43, 
- 	114, 25, 0, 54, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 43, 43, 43, 43, 0, 27, 118, 
- 	27, 27, 51, 27, 0, 54, 0, 1, 
- 	0, 43, 0, 0, 0, 43, 54, 37, 
- 	37, 87, 37, 37, 43, 0, 39, 0, 
- 	43, 0, 0, 54, 0, 0, 39, 0, 
- 	0, 96, 54, 0, 93, 90, 41, 96, 
- 	90, 99, 0, 43, 0, 43, 0, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 0, 43, 
- 	0, 43, 0, 43, 0, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 144, 57, 54, 
- 	0, 84, 54, 0, 72, 33, 84, 72, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 54, 0, 54, 15, 
- 	0, 63, 130, 31, 60, 57, 31, 63, 
- 	57, 66, 31, 43, 0, 54, 0, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 54, 0, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	54, 15, 0, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 54, 0, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	15, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 15, 0, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	0, 43, 0, 43, 0, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 144, 57, 54, 0, 84, 54, 0, 
- 	81, 81, 0, 0, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 54, 21, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 144, 57, 54, 0, 84, 54, 
- 	0, 69, 33, 69, 0, 0, 0, 0, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 54, 13, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 54, 
- 	0, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 13, 0, 0, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	144, 57, 54, 0, 84, 54, 0, 78, 
- 	33, 84, 78, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 54, 
- 	0, 54, 19, 0, 0, 54, 0, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 54, 0, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	54, 19, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 19, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 19, 0, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 144, 57, 54, 0, 84, 54, 
- 	0, 75, 33, 84, 75, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 54, 0, 54, 17, 0, 0, 54, 
- 	0, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 54, 
- 	17, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 54, 0, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 54, 0, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 17, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 17, 0, 0, 43, 0, 43, 
- 	0, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 0
- };
- 
- static const unsigned char _lexer_eof_actions[] = {
- 	0, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43
- };
- 
- static const int lexer_start = 1;
- static const int lexer_first_final = 838;
- static const int lexer_error = 0;
- 
- static const int lexer_en_main = 1;
- 
- 
- #line 258 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ru.c.rl"
- 
- static VALUE 
- unindent(VALUE con, int start_col)
- {
-   VALUE re;
-   // Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters
-   char pat[32]; 
-   snprintf(pat, 32, "^[\t ]{0,%d}", start_col); 
-   re = rb_reg_regcomp(rb_str_new2(pat));
-   rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2(""));
- 
-   return Qnil;
- 
- }
- 
- static void 
- store_kw_con(VALUE listener, const char * event_name, 
-              const char * keyword_at, size_t keyword_length, 
-              const char * at,         size_t length, 
-              int current_line)
- {
-   VALUE con = Qnil, kw = Qnil;
-   kw = ENCODED_STR_NEW(keyword_at, keyword_length);
-   con = ENCODED_STR_NEW(at, length);
-   rb_funcall(con, rb_intern("strip!"), 0);
-   rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); 
- }
- 
- static void
- store_multiline_kw_con(VALUE listener, const char * event_name,
-                       const char * keyword_at, size_t keyword_length,
-                       const char * at,         size_t length,
-                       int current_line, int start_col)
- {
-   VALUE split;
-   VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil;
- 
-   kw = ENCODED_STR_NEW(keyword_at, keyword_length);
-   con = ENCODED_STR_NEW(at, length);
- 
-   unindent(con, start_col);
-   
-   split = rb_str_split(con, "\n");
- 
-   name = rb_funcall(split, rb_intern("shift"), 0);
-   desc = rb_ary_join(split, rb_str_new2( "\n" ));
- 
-   if( name == Qnil ) 
-   {
-     name = rb_str_new2("");
-   }
-   if( rb_funcall(desc, rb_intern("size"), 0) == 0) 
-   {
-     desc = rb_str_new2("");
-   }
-   rb_funcall(name, rb_intern("strip!"), 0);
-   rb_funcall(desc, rb_intern("rstrip!"), 0);
-   rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); 
- }
- 
- static void 
- store_attr(VALUE listener, const char * attr_type,
-            const char * at, size_t length, 
-            int line)
- {
-   VALUE val = ENCODED_STR_NEW(at, length);
-   rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line));
- }
- static void 
- store_docstring_content(VALUE listener, 
-           int start_col, 
-           const char *type_at, size_t type_length,
-           const char *at, size_t length, 
-           int current_line)
- {
-   VALUE re2;
-   VALUE unescape_escaped_quotes;
-   VALUE con = ENCODED_STR_NEW(at, length);
-   VALUE con_type = ENCODED_STR_NEW(type_at, type_length);
- 
-   unindent(con, start_col);
- 
-   re2 = rb_reg_regcomp(rb_str_new2("\r\\Z"));
-   unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\""));
-   rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2(""));
-   rb_funcall(con_type, rb_intern("strip!"), 0);
-   rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\""));
-   rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line));
- }
- static void 
- raise_lexer_error(const char * at, int line)
- { 
-   rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at);
- }
- 
- static void lexer_init(lexer_state *lexer) {
-   lexer->content_start = 0;
-   lexer->content_end = 0;
-   lexer->content_len = 0;
-   lexer->docstring_content_type_start = 0;
-   lexer->docstring_content_type_end = 0;
-   lexer->mark = 0;
-   lexer->keyword_start = 0;
-   lexer->keyword_end = 0;
-   lexer->next_keyword_start = 0;
-   lexer->line_number = 1;
-   lexer->last_newline = 0;
-   lexer->final_newline = 0;
-   lexer->start_col = 0;
- }
- 
- static VALUE CLexer_alloc(VALUE klass)
- {
-   VALUE obj;
-   lexer_state *lxr = ALLOC(lexer_state);
-   lexer_init(lxr);
- 
-   obj = Data_Wrap_Struct(klass, NULL, -1, lxr);
- 
-   return obj;
- }
- 
- static VALUE CLexer_init(VALUE self, VALUE listener)
- {
-   lexer_state *lxr; 
-   rb_iv_set(self, "@listener", listener);
-   
-   lxr = NULL;
-   DATA_GET(self, lexer_state, lxr);
-   lexer_init(lxr);
-   
-   return self;
- }
- 
- static VALUE CLexer_scan(VALUE self, VALUE input)
- {
-   VALUE input_copy;
-   char *data;
-   size_t len;
-   VALUE listener = rb_iv_get(self, "@listener");
- 
-   lexer_state *lexer;
-   lexer = NULL;
-   DATA_GET(self, lexer_state, lexer);
- 
-   input_copy = rb_str_dup(input);
- 
-   rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%"));
-   data = RSTRING_PTR(input_copy);
-   len = RSTRING_LEN(input_copy);
-   
-   if (len == 0) { 
-     rb_raise(rb_eGherkinLexingError, "No content to lex.");
-   } else {
- 
-     const char *p, *pe, *eof;
-     int cs = 0;
-     
-     VALUE current_row = Qnil;
- 
-     p = data;
-     pe = data + len;
-     eof = pe;
-     
-     assert(*pe == '\0' && "pointer does not end on NULL");
-     
-     
- #line 1662 "ext/gherkin_lexer_ru/gherkin_lexer_ru.c"
- 	{
- 	cs = lexer_start;
- 	}
- 
- #line 425 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ru.c.rl"
-     
- #line 1669 "ext/gherkin_lexer_ru/gherkin_lexer_ru.c"
- 	{
- 	int _klen;
- 	unsigned int _trans;
- 	const char *_acts;
- 	unsigned int _nacts;
- 	const char *_keys;
- 
- 	if ( p == pe )
- 		goto _test_eof;
- 	if ( cs == 0 )
- 		goto _out;
- _resume:
- 	_keys = _lexer_trans_keys + _lexer_key_offsets[cs];
- 	_trans = _lexer_index_offsets[cs];
- 
- 	_klen = _lexer_single_lengths[cs];
- 	if ( _klen > 0 ) {
- 		const char *_lower = _keys;
- 		const char *_mid;
- 		const char *_upper = _keys + _klen - 1;
- 		while (1) {
- 			if ( _upper < _lower )
- 				break;
- 
- 			_mid = _lower + ((_upper-_lower) >> 1);
- 			if ( (*p) < *_mid )
- 				_upper = _mid - 1;
- 			else if ( (*p) > *_mid )
- 				_lower = _mid + 1;
- 			else {
- 				_trans += (_mid - _keys);
- 				goto _match;
- 			}
- 		}
- 		_keys += _klen;
- 		_trans += _klen;
- 	}
- 
- 	_klen = _lexer_range_lengths[cs];
- 	if ( _klen > 0 ) {
- 		const char *_lower = _keys;
- 		const char *_mid;
- 		const char *_upper = _keys + (_klen<<1) - 2;
- 		while (1) {
- 			if ( _upper < _lower )
- 				break;
- 
- 			_mid = _lower + (((_upper-_lower) >> 1) & ~1);
- 			if ( (*p) < _mid[0] )
- 				_upper = _mid - 2;
- 			else if ( (*p) > _mid[1] )
- 				_lower = _mid + 2;
- 			else {
- 				_trans += ((_mid - _keys)>>1);
- 				goto _match;
- 			}
- 		}
- 		_trans += _klen;
- 	}
- 
- _match:
- 	cs = _lexer_trans_targs[_trans];
- 
- 	if ( _lexer_trans_actions[_trans] == 0 )
- 		goto _again;
- 
- 	_acts = _lexer_actions + _lexer_trans_actions[_trans];
- 	_nacts = (unsigned int) *_acts++;
- 	while ( _nacts-- > 0 )
- 	{
- 		switch ( *_acts++ )
- 		{
- 	case 0:
- #line 83 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ru.c.rl"
- 	{
- 		MARK(content_start, p);
-     lexer->current_line = lexer->line_number;
-     lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2;
-   }
- 	break;
- 	case 1:
- #line 89 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ru.c.rl"
- 	{
-     MARK(content_start, p);
-   }
- 	break;
- 	case 2:
- #line 93 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ru.c.rl"
- 	{
-     lexer->current_line = lexer->line_number;
-     lexer->start_col = p - data - lexer->last_newline;
-   }
- 	break;
- 	case 3:
- #line 98 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ru.c.rl"
- 	{
-     int len = LEN(content_start, PTR_TO(final_newline));
-     int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end));
- 
-     if (len < 0) len = 0;
-     if (type_len < 0) len = 0;
- 
-     store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line);
-   }
- 	break;
- 	case 4:
- #line 108 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ru.c.rl"
- 	{ 
-     MARK(docstring_content_type_start, p);
-   }
- 	break;
- 	case 5:
- #line 112 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ru.c.rl"
- 	{ 
-     MARK(docstring_content_type_end, p);
-   }
- 	break;
- 	case 6:
- #line 116 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ru.c.rl"
- 	{
-     STORE_KW_END_CON(feature);
-   }
- 	break;
- 	case 7:
- #line 120 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ru.c.rl"
- 	{
-     STORE_KW_END_CON(background);
-   }
- 	break;
- 	case 8:
- #line 124 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ru.c.rl"
- 	{
-     STORE_KW_END_CON(scenario);
-   }
- 	break;
- 	case 9:
- #line 128 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ru.c.rl"
- 	{
-     STORE_KW_END_CON(scenario_outline);
-   }
- 	break;
- 	case 10:
- #line 132 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ru.c.rl"
- 	{
-     STORE_KW_END_CON(examples);
-   }
- 	break;
- 	case 11:
- #line 136 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ru.c.rl"
- 	{
-     store_kw_con(listener, "step",
-       PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-       PTR_TO(content_start), LEN(content_start, p), 
-       lexer->current_line);
-   }
- 	break;
- 	case 12:
- #line 143 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ru.c.rl"
- 	{
-     STORE_ATTR(comment);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 13:
- #line 148 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ru.c.rl"
- 	{
-     STORE_ATTR(tag);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 14:
- #line 153 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ru.c.rl"
- 	{
-     lexer->line_number += 1;
-     MARK(final_newline, p);
-   }
- 	break;
- 	case 15:
- #line 158 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ru.c.rl"
- 	{
-     MARK(last_newline, p + 1);
-   }
- 	break;
- 	case 16:
- #line 162 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ru.c.rl"
- 	{
-     if (lexer->mark == 0) {
-       MARK(mark, p);
-     }
-   }
- 	break;
- 	case 17:
- #line 168 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ru.c.rl"
- 	{
-     MARK(keyword_end, p);
-     MARK(keyword_start, PTR_TO(mark));
-     MARK(content_start, p + 1);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 18:
- #line 175 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ru.c.rl"
- 	{
-     MARK(content_end, p);
-   }
- 	break;
- 	case 19:
- #line 179 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ru.c.rl"
- 	{
-     p = p - 1;
-     lexer->current_line = lexer->line_number;
-     current_row = rb_ary_new();
-   }
- 	break;
- 	case 20:
- #line 185 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ru.c.rl"
- 	{
- 		MARK(content_start, p);
-   }
- 	break;
- 	case 21:
- #line 189 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ru.c.rl"
- 	{
-     VALUE re_pipe, re_newline, re_backslash;
-     VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
-     rb_funcall(con, rb_intern("strip!"), 0);
-     re_pipe      = rb_reg_regcomp(rb_str_new2("\\\\\\|"));
-     re_newline   = rb_reg_regcomp(rb_str_new2("\\\\n"));
-     re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_pipe,      rb_str_new2("|"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_newline,   rb_str_new2("\n"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\"));
- 
-     rb_ary_push(current_row, con);
-   }
- 	break;
- 	case 22:
- #line 203 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ru.c.rl"
- 	{
-     rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
-   }
- 	break;
- 	case 23:
- #line 207 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ru.c.rl"
- 	{
-     int line;
-     if (cs < lexer_first_final) {
-       size_t count = 0;
-       VALUE newstr_val;
-       char *newstr;
-       int newstr_count = 0;        
-       size_t len;
-       const char *buff;
-       if (lexer->last_newline != 0) {
-         len = LEN(last_newline, eof);
-         buff = PTR_TO(last_newline);
-       } else {
-         len = strlen(data);
-         buff = data;
-       }
- 
-       // Allocate as a ruby string so that it gets cleaned up by GC
-       newstr_val = rb_str_new(buff, len);
-       newstr = RSTRING_PTR(newstr_val);
- 
- 
-       for (count = 0; count < len; count++) {
-         if(buff[count] == 10) {
-           newstr[newstr_count] = '\0'; // terminate new string at first newline found
-           break;
-         } else {
-           if (buff[count] == '%') {
-             newstr[newstr_count++] = buff[count];
-             newstr[newstr_count] = buff[count];
-           } else {
-             newstr[newstr_count] = buff[count];
-           }
-         }
-         newstr_count++;
-       }
- 
-       line = lexer->line_number;
-       lexer_init(lexer); // Re-initialize so we can scan again with the same lexer
-       raise_lexer_error(newstr, line);
-     } else {
-       rb_funcall(listener, rb_intern("eof"), 0);
-     }
-   }
- 	break;
- #line 1959 "ext/gherkin_lexer_ru/gherkin_lexer_ru.c"
- 		}
- 	}
- 
- _again:
- 	if ( cs == 0 )
- 		goto _out;
- 	if ( ++p != pe )
- 		goto _resume;
- 	_test_eof: {}
- 	if ( p == eof )
- 	{
- 	const char *__acts = _lexer_actions + _lexer_eof_actions[cs];
- 	unsigned int __nacts = (unsigned int) *__acts++;
- 	while ( __nacts-- > 0 ) {
- 		switch ( *__acts++ ) {
- 	case 23:
- #line 207 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ru.c.rl"
- 	{
-     int line;
-     if (cs < lexer_first_final) {
-       size_t count = 0;
-       VALUE newstr_val;
-       char *newstr;
-       int newstr_count = 0;        
-       size_t len;
-       const char *buff;
-       if (lexer->last_newline != 0) {
-         len = LEN(last_newline, eof);
-         buff = PTR_TO(last_newline);
-       } else {
-         len = strlen(data);
-         buff = data;
-       }
- 
-       // Allocate as a ruby string so that it gets cleaned up by GC
-       newstr_val = rb_str_new(buff, len);
-       newstr = RSTRING_PTR(newstr_val);
- 
- 
-       for (count = 0; count < len; count++) {
-         if(buff[count] == 10) {
-           newstr[newstr_count] = '\0'; // terminate new string at first newline found
-           break;
-         } else {
-           if (buff[count] == '%') {
-             newstr[newstr_count++] = buff[count];
-             newstr[newstr_count] = buff[count];
-           } else {
-             newstr[newstr_count] = buff[count];
-           }
-         }
-         newstr_count++;
-       }
- 
-       line = lexer->line_number;
-       lexer_init(lexer); // Re-initialize so we can scan again with the same lexer
-       raise_lexer_error(newstr, line);
-     } else {
-       rb_funcall(listener, rb_intern("eof"), 0);
-     }
-   }
- 	break;
- #line 2022 "ext/gherkin_lexer_ru/gherkin_lexer_ru.c"
- 		}
- 	}
- 	}
- 
- 	_out: {}
- 	}
- 
- #line 426 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/ru.c.rl"
- 
-     assert(p <= pe && "data overflow after parsing execute");
-     assert(lexer->content_start <= len && "content starts after data end");
-     assert(lexer->mark < len && "mark is after data end");
-     
-     // Reset lexer by re-initializing the whole thing
-     lexer_init(lexer);
- 
-     if (cs == lexer_error) {
-       rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails.");
-     } else {
-       return Qtrue;
-     }
-   }
- }
- 
- void Init_gherkin_lexer_ru()
- {
-   mGherkin = rb_define_module("Gherkin");
-   mGherkinLexer = rb_define_module_under(mGherkin, "Lexer");
-   rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError"));
- 
-   mCLexer = rb_define_module_under(mGherkin, "CLexer");
-   cI18nLexer = rb_define_class_under(mCLexer, "Ru", rb_cObject);
-   rb_define_alloc_func(cI18nLexer, CLexer_alloc);
-   rb_define_method(cI18nLexer, "initialize", CLexer_init, 1);
-   rb_define_method(cI18nLexer, "scan", CLexer_scan, 1);
- }
- 
 -#line 1 "ragel/i18n/ru.c.rl"
 -#include <assert.h>
 -#include <ruby.h>
 -
 -#if defined(_WIN32)
 -#include <stddef.h>
 -#endif
 -
 -#ifdef HAVE_RUBY_RE_H
 -#include <ruby/re.h>
 -#else
 -#include <re.h>
 -#endif
 -
 -#ifdef HAVE_RUBY_ENCODING_H
 -#include <ruby/encoding.h>
 -#define ENCODED_STR_NEW(ptr, len) \
 -    rb_enc_str_new(ptr, len, rb_utf8_encoding())
 -#else
 -#define ENCODED_STR_NEW(ptr, len) \
 -    rb_str_new(ptr, len)
 -#endif
 -
 -#ifndef RSTRING_PTR
 -#define RSTRING_PTR(s) (RSTRING(s)->ptr)
 -#endif
 -
 -#ifndef RSTRING_LEN
 -#define RSTRING_LEN(s) (RSTRING(s)->len)
 -#endif
 -
 -#define DATA_GET(FROM, TYPE, NAME) \
 -  Data_Get_Struct(FROM, TYPE, NAME); \
 -  if (NAME == NULL) { \
 -    rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \
 -  }
 - 
 -typedef struct lexer_state {
 -  int content_len;
 -  int line_number;
 -  int current_line;
 -  int start_col;
 -  size_t mark;
 -  size_t keyword_start;
 -  size_t keyword_end;
 -  size_t next_keyword_start;
 -  size_t content_start;
 -  size_t content_end;
 -  size_t docstring_content_type_start;
 -  size_t docstring_content_type_end;
 -  size_t query_start;
 -  size_t last_newline;
 -  size_t final_newline;
 -} lexer_state;
 -
 -static VALUE mGherkin;
 -static VALUE mGherkinLexer;
 -static VALUE mCLexer;
 -static VALUE cI18nLexer;
 -static VALUE rb_eGherkinLexingError;
 -
 -#define LEN(AT, P) (P - data - lexer->AT)
 -#define MARK(M, P) (lexer->M = (P) - data)
 -#define PTR_TO(P) (data + lexer->P)
 -
 -#define STORE_KW_END_CON(EVENT) \
 -  store_multiline_kw_con(listener, # EVENT, \
 -    PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \
 -    PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \
 -    lexer->current_line, lexer->start_col); \
 -    if (lexer->content_end != 0) { \
 -      p = PTR_TO(content_end - 1); \
 -    } \
 -    lexer->content_end = 0
 -
 -#define STORE_ATTR(ATTR) \
 -    store_attr(listener, # ATTR, \
 -      PTR_TO(content_start), LEN(content_start, p), \
 -      lexer->line_number)
 -
 -
 -#line 254 "ragel/i18n/ru.c.rl"
 -
 -
 -/** Data **/
 -
 -#line 89 "ext/gherkin_lexer_ru/gherkin_lexer_ru.c"
 -static const char _lexer_actions[] = {
 -	0, 1, 0, 1, 1, 1, 2, 1, 
 -	3, 1, 4, 1, 5, 1, 6, 1, 
 -	7, 1, 8, 1, 9, 1, 10, 1, 
 -	11, 1, 12, 1, 13, 1, 16, 1, 
 -	17, 1, 18, 1, 19, 1, 20, 1, 
 -	21, 1, 22, 1, 23, 2, 1, 18, 
 -	2, 4, 5, 2, 13, 0, 2, 14, 
 -	15, 2, 17, 0, 2, 17, 2, 2, 
 -	17, 16, 2, 17, 19, 2, 18, 6, 
 -	2, 18, 7, 2, 18, 8, 2, 18, 
 -	9, 2, 18, 10, 2, 18, 16, 2, 
 -	20, 21, 2, 22, 0, 2, 22, 2, 
 -	2, 22, 16, 2, 22, 19, 3, 3, 
 -	14, 15, 3, 5, 14, 15, 3, 11, 
 -	14, 15, 3, 12, 14, 15, 3, 13, 
 -	14, 15, 3, 14, 15, 18, 3, 17, 
 -	0, 11, 3, 17, 14, 15, 4, 1, 
 -	14, 15, 18, 4, 4, 5, 14, 15, 
 -	4, 17, 0, 14, 15, 5, 17, 0, 
 -	11, 14, 15
 -};
 -
 -static const short _lexer_key_offsets[] = {
 -	0, 0, 12, 22, 23, 25, 27, 38, 
 -	39, 40, 42, 44, 49, 54, 59, 64, 
 -	68, 72, 74, 75, 76, 77, 78, 79, 
 -	80, 81, 82, 83, 84, 85, 86, 87, 
 -	88, 89, 94, 101, 106, 110, 116, 119, 
 -	121, 127, 138, 139, 141, 142, 143, 144, 
 -	145, 146, 147, 148, 149, 150, 151, 152, 
 -	153, 154, 155, 156, 157, 158, 159, 160, 
 -	161, 162, 163, 165, 166, 167, 169, 170, 
 -	171, 172, 173, 174, 175, 176, 177, 178, 
 -	179, 180, 181, 182, 183, 184, 185, 186, 
 -	195, 206, 208, 219, 221, 224, 226, 228, 
 -	230, 232, 234, 236, 238, 240, 242, 244, 
 -	246, 248, 250, 252, 254, 256, 258, 260, 
 -	262, 264, 266, 268, 271, 273, 275, 277, 
 -	279, 281, 283, 285, 287, 289, 291, 293, 
 -	295, 297, 299, 301, 303, 305, 307, 309, 
 -	311, 313, 315, 317, 319, 321, 323, 325, 
 -	327, 330, 332, 334, 336, 338, 340, 342, 
 -	344, 346, 348, 350, 352, 354, 356, 358, 
 -	361, 363, 365, 367, 369, 371, 373, 375, 
 -	377, 379, 381, 383, 385, 387, 389, 391, 
 -	393, 395, 397, 399, 401, 403, 405, 407, 
 -	409, 411, 413, 415, 417, 419, 421, 423, 
 -	425, 427, 429, 431, 433, 435, 437, 439, 
 -	441, 443, 445, 447, 449, 452, 454, 456, 
 -	459, 461, 463, 465, 467, 469, 471, 473, 
 -	475, 477, 479, 482, 484, 486, 488, 490, 
 -	492, 494, 496, 498, 500, 502, 504, 506, 
 -	508, 510, 512, 514, 516, 518, 520, 522, 
 -	524, 525, 526, 527, 528, 529, 530, 531, 
 -	532, 533, 534, 535, 536, 537, 538, 540, 
 -	541, 543, 544, 545, 546, 547, 548, 549, 
 -	550, 551, 552, 553, 554, 555, 556, 557, 
 -	558, 559, 560, 561, 562, 563, 564, 565, 
 -	566, 567, 568, 569, 570, 577, 580, 582, 
 -	584, 586, 588, 590, 592, 594, 596, 598, 
 -	600, 602, 604, 606, 608, 610, 612, 614, 
 -	616, 618, 620, 622, 624, 626, 628, 630, 
 -	633, 635, 637, 639, 641, 643, 645, 647, 
 -	649, 650, 651, 652, 653, 654, 655, 657, 
 -	658, 659, 660, 661, 662, 663, 664, 665, 
 -	666, 667, 668, 669, 670, 671, 672, 673, 
 -	681, 686, 688, 690, 692, 694, 696, 698, 
 -	700, 702, 704, 706, 708, 710, 712, 714, 
 -	716, 718, 720, 722, 725, 727, 729, 731, 
 -	733, 735, 737, 739, 741, 743, 745, 747, 
 -	749, 751, 753, 755, 757, 759, 761, 763, 
 -	765, 767, 769, 771, 773, 776, 778, 780, 
 -	782, 784, 786, 788, 790, 792, 794, 796, 
 -	798, 800, 802, 805, 807, 809, 811, 813, 
 -	815, 817, 819, 821, 823, 825, 827, 829, 
 -	831, 833, 835, 837, 839, 841, 843, 845, 
 -	847, 849, 851, 853, 855, 857, 859, 861, 
 -	863, 865, 867, 869, 871, 873, 875, 877, 
 -	879, 881, 883, 885, 887, 889, 891, 893, 
 -	895, 897, 899, 902, 904, 906, 908, 910, 
 -	912, 914, 916, 918, 920, 922, 924, 926, 
 -	928, 930, 932, 934, 936, 938, 940, 942, 
 -	944, 946, 947, 948, 949, 950, 951, 952, 
 -	953, 954, 955, 956, 957, 958, 959, 960, 
 -	961, 962, 963, 964, 965, 966, 967, 968, 
 -	969, 970, 971, 972, 973, 974, 975, 976, 
 -	977, 978, 979, 980, 989, 1000, 1002, 1004, 
 -	1007, 1009, 1011, 1013, 1015, 1017, 1019, 1021, 
 -	1023, 1025, 1027, 1029, 1031, 1033, 1035, 1037, 
 -	1039, 1041, 1043, 1045, 1047, 1049, 1051, 1054, 
 -	1056, 1058, 1060, 1062, 1064, 1066, 1068, 1070, 
 -	1072, 1074, 1076, 1078, 1080, 1082, 1084, 1086, 
 -	1088, 1090, 1092, 1094, 1096, 1098, 1100, 1102, 
 -	1104, 1106, 1108, 1110, 1113, 1115, 1117, 1119, 
 -	1121, 1123, 1125, 1127, 1129, 1131, 1133, 1135, 
 -	1137, 1139, 1141, 1143, 1145, 1147, 1149, 1151, 
 -	1153, 1155, 1157, 1159, 1161, 1163, 1165, 1167, 
 -	1169, 1172, 1174, 1176, 1179, 1181, 1183, 1185, 
 -	1187, 1189, 1191, 1193, 1195, 1197, 1199, 1202, 
 -	1204, 1206, 1208, 1210, 1212, 1214, 1216, 1218, 
 -	1220, 1222, 1224, 1226, 1228, 1230, 1232, 1234, 
 -	1236, 1238, 1240, 1242, 1244, 1246, 1247, 1248, 
 -	1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 
 -	1257, 1258, 1259, 1260, 1261, 1270, 1281, 1283, 
 -	1285, 1288, 1290, 1292, 1294, 1296, 1298, 1300, 
 -	1302, 1304, 1306, 1308, 1310, 1312, 1314, 1316, 
 -	1318, 1320, 1322, 1324, 1326, 1328, 1330, 1332, 
 -	1335, 1337, 1339, 1342, 1344, 1346, 1348, 1350, 
 -	1352, 1354, 1356, 1358, 1360, 1362, 1364, 1366, 
 -	1368, 1370, 1372, 1374, 1376, 1378, 1380, 1382, 
 -	1384, 1386, 1388, 1390, 1392, 1394, 1396, 1398, 
 -	1400, 1403, 1405, 1407, 1409, 1411, 1413, 1415, 
 -	1417, 1419, 1421, 1423, 1425, 1427, 1429, 1431, 
 -	1433, 1435, 1437, 1439, 1441, 1443, 1445, 1447, 
 -	1449, 1451, 1454, 1456, 1458, 1460, 1462, 1464, 
 -	1466, 1468, 1470, 1472, 1474, 1476, 1478, 1480, 
 -	1483, 1485, 1487, 1489, 1491, 1493, 1495, 1497, 
 -	1499, 1501, 1503, 1505, 1507, 1509, 1511, 1513, 
 -	1515, 1517, 1519, 1521, 1523, 1525, 1527, 1529, 
 -	1531, 1533, 1535, 1537, 1539, 1541, 1543, 1545, 
 -	1547, 1549, 1551, 1553, 1555, 1557, 1559, 1562, 
 -	1564, 1566, 1569, 1571, 1573, 1575, 1577, 1579, 
 -	1581, 1583, 1585, 1587, 1589, 1591, 1594, 1596, 
 -	1598, 1600, 1602, 1604, 1606, 1608, 1610, 1612, 
 -	1614, 1616, 1618, 1620, 1622, 1624, 1626, 1628, 
 -	1630, 1632, 1634, 1636, 1637, 1639, 1640, 1641, 
 -	1643, 1644, 1645, 1646, 1647, 1648, 1649, 1650, 
 -	1651, 1652, 1653, 1654, 1656, 1657, 1658, 1659, 
 -	1660, 1661, 1662, 1663, 1664, 1665, 1666
 -};
 -
 -static const char _lexer_trans_keys[] = {
 -	-48, -17, 10, 32, 34, 35, 37, 42, 
 -	64, 124, 9, 13, -112, -108, -107, -104, 
 -	-102, -99, -97, -95, -94, -92, 32, 10, 
 -	13, 10, 13, -48, 10, 32, 34, 35, 
 -	37, 42, 64, 124, 9, 13, 34, 34, 
 -	10, 13, 10, 13, 10, 32, 34, 9, 
 -	13, 10, 32, 34, 9, 13, 10, 32, 
 -	34, 9, 13, 10, 32, 34, 9, 13, 
 -	10, 32, 9, 13, 10, 32, 9, 13, 
 -	10, 13, 10, 95, 70, 69, 65, 84, 
 -	85, 82, 69, 95, 69, 78, 68, 95, 
 -	37, 13, 32, 64, 9, 10, 9, 10, 
 -	13, 32, 64, 11, 12, 10, 32, 64, 
 -	9, 13, 32, 124, 9, 13, 10, 32, 
 -	92, 124, 9, 13, 10, 92, 124, 10, 
 -	92, 10, 32, 92, 124, 9, 13, -48, 
 -	10, 32, 34, 35, 37, 42, 64, 124, 
 -	9, 13, -48, -80, -66, -48, -67, -48, 
 -	-66, -48, -65, -47, -125, -47, -127, -47, 
 -	-126, -48, -72, -48, -68, -47, -127, -48, 
 -	-69, -48, -72, -48, 32, -66, -48, -77, 
 -	-67, -48, -76, -48, -80, -47, -126, -48, 
 -	-75, -48, -70, -47, -127, -47, -126, 58, 
 -	10, 10, -48, 10, 32, 35, 37, 42, 
 -	64, 9, 13, -112, -108, -107, -104, -102, 
 -	-99, -97, -95, -94, -92, 10, 10, 32, 
 -	-48, 10, 32, 34, 35, 37, 42, 64, 
 -	124, 9, 13, -48, 10, -80, -66, 10, 
 -	-48, 10, -67, 10, -48, 10, -66, 10, 
 -	-48, 10, -65, 10, -47, 10, -125, 10, 
 -	-47, 10, -127, 10, -47, 10, -126, 10, 
 -	-48, 10, -72, 10, -48, 10, -68, 10, 
 -	-47, 10, -127, 10, -48, 10, -69, 10, 
 -	-48, 10, -72, 10, -48, 10, 32, -66, 
 -	10, -48, 10, -77, 10, -48, 10, -76, 
 -	10, -48, 10, -80, 10, -47, 10, -126, 
 -	10, -48, 10, -66, 10, -48, 10, -68, 
 -	10, -47, 10, -125, 10, 10, 32, -48, 
 -	10, -74, 10, -48, 10, -75, 10, -47, 
 -	10, -125, 10, -47, 10, -127, 10, -47, 
 -	10, -126, 10, -47, 10, -116, 10, -48, 
 -	-47, 10, -78, 10, -48, 10, -66, 10, 
 -	-48, 10, -71, 10, -47, 10, -127, 10, 
 -	-47, 10, -126, 10, -48, 10, -78, 10, 
 -	-48, 10, -66, 10, 10, 58, -126, -122, 
 -	10, -47, 10, -128, 10, -47, 10, -125, 
 -	10, -48, 10, -70, 10, -47, 10, -126, 
 -	10, -47, 10, -125, 10, -47, 10, -128, 
 -	10, -48, 10, -80, 10, 10, 32, -47, 
 -	10, -127, 10, -47, 10, -122, 10, -48, 
 -	10, -75, 10, -48, 10, -67, 10, -48, 
 -	10, -80, 10, -47, 10, -128, 10, -48, 
 -	10, -72, 10, -47, 10, -113, 10, -48, 
 -	10, -75, 10, -48, 10, -67, 10, -48, 
 -	10, -80, 10, -47, 10, -128, 10, -48, 
 -	10, -72, 10, -48, 10, -71, 10, -48, 
 -	10, -80, -66, 10, -48, 10, -70, 10, 
 -	-48, 10, 32, -47, 10, -125, 10, -48, 
 -	10, -67, 10, -48, 10, -70, 10, -47, 
 -	10, -122, 10, -48, 10, -72, 10, -48, 
 -	-47, 10, -66, 10, -48, 10, -67, 10, 
 -	-48, 10, -80, 10, -48, 10, -69, 10, 
 -	10, 95, 10, 70, 10, 69, 10, 65, 
 -	10, 84, 10, 85, 10, 82, 10, 69, 
 -	10, 95, 10, 69, 10, 78, 10, 68, 
 -	10, 95, 10, 37, -47, -126, -48, -66, 
 -	-48, -68, -47, -125, 32, -48, -74, -48, 
 -	-75, -47, -128, -125, -48, -75, -72, -48, 
 -	-76, -47, -117, -47, -127, -47, -126, -48, 
 -	-66, -47, -128, -48, -72, -47, -113, -48, 
 -	-68, -48, -75, -47, -128, -47, -117, 58, 
 -	10, 10, -48, 10, 32, 35, 124, 9, 
 -	13, -95, -92, 10, -48, 10, -78, 10, 
 -	-48, 10, -66, 10, -48, 10, -71, 10, 
 -	-47, 10, -127, 10, -47, 10, -126, 10, 
 -	-48, 10, -78, 10, -48, 10, -66, 10, 
 -	10, 58, -47, 10, -125, 10, -48, 10, 
 -	-67, 10, -48, 10, -70, 10, -47, 10, 
 -	-122, 10, -48, 10, -72, 10, -48, -47, 
 -	10, -66, 10, -48, 10, -67, 10, -48, 
 -	10, -80, 10, -48, 10, -69, 10, -113, 
 -	10, -47, -127, -47, -126, -47, -116, -48, 
 -	-47, -78, -48, -66, -48, -71, -47, -127, 
 -	-47, -126, -48, -78, -48, -66, 58, 10, 
 -	10, -48, 10, 32, 35, 37, 64, 9, 
 -	13, -102, -97, -95, -92, 10, -48, 10, 
 -	-66, 10, -48, 10, -67, 10, -47, 10, 
 -	-126, 10, -48, 10, -75, 10, -48, 10, 
 -	-70, 10, -47, 10, -127, 10, -47, 10, 
 -	-126, 10, 10, 58, -47, 10, -128, 10, 
 -	-48, 10, -75, -72, 10, -48, 10, -76, 
 -	10, -47, 10, -117, 10, -47, 10, -127, 
 -	10, -47, 10, -126, 10, -48, 10, -66, 
 -	10, -47, 10, -128, 10, -48, 10, -72, 
 -	10, -47, 10, -113, 10, -48, 10, -68, 
 -	10, -48, 10, -75, 10, -47, 10, -128, 
 -	10, -47, 10, -117, 10, -48, -47, 10, 
 -	-78, 10, -48, 10, -66, 10, -48, 10, 
 -	-71, 10, -47, 10, -127, 10, -47, 10, 
 -	-126, 10, -48, 10, -78, 10, -48, 10, 
 -	-66, 10, -126, -122, 10, -47, 10, -128, 
 -	10, -47, 10, -125, 10, -48, 10, -70, 
 -	10, -47, 10, -126, 10, -47, 10, -125, 
 -	10, -47, 10, -128, 10, -48, 10, -80, 
 -	10, 10, 32, -47, 10, -127, 10, -47, 
 -	10, -122, 10, -48, 10, -75, 10, -48, 
 -	10, -67, 10, -48, 10, -80, 10, -48, 
 -	10, -75, 10, -48, 10, -67, 10, -48, 
 -	10, -80, 10, -47, 10, -128, 10, -48, 
 -	10, -72, 10, -48, 10, -71, 10, -47, 
 -	10, -125, 10, -48, 10, -67, 10, -48, 
 -	10, -70, 10, -47, 10, -122, 10, -48, 
 -	10, -72, 10, -48, -47, 10, -66, 10, 
 -	-48, 10, -67, 10, -48, 10, -80, 10, 
 -	-48, 10, -69, 10, 10, 95, 10, 70, 
 -	10, 69, 10, 65, 10, 84, 10, 85, 
 -	10, 82, 10, 69, 10, 95, 10, 69, 
 -	10, 78, 10, 68, 10, 95, 10, 37, 
 -	-126, -122, -47, -128, -47, -125, -48, -70, 
 -	-47, -126, -47, -125, -47, -128, -48, -80, 
 -	32, -47, -127, -47, -122, -48, -75, -48, 
 -	-67, -48, -80, -47, -128, -48, -72, -47, 
 -	-113, 58, 10, 10, -48, 10, 32, 35, 
 -	37, 42, 64, 9, 13, -112, -108, -107, 
 -	-104, -102, -99, -97, -95, -94, -92, 10, 
 -	10, 32, -48, 10, -80, -66, 10, -48, 
 -	10, -67, 10, -48, 10, -66, 10, -48, 
 -	10, -65, 10, -47, 10, -125, 10, -47, 
 -	10, -127, 10, -47, 10, -126, 10, -48, 
 -	10, -72, 10, -48, 10, -68, 10, -47, 
 -	10, -127, 10, -48, 10, -69, 10, -48, 
 -	10, -72, 10, -48, 10, 32, -66, 10, 
 -	-48, 10, -77, 10, -48, 10, -76, 10, 
 -	-48, 10, -80, 10, -47, 10, -126, 10, 
 -	-48, 10, -66, 10, -48, 10, -68, 10, 
 -	-47, 10, -125, 10, 10, 32, -48, 10, 
 -	-74, 10, -48, 10, -75, 10, -47, 10, 
 -	-125, 10, -47, 10, -127, 10, -47, 10, 
 -	-126, 10, -47, 10, -116, 10, -48, -47, 
 -	10, -78, 10, -48, 10, -66, 10, -48, 
 -	10, -71, 10, -47, 10, -127, 10, -47, 
 -	10, -126, 10, -48, 10, -78, 10, -48, 
 -	10, -66, 10, 10, 58, -122, 10, -48, 
 -	10, -75, 10, -48, 10, -67, 10, -48, 
 -	10, -80, 10, -47, 10, -128, 10, -48, 
 -	10, -72, 10, -48, 10, -71, 10, -48, 
 -	10, -80, -66, 10, -48, 10, -70, 10, 
 -	-48, 10, 32, -47, 10, -125, 10, -48, 
 -	10, -67, 10, -48, 10, -70, 10, -47, 
 -	10, -122, 10, -48, 10, -72, 10, -48, 
 -	-47, 10, -66, 10, -48, 10, -67, 10, 
 -	-48, 10, -80, 10, -48, 10, -69, 10, 
 -	-113, 10, 10, 95, 10, 70, 10, 69, 
 -	10, 65, 10, 84, 10, 85, 10, 82, 
 -	10, 69, 10, 95, 10, 69, 10, 78, 
 -	10, 68, 10, 95, 10, 37, -48, -75, 
 -	-48, -67, -48, -80, -47, -128, -48, -72, 
 -	-48, -71, 58, 10, 10, -48, 10, 32, 
 -	35, 37, 42, 64, 9, 13, -112, -108, 
 -	-107, -104, -102, -99, -97, -95, -94, -92, 
 -	10, 10, 32, -48, 10, -80, -66, 10, 
 -	-48, 10, -67, 10, -48, 10, -66, 10, 
 -	-48, 10, -65, 10, -47, 10, -125, 10, 
 -	-47, 10, -127, 10, -47, 10, -126, 10, 
 -	-48, 10, -72, 10, -48, 10, -68, 10, 
 -	-47, 10, -127, 10, -48, 10, -69, 10, 
 -	-48, 10, -72, 10, -48, 10, 32, -66, 
 -	10, -48, 10, -77, -67, 10, -48, 10, 
 -	-76, 10, -48, 10, -80, 10, -47, 10, 
 -	-126, 10, -48, 10, -75, 10, -48, 10, 
 -	-70, 10, -47, 10, -127, 10, -47, 10, 
 -	-126, 10, 10, 58, -47, 10, -126, 10, 
 -	-48, 10, -66, 10, -48, 10, -68, 10, 
 -	-47, 10, -125, 10, 10, 32, -48, 10, 
 -	-74, 10, -48, 10, -75, 10, -47, 10, 
 -	-128, -125, 10, -48, 10, -75, 10, -48, 
 -	10, -76, 10, -47, 10, -117, 10, -47, 
 -	10, -127, 10, -47, 10, -126, 10, -48, 
 -	10, -66, 10, -47, 10, -128, 10, -48, 
 -	10, -72, 10, -47, 10, -113, 10, -47, 
 -	10, -127, 10, -47, 10, -126, 10, -47, 
 -	10, -116, 10, -48, -47, 10, -78, 10, 
 -	-48, 10, -66, 10, -48, 10, -71, 10, 
 -	-47, 10, -127, 10, -47, 10, -126, 10, 
 -	-48, 10, -78, 10, -48, 10, -66, 10, 
 -	-126, -122, 10, -47, 10, -128, 10, -47, 
 -	10, -125, 10, -48, 10, -70, 10, -47, 
 -	10, -126, 10, -47, 10, -125, 10, -47, 
 -	10, -128, 10, -48, 10, -80, 10, 10, 
 -	32, -47, 10, -127, 10, -47, 10, -122, 
 -	10, -48, 10, -75, 10, -48, 10, -67, 
 -	10, -48, 10, -80, 10, -48, 10, -75, 
 -	10, -48, 10, -67, 10, -48, 10, -80, 
 -	10, -47, 10, -128, 10, -48, 10, -72, 
 -	10, -48, 10, -71, 10, -48, 10, -80, 
 -	-66, 10, -48, 10, -70, 10, -48, 10, 
 -	32, -77, 10, -47, 10, -125, 10, -48, 
 -	10, -67, 10, -48, 10, -70, 10, -47, 
 -	10, -122, 10, -48, 10, -72, 10, -48, 
 -	-47, 10, -66, 10, -48, 10, -67, 10, 
 -	-48, 10, -80, 10, -48, 10, -69, 10, 
 -	10, 95, 10, 70, 10, 69, 10, 65, 
 -	10, 84, 10, 85, 10, 82, 10, 69, 
 -	10, 95, 10, 69, 10, 78, 10, 68, 
 -	10, 95, 10, 37, -48, -80, -66, -48, 
 -	-70, -48, 32, -77, -47, -125, -48, -67, 
 -	-48, -70, -47, -122, -48, -72, -48, -47, 
 -	-66, -48, -67, -48, -80, -48, -69, -113, 
 -	-69, -65, 0
 -};
 -
 -static const char _lexer_single_lengths[] = {
 -	0, 10, 10, 1, 2, 2, 9, 1, 
 -	1, 2, 2, 3, 3, 3, 3, 2, 
 -	2, 2, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 3, 5, 3, 2, 4, 3, 2, 
 -	4, 9, 1, 2, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 2, 1, 1, 2, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 7, 
 -	11, 2, 9, 2, 3, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 3, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	3, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 3, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 3, 2, 2, 3, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 3, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 2, 1, 
 -	2, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 5, 3, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 3, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	1, 1, 1, 1, 1, 1, 2, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 6, 
 -	5, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 3, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 3, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 3, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 3, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 7, 11, 2, 2, 3, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 3, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 3, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	3, 2, 2, 3, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 3, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 7, 11, 2, 2, 
 -	3, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 3, 
 -	2, 2, 3, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	3, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 3, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 3, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 3, 2, 
 -	2, 3, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 3, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 1, 2, 1, 1, 2, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 2, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 0
 -};
 -
 -static const char _lexer_range_lengths[] = {
 -	0, 1, 0, 0, 0, 0, 1, 0, 
 -	0, 0, 0, 1, 1, 1, 1, 1, 
 -	1, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 1, 1, 1, 1, 1, 0, 0, 
 -	1, 1, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 1, 
 -	0, 0, 1, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 1, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 1, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 1, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 1, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0
 -};
 -
 -static const short _lexer_index_offsets[] = {
 -	0, 0, 12, 23, 25, 28, 31, 42, 
 -	44, 46, 49, 52, 57, 62, 67, 72, 
 -	76, 80, 83, 85, 87, 89, 91, 93, 
 -	95, 97, 99, 101, 103, 105, 107, 109, 
 -	111, 113, 118, 125, 130, 134, 140, 144, 
 -	147, 153, 164, 166, 169, 171, 173, 175, 
 -	177, 179, 181, 183, 185, 187, 189, 191, 
 -	193, 195, 197, 199, 201, 203, 205, 207, 
 -	209, 211, 213, 216, 218, 220, 223, 225, 
 -	227, 229, 231, 233, 235, 237, 239, 241, 
 -	243, 245, 247, 249, 251, 253, 255, 257, 
 -	266, 278, 281, 292, 295, 299, 302, 305, 
 -	308, 311, 314, 317, 320, 323, 326, 329, 
 -	332, 335, 338, 341, 344, 347, 350, 353, 
 -	356, 359, 362, 365, 369, 372, 375, 378, 
 -	381, 384, 387, 390, 393, 396, 399, 402, 
 -	405, 408, 411, 414, 417, 420, 423, 426, 
 -	429, 432, 435, 438, 441, 444, 447, 450, 
 -	453, 457, 460, 463, 466, 469, 472, 475, 
 -	478, 481, 484, 487, 490, 493, 496, 499, 
 -	503, 506, 509, 512, 515, 518, 521, 524, 
 -	527, 530, 533, 536, 539, 542, 545, 548, 
 -	551, 554, 557, 560, 563, 566, 569, 572, 
 -	575, 578, 581, 584, 587, 590, 593, 596, 
 -	599, 602, 605, 608, 611, 614, 617, 620, 
 -	623, 626, 629, 632, 635, 639, 642, 645, 
 -	649, 652, 655, 658, 661, 664, 667, 670, 
 -	673, 676, 679, 683, 686, 689, 692, 695, 
 -	698, 701, 704, 707, 710, 713, 716, 719, 
 -	722, 725, 728, 731, 734, 737, 740, 743, 
 -	746, 748, 750, 752, 754, 756, 758, 760, 
 -	762, 764, 766, 768, 770, 772, 774, 777, 
 -	779, 782, 784, 786, 788, 790, 792, 794, 
 -	796, 798, 800, 802, 804, 806, 808, 810, 
 -	812, 814, 816, 818, 820, 822, 824, 826, 
 -	828, 830, 832, 834, 836, 843, 847, 850, 
 -	853, 856, 859, 862, 865, 868, 871, 874, 
 -	877, 880, 883, 886, 889, 892, 895, 898, 
 -	901, 904, 907, 910, 913, 916, 919, 922, 
 -	926, 929, 932, 935, 938, 941, 944, 947, 
 -	950, 952, 954, 956, 958, 960, 962, 965, 
 -	967, 969, 971, 973, 975, 977, 979, 981, 
 -	983, 985, 987, 989, 991, 993, 995, 997, 
 -	1005, 1011, 1014, 1017, 1020, 1023, 1026, 1029, 
 -	1032, 1035, 1038, 1041, 1044, 1047, 1050, 1053, 
 -	1056, 1059, 1062, 1065, 1069, 1072, 1075, 1078, 
 -	1081, 1084, 1087, 1090, 1093, 1096, 1099, 1102, 
 -	1105, 1108, 1111, 1114, 1117, 1120, 1123, 1126, 
 -	1129, 1132, 1135, 1138, 1141, 1145, 1148, 1151, 
 -	1154, 1157, 1160, 1163, 1166, 1169, 1172, 1175, 
 -	1178, 1181, 1184, 1188, 1191, 1194, 1197, 1200, 
 -	1203, 1206, 1209, 1212, 1215, 1218, 1221, 1224, 
 -	1227, 1230, 1233, 1236, 1239, 1242, 1245, 1248, 
 -	1251, 1254, 1257, 1260, 1263, 1266, 1269, 1272, 
 -	1275, 1278, 1281, 1284, 1287, 1290, 1293, 1296, 
 -	1299, 1302, 1305, 1308, 1311, 1314, 1317, 1320, 
 -	1323, 1326, 1329, 1333, 1336, 1339, 1342, 1345, 
 -	1348, 1351, 1354, 1357, 1360, 1363, 1366, 1369, 
 -	1372, 1375, 1378, 1381, 1384, 1387, 1390, 1393, 
 -	1396, 1399, 1401, 1403, 1405, 1407, 1409, 1411, 
 -	1413, 1415, 1417, 1419, 1421, 1423, 1425, 1427, 
 -	1429, 1431, 1433, 1435, 1437, 1439, 1441, 1443, 
 -	1445, 1447, 1449, 1451, 1453, 1455, 1457, 1459, 
 -	1461, 1463, 1465, 1467, 1476, 1488, 1491, 1494, 
 -	1498, 1501, 1504, 1507, 1510, 1513, 1516, 1519, 
 -	1522, 1525, 1528, 1531, 1534, 1537, 1540, 1543, 
 -	1546, 1549, 1552, 1555, 1558, 1561, 1564, 1568, 
 -	1571, 1574, 1577, 1580, 1583, 1586, 1589, 1592, 
 -	1595, 1598, 1601, 1604, 1607, 1610, 1613, 1616, 
 -	1619, 1622, 1625, 1628, 1631, 1634, 1637, 1640, 
 -	1643, 1646, 1649, 1652, 1656, 1659, 1662, 1665, 
 -	1668, 1671, 1674, 1677, 1680, 1683, 1686, 1689, 
 -	1692, 1695, 1698, 1701, 1704, 1707, 1710, 1713, 
 -	1716, 1719, 1722, 1725, 1728, 1731, 1734, 1737, 
 -	1740, 1744, 1747, 1750, 1754, 1757, 1760, 1763, 
 -	1766, 1769, 1772, 1775, 1778, 1781, 1784, 1788, 
 -	1791, 1794, 1797, 1800, 1803, 1806, 1809, 1812, 
 -	1815, 1818, 1821, 1824, 1827, 1830, 1833, 1836, 
 -	1839, 1842, 1845, 1848, 1851, 1854, 1856, 1858, 
 -	1860, 1862, 1864, 1866, 1868, 1870, 1872, 1874, 
 -	1876, 1878, 1880, 1882, 1884, 1893, 1905, 1908, 
 -	1911, 1915, 1918, 1921, 1924, 1927, 1930, 1933, 
 -	1936, 1939, 1942, 1945, 1948, 1951, 1954, 1957, 
 -	1960, 1963, 1966, 1969, 1972, 1975, 1978, 1981, 
 -	1985, 1988, 1991, 1995, 1998, 2001, 2004, 2007, 
 -	2010, 2013, 2016, 2019, 2022, 2025, 2028, 2031, 
 -	2034, 2037, 2040, 2043, 2046, 2049, 2052, 2055, 
 -	2058, 2061, 2064, 2067, 2070, 2073, 2076, 2079, 
 -	2082, 2086, 2089, 2092, 2095, 2098, 2101, 2104, 
 -	2107, 2110, 2113, 2116, 2119, 2122, 2125, 2128, 
 -	2131, 2134, 2137, 2140, 2143, 2146, 2149, 2152, 
 -	2155, 2158, 2162, 2165, 2168, 2171, 2174, 2177, 
 -	2180, 2183, 2186, 2189, 2192, 2195, 2198, 2201, 
 -	2205, 2208, 2211, 2214, 2217, 2220, 2223, 2226, 
 -	2229, 2232, 2235, 2238, 2241, 2244, 2247, 2250, 
 -	2253, 2256, 2259, 2262, 2265, 2268, 2271, 2274, 
 -	2277, 2280, 2283, 2286, 2289, 2292, 2295, 2298, 
 -	2301, 2304, 2307, 2310, 2313, 2316, 2319, 2323, 
 -	2326, 2329, 2333, 2336, 2339, 2342, 2345, 2348, 
 -	2351, 2354, 2357, 2360, 2363, 2366, 2370, 2373, 
 -	2376, 2379, 2382, 2385, 2388, 2391, 2394, 2397, 
 -	2400, 2403, 2406, 2409, 2412, 2415, 2418, 2421, 
 -	2424, 2427, 2430, 2433, 2435, 2438, 2440, 2442, 
 -	2445, 2447, 2449, 2451, 2453, 2455, 2457, 2459, 
 -	2461, 2463, 2465, 2467, 2470, 2472, 2474, 2476, 
 -	2478, 2480, 2482, 2484, 2486, 2488, 2490
 -};
 -
 -static const short _lexer_trans_targs[] = {
 -	2, 844, 6, 6, 7, 17, 19, 3, 
 -	33, 36, 6, 0, 3, 42, 60, 3, 
 -	66, 46, 253, 326, 819, 825, 0, 4, 
 -	0, 6, 18, 5, 6, 18, 5, 2, 
 -	6, 6, 7, 17, 19, 3, 33, 36, 
 -	6, 0, 8, 0, 9, 0, 11, 10, 
 -	10, 11, 10, 10, 12, 12, 13, 12, 
 -	12, 12, 12, 13, 12, 12, 12, 12, 
 -	14, 12, 12, 12, 12, 15, 12, 12, 
 -	6, 16, 16, 0, 6, 16, 16, 0, 
 -	6, 18, 17, 6, 0, 20, 0, 21, 
 -	0, 22, 0, 23, 0, 24, 0, 25, 
 -	0, 26, 0, 27, 0, 28, 0, 29, 
 -	0, 30, 0, 31, 0, 32, 0, 846, 
 -	0, 0, 0, 0, 0, 34, 35, 6, 
 -	35, 35, 33, 34, 34, 6, 35, 33, 
 -	35, 0, 36, 37, 36, 0, 41, 40, 
 -	39, 37, 40, 38, 0, 39, 37, 38, 
 -	0, 39, 38, 41, 40, 39, 37, 40, 
 -	38, 2, 41, 41, 7, 17, 19, 3, 
 -	33, 36, 41, 0, 43, 0, 44, 48, 
 -	0, 45, 0, 46, 0, 47, 0, 3, 
 -	0, 49, 0, 50, 0, 51, 0, 52, 
 -	0, 53, 0, 54, 0, 55, 0, 56, 
 -	0, 57, 0, 58, 0, 59, 0, 3, 
 -	0, 61, 0, 62, 0, 63, 0, 64, 
 -	0, 65, 0, 3, 0, 67, 240, 0, 
 -	68, 0, 69, 0, 70, 74, 0, 71, 
 -	0, 72, 0, 73, 0, 3, 0, 75, 
 -	0, 76, 0, 77, 0, 78, 0, 79, 
 -	0, 80, 0, 81, 0, 82, 0, 83, 
 -	0, 84, 0, 85, 0, 87, 86, 87, 
 -	86, 88, 87, 87, 6, 226, 89, 6, 
 -	87, 86, 89, 91, 109, 89, 115, 95, 
 -	136, 144, 203, 208, 87, 86, 87, 90, 
 -	86, 2, 6, 6, 7, 17, 19, 3, 
 -	33, 36, 6, 0, 92, 87, 86, 93, 
 -	97, 87, 86, 94, 87, 86, 95, 87, 
 -	86, 96, 87, 86, 89, 87, 86, 98, 
 -	87, 86, 99, 87, 86, 100, 87, 86, 
 -	101, 87, 86, 102, 87, 86, 103, 87, 
 -	86, 104, 87, 86, 105, 87, 86, 106, 
 -	87, 86, 107, 87, 86, 108, 87, 86, 
 -	89, 87, 86, 110, 87, 86, 111, 87, 
 -	86, 112, 87, 86, 113, 87, 86, 114, 
 -	87, 86, 89, 87, 86, 116, 87, 123, 
 -	86, 117, 87, 86, 118, 87, 86, 119, 
 -	87, 86, 120, 87, 86, 121, 87, 86, 
 -	122, 87, 86, 89, 87, 86, 124, 87, 
 -	86, 125, 87, 86, 126, 87, 86, 127, 
 -	87, 86, 128, 87, 86, 129, 87, 86, 
 -	130, 87, 86, 131, 87, 86, 87, 132, 
 -	86, 133, 87, 86, 134, 87, 86, 135, 
 -	87, 86, 89, 87, 86, 137, 87, 86, 
 -	138, 87, 86, 139, 87, 86, 140, 87, 
 -	86, 141, 87, 86, 142, 87, 86, 143, 
 -	87, 86, 89, 87, 86, 145, 159, 87, 
 -	86, 146, 87, 86, 147, 87, 86, 148, 
 -	87, 86, 149, 87, 86, 150, 87, 86, 
 -	151, 87, 86, 152, 87, 86, 153, 87, 
 -	86, 154, 87, 86, 155, 87, 86, 156, 
 -	87, 86, 157, 87, 86, 158, 87, 86, 
 -	87, 90, 86, 160, 191, 87, 86, 161, 
 -	87, 86, 162, 87, 86, 163, 87, 86, 
 -	164, 87, 86, 165, 87, 86, 166, 87, 
 -	86, 167, 87, 86, 168, 87, 86, 169, 
 -	87, 86, 170, 87, 86, 171, 87, 86, 
 -	172, 87, 86, 173, 87, 86, 174, 87, 
 -	86, 87, 175, 86, 176, 87, 86, 177, 
 -	87, 86, 178, 87, 86, 179, 87, 86, 
 -	180, 87, 86, 181, 87, 86, 182, 87, 
 -	86, 183, 87, 86, 184, 87, 86, 185, 
 -	87, 86, 186, 87, 86, 187, 87, 86, 
 -	188, 87, 86, 189, 87, 86, 190, 87, 
 -	86, 158, 87, 86, 192, 87, 86, 193, 
 -	87, 86, 194, 87, 86, 195, 87, 86, 
 -	196, 87, 86, 197, 87, 86, 198, 87, 
 -	86, 199, 87, 86, 200, 87, 86, 201, 
 -	87, 86, 202, 87, 86, 158, 87, 86, 
 -	204, 87, 86, 205, 207, 87, 86, 206, 
 -	87, 86, 132, 87, 86, 118, 87, 90, 
 -	86, 209, 87, 86, 210, 87, 86, 211, 
 -	87, 86, 212, 87, 86, 213, 87, 86, 
 -	214, 87, 86, 215, 87, 86, 216, 87, 
 -	86, 217, 87, 86, 218, 87, 86, 219, 
 -	190, 87, 86, 220, 87, 86, 221, 87, 
 -	86, 222, 87, 86, 223, 87, 86, 224, 
 -	87, 86, 225, 87, 86, 158, 87, 86, 
 -	87, 227, 86, 87, 228, 86, 87, 229, 
 -	86, 87, 230, 86, 87, 231, 86, 87, 
 -	232, 86, 87, 233, 86, 87, 234, 86, 
 -	87, 235, 86, 87, 236, 86, 87, 237, 
 -	86, 87, 238, 86, 87, 239, 86, 87, 
 -	6, 86, 241, 0, 242, 0, 243, 0, 
 -	244, 0, 245, 0, 246, 0, 247, 0, 
 -	248, 0, 249, 0, 250, 0, 251, 0, 
 -	252, 0, 3, 0, 254, 0, 255, 320, 
 -	0, 256, 0, 257, 273, 0, 258, 0, 
 -	259, 0, 260, 0, 261, 0, 262, 0, 
 -	263, 0, 264, 0, 265, 0, 266, 0, 
 -	267, 0, 268, 0, 269, 0, 270, 0, 
 -	271, 0, 272, 0, 84, 0, 274, 0, 
 -	275, 0, 276, 0, 277, 0, 278, 0, 
 -	279, 0, 280, 0, 281, 0, 282, 0, 
 -	284, 283, 284, 283, 285, 284, 284, 6, 
 -	6, 284, 283, 286, 301, 284, 283, 287, 
 -	284, 283, 288, 284, 283, 289, 284, 283, 
 -	290, 284, 283, 291, 284, 283, 292, 284, 
 -	283, 293, 284, 283, 294, 284, 283, 295, 
 -	284, 283, 296, 284, 283, 297, 284, 283, 
 -	298, 284, 283, 299, 284, 283, 300, 284, 
 -	283, 284, 90, 283, 302, 284, 283, 303, 
 -	284, 283, 304, 284, 283, 305, 284, 283, 
 -	306, 284, 283, 307, 284, 283, 308, 284, 
 -	283, 309, 284, 283, 310, 284, 283, 311, 
 -	284, 283, 312, 319, 284, 283, 313, 284, 
 -	283, 314, 284, 283, 315, 284, 283, 316, 
 -	284, 283, 317, 284, 283, 318, 284, 283, 
 -	300, 284, 283, 300, 284, 283, 321, 0, 
 -	322, 0, 323, 0, 324, 0, 325, 0, 
 -	3, 0, 327, 472, 0, 328, 0, 329, 
 -	0, 330, 0, 331, 0, 332, 0, 333, 
 -	0, 334, 0, 335, 0, 336, 0, 337, 
 -	0, 338, 0, 339, 0, 340, 0, 341, 
 -	0, 343, 342, 343, 342, 344, 343, 343, 
 -	6, 458, 6, 343, 342, 345, 360, 388, 
 -	440, 343, 342, 346, 343, 342, 347, 343, 
 -	342, 348, 343, 342, 349, 343, 342, 350, 
 -	343, 342, 351, 343, 342, 352, 343, 342, 
 -	353, 343, 342, 354, 343, 342, 355, 343, 
 -	342, 356, 343, 342, 357, 343, 342, 358, 
 -	343, 342, 359, 343, 342, 343, 90, 342, 
 -	361, 343, 342, 362, 343, 342, 363, 343, 
 -	342, 364, 380, 343, 342, 365, 343, 342, 
 -	366, 343, 342, 367, 343, 342, 368, 343, 
 -	342, 369, 343, 342, 370, 343, 342, 371, 
 -	343, 342, 372, 343, 342, 373, 343, 342, 
 -	374, 343, 342, 375, 343, 342, 376, 343, 
 -	342, 377, 343, 342, 378, 343, 342, 379, 
 -	343, 342, 359, 343, 342, 381, 343, 342, 
 -	382, 343, 342, 383, 343, 342, 384, 343, 
 -	342, 385, 343, 342, 386, 343, 342, 387, 
 -	343, 342, 359, 343, 342, 389, 402, 343, 
 -	342, 390, 343, 342, 391, 343, 342, 392, 
 -	343, 342, 393, 343, 342, 394, 343, 342, 
 -	395, 343, 342, 396, 343, 342, 397, 343, 
 -	342, 398, 343, 342, 399, 343, 342, 400, 
 -	343, 342, 401, 343, 342, 359, 343, 342, 
 -	403, 428, 343, 342, 404, 343, 342, 405, 
 -	343, 342, 406, 343, 342, 407, 343, 342, 
 -	408, 343, 342, 409, 343, 342, 410, 343, 
 -	342, 411, 343, 342, 412, 343, 342, 413, 
 -	343, 342, 414, 343, 342, 415, 343, 342, 
 -	416, 343, 342, 417, 343, 342, 343, 418, 
 -	342, 419, 343, 342, 420, 343, 342, 421, 
 -	343, 342, 422, 343, 342, 423, 343, 342, 
 -	424, 343, 342, 425, 343, 342, 426, 343, 
 -	342, 427, 343, 342, 374, 343, 342, 429, 
 -	343, 342, 430, 343, 342, 431, 343, 342, 
 -	432, 343, 342, 433, 343, 342, 434, 343, 
 -	342, 435, 343, 342, 436, 343, 342, 437, 
 -	343, 342, 438, 343, 342, 439, 343, 342, 
 -	359, 343, 342, 441, 343, 342, 442, 343, 
 -	342, 443, 343, 342, 444, 343, 342, 445, 
 -	343, 342, 446, 343, 342, 447, 343, 342, 
 -	448, 343, 342, 449, 343, 342, 450, 343, 
 -	342, 451, 379, 343, 342, 452, 343, 342, 
 -	453, 343, 342, 454, 343, 342, 455, 343, 
 -	342, 456, 343, 342, 457, 343, 342, 359, 
 -	343, 342, 343, 459, 342, 343, 460, 342, 
 -	343, 461, 342, 343, 462, 342, 343, 463, 
 -	342, 343, 464, 342, 343, 465, 342, 343, 
 -	466, 342, 343, 467, 342, 343, 468, 342, 
 -	343, 469, 342, 343, 470, 342, 343, 471, 
 -	342, 343, 6, 342, 473, 629, 0, 474, 
 -	0, 475, 0, 476, 0, 477, 0, 478, 
 -	0, 479, 0, 480, 0, 481, 0, 482, 
 -	0, 483, 0, 484, 0, 485, 0, 486, 
 -	0, 487, 0, 488, 0, 489, 0, 490, 
 -	0, 491, 0, 492, 0, 493, 0, 494, 
 -	0, 495, 0, 496, 0, 497, 0, 498, 
 -	0, 499, 0, 500, 0, 501, 0, 502, 
 -	0, 503, 0, 504, 0, 505, 0, 507, 
 -	506, 507, 506, 508, 507, 507, 6, 615, 
 -	509, 6, 507, 506, 509, 510, 528, 509, 
 -	534, 514, 555, 563, 591, 596, 507, 506, 
 -	507, 90, 506, 511, 507, 506, 512, 516, 
 -	507, 506, 513, 507, 506, 514, 507, 506, 
 -	515, 507, 506, 509, 507, 506, 517, 507, 
 -	506, 518, 507, 506, 519, 507, 506, 520, 
 -	507, 506, 521, 507, 506, 522, 507, 506, 
 -	523, 507, 506, 524, 507, 506, 525, 507, 
 -	506, 526, 507, 506, 527, 507, 506, 509, 
 -	507, 506, 529, 507, 506, 530, 507, 506, 
 -	531, 507, 506, 532, 507, 506, 533, 507, 
 -	506, 509, 507, 506, 535, 507, 542, 506, 
 -	536, 507, 506, 537, 507, 506, 538, 507, 
 -	506, 539, 507, 506, 540, 507, 506, 541, 
 -	507, 506, 509, 507, 506, 543, 507, 506, 
 -	544, 507, 506, 545, 507, 506, 546, 507, 
 -	506, 547, 507, 506, 548, 507, 506, 549, 
 -	507, 506, 550, 507, 506, 507, 551, 506, 
 -	552, 507, 506, 553, 507, 506, 554, 507, 
 -	506, 509, 507, 506, 556, 507, 506, 557, 
 -	507, 506, 558, 507, 506, 559, 507, 506, 
 -	560, 507, 506, 561, 507, 506, 562, 507, 
 -	506, 509, 507, 506, 564, 578, 507, 506, 
 -	565, 507, 506, 566, 507, 506, 567, 507, 
 -	506, 568, 507, 506, 569, 507, 506, 570, 
 -	507, 506, 571, 507, 506, 572, 507, 506, 
 -	573, 507, 506, 574, 507, 506, 575, 507, 
 -	506, 576, 507, 506, 577, 507, 506, 507, 
 -	90, 506, 579, 507, 506, 580, 507, 506, 
 -	581, 507, 506, 582, 507, 506, 583, 507, 
 -	506, 584, 507, 506, 585, 507, 506, 586, 
 -	507, 506, 587, 507, 506, 588, 507, 506, 
 -	589, 507, 506, 590, 507, 506, 577, 507, 
 -	506, 592, 507, 506, 593, 595, 507, 506, 
 -	594, 507, 506, 551, 507, 506, 537, 507, 
 -	90, 506, 597, 507, 506, 598, 507, 506, 
 -	599, 507, 506, 600, 507, 506, 601, 507, 
 -	506, 602, 507, 506, 603, 507, 506, 604, 
 -	507, 506, 605, 507, 506, 606, 507, 506, 
 -	607, 614, 507, 506, 608, 507, 506, 609, 
 -	507, 506, 610, 507, 506, 611, 507, 506, 
 -	612, 507, 506, 613, 507, 506, 577, 507, 
 -	506, 577, 507, 506, 507, 616, 506, 507, 
 -	617, 506, 507, 618, 506, 507, 619, 506, 
 -	507, 620, 506, 507, 621, 506, 507, 622, 
 -	506, 507, 623, 506, 507, 624, 506, 507, 
 -	625, 506, 507, 626, 506, 507, 627, 506, 
 -	507, 628, 506, 507, 6, 506, 630, 0, 
 -	631, 0, 632, 0, 633, 0, 634, 0, 
 -	635, 0, 636, 0, 637, 0, 638, 0, 
 -	639, 0, 640, 0, 641, 0, 642, 0, 
 -	644, 643, 644, 643, 645, 644, 644, 6, 
 -	805, 646, 6, 644, 643, 646, 647, 665, 
 -	646, 671, 651, 703, 729, 781, 787, 644, 
 -	643, 644, 90, 643, 648, 644, 643, 649, 
 -	653, 644, 643, 650, 644, 643, 651, 644, 
 -	643, 652, 644, 643, 646, 644, 643, 654, 
 -	644, 643, 655, 644, 643, 656, 644, 643, 
 -	657, 644, 643, 658, 644, 643, 659, 644, 
 -	643, 660, 644, 643, 661, 644, 643, 662, 
 -	644, 643, 663, 644, 643, 664, 644, 643, 
 -	646, 644, 643, 666, 644, 643, 667, 644, 
 -	643, 668, 644, 643, 669, 644, 643, 670, 
 -	644, 643, 646, 644, 643, 672, 644, 690, 
 -	643, 673, 644, 643, 674, 644, 643, 675, 
 -	679, 644, 643, 676, 644, 643, 677, 644, 
 -	643, 678, 644, 643, 646, 644, 643, 680, 
 -	644, 643, 681, 644, 643, 682, 644, 643, 
 -	683, 644, 643, 684, 644, 643, 685, 644, 
 -	643, 686, 644, 643, 687, 644, 643, 688, 
 -	644, 643, 689, 644, 643, 644, 90, 643, 
 -	691, 644, 643, 692, 644, 643, 693, 644, 
 -	643, 694, 644, 643, 695, 644, 643, 696, 
 -	644, 643, 697, 644, 643, 698, 644, 643, 
 -	644, 699, 643, 700, 644, 643, 701, 644, 
 -	643, 702, 644, 643, 646, 644, 643, 704, 
 -	644, 643, 705, 723, 644, 643, 706, 644, 
 -	643, 707, 644, 643, 708, 644, 643, 709, 
 -	644, 643, 710, 644, 643, 711, 644, 643, 
 -	712, 644, 643, 713, 644, 643, 714, 644, 
 -	643, 715, 644, 643, 716, 644, 643, 717, 
 -	644, 643, 718, 644, 643, 719, 644, 643, 
 -	720, 644, 643, 721, 644, 643, 722, 644, 
 -	643, 689, 644, 643, 724, 644, 643, 725, 
 -	644, 643, 726, 644, 643, 727, 644, 643, 
 -	728, 644, 643, 646, 644, 643, 730, 743, 
 -	644, 643, 731, 644, 643, 732, 644, 643, 
 -	733, 644, 643, 734, 644, 643, 735, 644, 
 -	643, 736, 644, 643, 737, 644, 643, 738, 
 -	644, 643, 739, 644, 643, 740, 644, 643, 
 -	741, 644, 643, 742, 644, 643, 689, 644, 
 -	643, 744, 769, 644, 643, 745, 644, 643, 
 -	746, 644, 643, 747, 644, 643, 748, 644, 
 -	643, 749, 644, 643, 750, 644, 643, 751, 
 -	644, 643, 752, 644, 643, 753, 644, 643, 
 -	754, 644, 643, 755, 644, 643, 756, 644, 
 -	643, 757, 644, 643, 758, 644, 643, 644, 
 -	759, 643, 760, 644, 643, 761, 644, 643, 
 -	762, 644, 643, 763, 644, 643, 764, 644, 
 -	643, 765, 644, 643, 766, 644, 643, 767, 
 -	644, 643, 768, 644, 643, 717, 644, 643, 
 -	770, 644, 643, 771, 644, 643, 772, 644, 
 -	643, 773, 644, 643, 774, 644, 643, 775, 
 -	644, 643, 776, 644, 643, 777, 644, 643, 
 -	778, 644, 643, 779, 644, 643, 780, 644, 
 -	643, 689, 644, 643, 782, 644, 643, 783, 
 -	785, 644, 643, 784, 644, 643, 699, 644, 
 -	643, 786, 644, 90, 643, 675, 644, 643, 
 -	788, 644, 643, 789, 644, 643, 790, 644, 
 -	643, 791, 644, 643, 792, 644, 643, 793, 
 -	644, 643, 794, 644, 643, 795, 644, 643, 
 -	796, 644, 643, 797, 644, 643, 798, 722, 
 -	644, 643, 799, 644, 643, 800, 644, 643, 
 -	801, 644, 643, 802, 644, 643, 803, 644, 
 -	643, 804, 644, 643, 689, 644, 643, 644, 
 -	806, 643, 644, 807, 643, 644, 808, 643, 
 -	644, 809, 643, 644, 810, 643, 644, 811, 
 -	643, 644, 812, 643, 644, 813, 643, 644, 
 -	814, 643, 644, 815, 643, 644, 816, 643, 
 -	644, 817, 643, 644, 818, 643, 644, 6, 
 -	643, 820, 0, 821, 823, 0, 822, 0, 
 -	249, 0, 824, 4, 0, 70, 0, 826, 
 -	0, 827, 0, 828, 0, 829, 0, 830, 
 -	0, 831, 0, 832, 0, 833, 0, 834, 
 -	0, 835, 0, 836, 843, 0, 837, 0, 
 -	838, 0, 839, 0, 840, 0, 841, 0, 
 -	842, 0, 340, 0, 340, 0, 845, 0, 
 -	6, 0, 0, 0
 -};
 -
 -static const unsigned char _lexer_trans_actions[] = {
 -	29, 0, 54, 0, 5, 1, 0, 29, 
 -	1, 35, 0, 43, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 43, 0, 
 -	43, 149, 126, 57, 110, 23, 0, 29, 
 -	54, 0, 5, 1, 0, 29, 1, 35, 
 -	0, 43, 0, 43, 0, 43, 139, 48, 
 -	9, 106, 11, 0, 134, 45, 45, 45, 
 -	3, 122, 33, 33, 33, 0, 122, 33, 
 -	33, 33, 0, 122, 33, 0, 33, 0, 
 -	102, 7, 7, 43, 54, 0, 0, 43, 
 -	114, 25, 0, 54, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 43, 43, 43, 43, 0, 27, 118, 
 -	27, 27, 51, 27, 0, 54, 0, 1, 
 -	0, 43, 0, 0, 0, 43, 54, 37, 
 -	37, 87, 37, 37, 43, 0, 39, 0, 
 -	43, 0, 0, 54, 0, 0, 39, 0, 
 -	0, 96, 54, 0, 93, 90, 41, 96, 
 -	90, 99, 0, 43, 0, 43, 0, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 0, 43, 
 -	0, 43, 0, 43, 0, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 144, 57, 54, 
 -	0, 84, 54, 0, 72, 33, 84, 72, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 54, 0, 54, 15, 
 -	0, 63, 130, 31, 60, 57, 31, 63, 
 -	57, 66, 31, 43, 0, 54, 0, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 54, 0, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	54, 15, 0, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 54, 0, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 15, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	15, 0, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 0, 
 -	43, 0, 43, 0, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	144, 57, 54, 0, 84, 54, 0, 81, 
 -	81, 0, 0, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 54, 21, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 144, 57, 54, 0, 84, 54, 0, 
 -	69, 33, 69, 0, 0, 0, 0, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 54, 13, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 54, 0, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 13, 0, 0, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 144, 
 -	57, 54, 0, 84, 54, 0, 78, 33, 
 -	84, 78, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 54, 0, 
 -	54, 19, 0, 0, 54, 0, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 54, 0, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 54, 
 -	19, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	19, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 19, 0, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	144, 57, 54, 0, 84, 54, 0, 75, 
 -	33, 84, 75, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 54, 
 -	0, 54, 17, 0, 0, 54, 0, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 54, 17, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	54, 0, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 54, 
 -	0, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 17, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 17, 
 -	0, 0, 43, 0, 0, 43, 0, 43, 
 -	0, 43, 0, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 0
 -};
 -
 -static const unsigned char _lexer_eof_actions[] = {
 -	0, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43
 -};
 -
 -static const int lexer_start = 1;
 -static const int lexer_first_final = 846;
 -static const int lexer_error = 0;
 -
 -static const int lexer_en_main = 1;
 -
 -
 -#line 258 "ragel/i18n/ru.c.rl"
 -
 -static VALUE 
 -unindent(VALUE con, int start_col)
 -{
 -  VALUE re;
 -  /* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */
 -  char pat[32]; 
 -  snprintf(pat, 32, "^[\t ]{0,%d}", start_col); 
 -  re = rb_reg_regcomp(rb_str_new2(pat));
 -  rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2(""));
 -
 -  return Qnil;
 -
 -}
 -
 -static void 
 -store_kw_con(VALUE listener, const char * event_name, 
 -             const char * keyword_at, size_t keyword_length, 
 -             const char * at,         size_t length, 
 -             int current_line)
 -{
 -  VALUE con = Qnil, kw = Qnil;
 -  kw = ENCODED_STR_NEW(keyword_at, keyword_length);
 -  con = ENCODED_STR_NEW(at, length);
 -  rb_funcall(con, rb_intern("strip!"), 0);
 -  rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); 
 -}
 -
 -static void
 -store_multiline_kw_con(VALUE listener, const char * event_name,
 -                      const char * keyword_at, size_t keyword_length,
 -                      const char * at,         size_t length,
 -                      int current_line, int start_col)
 -{
 -  VALUE split;
 -  VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil;
 -
 -  kw = ENCODED_STR_NEW(keyword_at, keyword_length);
 -  con = ENCODED_STR_NEW(at, length);
 -
 -  unindent(con, start_col);
 -  
 -  split = rb_str_split(con, "\n");
 -
 -  name = rb_funcall(split, rb_intern("shift"), 0);
 -  desc = rb_ary_join(split, rb_str_new2( "\n" ));
 -
 -  if( name == Qnil ) 
 -  {
 -    name = rb_str_new2("");
 -  }
 -  if( rb_funcall(desc, rb_intern("size"), 0) == 0) 
 -  {
 -    desc = rb_str_new2("");
 -  }
 -  rb_funcall(name, rb_intern("strip!"), 0);
 -  rb_funcall(desc, rb_intern("rstrip!"), 0);
 -  rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); 
 -}
 -
 -static void 
 -store_attr(VALUE listener, const char * attr_type,
 -           const char * at, size_t length, 
 -           int line)
 -{
 -  VALUE val = ENCODED_STR_NEW(at, length);
 -  rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line));
 -}
 -static void 
 -store_docstring_content(VALUE listener, 
 -          int start_col, 
 -          const char *type_at, size_t type_length,
 -          const char *at, size_t length, 
 -          int current_line)
 -{
 -  VALUE re2;
 -  VALUE unescape_escaped_quotes;
 -  VALUE con = ENCODED_STR_NEW(at, length);
 -  VALUE con_type = ENCODED_STR_NEW(type_at, type_length);
 -
 -  unindent(con, start_col);
 -
 -  re2 = rb_reg_regcomp(rb_str_new2("\r\\Z"));
 -  unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\""));
 -  rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2(""));
 -  rb_funcall(con_type, rb_intern("strip!"), 0);
 -  rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\""));
 -  rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line));
 -}
 -static void 
 -raise_lexer_error(const char * at, int line)
 -{ 
 -  rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at);
 -}
 -
 -static void lexer_init(lexer_state *lexer) {
 -  lexer->content_start = 0;
 -  lexer->content_end = 0;
 -  lexer->content_len = 0;
 -  lexer->docstring_content_type_start = 0;
 -  lexer->docstring_content_type_end = 0;
 -  lexer->mark = 0;
 -  lexer->keyword_start = 0;
 -  lexer->keyword_end = 0;
 -  lexer->next_keyword_start = 0;
 -  lexer->line_number = 1;
 -  lexer->last_newline = 0;
 -  lexer->final_newline = 0;
 -  lexer->start_col = 0;
 -}
 -
 -static VALUE CLexer_alloc(VALUE klass)
 -{
 -  VALUE obj;
 -  lexer_state *lxr = ALLOC(lexer_state);
 -  lexer_init(lxr);
 -
 -  obj = Data_Wrap_Struct(klass, NULL, -1, lxr);
 -
 -  return obj;
 -}
 -
 -static VALUE CLexer_init(VALUE self, VALUE listener)
 -{
 -  lexer_state *lxr; 
 -  rb_iv_set(self, "@listener", listener);
 -  
 -  lxr = NULL;
 -  DATA_GET(self, lexer_state, lxr);
 -  lexer_init(lxr);
 -  
 -  return self;
 -}
 -
 -static VALUE CLexer_scan(VALUE self, VALUE input)
 -{
 -  VALUE input_copy;
 -  char *data;
 -  size_t len;
 -  VALUE listener = rb_iv_get(self, "@listener");
 -
 -  lexer_state *lexer;
 -  lexer = NULL;
 -  DATA_GET(self, lexer_state, lexer);
 -
 -  input_copy = rb_str_dup(input);
 -
 -  rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%"));
 -  data = RSTRING_PTR(input_copy);
 -  len = RSTRING_LEN(input_copy);
 -  
 -  if (len == 0) { 
 -    rb_raise(rb_eGherkinLexingError, "No content to lex.");
 -  } else {
 -
 -    const char *p, *pe, *eof;
 -    int cs = 0;
 -    
 -    VALUE current_row = Qnil;
 -
 -    p = data;
 -    pe = data + len;
 -    eof = pe;
 -    
 -    assert(*pe == '\0' && "pointer does not end on NULL");
 -    
 -    
 -#line 1675 "ext/gherkin_lexer_ru/gherkin_lexer_ru.c"
 -	{
 -	cs = lexer_start;
 -	}
 -
 -#line 425 "ragel/i18n/ru.c.rl"
 -    
 -#line 1682 "ext/gherkin_lexer_ru/gherkin_lexer_ru.c"
 -	{
 -	int _klen;
 -	unsigned int _trans;
 -	const char *_acts;
 -	unsigned int _nacts;
 -	const char *_keys;
 -
 -	if ( p == pe )
 -		goto _test_eof;
 -	if ( cs == 0 )
 -		goto _out;
 -_resume:
 -	_keys = _lexer_trans_keys + _lexer_key_offsets[cs];
 -	_trans = _lexer_index_offsets[cs];
 -
 -	_klen = _lexer_single_lengths[cs];
 -	if ( _klen > 0 ) {
 -		const char *_lower = _keys;
 -		const char *_mid;
 -		const char *_upper = _keys + _klen - 1;
 -		while (1) {
 -			if ( _upper < _lower )
 -				break;
 -
 -			_mid = _lower + ((_upper-_lower) >> 1);
 -			if ( (*p) < *_mid )
 -				_upper = _mid - 1;
 -			else if ( (*p) > *_mid )
 -				_lower = _mid + 1;
 -			else {
 -				_trans += (unsigned int)(_mid - _keys);
 -				goto _match;
 -			}
 -		}
 -		_keys += _klen;
 -		_trans += _klen;
 -	}
 -
 -	_klen = _lexer_range_lengths[cs];
 -	if ( _klen > 0 ) {
 -		const char *_lower = _keys;
 -		const char *_mid;
 -		const char *_upper = _keys + (_klen<<1) - 2;
 -		while (1) {
 -			if ( _upper < _lower )
 -				break;
 -
 -			_mid = _lower + (((_upper-_lower) >> 1) & ~1);
 -			if ( (*p) < _mid[0] )
 -				_upper = _mid - 2;
 -			else if ( (*p) > _mid[1] )
 -				_lower = _mid + 2;
 -			else {
 -				_trans += (unsigned int)((_mid - _keys)>>1);
 -				goto _match;
 -			}
 -		}
 -		_trans += _klen;
 -	}
 -
 -_match:
 -	cs = _lexer_trans_targs[_trans];
 -
 -	if ( _lexer_trans_actions[_trans] == 0 )
 -		goto _again;
 -
 -	_acts = _lexer_actions + _lexer_trans_actions[_trans];
 -	_nacts = (unsigned int) *_acts++;
 -	while ( _nacts-- > 0 )
 -	{
 -		switch ( *_acts++ )
 -		{
 -	case 0:
 -#line 83 "ragel/i18n/ru.c.rl"
 -	{
 -		MARK(content_start, p);
 -    lexer->current_line = lexer->line_number;
 -    lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2;
 -  }
 -	break;
 -	case 1:
 -#line 89 "ragel/i18n/ru.c.rl"
 -	{
 -    MARK(content_start, p);
 -  }
 -	break;
 -	case 2:
 -#line 93 "ragel/i18n/ru.c.rl"
 -	{
 -    lexer->current_line = lexer->line_number;
 -    lexer->start_col = p - data - lexer->last_newline;
 -  }
 -	break;
 -	case 3:
 -#line 98 "ragel/i18n/ru.c.rl"
 -	{
 -    int len = LEN(content_start, PTR_TO(final_newline));
 -    int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end));
 -
 -    if (len < 0) len = 0;
 -    if (type_len < 0) len = 0;
 -
 -    store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line);
 -  }
 -	break;
 -	case 4:
 -#line 108 "ragel/i18n/ru.c.rl"
 -	{ 
 -    MARK(docstring_content_type_start, p);
 -  }
 -	break;
 -	case 5:
 -#line 112 "ragel/i18n/ru.c.rl"
 -	{ 
 -    MARK(docstring_content_type_end, p);
 -  }
 -	break;
 -	case 6:
 -#line 116 "ragel/i18n/ru.c.rl"
 -	{
 -    STORE_KW_END_CON(feature);
 -  }
 -	break;
 -	case 7:
 -#line 120 "ragel/i18n/ru.c.rl"
 -	{
 -    STORE_KW_END_CON(background);
 -  }
 -	break;
 -	case 8:
 -#line 124 "ragel/i18n/ru.c.rl"
 -	{
 -    STORE_KW_END_CON(scenario);
 -  }
 -	break;
 -	case 9:
 -#line 128 "ragel/i18n/ru.c.rl"
 -	{
 -    STORE_KW_END_CON(scenario_outline);
 -  }
 -	break;
 -	case 10:
 -#line 132 "ragel/i18n/ru.c.rl"
 -	{
 -    STORE_KW_END_CON(examples);
 -  }
 -	break;
 -	case 11:
 -#line 136 "ragel/i18n/ru.c.rl"
 -	{
 -    store_kw_con(listener, "step",
 -      PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
 -      PTR_TO(content_start), LEN(content_start, p), 
 -      lexer->current_line);
 -  }
 -	break;
 -	case 12:
 -#line 143 "ragel/i18n/ru.c.rl"
 -	{
 -    STORE_ATTR(comment);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 13:
 -#line 148 "ragel/i18n/ru.c.rl"
 -	{
 -    STORE_ATTR(tag);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 14:
 -#line 153 "ragel/i18n/ru.c.rl"
 -	{
 -    lexer->line_number += 1;
 -    MARK(final_newline, p);
 -  }
 -	break;
 -	case 15:
 -#line 158 "ragel/i18n/ru.c.rl"
 -	{
 -    MARK(last_newline, p + 1);
 -  }
 -	break;
 -	case 16:
 -#line 162 "ragel/i18n/ru.c.rl"
 -	{
 -    if (lexer->mark == 0) {
 -      MARK(mark, p);
 -    }
 -  }
 -	break;
 -	case 17:
 -#line 168 "ragel/i18n/ru.c.rl"
 -	{
 -    MARK(keyword_end, p);
 -    MARK(keyword_start, PTR_TO(mark));
 -    MARK(content_start, p + 1);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 18:
 -#line 175 "ragel/i18n/ru.c.rl"
 -	{
 -    MARK(content_end, p);
 -  }
 -	break;
 -	case 19:
 -#line 179 "ragel/i18n/ru.c.rl"
 -	{
 -    p = p - 1;
 -    lexer->current_line = lexer->line_number;
 -    current_row = rb_ary_new();
 -  }
 -	break;
 -	case 20:
 -#line 185 "ragel/i18n/ru.c.rl"
 -	{
 -		MARK(content_start, p);
 -  }
 -	break;
 -	case 21:
 -#line 189 "ragel/i18n/ru.c.rl"
 -	{
 -    VALUE re_pipe, re_newline, re_backslash;
 -    VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
 -    rb_funcall(con, rb_intern("strip!"), 0);
 -    re_pipe      = rb_reg_regcomp(rb_str_new2("\\\\\\|"));
 -    re_newline   = rb_reg_regcomp(rb_str_new2("\\\\n"));
 -    re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_pipe,      rb_str_new2("|"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_newline,   rb_str_new2("\n"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\"));
 -
 -    rb_ary_push(current_row, con);
 -  }
 -	break;
 -	case 22:
 -#line 203 "ragel/i18n/ru.c.rl"
 -	{
 -    rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
 -  }
 -	break;
 -	case 23:
 -#line 207 "ragel/i18n/ru.c.rl"
 -	{
 -    int line;
 -    if (cs < lexer_first_final) {
 -      size_t count = 0;
 -      VALUE newstr_val;
 -      char *newstr;
 -      int newstr_count = 0;        
 -      size_t len;
 -      const char *buff;
 -      if (lexer->last_newline != 0) {
 -        len = LEN(last_newline, eof);
 -        buff = PTR_TO(last_newline);
 -      } else {
 -        len = strlen(data);
 -        buff = data;
 -      }
 -
 -      /* Allocate as a ruby string so that it gets cleaned up by GC */
 -      newstr_val = rb_str_new(buff, len);
 -      newstr = RSTRING_PTR(newstr_val);
 -
 -
 -      for (count = 0; count < len; count++) {
 -        if(buff[count] == 10) {
 -          newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
 -          break;
 -        } else {
 -          if (buff[count] == '%') {
 -            newstr[newstr_count++] = buff[count];
 -            newstr[newstr_count] = buff[count];
 -          } else {
 -            newstr[newstr_count] = buff[count];
 -          }
 -        }
 -        newstr_count++;
 -      }
 -
 -      line = lexer->line_number;
 -      lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
 -      raise_lexer_error(newstr, line);
 -    } else {
 -      rb_funcall(listener, rb_intern("eof"), 0);
 -    }
 -  }
 -	break;
 -#line 1972 "ext/gherkin_lexer_ru/gherkin_lexer_ru.c"
 -		}
 -	}
 -
 -_again:
 -	if ( cs == 0 )
 -		goto _out;
 -	if ( ++p != pe )
 -		goto _resume;
 -	_test_eof: {}
 -	if ( p == eof )
 -	{
 -	const char *__acts = _lexer_actions + _lexer_eof_actions[cs];
 -	unsigned int __nacts = (unsigned int) *__acts++;
 -	while ( __nacts-- > 0 ) {
 -		switch ( *__acts++ ) {
 -	case 23:
 -#line 207 "ragel/i18n/ru.c.rl"
 -	{
 -    int line;
 -    if (cs < lexer_first_final) {
 -      size_t count = 0;
 -      VALUE newstr_val;
 -      char *newstr;
 -      int newstr_count = 0;        
 -      size_t len;
 -      const char *buff;
 -      if (lexer->last_newline != 0) {
 -        len = LEN(last_newline, eof);
 -        buff = PTR_TO(last_newline);
 -      } else {
 -        len = strlen(data);
 -        buff = data;
 -      }
 -
 -      /* Allocate as a ruby string so that it gets cleaned up by GC */
 -      newstr_val = rb_str_new(buff, len);
 -      newstr = RSTRING_PTR(newstr_val);
 -
 -
 -      for (count = 0; count < len; count++) {
 -        if(buff[count] == 10) {
 -          newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
 -          break;
 -        } else {
 -          if (buff[count] == '%') {
 -            newstr[newstr_count++] = buff[count];
 -            newstr[newstr_count] = buff[count];
 -          } else {
 -            newstr[newstr_count] = buff[count];
 -          }
 -        }
 -        newstr_count++;
 -      }
 -
 -      line = lexer->line_number;
 -      lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
 -      raise_lexer_error(newstr, line);
 -    } else {
 -      rb_funcall(listener, rb_intern("eof"), 0);
 -    }
 -  }
 -	break;
 -#line 2035 "ext/gherkin_lexer_ru/gherkin_lexer_ru.c"
 -		}
 -	}
 -	}
 -
 -	_out: {}
 -	}
 -
 -#line 426 "ragel/i18n/ru.c.rl"
 -
 -    assert(p <= pe && "data overflow after parsing execute");
 -    assert(lexer->content_start <= len && "content starts after data end");
 -    assert(lexer->mark < len && "mark is after data end");
 -    
 -    /* Reset lexer by re-initializing the whole thing */
 -    lexer_init(lexer);
 -
 -    if (cs == lexer_error) {
 -      rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails.");
 -    } else {
 -      return Qtrue;
 -    }
 -  }
 -}
 -
 -void Init_gherkin_lexer_ru()
 -{
 -  mGherkin = rb_define_module("Gherkin");
 -  mGherkinLexer = rb_define_module_under(mGherkin, "Lexer");
 -  rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError"));
 -
 -  mCLexer = rb_define_module_under(mGherkin, "CLexer");
 -  cI18nLexer = rb_define_class_under(mCLexer, "Ru", rb_cObject);
 -  rb_define_alloc_func(cI18nLexer, CLexer_alloc);
 -  rb_define_method(cI18nLexer, "initialize", CLexer_init, 1);
 -  rb_define_method(cI18nLexer, "scan", CLexer_scan, 1);
 -}
 -
diff --cc ext/gherkin_lexer_sk/extconf.rb
index 000e7dd,000e7dd..0000000
deleted file mode 100644,100644
--- a/ext/gherkin_lexer_sk/extconf.rb
+++ /dev/null
@@@ -1,6 -1,6 +1,0 @@@
--require 'mkmf'
--CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags']
--$CFLAGS << ' -O0 -Wall' if CONFIG['CC'] =~ /gcc|clang/
--dir_config("gherkin_lexer_sk")
--have_library("c", "main")
--create_makefile("gherkin_lexer_sk")
diff --cc ext/gherkin_lexer_sk/gherkin_lexer_sk.c
index 39ecc13,e2e783f..0000000
deleted file mode 100644,100644
--- a/ext/gherkin_lexer_sk/gherkin_lexer_sk.c
+++ /dev/null
@@@ -1,1298 -1,1739 +1,0 @@@
--
- #line 1 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sk.c.rl"
- #include <assert.h>
- #include <ruby.h>
- 
- #if defined(_WIN32)
- #include <stddef.h>
- #endif
- 
- #ifdef HAVE_RUBY_RE_H
- #include <ruby/re.h>
- #else
- #include <re.h>
- #endif
- 
- #ifdef HAVE_RUBY_ENCODING_H
- #include <ruby/encoding.h>
- #define ENCODED_STR_NEW(ptr, len) \
-     rb_enc_str_new(ptr, len, rb_utf8_encoding())
- #else
- #define ENCODED_STR_NEW(ptr, len) \
-     rb_str_new(ptr, len)
- #endif
- 
- #ifndef RSTRING_PTR
- #define RSTRING_PTR(s) (RSTRING(s)->ptr)
- #endif
- 
- #ifndef RSTRING_LEN
- #define RSTRING_LEN(s) (RSTRING(s)->len)
- #endif
- 
- #define DATA_GET(FROM, TYPE, NAME) \
-   Data_Get_Struct(FROM, TYPE, NAME); \
-   if (NAME == NULL) { \
-     rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \
-   }
-  
- typedef struct lexer_state {
-   int content_len;
-   int line_number;
-   int current_line;
-   int start_col;
-   size_t mark;
-   size_t keyword_start;
-   size_t keyword_end;
-   size_t next_keyword_start;
-   size_t content_start;
-   size_t content_end;
-   size_t docstring_content_type_start;
-   size_t docstring_content_type_end;
-   size_t query_start;
-   size_t last_newline;
-   size_t final_newline;
- } lexer_state;
- 
- static VALUE mGherkin;
- static VALUE mGherkinLexer;
- static VALUE mCLexer;
- static VALUE cI18nLexer;
- static VALUE rb_eGherkinLexingError;
- 
- #define LEN(AT, P) (P - data - lexer->AT)
- #define MARK(M, P) (lexer->M = (P) - data)
- #define PTR_TO(P) (data + lexer->P)
- 
- #define STORE_KW_END_CON(EVENT) \
-   store_multiline_kw_con(listener, # EVENT, \
-     PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \
-     PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \
-     lexer->current_line, lexer->start_col); \
-     if (lexer->content_end != 0) { \
-       p = PTR_TO(content_end - 1); \
-     } \
-     lexer->content_end = 0
- 
- #define STORE_ATTR(ATTR) \
-     store_attr(listener, # ATTR, \
-       PTR_TO(content_start), LEN(content_start, p), \
-       lexer->line_number)
- 
- 
- #line 254 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sk.c.rl"
- 
- 
- /** Data **/
- 
- #line 89 "ext/gherkin_lexer_sk/gherkin_lexer_sk.c"
- static const char _lexer_actions[] = {
- 	0, 1, 0, 1, 1, 1, 2, 1, 
- 	3, 1, 4, 1, 5, 1, 6, 1, 
- 	7, 1, 8, 1, 9, 1, 10, 1, 
- 	11, 1, 12, 1, 13, 1, 16, 1, 
- 	17, 1, 18, 1, 19, 1, 20, 1, 
- 	21, 1, 22, 1, 23, 2, 1, 18, 
- 	2, 4, 5, 2, 13, 0, 2, 14, 
- 	15, 2, 17, 0, 2, 17, 2, 2, 
- 	17, 16, 2, 17, 19, 2, 18, 6, 
- 	2, 18, 7, 2, 18, 8, 2, 18, 
- 	9, 2, 18, 10, 2, 18, 16, 2, 
- 	20, 21, 2, 22, 0, 2, 22, 2, 
- 	2, 22, 16, 2, 22, 19, 3, 3, 
- 	14, 15, 3, 5, 14, 15, 3, 11, 
- 	14, 15, 3, 12, 14, 15, 3, 13, 
- 	14, 15, 3, 14, 15, 18, 3, 17, 
- 	0, 11, 3, 17, 14, 15, 4, 1, 
- 	14, 15, 18, 4, 4, 5, 14, 15, 
- 	4, 17, 0, 14, 15, 5, 17, 0, 
- 	11, 14, 15
- };
- 
- static const short _lexer_key_offsets[] = {
- 	0, 0, 17, 18, 19, 35, 36, 37, 
- 	39, 41, 46, 51, 56, 61, 65, 69, 
- 	71, 72, 73, 74, 75, 76, 77, 78, 
- 	79, 80, 81, 82, 83, 84, 85, 86, 
- 	87, 89, 91, 96, 103, 108, 110, 111, 
- 	112, 113, 114, 115, 116, 117, 118, 119, 
- 	120, 121, 122, 123, 124, 125, 126, 127, 
- 	128, 129, 130, 131, 132, 145, 147, 149, 
- 	151, 153, 155, 157, 159, 161, 163, 165, 
- 	167, 169, 171, 173, 175, 191, 193, 196, 
- 	197, 198, 199, 200, 201, 202, 203, 204, 
- 	205, 206, 207, 217, 219, 221, 223, 225, 
- 	227, 229, 231, 233, 235, 237, 239, 241, 
- 	243, 245, 247, 249, 251, 253, 255, 257, 
- 	259, 261, 263, 265, 267, 269, 271, 273, 
- 	275, 277, 280, 283, 285, 287, 289, 291, 
- 	293, 295, 297, 299, 301, 303, 305, 307, 
- 	309, 311, 313, 315, 317, 319, 321, 323, 
- 	325, 327, 329, 331, 333, 334, 335, 336, 
- 	337, 338, 339, 340, 341, 342, 343, 344, 
- 	358, 360, 362, 364, 366, 368, 370, 372, 
- 	374, 376, 378, 380, 382, 384, 386, 388, 
- 	391, 393, 395, 397, 399, 401, 403, 405, 
- 	407, 409, 411, 413, 415, 417, 419, 421, 
- 	423, 425, 427, 429, 431, 433, 436, 438, 
- 	440, 442, 444, 446, 448, 450, 452, 454, 
- 	456, 458, 460, 462, 464, 466, 468, 470, 
- 	472, 474, 476, 477, 478, 479, 480, 481, 
- 	482, 483, 484, 485, 486, 493, 495, 497, 
- 	499, 501, 503, 505, 507, 509, 511, 513, 
- 	515, 516, 517, 518, 519, 520, 521, 522, 
- 	523, 524, 538, 540, 542, 544, 546, 548, 
- 	550, 552, 554, 556, 558, 560, 562, 564, 
- 	566, 568, 571, 573, 575, 577, 579, 581, 
- 	583, 585, 587, 589, 591, 593, 595, 597, 
- 	599, 601, 603, 605, 607, 609, 611, 613, 
- 	617, 619, 621, 623, 625, 627, 629, 631, 
- 	633, 635, 637, 639, 641, 643, 645, 647, 
- 	649, 651, 653, 655, 657, 659, 661, 663, 
- 	665, 666, 667, 671, 677, 680, 682, 688, 
- 	704, 707, 709, 711, 713, 715, 717, 720, 
- 	722, 724, 726, 728, 730, 732, 734, 736, 
- 	738, 740, 742, 744, 746, 748, 750, 752, 
- 	754, 756, 758, 760, 762
- };
- 
- static const char _lexer_trans_keys[] = {
- 	-17, 10, 32, 34, 35, 37, 42, 64, 
- 	65, 75, 78, 80, 83, 84, 124, 9, 
- 	13, -69, -65, 10, 32, 34, 35, 37, 
- 	42, 64, 65, 75, 78, 80, 83, 84, 
- 	124, 9, 13, 34, 34, 10, 13, 10, 
- 	13, 10, 32, 34, 9, 13, 10, 32, 
- 	34, 9, 13, 10, 32, 34, 9, 13, 
- 	10, 32, 34, 9, 13, 10, 32, 9, 
- 	13, 10, 32, 9, 13, 10, 13, 10, 
- 	95, 70, 69, 65, 84, 85, 82, 69, 
- 	95, 69, 78, 68, 95, 37, 32, 10, 
- 	13, 10, 13, 13, 32, 64, 9, 10, 
- 	9, 10, 13, 32, 64, 11, 12, 10, 
- 	32, 64, 9, 13, 32, 108, 101, 101, 
- 	-60, -113, -61, -95, -60, -115, 114, 116, 
- 	32, 83, 99, 101, 110, -61, -95, 114, 
- 	117, 58, 10, 10, 10, 32, 35, 37, 
- 	42, 64, 65, 75, 80, 83, 84, 9, 
- 	13, 10, 95, 10, 70, 10, 69, 10, 
- 	65, 10, 84, 10, 85, 10, 82, 10, 
- 	69, 10, 95, 10, 69, 10, 78, 10, 
- 	68, 10, 95, 10, 37, 10, 32, 10, 
- 	32, 34, 35, 37, 42, 64, 65, 75, 
- 	78, 80, 83, 84, 124, 9, 13, 111, 
- 	114, -59, 107, 122, -66, 105, 97, 100, 
- 	97, 118, 107, 97, 58, 10, 10, 10, 
- 	32, 35, 37, 64, 78, 80, 83, 9, 
- 	13, 10, 95, 10, 70, 10, 69, 10, 
- 	65, 10, 84, 10, 85, 10, 82, 10, 
- 	69, 10, 95, 10, 69, 10, 78, 10, 
- 	68, 10, 95, 10, 37, -61, 10, -95, 
- 	10, -60, 10, -115, 10, 10, 114, 10, 
- 	116, 10, 32, 10, 83, 10, 99, 10, 
- 	101, 10, 110, -61, 10, -95, 10, 10, 
- 	114, 10, 117, 10, 58, 10, 111, 114, 
- 	-59, 10, 122, -66, 10, 10, 105, 10, 
- 	97, 10, 100, 10, 97, 10, 118, 10, 
- 	107, 10, 97, 10, 97, 10, 100, 10, 
- 	105, 10, 101, -61, 10, -83, 10, 10, 
- 	107, 10, 108, 10, 97, 10, 100, 10, 
- 	121, 10, 99, 10, 101, 10, 110, -61, 
- 	10, -95, 10, 10, 114, 105, 97, -60, 
- 	-66, 97, 100, 105, 101, 58, 10, 10, 
- 	10, 32, 35, 37, 42, 64, 65, 75, 
- 	78, 80, 83, 84, 9, 13, 10, 95, 
- 	10, 70, 10, 69, 10, 65, 10, 84, 
- 	10, 85, 10, 82, 10, 69, 10, 95, 
- 	10, 69, 10, 78, 10, 68, 10, 95, 
- 	10, 37, 10, 32, 10, 32, 108, 10, 
- 	101, 10, 101, -60, 10, -113, 10, -61, 
- 	10, -95, 10, -60, 10, -115, 10, 10, 
- 	114, 10, 116, 10, 32, 10, 83, 10, 
- 	99, 10, 101, 10, 110, -61, 10, -95, 
- 	10, 10, 114, 10, 117, 10, 58, 10, 
- 	111, -59, 10, 107, -66, 10, 10, 105, 
- 	10, 97, 10, 100, 10, 97, 10, 118, 
- 	10, 107, 10, 97, 10, 105, 10, 97, 
- 	-60, 10, -66, 10, 10, 99, 10, 101, 
- 	10, 110, -61, 10, -95, 10, 10, 114, 
- 	10, 97, 10, 107, -61, -83, 107, 108, 
- 	97, 100, 121, 58, 10, 10, 10, 32, 
- 	35, 80, 124, 9, 13, 10, 111, -59, 
- 	10, -66, 10, 10, 105, 10, 97, 10, 
- 	100, 10, 97, 10, 118, 10, 107, 10, 
- 	97, 10, 58, 99, 101, 110, -61, -95, 
- 	114, 58, 10, 10, 10, 32, 35, 37, 
- 	42, 64, 65, 75, 78, 80, 83, 84, 
- 	9, 13, 10, 95, 10, 70, 10, 69, 
- 	10, 65, 10, 84, 10, 85, 10, 82, 
- 	10, 69, 10, 95, 10, 69, 10, 78, 
- 	10, 68, 10, 95, 10, 37, 10, 32, 
- 	10, 32, 108, 10, 101, 10, 101, -60, 
- 	10, -113, 10, -61, 10, -95, 10, -60, 
- 	10, -115, 10, 10, 114, 10, 116, 10, 
- 	32, 10, 83, 10, 99, 10, 101, 10, 
- 	110, -61, 10, -95, 10, 10, 114, 10, 
- 	117, 10, 58, 10, 111, -59, 10, 107, 
- 	122, -66, 10, 10, 105, 10, 97, 10, 
- 	100, 10, 97, 10, 118, 10, 107, 10, 
- 	97, 10, 105, 10, 97, -60, 10, -66, 
- 	10, 10, 97, 10, 100, 10, 105, 10, 
- 	101, 10, 99, 10, 101, 10, 110, -61, 
- 	10, -95, 10, 10, 114, 10, 97, 10, 
- 	107, 97, 107, 32, 124, 9, 13, 10, 
- 	32, 92, 124, 9, 13, 10, 92, 124, 
- 	10, 92, 10, 32, 92, 124, 9, 13, 
- 	10, 32, 34, 35, 37, 42, 64, 65, 
- 	75, 78, 80, 83, 84, 124, 9, 13, 
- 	10, 32, 108, 10, 101, 10, 101, -60, 
- 	10, -113, 10, 10, 111, -59, 10, 107, 
- 	-66, 10, 10, 105, 10, 97, 10, 100, 
- 	10, 97, 10, 118, 10, 107, 10, 97, 
- 	10, 58, 10, 105, 10, 97, -60, 10, 
- 	-66, 10, 10, 99, 10, 101, 10, 110, 
- 	-61, 10, -95, 10, 10, 114, 10, 97, 
- 	10, 107, 0
- };
- 
- static const char _lexer_single_lengths[] = {
- 	0, 15, 1, 1, 14, 1, 1, 2, 
- 	2, 3, 3, 3, 3, 2, 2, 2, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	2, 2, 3, 5, 3, 2, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 11, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 14, 2, 3, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 8, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 3, 3, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 12, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 3, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 3, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 5, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 12, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 3, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 4, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	1, 1, 2, 4, 3, 2, 4, 14, 
- 	3, 2, 2, 2, 2, 2, 3, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 0
- };
- 
- static const char _lexer_range_lengths[] = {
- 	0, 1, 0, 0, 1, 0, 0, 0, 
- 	0, 1, 1, 1, 1, 1, 1, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 1, 1, 1, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 1, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 1, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 1, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 1, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 1, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 1, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 1, 1, 0, 0, 1, 1, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0
- };
- 
- static const short _lexer_index_offsets[] = {
- 	0, 0, 17, 19, 21, 37, 39, 41, 
- 	44, 47, 52, 57, 62, 67, 71, 75, 
- 	78, 80, 82, 84, 86, 88, 90, 92, 
- 	94, 96, 98, 100, 102, 104, 106, 108, 
- 	110, 113, 116, 121, 128, 133, 136, 138, 
- 	140, 142, 144, 146, 148, 150, 152, 154, 
- 	156, 158, 160, 162, 164, 166, 168, 170, 
- 	172, 174, 176, 178, 180, 193, 196, 199, 
- 	202, 205, 208, 211, 214, 217, 220, 223, 
- 	226, 229, 232, 235, 238, 254, 257, 261, 
- 	263, 265, 267, 269, 271, 273, 275, 277, 
- 	279, 281, 283, 293, 296, 299, 302, 305, 
- 	308, 311, 314, 317, 320, 323, 326, 329, 
- 	332, 335, 338, 341, 344, 347, 350, 353, 
- 	356, 359, 362, 365, 368, 371, 374, 377, 
- 	380, 383, 387, 391, 394, 397, 400, 403, 
- 	406, 409, 412, 415, 418, 421, 424, 427, 
- 	430, 433, 436, 439, 442, 445, 448, 451, 
- 	454, 457, 460, 463, 466, 468, 470, 472, 
- 	474, 476, 478, 480, 482, 484, 486, 488, 
- 	502, 505, 508, 511, 514, 517, 520, 523, 
- 	526, 529, 532, 535, 538, 541, 544, 547, 
- 	551, 554, 557, 560, 563, 566, 569, 572, 
- 	575, 578, 581, 584, 587, 590, 593, 596, 
- 	599, 602, 605, 608, 611, 614, 618, 621, 
- 	624, 627, 630, 633, 636, 639, 642, 645, 
- 	648, 651, 654, 657, 660, 663, 666, 669, 
- 	672, 675, 678, 680, 682, 684, 686, 688, 
- 	690, 692, 694, 696, 698, 705, 708, 711, 
- 	714, 717, 720, 723, 726, 729, 732, 735, 
- 	738, 740, 742, 744, 746, 748, 750, 752, 
- 	754, 756, 770, 773, 776, 779, 782, 785, 
- 	788, 791, 794, 797, 800, 803, 806, 809, 
- 	812, 815, 819, 822, 825, 828, 831, 834, 
- 	837, 840, 843, 846, 849, 852, 855, 858, 
- 	861, 864, 867, 870, 873, 876, 879, 882, 
- 	887, 890, 893, 896, 899, 902, 905, 908, 
- 	911, 914, 917, 920, 923, 926, 929, 932, 
- 	935, 938, 941, 944, 947, 950, 953, 956, 
- 	959, 961, 963, 967, 973, 977, 980, 986, 
- 	1002, 1006, 1009, 1012, 1015, 1018, 1021, 1025, 
- 	1028, 1031, 1034, 1037, 1040, 1043, 1046, 1049, 
- 	1052, 1055, 1058, 1061, 1064, 1067, 1070, 1073, 
- 	1076, 1079, 1082, 1085, 1088
- };
- 
- static const short _lexer_trans_targs[] = {
- 	2, 4, 4, 5, 15, 17, 31, 34, 
- 	37, 39, 42, 77, 240, 312, 314, 4, 
- 	0, 3, 0, 4, 0, 4, 4, 5, 
- 	15, 17, 31, 34, 37, 39, 42, 77, 
- 	240, 312, 314, 4, 0, 6, 0, 7, 
- 	0, 9, 8, 8, 9, 8, 8, 10, 
- 	10, 11, 10, 10, 10, 10, 11, 10, 
- 	10, 10, 10, 12, 10, 10, 10, 10, 
- 	13, 10, 10, 4, 14, 14, 0, 4, 
- 	14, 14, 0, 4, 16, 15, 4, 0, 
- 	18, 0, 19, 0, 20, 0, 21, 0, 
- 	22, 0, 23, 0, 24, 0, 25, 0, 
- 	26, 0, 27, 0, 28, 0, 29, 0, 
- 	30, 0, 348, 0, 32, 0, 4, 16, 
- 	33, 4, 16, 33, 0, 0, 0, 0, 
- 	35, 36, 4, 36, 36, 34, 35, 35, 
- 	4, 36, 34, 36, 0, 32, 38, 0, 
- 	31, 0, 40, 0, 41, 0, 31, 0, 
- 	43, 0, 44, 0, 45, 0, 46, 0, 
- 	47, 0, 48, 0, 49, 0, 50, 0, 
- 	51, 0, 52, 0, 53, 0, 54, 0, 
- 	55, 0, 56, 0, 57, 0, 58, 0, 
- 	60, 59, 60, 59, 60, 60, 4, 61, 
- 	75, 4, 320, 322, 325, 340, 346, 60, 
- 	59, 60, 62, 59, 60, 63, 59, 60, 
- 	64, 59, 60, 65, 59, 60, 66, 59, 
- 	60, 67, 59, 60, 68, 59, 60, 69, 
- 	59, 60, 70, 59, 60, 71, 59, 60, 
- 	72, 59, 60, 73, 59, 60, 74, 59, 
- 	60, 4, 59, 60, 76, 59, 4, 4, 
- 	5, 15, 17, 31, 34, 37, 39, 42, 
- 	77, 240, 312, 314, 4, 0, 78, 218, 
- 	0, 79, 148, 152, 0, 80, 0, 81, 
- 	0, 82, 0, 83, 0, 84, 0, 85, 
- 	0, 86, 0, 87, 0, 88, 0, 90, 
- 	89, 90, 89, 90, 90, 4, 91, 4, 
- 	105, 121, 142, 90, 89, 90, 92, 89, 
- 	90, 93, 89, 90, 94, 89, 90, 95, 
- 	89, 90, 96, 89, 90, 97, 89, 90, 
- 	98, 89, 90, 99, 89, 90, 100, 89, 
- 	90, 101, 89, 90, 102, 89, 90, 103, 
- 	89, 90, 104, 89, 90, 4, 89, 106, 
- 	90, 89, 107, 90, 89, 108, 90, 89, 
- 	109, 90, 89, 90, 110, 89, 90, 111, 
- 	89, 90, 112, 89, 90, 113, 89, 90, 
- 	114, 89, 90, 115, 89, 90, 116, 89, 
- 	117, 90, 89, 118, 90, 89, 90, 119, 
- 	89, 90, 120, 89, 90, 76, 89, 90, 
- 	122, 135, 89, 123, 90, 131, 89, 124, 
- 	90, 89, 90, 125, 89, 90, 126, 89, 
- 	90, 127, 89, 90, 128, 89, 90, 129, 
- 	89, 90, 130, 89, 90, 120, 89, 90, 
- 	132, 89, 90, 133, 89, 90, 134, 89, 
- 	90, 120, 89, 136, 90, 89, 137, 90, 
- 	89, 90, 138, 89, 90, 139, 89, 90, 
- 	140, 89, 90, 141, 89, 90, 120, 89, 
- 	90, 143, 89, 90, 144, 89, 90, 145, 
- 	89, 146, 90, 89, 147, 90, 89, 90, 
- 	120, 89, 149, 0, 150, 0, 151, 0, 
- 	31, 0, 153, 0, 154, 0, 155, 0, 
- 	156, 0, 157, 0, 159, 158, 159, 158, 
- 	159, 159, 4, 160, 174, 4, 175, 177, 
- 	180, 196, 210, 216, 159, 158, 159, 161, 
- 	158, 159, 162, 158, 159, 163, 158, 159, 
- 	164, 158, 159, 165, 158, 159, 166, 158, 
- 	159, 167, 158, 159, 168, 158, 159, 169, 
- 	158, 159, 170, 158, 159, 171, 158, 159, 
- 	172, 158, 159, 173, 158, 159, 4, 158, 
- 	159, 76, 158, 159, 76, 176, 158, 159, 
- 	174, 158, 159, 178, 158, 179, 159, 158, 
- 	174, 159, 158, 181, 159, 158, 182, 159, 
- 	158, 183, 159, 158, 184, 159, 158, 159, 
- 	185, 158, 159, 186, 158, 159, 187, 158, 
- 	159, 188, 158, 159, 189, 158, 159, 190, 
- 	158, 159, 191, 158, 192, 159, 158, 193, 
- 	159, 158, 159, 194, 158, 159, 195, 158, 
- 	159, 76, 158, 159, 197, 158, 198, 159, 
- 	206, 158, 199, 159, 158, 159, 200, 158, 
- 	159, 201, 158, 159, 202, 158, 159, 203, 
- 	158, 159, 204, 158, 159, 205, 158, 159, 
- 	195, 158, 159, 207, 158, 159, 208, 158, 
- 	209, 159, 158, 174, 159, 158, 159, 211, 
- 	158, 159, 212, 158, 159, 213, 158, 214, 
- 	159, 158, 215, 159, 158, 159, 195, 158, 
- 	159, 217, 158, 159, 174, 158, 219, 0, 
- 	220, 0, 221, 0, 222, 0, 223, 0, 
- 	224, 0, 225, 0, 226, 0, 228, 227, 
- 	228, 227, 228, 228, 4, 229, 4, 228, 
- 	227, 228, 230, 227, 231, 228, 227, 232, 
- 	228, 227, 228, 233, 227, 228, 234, 227, 
- 	228, 235, 227, 228, 236, 227, 228, 237, 
- 	227, 228, 238, 227, 228, 239, 227, 228, 
- 	76, 227, 241, 0, 242, 0, 243, 0, 
- 	244, 0, 245, 0, 246, 0, 247, 0, 
- 	249, 248, 249, 248, 249, 249, 4, 250, 
- 	264, 4, 265, 267, 270, 286, 304, 310, 
- 	249, 248, 249, 251, 248, 249, 252, 248, 
- 	249, 253, 248, 249, 254, 248, 249, 255, 
- 	248, 249, 256, 248, 249, 257, 248, 249, 
- 	258, 248, 249, 259, 248, 249, 260, 248, 
- 	249, 261, 248, 249, 262, 248, 249, 263, 
- 	248, 249, 4, 248, 249, 76, 248, 249, 
- 	76, 266, 248, 249, 264, 248, 249, 268, 
- 	248, 269, 249, 248, 264, 249, 248, 271, 
- 	249, 248, 272, 249, 248, 273, 249, 248, 
- 	274, 249, 248, 249, 275, 248, 249, 276, 
- 	248, 249, 277, 248, 249, 278, 248, 249, 
- 	279, 248, 249, 280, 248, 249, 281, 248, 
- 	282, 249, 248, 283, 249, 248, 249, 284, 
- 	248, 249, 285, 248, 249, 76, 248, 249, 
- 	287, 248, 288, 249, 296, 300, 248, 289, 
- 	249, 248, 249, 290, 248, 249, 291, 248, 
- 	249, 292, 248, 249, 293, 248, 249, 294, 
- 	248, 249, 295, 248, 249, 285, 248, 249, 
- 	297, 248, 249, 298, 248, 299, 249, 248, 
- 	264, 249, 248, 249, 301, 248, 249, 302, 
- 	248, 249, 303, 248, 249, 285, 248, 249, 
- 	305, 248, 249, 306, 248, 249, 307, 248, 
- 	308, 249, 248, 309, 249, 248, 249, 285, 
- 	248, 249, 311, 248, 249, 264, 248, 313, 
- 	0, 31, 0, 314, 315, 314, 0, 319, 
- 	318, 317, 315, 318, 316, 0, 317, 315, 
- 	316, 0, 317, 316, 319, 318, 317, 315, 
- 	318, 316, 319, 319, 5, 15, 17, 31, 
- 	34, 37, 39, 42, 77, 240, 312, 314, 
- 	319, 0, 60, 76, 321, 59, 60, 75, 
- 	59, 60, 323, 59, 324, 60, 59, 75, 
- 	60, 59, 60, 326, 59, 327, 60, 336, 
- 	59, 328, 60, 59, 60, 329, 59, 60, 
- 	330, 59, 60, 331, 59, 60, 332, 59, 
- 	60, 333, 59, 60, 334, 59, 60, 335, 
- 	59, 60, 76, 59, 60, 337, 59, 60, 
- 	338, 59, 339, 60, 59, 75, 60, 59, 
- 	60, 341, 59, 60, 342, 59, 60, 343, 
- 	59, 344, 60, 59, 345, 60, 59, 60, 
- 	335, 59, 60, 347, 59, 60, 75, 59, 
- 	0, 0
- };
- 
- static const unsigned char _lexer_trans_actions[] = {
- 	0, 54, 0, 5, 1, 0, 29, 1, 
- 	29, 29, 29, 29, 29, 29, 35, 0, 
- 	43, 0, 43, 0, 43, 54, 0, 5, 
- 	1, 0, 29, 1, 29, 29, 29, 29, 
- 	29, 29, 35, 0, 43, 0, 43, 0, 
- 	43, 139, 48, 9, 106, 11, 0, 134, 
- 	45, 45, 45, 3, 122, 33, 33, 33, 
- 	0, 122, 33, 33, 33, 0, 122, 33, 
- 	0, 33, 0, 102, 7, 7, 43, 54, 
- 	0, 0, 43, 114, 25, 0, 54, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 149, 126, 
- 	57, 110, 23, 0, 43, 43, 43, 43, 
- 	0, 27, 118, 27, 27, 51, 27, 0, 
- 	54, 0, 1, 0, 43, 0, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	144, 57, 54, 0, 54, 0, 78, 33, 
- 	84, 78, 84, 84, 84, 84, 84, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 19, 0, 54, 19, 0, 130, 31, 
- 	60, 57, 31, 63, 57, 63, 63, 63, 
- 	63, 63, 63, 66, 31, 43, 0, 0, 
- 	43, 0, 0, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 144, 
- 	57, 54, 0, 54, 0, 69, 33, 69, 
- 	84, 84, 84, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 13, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	0, 54, 0, 0, 54, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 13, 0, 54, 
- 	0, 0, 0, 0, 54, 0, 0, 0, 
- 	54, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 0, 54, 0, 0, 54, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 0, 54, 0, 0, 54, 0, 54, 
- 	0, 0, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 144, 57, 54, 0, 
- 	54, 0, 72, 33, 84, 72, 84, 84, 
- 	84, 84, 84, 84, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 15, 0, 
- 	54, 15, 0, 54, 15, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 0, 54, 0, 0, 
- 	54, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 15, 0, 54, 0, 0, 0, 54, 
- 	0, 0, 0, 54, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	0, 54, 0, 0, 54, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 0, 
- 	54, 0, 0, 54, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 144, 57, 
- 	54, 0, 54, 0, 81, 84, 81, 0, 
- 	0, 54, 0, 0, 0, 54, 0, 0, 
- 	54, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	21, 0, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	144, 57, 54, 0, 54, 0, 75, 33, 
- 	84, 75, 84, 84, 84, 84, 84, 84, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 17, 0, 54, 17, 0, 54, 
- 	17, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	0, 54, 0, 0, 54, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 17, 0, 54, 
- 	0, 0, 0, 54, 0, 0, 0, 0, 
- 	54, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 0, 54, 0, 
- 	0, 54, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	0, 54, 0, 0, 54, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 0, 
- 	43, 0, 43, 0, 0, 0, 43, 54, 
- 	37, 37, 87, 37, 37, 43, 0, 39, 
- 	0, 43, 0, 0, 54, 0, 0, 39, 
- 	0, 0, 54, 0, 93, 90, 41, 96, 
- 	90, 96, 96, 96, 96, 96, 96, 99, 
- 	0, 43, 54, 19, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 0, 54, 0, 0, 
- 	54, 0, 54, 0, 0, 0, 54, 0, 
- 	0, 0, 54, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 19, 0, 54, 0, 0, 54, 
- 	0, 0, 0, 54, 0, 0, 54, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 0, 54, 0, 0, 54, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	0, 0
- };
- 
- static const unsigned char _lexer_eof_actions[] = {
- 	0, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43
- };
- 
- static const int lexer_start = 1;
- static const int lexer_first_final = 348;
- static const int lexer_error = 0;
- 
- static const int lexer_en_main = 1;
- 
- 
- #line 258 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sk.c.rl"
- 
- static VALUE 
- unindent(VALUE con, int start_col)
- {
-   VALUE re;
-   // Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters
-   char pat[32]; 
-   snprintf(pat, 32, "^[\t ]{0,%d}", start_col); 
-   re = rb_reg_regcomp(rb_str_new2(pat));
-   rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2(""));
- 
-   return Qnil;
- 
- }
- 
- static void 
- store_kw_con(VALUE listener, const char * event_name, 
-              const char * keyword_at, size_t keyword_length, 
-              const char * at,         size_t length, 
-              int current_line)
- {
-   VALUE con = Qnil, kw = Qnil;
-   kw = ENCODED_STR_NEW(keyword_at, keyword_length);
-   con = ENCODED_STR_NEW(at, length);
-   rb_funcall(con, rb_intern("strip!"), 0);
-   rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); 
- }
- 
- static void
- store_multiline_kw_con(VALUE listener, const char * event_name,
-                       const char * keyword_at, size_t keyword_length,
-                       const char * at,         size_t length,
-                       int current_line, int start_col)
- {
-   VALUE split;
-   VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil;
- 
-   kw = ENCODED_STR_NEW(keyword_at, keyword_length);
-   con = ENCODED_STR_NEW(at, length);
- 
-   unindent(con, start_col);
-   
-   split = rb_str_split(con, "\n");
- 
-   name = rb_funcall(split, rb_intern("shift"), 0);
-   desc = rb_ary_join(split, rb_str_new2( "\n" ));
- 
-   if( name == Qnil ) 
-   {
-     name = rb_str_new2("");
-   }
-   if( rb_funcall(desc, rb_intern("size"), 0) == 0) 
-   {
-     desc = rb_str_new2("");
-   }
-   rb_funcall(name, rb_intern("strip!"), 0);
-   rb_funcall(desc, rb_intern("rstrip!"), 0);
-   rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); 
- }
- 
- static void 
- store_attr(VALUE listener, const char * attr_type,
-            const char * at, size_t length, 
-            int line)
- {
-   VALUE val = ENCODED_STR_NEW(at, length);
-   rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line));
- }
- static void 
- store_docstring_content(VALUE listener, 
-           int start_col, 
-           const char *type_at, size_t type_length,
-           const char *at, size_t length, 
-           int current_line)
- {
-   VALUE re2;
-   VALUE unescape_escaped_quotes;
-   VALUE con = ENCODED_STR_NEW(at, length);
-   VALUE con_type = ENCODED_STR_NEW(type_at, type_length);
- 
-   unindent(con, start_col);
- 
-   re2 = rb_reg_regcomp(rb_str_new2("\r\\Z"));
-   unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\""));
-   rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2(""));
-   rb_funcall(con_type, rb_intern("strip!"), 0);
-   rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\""));
-   rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line));
- }
- static void 
- raise_lexer_error(const char * at, int line)
- { 
-   rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at);
- }
- 
- static void lexer_init(lexer_state *lexer) {
-   lexer->content_start = 0;
-   lexer->content_end = 0;
-   lexer->content_len = 0;
-   lexer->docstring_content_type_start = 0;
-   lexer->docstring_content_type_end = 0;
-   lexer->mark = 0;
-   lexer->keyword_start = 0;
-   lexer->keyword_end = 0;
-   lexer->next_keyword_start = 0;
-   lexer->line_number = 1;
-   lexer->last_newline = 0;
-   lexer->final_newline = 0;
-   lexer->start_col = 0;
- }
- 
- static VALUE CLexer_alloc(VALUE klass)
- {
-   VALUE obj;
-   lexer_state *lxr = ALLOC(lexer_state);
-   lexer_init(lxr);
- 
-   obj = Data_Wrap_Struct(klass, NULL, -1, lxr);
- 
-   return obj;
- }
- 
- static VALUE CLexer_init(VALUE self, VALUE listener)
- {
-   lexer_state *lxr; 
-   rb_iv_set(self, "@listener", listener);
-   
-   lxr = NULL;
-   DATA_GET(self, lexer_state, lxr);
-   lexer_init(lxr);
-   
-   return self;
- }
- 
- static VALUE CLexer_scan(VALUE self, VALUE input)
- {
-   VALUE input_copy;
-   char *data;
-   size_t len;
-   VALUE listener = rb_iv_get(self, "@listener");
- 
-   lexer_state *lexer;
-   lexer = NULL;
-   DATA_GET(self, lexer_state, lexer);
- 
-   input_copy = rb_str_dup(input);
- 
-   rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%"));
-   data = RSTRING_PTR(input_copy);
-   len = RSTRING_LEN(input_copy);
-   
-   if (len == 0) { 
-     rb_raise(rb_eGherkinLexingError, "No content to lex.");
-   } else {
- 
-     const char *p, *pe, *eof;
-     int cs = 0;
-     
-     VALUE current_row = Qnil;
- 
-     p = data;
-     pe = data + len;
-     eof = pe;
-     
-     assert(*pe == '\0' && "pointer does not end on NULL");
-     
-     
- #line 902 "ext/gherkin_lexer_sk/gherkin_lexer_sk.c"
- 	{
- 	cs = lexer_start;
- 	}
- 
- #line 425 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sk.c.rl"
-     
- #line 909 "ext/gherkin_lexer_sk/gherkin_lexer_sk.c"
- 	{
- 	int _klen;
- 	unsigned int _trans;
- 	const char *_acts;
- 	unsigned int _nacts;
- 	const char *_keys;
- 
- 	if ( p == pe )
- 		goto _test_eof;
- 	if ( cs == 0 )
- 		goto _out;
- _resume:
- 	_keys = _lexer_trans_keys + _lexer_key_offsets[cs];
- 	_trans = _lexer_index_offsets[cs];
- 
- 	_klen = _lexer_single_lengths[cs];
- 	if ( _klen > 0 ) {
- 		const char *_lower = _keys;
- 		const char *_mid;
- 		const char *_upper = _keys + _klen - 1;
- 		while (1) {
- 			if ( _upper < _lower )
- 				break;
- 
- 			_mid = _lower + ((_upper-_lower) >> 1);
- 			if ( (*p) < *_mid )
- 				_upper = _mid - 1;
- 			else if ( (*p) > *_mid )
- 				_lower = _mid + 1;
- 			else {
- 				_trans += (_mid - _keys);
- 				goto _match;
- 			}
- 		}
- 		_keys += _klen;
- 		_trans += _klen;
- 	}
- 
- 	_klen = _lexer_range_lengths[cs];
- 	if ( _klen > 0 ) {
- 		const char *_lower = _keys;
- 		const char *_mid;
- 		const char *_upper = _keys + (_klen<<1) - 2;
- 		while (1) {
- 			if ( _upper < _lower )
- 				break;
- 
- 			_mid = _lower + (((_upper-_lower) >> 1) & ~1);
- 			if ( (*p) < _mid[0] )
- 				_upper = _mid - 2;
- 			else if ( (*p) > _mid[1] )
- 				_lower = _mid + 2;
- 			else {
- 				_trans += ((_mid - _keys)>>1);
- 				goto _match;
- 			}
- 		}
- 		_trans += _klen;
- 	}
- 
- _match:
- 	cs = _lexer_trans_targs[_trans];
- 
- 	if ( _lexer_trans_actions[_trans] == 0 )
- 		goto _again;
- 
- 	_acts = _lexer_actions + _lexer_trans_actions[_trans];
- 	_nacts = (unsigned int) *_acts++;
- 	while ( _nacts-- > 0 )
- 	{
- 		switch ( *_acts++ )
- 		{
- 	case 0:
- #line 83 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sk.c.rl"
- 	{
- 		MARK(content_start, p);
-     lexer->current_line = lexer->line_number;
-     lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2;
-   }
- 	break;
- 	case 1:
- #line 89 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sk.c.rl"
- 	{
-     MARK(content_start, p);
-   }
- 	break;
- 	case 2:
- #line 93 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sk.c.rl"
- 	{
-     lexer->current_line = lexer->line_number;
-     lexer->start_col = p - data - lexer->last_newline;
-   }
- 	break;
- 	case 3:
- #line 98 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sk.c.rl"
- 	{
-     int len = LEN(content_start, PTR_TO(final_newline));
-     int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end));
- 
-     if (len < 0) len = 0;
-     if (type_len < 0) len = 0;
- 
-     store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line);
-   }
- 	break;
- 	case 4:
- #line 108 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sk.c.rl"
- 	{ 
-     MARK(docstring_content_type_start, p);
-   }
- 	break;
- 	case 5:
- #line 112 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sk.c.rl"
- 	{ 
-     MARK(docstring_content_type_end, p);
-   }
- 	break;
- 	case 6:
- #line 116 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sk.c.rl"
- 	{
-     STORE_KW_END_CON(feature);
-   }
- 	break;
- 	case 7:
- #line 120 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sk.c.rl"
- 	{
-     STORE_KW_END_CON(background);
-   }
- 	break;
- 	case 8:
- #line 124 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sk.c.rl"
- 	{
-     STORE_KW_END_CON(scenario);
-   }
- 	break;
- 	case 9:
- #line 128 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sk.c.rl"
- 	{
-     STORE_KW_END_CON(scenario_outline);
-   }
- 	break;
- 	case 10:
- #line 132 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sk.c.rl"
- 	{
-     STORE_KW_END_CON(examples);
-   }
- 	break;
- 	case 11:
- #line 136 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sk.c.rl"
- 	{
-     store_kw_con(listener, "step",
-       PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-       PTR_TO(content_start), LEN(content_start, p), 
-       lexer->current_line);
-   }
- 	break;
- 	case 12:
- #line 143 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sk.c.rl"
- 	{
-     STORE_ATTR(comment);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 13:
- #line 148 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sk.c.rl"
- 	{
-     STORE_ATTR(tag);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 14:
- #line 153 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sk.c.rl"
- 	{
-     lexer->line_number += 1;
-     MARK(final_newline, p);
-   }
- 	break;
- 	case 15:
- #line 158 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sk.c.rl"
- 	{
-     MARK(last_newline, p + 1);
-   }
- 	break;
- 	case 16:
- #line 162 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sk.c.rl"
- 	{
-     if (lexer->mark == 0) {
-       MARK(mark, p);
-     }
-   }
- 	break;
- 	case 17:
- #line 168 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sk.c.rl"
- 	{
-     MARK(keyword_end, p);
-     MARK(keyword_start, PTR_TO(mark));
-     MARK(content_start, p + 1);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 18:
- #line 175 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sk.c.rl"
- 	{
-     MARK(content_end, p);
-   }
- 	break;
- 	case 19:
- #line 179 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sk.c.rl"
- 	{
-     p = p - 1;
-     lexer->current_line = lexer->line_number;
-     current_row = rb_ary_new();
-   }
- 	break;
- 	case 20:
- #line 185 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sk.c.rl"
- 	{
- 		MARK(content_start, p);
-   }
- 	break;
- 	case 21:
- #line 189 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sk.c.rl"
- 	{
-     VALUE re_pipe, re_newline, re_backslash;
-     VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
-     rb_funcall(con, rb_intern("strip!"), 0);
-     re_pipe      = rb_reg_regcomp(rb_str_new2("\\\\\\|"));
-     re_newline   = rb_reg_regcomp(rb_str_new2("\\\\n"));
-     re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_pipe,      rb_str_new2("|"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_newline,   rb_str_new2("\n"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\"));
- 
-     rb_ary_push(current_row, con);
-   }
- 	break;
- 	case 22:
- #line 203 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sk.c.rl"
- 	{
-     rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
-   }
- 	break;
- 	case 23:
- #line 207 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sk.c.rl"
- 	{
-     int line;
-     if (cs < lexer_first_final) {
-       size_t count = 0;
-       VALUE newstr_val;
-       char *newstr;
-       int newstr_count = 0;        
-       size_t len;
-       const char *buff;
-       if (lexer->last_newline != 0) {
-         len = LEN(last_newline, eof);
-         buff = PTR_TO(last_newline);
-       } else {
-         len = strlen(data);
-         buff = data;
-       }
- 
-       // Allocate as a ruby string so that it gets cleaned up by GC
-       newstr_val = rb_str_new(buff, len);
-       newstr = RSTRING_PTR(newstr_val);
- 
- 
-       for (count = 0; count < len; count++) {
-         if(buff[count] == 10) {
-           newstr[newstr_count] = '\0'; // terminate new string at first newline found
-           break;
-         } else {
-           if (buff[count] == '%') {
-             newstr[newstr_count++] = buff[count];
-             newstr[newstr_count] = buff[count];
-           } else {
-             newstr[newstr_count] = buff[count];
-           }
-         }
-         newstr_count++;
-       }
- 
-       line = lexer->line_number;
-       lexer_init(lexer); // Re-initialize so we can scan again with the same lexer
-       raise_lexer_error(newstr, line);
-     } else {
-       rb_funcall(listener, rb_intern("eof"), 0);
-     }
-   }
- 	break;
- #line 1199 "ext/gherkin_lexer_sk/gherkin_lexer_sk.c"
- 		}
- 	}
- 
- _again:
- 	if ( cs == 0 )
- 		goto _out;
- 	if ( ++p != pe )
- 		goto _resume;
- 	_test_eof: {}
- 	if ( p == eof )
- 	{
- 	const char *__acts = _lexer_actions + _lexer_eof_actions[cs];
- 	unsigned int __nacts = (unsigned int) *__acts++;
- 	while ( __nacts-- > 0 ) {
- 		switch ( *__acts++ ) {
- 	case 23:
- #line 207 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sk.c.rl"
- 	{
-     int line;
-     if (cs < lexer_first_final) {
-       size_t count = 0;
-       VALUE newstr_val;
-       char *newstr;
-       int newstr_count = 0;        
-       size_t len;
-       const char *buff;
-       if (lexer->last_newline != 0) {
-         len = LEN(last_newline, eof);
-         buff = PTR_TO(last_newline);
-       } else {
-         len = strlen(data);
-         buff = data;
-       }
- 
-       // Allocate as a ruby string so that it gets cleaned up by GC
-       newstr_val = rb_str_new(buff, len);
-       newstr = RSTRING_PTR(newstr_val);
- 
- 
-       for (count = 0; count < len; count++) {
-         if(buff[count] == 10) {
-           newstr[newstr_count] = '\0'; // terminate new string at first newline found
-           break;
-         } else {
-           if (buff[count] == '%') {
-             newstr[newstr_count++] = buff[count];
-             newstr[newstr_count] = buff[count];
-           } else {
-             newstr[newstr_count] = buff[count];
-           }
-         }
-         newstr_count++;
-       }
- 
-       line = lexer->line_number;
-       lexer_init(lexer); // Re-initialize so we can scan again with the same lexer
-       raise_lexer_error(newstr, line);
-     } else {
-       rb_funcall(listener, rb_intern("eof"), 0);
-     }
-   }
- 	break;
- #line 1262 "ext/gherkin_lexer_sk/gherkin_lexer_sk.c"
- 		}
- 	}
- 	}
- 
- 	_out: {}
- 	}
- 
- #line 426 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sk.c.rl"
- 
-     assert(p <= pe && "data overflow after parsing execute");
-     assert(lexer->content_start <= len && "content starts after data end");
-     assert(lexer->mark < len && "mark is after data end");
-     
-     // Reset lexer by re-initializing the whole thing
-     lexer_init(lexer);
- 
-     if (cs == lexer_error) {
-       rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails.");
-     } else {
-       return Qtrue;
-     }
-   }
- }
- 
- void Init_gherkin_lexer_sk()
- {
-   mGherkin = rb_define_module("Gherkin");
-   mGherkinLexer = rb_define_module_under(mGherkin, "Lexer");
-   rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError"));
- 
-   mCLexer = rb_define_module_under(mGherkin, "CLexer");
-   cI18nLexer = rb_define_class_under(mCLexer, "Sk", rb_cObject);
-   rb_define_alloc_func(cI18nLexer, CLexer_alloc);
-   rb_define_method(cI18nLexer, "initialize", CLexer_init, 1);
-   rb_define_method(cI18nLexer, "scan", CLexer_scan, 1);
- }
- 
 -#line 1 "ragel/i18n/sk.c.rl"
 -#include <assert.h>
 -#include <ruby.h>
 -
 -#if defined(_WIN32)
 -#include <stddef.h>
 -#endif
 -
 -#ifdef HAVE_RUBY_RE_H
 -#include <ruby/re.h>
 -#else
 -#include <re.h>
 -#endif
 -
 -#ifdef HAVE_RUBY_ENCODING_H
 -#include <ruby/encoding.h>
 -#define ENCODED_STR_NEW(ptr, len) \
 -    rb_enc_str_new(ptr, len, rb_utf8_encoding())
 -#else
 -#define ENCODED_STR_NEW(ptr, len) \
 -    rb_str_new(ptr, len)
 -#endif
 -
 -#ifndef RSTRING_PTR
 -#define RSTRING_PTR(s) (RSTRING(s)->ptr)
 -#endif
 -
 -#ifndef RSTRING_LEN
 -#define RSTRING_LEN(s) (RSTRING(s)->len)
 -#endif
 -
 -#define DATA_GET(FROM, TYPE, NAME) \
 -  Data_Get_Struct(FROM, TYPE, NAME); \
 -  if (NAME == NULL) { \
 -    rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \
 -  }
 - 
 -typedef struct lexer_state {
 -  int content_len;
 -  int line_number;
 -  int current_line;
 -  int start_col;
 -  size_t mark;
 -  size_t keyword_start;
 -  size_t keyword_end;
 -  size_t next_keyword_start;
 -  size_t content_start;
 -  size_t content_end;
 -  size_t docstring_content_type_start;
 -  size_t docstring_content_type_end;
 -  size_t query_start;
 -  size_t last_newline;
 -  size_t final_newline;
 -} lexer_state;
 -
 -static VALUE mGherkin;
 -static VALUE mGherkinLexer;
 -static VALUE mCLexer;
 -static VALUE cI18nLexer;
 -static VALUE rb_eGherkinLexingError;
 -
 -#define LEN(AT, P) (P - data - lexer->AT)
 -#define MARK(M, P) (lexer->M = (P) - data)
 -#define PTR_TO(P) (data + lexer->P)
 -
 -#define STORE_KW_END_CON(EVENT) \
 -  store_multiline_kw_con(listener, # EVENT, \
 -    PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \
 -    PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \
 -    lexer->current_line, lexer->start_col); \
 -    if (lexer->content_end != 0) { \
 -      p = PTR_TO(content_end - 1); \
 -    } \
 -    lexer->content_end = 0
 -
 -#define STORE_ATTR(ATTR) \
 -    store_attr(listener, # ATTR, \
 -      PTR_TO(content_start), LEN(content_start, p), \
 -      lexer->line_number)
 -
 -
 -#line 254 "ragel/i18n/sk.c.rl"
 -
 -
 -/** Data **/
 -
 -#line 89 "ext/gherkin_lexer_sk/gherkin_lexer_sk.c"
 -static const char _lexer_actions[] = {
 -	0, 1, 0, 1, 1, 1, 2, 1, 
 -	3, 1, 4, 1, 5, 1, 6, 1, 
 -	7, 1, 8, 1, 9, 1, 10, 1, 
 -	11, 1, 12, 1, 13, 1, 16, 1, 
 -	17, 1, 18, 1, 19, 1, 20, 1, 
 -	21, 1, 22, 1, 23, 2, 1, 18, 
 -	2, 4, 5, 2, 13, 0, 2, 14, 
 -	15, 2, 17, 0, 2, 17, 2, 2, 
 -	17, 16, 2, 17, 19, 2, 18, 6, 
 -	2, 18, 7, 2, 18, 8, 2, 18, 
 -	9, 2, 18, 10, 2, 18, 16, 2, 
 -	20, 21, 2, 22, 0, 2, 22, 2, 
 -	2, 22, 16, 2, 22, 19, 3, 3, 
 -	14, 15, 3, 5, 14, 15, 3, 11, 
 -	14, 15, 3, 12, 14, 15, 3, 13, 
 -	14, 15, 3, 14, 15, 18, 3, 17, 
 -	0, 11, 3, 17, 14, 15, 4, 1, 
 -	14, 15, 18, 4, 4, 5, 14, 15, 
 -	4, 17, 0, 14, 15, 5, 17, 0, 
 -	11, 14, 15
 -};
 -
 -static const short _lexer_key_offsets[] = {
 -	0, 0, 21, 22, 23, 43, 44, 45, 
 -	47, 49, 54, 59, 64, 69, 73, 77, 
 -	79, 80, 81, 82, 83, 84, 85, 86, 
 -	87, 88, 89, 90, 91, 92, 93, 94, 
 -	95, 97, 99, 104, 111, 116, 119, 123, 
 -	127, 130, 133, 136, 139, 142, 145, 148, 
 -	151, 154, 157, 160, 163, 166, 169, 172, 
 -	173, 174, 175, 176, 177, 178, 179, 180, 
 -	181, 182, 195, 197, 199, 201, 203, 205, 
 -	207, 209, 211, 213, 215, 217, 219, 221, 
 -	223, 225, 227, 229, 231, 233, 235, 237, 
 -	257, 258, 259, 260, 261, 262, 263, 264, 
 -	265, 266, 267, 268, 269, 270, 271, 272, 
 -	273, 274, 276, 277, 278, 279, 295, 297, 
 -	299, 301, 303, 305, 307, 309, 311, 313, 
 -	315, 317, 319, 321, 323, 325, 329, 351, 
 -	352, 353, 354, 355, 356, 357, 358, 359, 
 -	360, 361, 362, 363, 364, 365, 367, 371, 
 -	372, 373, 374, 375, 376, 377, 378, 379, 
 -	380, 381, 382, 383, 384, 385, 386, 387, 
 -	388, 389, 390, 391, 409, 411, 413, 415, 
 -	417, 419, 421, 423, 425, 427, 429, 431, 
 -	433, 435, 437, 439, 443, 465, 466, 467, 
 -	468, 469, 470, 471, 472, 473, 474, 492, 
 -	494, 496, 498, 500, 502, 504, 506, 508, 
 -	510, 512, 514, 516, 518, 520, 522, 526, 
 -	548, 549, 550, 551, 552, 553, 554, 555, 
 -	556, 557, 558, 559, 560, 561, 562, 563, 
 -	564, 565, 566, 567, 568, 569, 570, 571, 
 -	572, 574, 575, 576, 577, 578, 579, 580, 
 -	581, 582, 583, 584, 585, 586, 587, 588, 
 -	589, 593, 599, 602, 604, 610, 630, 632, 
 -	634, 636, 638, 640, 642, 644, 646, 648, 
 -	650, 652, 654, 656, 658, 660, 662, 664, 
 -	666, 668, 670, 672, 674, 676, 678, 680, 
 -	683, 685, 687, 689, 691, 693, 695, 697, 
 -	699, 701, 703, 705, 707, 709, 711, 716, 
 -	718, 720, 722, 724, 726, 728, 730, 732, 
 -	734, 736, 738, 740, 742, 744, 746, 748, 
 -	750, 752, 754, 756, 758, 760, 762, 764, 
 -	766, 768, 770, 772, 774, 776, 778, 780, 
 -	782, 784, 786, 788, 790, 792, 794, 796, 
 -	798, 800, 802, 804, 806, 808, 810, 812, 
 -	813, 814, 815, 816, 817, 818, 819, 820, 
 -	821, 822, 823, 824, 825, 826, 827, 829, 
 -	831, 833, 835, 837, 839, 841, 843, 845, 
 -	847, 849, 851, 853, 855, 857, 859, 861, 
 -	863, 865, 867, 869, 871, 873, 875, 877, 
 -	880, 882, 884, 886, 888, 890, 892, 894, 
 -	896, 898, 900, 902, 904, 906, 908, 912, 
 -	914, 916, 918, 920, 922, 924, 926, 928, 
 -	930, 932, 934, 936, 938, 940, 942, 944, 
 -	946, 948, 950, 952, 954, 956, 958, 960, 
 -	962, 964, 966, 968, 970, 972, 974, 976, 
 -	978, 980, 982, 984, 986, 988, 990, 992, 
 -	994, 996, 998, 999, 1000, 1001, 1002, 1003, 
 -	1004, 1005, 1006, 1007, 1008, 1017, 1019, 1021, 
 -	1023, 1025, 1027, 1029, 1031, 1033, 1035, 1037, 
 -	1039, 1041, 1043, 1045, 1047, 1049, 1051, 1053, 
 -	1055, 1057, 1059, 1061, 1063, 1065, 1067, 1069, 
 -	1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 
 -	1078, 1079, 1080, 1081, 1082, 1083, 1084, 1086, 
 -	1088, 1090, 1092, 1094, 1096, 1098, 1100, 1102, 
 -	1104, 1106, 1108, 1112, 1114, 1116, 1118, 1120, 
 -	1122, 1124, 1126, 1128, 1130, 1132, 1134, 1136, 
 -	1138, 1140, 1142, 1144, 1146, 1148, 1150, 1152, 
 -	1154, 1156, 1158, 1160, 1162, 1164, 1166, 1168, 
 -	1170, 1172, 1174, 1176, 1178, 1180, 1182, 1184, 
 -	1186, 1188, 1190, 1192, 1194, 1196, 1198, 1200, 
 -	1202, 1204, 1206, 1208, 1210, 1212, 1214, 1216, 
 -	1218, 1220, 1222, 1224, 1226, 1229, 1231, 1233, 
 -	1235, 1237, 1239, 1241, 1243, 1245, 1247, 1249, 
 -	1251, 1253, 1255, 1258, 1261, 1263, 1265, 1267, 
 -	1269, 1271, 1273, 1275, 1277, 1279, 1281, 1283, 
 -	1285, 1287, 1289, 1291, 1293, 1295, 1297, 1299, 
 -	1301, 1303, 1305, 1307, 1309, 1311, 1313, 1315, 
 -	1317, 1319, 1321, 1323, 1325, 1327
 -};
 -
 -static const char _lexer_trans_keys[] = {
 -	-17, 10, 32, 34, 35, 37, 42, 64, 
 -	65, 70, 75, 78, 79, 80, 83, 84, 
 -	86, 90, 124, 9, 13, -69, -65, 10, 
 -	32, 34, 35, 37, 42, 64, 65, 70, 
 -	75, 78, 79, 80, 83, 84, 86, 90, 
 -	124, 9, 13, 34, 34, 10, 13, 10, 
 -	13, 10, 32, 34, 9, 13, 10, 32, 
 -	34, 9, 13, 10, 32, 34, 9, 13, 
 -	10, 32, 34, 9, 13, 10, 32, 9, 
 -	13, 10, 32, 9, 13, 10, 13, 10, 
 -	95, 70, 69, 65, 84, 85, 82, 69, 
 -	95, 69, 78, 68, 95, 37, 32, 10, 
 -	13, 10, 13, 13, 32, 64, 9, 10, 
 -	9, 10, 13, 32, 64, 11, 12, 10, 
 -	32, 64, 9, 13, 32, 107, 108, 10, 
 -	13, 116, 122, 10, 13, 97, 105, 10, 
 -	13, 107, 10, 13, 116, 10, 13, 105, 
 -	10, 13, 101, -59, 10, 13, -66, 10, 
 -	13, 10, 13, 32, -61, 10, 13, -95, 
 -	10, 13, 10, 13, 114, 10, 13, 111, 
 -	10, 13, 118, 10, 13, 101, -59, 10, 
 -	13, -120, 10, 13, 101, 117, 110, 107, 
 -	99, 105, 97, 58, 10, 10, 10, 32, 
 -	35, 37, 64, 70, 78, 79, 80, 83, 
 -	86, 9, 13, 10, 95, 10, 70, 10, 
 -	69, 10, 65, 10, 84, 10, 85, 10, 
 -	82, 10, 69, 10, 95, 10, 69, 10, 
 -	78, 10, 68, 10, 95, 10, 37, 10, 
 -	117, 10, 110, 10, 107, 10, 99, 10, 
 -	105, 10, 97, 10, 58, 10, 32, 34, 
 -	35, 37, 42, 64, 65, 70, 75, 78, 
 -	79, 80, 83, 84, 86, 90, 124, 9, 
 -	13, 101, -60, -113, -61, -95, -60, -115, 
 -	114, 116, 32, 83, 99, 101, 110, -61, 
 -	-95, 114, 97, 117, 58, 10, 10, 10, 
 -	32, 35, 37, 42, 64, 65, 70, 75, 
 -	80, 83, 84, 86, 90, 9, 13, 10, 
 -	95, 10, 70, 10, 69, 10, 65, 10, 
 -	84, 10, 85, 10, 82, 10, 69, 10, 
 -	95, 10, 69, 10, 78, 10, 68, 10, 
 -	95, 10, 37, 10, 32, 10, 32, 107, 
 -	108, 10, 32, 34, 35, 37, 42, 64, 
 -	65, 70, 75, 78, 79, 80, 83, 84, 
 -	86, 90, 116, 122, 124, 9, 13, 115, 
 -	110, 111, 118, 97, 32, 83, 99, 101, 
 -	110, -61, -95, 114, 97, 111, 114, -59, 
 -	107, 116, 122, -66, 105, 97, 100, 97, 
 -	118, 107, 105, 97, -60, -66, 111, 109, 
 -	97, 100, 105, 101, 58, 10, 10, 10, 
 -	32, 35, 37, 42, 64, 65, 70, 75, 
 -	78, 79, 80, 83, 84, 86, 90, 9, 
 -	13, 10, 95, 10, 70, 10, 69, 10, 
 -	65, 10, 84, 10, 85, 10, 82, 10, 
 -	69, 10, 95, 10, 69, 10, 78, 10, 
 -	68, 10, 95, 10, 37, 10, 32, 10, 
 -	32, 107, 108, 10, 32, 34, 35, 37, 
 -	42, 64, 65, 70, 75, 78, 79, 80, 
 -	83, 84, 86, 90, 116, 122, 124, 9, 
 -	13, 99, 101, 110, -61, -95, 114, 58, 
 -	10, 10, 10, 32, 35, 37, 42, 64, 
 -	65, 70, 75, 78, 79, 80, 83, 84, 
 -	86, 90, 9, 13, 10, 95, 10, 70, 
 -	10, 69, 10, 65, 10, 84, 10, 85, 
 -	10, 82, 10, 69, 10, 95, 10, 69, 
 -	10, 78, 10, 68, 10, 95, 10, 37, 
 -	10, 32, 10, 32, 107, 108, 10, 32, 
 -	34, 35, 37, 42, 64, 65, 70, 75, 
 -	78, 79, 80, 83, 84, 86, 90, 116, 
 -	122, 124, 9, 13, 97, 107, 108, 97, 
 -	115, 116, 110, 111, 115, -59, -91, 97, 
 -	32, 112, 114, 101, 100, 112, 111, 107, 
 -	108, 97, 100, 117, 97, 105, 107, 116, 
 -	105, 101, -59, -66, 32, -61, -95, 114, 
 -	111, 118, 101, -59, -120, 32, 124, 9, 
 -	13, 10, 32, 92, 124, 9, 13, 10, 
 -	92, 124, 10, 92, 10, 32, 92, 124, 
 -	9, 13, 10, 32, 34, 35, 37, 42, 
 -	64, 65, 70, 75, 78, 79, 80, 83, 
 -	84, 86, 90, 124, 9, 13, 10, 101, 
 -	10, 117, 10, 110, 10, 107, 10, 99, 
 -	10, 105, 10, 97, 10, 58, 10, 101, 
 -	-60, 10, -113, 10, -61, 10, -95, 10, 
 -	-60, 10, -115, 10, 10, 114, 10, 116, 
 -	10, 32, 10, 83, 10, 99, 10, 101, 
 -	10, 110, -61, 10, -95, 10, 10, 114, 
 -	10, 97, 117, 10, 115, 10, 110, 10, 
 -	111, 10, 118, 10, 97, 10, 32, 10, 
 -	83, 10, 99, 10, 101, 10, 110, -61, 
 -	10, -95, 10, 10, 114, 10, 111, -59, 
 -	10, 107, 116, 122, -66, 10, 10, 105, 
 -	10, 97, 10, 100, 10, 97, 10, 118, 
 -	10, 107, 10, 105, 10, 97, -60, 10, 
 -	-66, 10, 10, 111, 10, 109, 10, 97, 
 -	10, 100, 10, 105, 10, 101, 10, 99, 
 -	10, 101, 10, 110, -61, 10, -95, 10, 
 -	10, 114, 10, 97, 10, 107, 10, 108, 
 -	10, 97, 10, 115, 10, 116, 10, 110, 
 -	10, 111, 10, 115, -59, 10, -91, 10, 
 -	10, 97, 10, 32, 10, 112, 10, 114, 
 -	10, 101, 10, 100, 10, 112, 10, 111, 
 -	10, 107, 10, 108, 10, 97, 10, 100, 
 -	10, 117, 97, 105, 107, 116, 105, 101, 
 -	-59, -66, 32, -61, -95, 114, 111, 118, 
 -	101, -59, -120, 10, 101, 10, 117, 10, 
 -	110, 10, 107, 10, 99, 10, 105, 10, 
 -	97, 10, 58, 10, 101, -60, 10, -113, 
 -	10, -61, 10, -95, 10, -60, 10, -115, 
 -	10, 10, 114, 10, 116, 10, 32, 10, 
 -	83, 10, 99, 10, 101, 10, 110, -61, 
 -	10, -95, 10, 10, 114, 10, 97, 117, 
 -	10, 115, 10, 110, 10, 111, 10, 118, 
 -	10, 97, 10, 32, 10, 83, 10, 99, 
 -	10, 101, 10, 110, -61, 10, -95, 10, 
 -	10, 114, 10, 111, -59, 10, 107, 116, 
 -	-66, 10, 10, 105, 10, 97, 10, 100, 
 -	10, 97, 10, 118, 10, 107, 10, 105, 
 -	10, 97, -60, 10, -66, 10, 10, 111, 
 -	10, 109, 10, 99, 10, 101, 10, 110, 
 -	-61, 10, -95, 10, 10, 114, 10, 97, 
 -	10, 107, 10, 108, 10, 97, 10, 115, 
 -	10, 116, 10, 110, 10, 111, 10, 115, 
 -	-59, 10, -91, 10, 10, 97, 10, 32, 
 -	10, 112, 10, 114, 10, 101, 10, 100, 
 -	10, 112, 10, 111, 10, 107, 10, 108, 
 -	10, 97, 10, 100, 10, 117, -61, -83, 
 -	107, 108, 97, 100, 121, 58, 10, 10, 
 -	10, 32, 35, 70, 80, 86, 124, 9, 
 -	13, 10, 117, 10, 110, 10, 107, 10, 
 -	99, 10, 105, 10, 97, 10, 58, 10, 
 -	111, -59, 10, -66, 10, 10, 105, 10, 
 -	97, 10, 100, 10, 97, 10, 118, 10, 
 -	107, 10, 108, 10, 97, 10, 115, 10, 
 -	116, 10, 110, 10, 111, 10, 115, -59, 
 -	10, -91, 10, 97, 105, 107, 116, 105, 
 -	101, -59, -66, 32, -61, -95, 114, 111, 
 -	118, 101, -59, -120, 10, 101, 10, 117, 
 -	10, 110, 10, 107, 10, 99, 10, 105, 
 -	10, 97, 10, 58, 10, 101, -60, 10, 
 -	-113, 10, 10, 111, -59, 10, 107, 116, 
 -	-66, 10, 10, 105, 10, 97, 10, 100, 
 -	10, 97, 10, 118, 10, 107, 10, 105, 
 -	10, 97, -60, 10, -66, 10, 10, 111, 
 -	10, 109, 10, 99, 10, 101, 10, 110, 
 -	-61, 10, -95, 10, 10, 114, 10, 97, 
 -	10, 107, 10, 108, 10, 97, 10, 115, 
 -	10, 116, 10, 110, 10, 111, 10, 115, 
 -	-59, 10, -91, 10, 10, 97, 10, 32, 
 -	10, 112, 10, 114, 10, 101, 10, 100, 
 -	10, 112, 10, 111, 10, 107, 10, 108, 
 -	10, 97, 10, 100, 10, 117, -61, 10, 
 -	-95, 10, -60, 10, -115, 10, 10, 114, 
 -	10, 116, 10, 32, 10, 83, 10, 99, 
 -	10, 101, 10, 110, -61, 10, -95, 10, 
 -	10, 114, 10, 97, 117, 10, 115, 10, 
 -	110, 10, 111, 10, 118, 10, 97, 10, 
 -	32, 10, 83, 10, 99, 10, 101, 10, 
 -	110, -61, 10, -95, 10, 10, 114, 10, 
 -	111, 114, -59, 10, 122, -66, 10, 10, 
 -	105, 10, 97, 10, 100, 10, 97, 10, 
 -	118, 10, 107, 10, 97, 10, 100, 10, 
 -	105, 10, 101, -61, 10, -83, 10, 10, 
 -	107, 10, 108, 10, 97, 10, 100, 10, 
 -	121, 10, 99, 10, 101, 10, 110, -61, 
 -	10, -95, 10, 10, 114, 10, 108, 10, 
 -	97, 10, 115, 10, 116, 10, 110, 10, 
 -	111, 10, 115, -59, 10, -91, 10, 0
 -};
 -
 -static const char _lexer_single_lengths[] = {
 -	0, 19, 1, 1, 18, 1, 1, 2, 
 -	2, 3, 3, 3, 3, 2, 2, 2, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	2, 2, 3, 5, 3, 3, 4, 4, 
 -	3, 3, 3, 3, 3, 3, 3, 3, 
 -	3, 3, 3, 3, 3, 3, 3, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 11, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 18, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 2, 1, 1, 1, 14, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 4, 20, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 2, 4, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 16, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 4, 20, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 16, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 4, 20, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	2, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	2, 4, 3, 2, 4, 18, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 3, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 5, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 3, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 4, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 7, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 4, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 3, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 3, 3, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 0
 -};
 -
 -static const char _lexer_range_lengths[] = {
 -	0, 1, 0, 0, 1, 0, 0, 0, 
 -	0, 1, 1, 1, 1, 1, 1, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 1, 1, 1, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 1, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 1, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 1, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 1, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 1, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 1, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 1, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 1, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	1, 1, 0, 0, 1, 1, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 1, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0
 -};
 -
 -static const short _lexer_index_offsets[] = {
 -	0, 0, 21, 23, 25, 45, 47, 49, 
 -	52, 55, 60, 65, 70, 75, 79, 83, 
 -	86, 88, 90, 92, 94, 96, 98, 100, 
 -	102, 104, 106, 108, 110, 112, 114, 116, 
 -	118, 121, 124, 129, 136, 141, 145, 150, 
 -	155, 159, 163, 167, 171, 175, 179, 183, 
 -	187, 191, 195, 199, 203, 207, 211, 215, 
 -	217, 219, 221, 223, 225, 227, 229, 231, 
 -	233, 235, 248, 251, 254, 257, 260, 263, 
 -	266, 269, 272, 275, 278, 281, 284, 287, 
 -	290, 293, 296, 299, 302, 305, 308, 311, 
 -	331, 333, 335, 337, 339, 341, 343, 345, 
 -	347, 349, 351, 353, 355, 357, 359, 361, 
 -	363, 365, 368, 370, 372, 374, 390, 393, 
 -	396, 399, 402, 405, 408, 411, 414, 417, 
 -	420, 423, 426, 429, 432, 435, 440, 462, 
 -	464, 466, 468, 470, 472, 474, 476, 478, 
 -	480, 482, 484, 486, 488, 490, 493, 498, 
 -	500, 502, 504, 506, 508, 510, 512, 514, 
 -	516, 518, 520, 522, 524, 526, 528, 530, 
 -	532, 534, 536, 538, 556, 559, 562, 565, 
 -	568, 571, 574, 577, 580, 583, 586, 589, 
 -	592, 595, 598, 601, 606, 628, 630, 632, 
 -	634, 636, 638, 640, 642, 644, 646, 664, 
 -	667, 670, 673, 676, 679, 682, 685, 688, 
 -	691, 694, 697, 700, 703, 706, 709, 714, 
 -	736, 738, 740, 742, 744, 746, 748, 750, 
 -	752, 754, 756, 758, 760, 762, 764, 766, 
 -	768, 770, 772, 774, 776, 778, 780, 782, 
 -	784, 787, 789, 791, 793, 795, 797, 799, 
 -	801, 803, 805, 807, 809, 811, 813, 815, 
 -	817, 821, 827, 831, 834, 840, 860, 863, 
 -	866, 869, 872, 875, 878, 881, 884, 887, 
 -	890, 893, 896, 899, 902, 905, 908, 911, 
 -	914, 917, 920, 923, 926, 929, 932, 935, 
 -	939, 942, 945, 948, 951, 954, 957, 960, 
 -	963, 966, 969, 972, 975, 978, 981, 987, 
 -	990, 993, 996, 999, 1002, 1005, 1008, 1011, 
 -	1014, 1017, 1020, 1023, 1026, 1029, 1032, 1035, 
 -	1038, 1041, 1044, 1047, 1050, 1053, 1056, 1059, 
 -	1062, 1065, 1068, 1071, 1074, 1077, 1080, 1083, 
 -	1086, 1089, 1092, 1095, 1098, 1101, 1104, 1107, 
 -	1110, 1113, 1116, 1119, 1122, 1125, 1128, 1131, 
 -	1133, 1135, 1137, 1139, 1141, 1143, 1145, 1147, 
 -	1149, 1151, 1153, 1155, 1157, 1159, 1161, 1164, 
 -	1167, 1170, 1173, 1176, 1179, 1182, 1185, 1188, 
 -	1191, 1194, 1197, 1200, 1203, 1206, 1209, 1212, 
 -	1215, 1218, 1221, 1224, 1227, 1230, 1233, 1236, 
 -	1240, 1243, 1246, 1249, 1252, 1255, 1258, 1261, 
 -	1264, 1267, 1270, 1273, 1276, 1279, 1282, 1287, 
 -	1290, 1293, 1296, 1299, 1302, 1305, 1308, 1311, 
 -	1314, 1317, 1320, 1323, 1326, 1329, 1332, 1335, 
 -	1338, 1341, 1344, 1347, 1350, 1353, 1356, 1359, 
 -	1362, 1365, 1368, 1371, 1374, 1377, 1380, 1383, 
 -	1386, 1389, 1392, 1395, 1398, 1401, 1404, 1407, 
 -	1410, 1413, 1416, 1418, 1420, 1422, 1424, 1426, 
 -	1428, 1430, 1432, 1434, 1436, 1445, 1448, 1451, 
 -	1454, 1457, 1460, 1463, 1466, 1469, 1472, 1475, 
 -	1478, 1481, 1484, 1487, 1490, 1493, 1496, 1499, 
 -	1502, 1505, 1508, 1511, 1514, 1517, 1520, 1523, 
 -	1525, 1527, 1529, 1531, 1533, 1535, 1537, 1539, 
 -	1541, 1543, 1545, 1547, 1549, 1551, 1553, 1556, 
 -	1559, 1562, 1565, 1568, 1571, 1574, 1577, 1580, 
 -	1583, 1586, 1589, 1594, 1597, 1600, 1603, 1606, 
 -	1609, 1612, 1615, 1618, 1621, 1624, 1627, 1630, 
 -	1633, 1636, 1639, 1642, 1645, 1648, 1651, 1654, 
 -	1657, 1660, 1663, 1666, 1669, 1672, 1675, 1678, 
 -	1681, 1684, 1687, 1690, 1693, 1696, 1699, 1702, 
 -	1705, 1708, 1711, 1714, 1717, 1720, 1723, 1726, 
 -	1729, 1732, 1735, 1738, 1741, 1744, 1747, 1750, 
 -	1753, 1756, 1759, 1762, 1765, 1769, 1772, 1775, 
 -	1778, 1781, 1784, 1787, 1790, 1793, 1796, 1799, 
 -	1802, 1805, 1808, 1812, 1816, 1819, 1822, 1825, 
 -	1828, 1831, 1834, 1837, 1840, 1843, 1846, 1849, 
 -	1852, 1855, 1858, 1861, 1864, 1867, 1870, 1873, 
 -	1876, 1879, 1882, 1885, 1888, 1891, 1894, 1897, 
 -	1900, 1903, 1906, 1909, 1912, 1915
 -};
 -
 -static const short _lexer_trans_targs[] = {
 -	2, 4, 4, 5, 15, 17, 31, 34, 
 -	37, 56, 88, 91, 127, 141, 181, 208, 
 -	210, 219, 248, 4, 0, 3, 0, 4, 
 -	0, 4, 4, 5, 15, 17, 31, 34, 
 -	37, 56, 88, 91, 127, 141, 181, 208, 
 -	210, 219, 248, 4, 0, 6, 0, 7, 
 -	0, 9, 8, 8, 9, 8, 8, 10, 
 -	10, 11, 10, 10, 10, 10, 11, 10, 
 -	10, 10, 10, 12, 10, 10, 10, 10, 
 -	13, 10, 10, 4, 14, 14, 0, 4, 
 -	14, 14, 0, 4, 16, 15, 4, 0, 
 -	18, 0, 19, 0, 20, 0, 21, 0, 
 -	22, 0, 23, 0, 24, 0, 25, 0, 
 -	26, 0, 27, 0, 28, 0, 29, 0, 
 -	30, 0, 613, 0, 32, 0, 4, 16, 
 -	33, 4, 16, 33, 0, 0, 0, 0, 
 -	35, 36, 4, 36, 36, 34, 35, 35, 
 -	4, 36, 34, 36, 0, 38, 31, 55, 
 -	0, 4, 16, 39, 47, 33, 4, 16, 
 -	40, 43, 33, 4, 16, 41, 33, 4, 
 -	16, 42, 33, 4, 16, 43, 33, 4, 
 -	16, 44, 33, 45, 4, 16, 33, 46, 
 -	4, 16, 33, 4, 16, 32, 33, 48, 
 -	4, 16, 33, 49, 4, 16, 33, 4, 
 -	16, 50, 33, 4, 16, 51, 33, 4, 
 -	16, 52, 33, 4, 16, 53, 33, 54, 
 -	4, 16, 33, 46, 4, 16, 33, 31, 
 -	0, 57, 0, 58, 0, 59, 0, 60, 
 -	0, 61, 0, 62, 0, 63, 0, 65, 
 -	64, 65, 64, 65, 65, 4, 66, 4, 
 -	80, 550, 565, 578, 598, 604, 65, 64, 
 -	65, 67, 64, 65, 68, 64, 65, 69, 
 -	64, 65, 70, 64, 65, 71, 64, 65, 
 -	72, 64, 65, 73, 64, 65, 74, 64, 
 -	65, 75, 64, 65, 76, 64, 65, 77, 
 -	64, 65, 78, 64, 65, 79, 64, 65, 
 -	4, 64, 65, 81, 64, 65, 82, 64, 
 -	65, 83, 64, 65, 84, 64, 65, 85, 
 -	64, 65, 86, 64, 65, 87, 64, 4, 
 -	4, 5, 15, 17, 31, 34, 37, 56, 
 -	88, 91, 127, 141, 181, 208, 210, 219, 
 -	248, 4, 0, 89, 0, 90, 0, 31, 
 -	0, 92, 0, 93, 0, 94, 0, 95, 
 -	0, 96, 0, 97, 0, 98, 0, 99, 
 -	0, 100, 0, 101, 0, 102, 0, 103, 
 -	0, 104, 0, 105, 0, 106, 106, 0, 
 -	107, 0, 109, 108, 109, 108, 109, 109, 
 -	4, 110, 124, 4, 125, 495, 502, 505, 
 -	520, 526, 528, 537, 109, 108, 109, 111, 
 -	108, 109, 112, 108, 109, 113, 108, 109, 
 -	114, 108, 109, 115, 108, 109, 116, 108, 
 -	109, 117, 108, 109, 118, 108, 109, 119, 
 -	108, 109, 120, 108, 109, 121, 108, 109, 
 -	122, 108, 109, 123, 108, 109, 4, 108, 
 -	109, 87, 108, 109, 126, 124, 494, 108, 
 -	4, 4, 5, 15, 17, 31, 34, 37, 
 -	56, 88, 91, 127, 141, 181, 208, 210, 
 -	219, 478, 486, 248, 4, 0, 128, 0, 
 -	129, 0, 130, 0, 131, 0, 132, 0, 
 -	133, 0, 134, 0, 135, 0, 136, 0, 
 -	137, 0, 138, 0, 139, 0, 140, 0, 
 -	106, 0, 142, 442, 0, 143, 150, 154, 
 -	156, 0, 144, 0, 145, 0, 146, 0, 
 -	147, 0, 148, 0, 149, 0, 61, 0, 
 -	151, 0, 152, 0, 153, 0, 31, 0, 
 -	155, 0, 31, 0, 157, 0, 158, 0, 
 -	159, 0, 160, 0, 161, 0, 163, 162, 
 -	163, 162, 163, 163, 4, 164, 178, 4, 
 -	179, 359, 366, 369, 384, 397, 412, 418, 
 -	420, 429, 163, 162, 163, 165, 162, 163, 
 -	166, 162, 163, 167, 162, 163, 168, 162, 
 -	163, 169, 162, 163, 170, 162, 163, 171, 
 -	162, 163, 172, 162, 163, 173, 162, 163, 
 -	174, 162, 163, 175, 162, 163, 176, 162, 
 -	163, 177, 162, 163, 4, 162, 163, 87, 
 -	162, 163, 180, 178, 358, 162, 4, 4, 
 -	5, 15, 17, 31, 34, 37, 56, 88, 
 -	91, 127, 141, 181, 208, 210, 219, 342, 
 -	350, 248, 4, 0, 182, 0, 183, 0, 
 -	184, 0, 185, 0, 186, 0, 187, 0, 
 -	188, 0, 190, 189, 190, 189, 190, 190, 
 -	4, 191, 205, 4, 206, 255, 262, 265, 
 -	280, 293, 312, 318, 320, 329, 190, 189, 
 -	190, 192, 189, 190, 193, 189, 190, 194, 
 -	189, 190, 195, 189, 190, 196, 189, 190, 
 -	197, 189, 190, 198, 189, 190, 199, 189, 
 -	190, 200, 189, 190, 201, 189, 190, 202, 
 -	189, 190, 203, 189, 190, 204, 189, 190, 
 -	4, 189, 190, 87, 189, 190, 207, 205, 
 -	254, 189, 4, 4, 5, 15, 17, 31, 
 -	34, 37, 56, 88, 91, 127, 141, 181, 
 -	208, 210, 219, 232, 240, 248, 4, 0, 
 -	209, 0, 31, 0, 211, 0, 212, 0, 
 -	213, 0, 214, 0, 215, 0, 216, 0, 
 -	217, 0, 218, 0, 62, 0, 220, 0, 
 -	221, 0, 222, 0, 223, 0, 224, 0, 
 -	225, 0, 226, 0, 227, 0, 228, 0, 
 -	229, 0, 230, 0, 231, 0, 31, 0, 
 -	233, 236, 0, 234, 0, 235, 0, 236, 
 -	0, 237, 0, 238, 0, 239, 0, 87, 
 -	0, 241, 0, 242, 0, 243, 0, 244, 
 -	0, 245, 0, 246, 0, 247, 0, 239, 
 -	0, 248, 249, 248, 0, 253, 252, 251, 
 -	249, 252, 250, 0, 251, 249, 250, 0, 
 -	251, 250, 253, 252, 251, 249, 252, 250, 
 -	253, 253, 5, 15, 17, 31, 34, 37, 
 -	56, 88, 91, 127, 141, 181, 208, 210, 
 -	219, 248, 253, 0, 190, 205, 189, 190, 
 -	256, 189, 190, 257, 189, 190, 258, 189, 
 -	190, 259, 189, 190, 260, 189, 190, 261, 
 -	189, 190, 87, 189, 190, 263, 189, 264, 
 -	190, 189, 205, 190, 189, 266, 190, 189, 
 -	267, 190, 189, 268, 190, 189, 269, 190, 
 -	189, 190, 270, 189, 190, 271, 189, 190, 
 -	272, 189, 190, 273, 189, 190, 274, 189, 
 -	190, 275, 189, 190, 276, 189, 277, 190, 
 -	189, 278, 190, 189, 190, 279, 189, 190, 
 -	261, 261, 189, 190, 281, 189, 190, 282, 
 -	189, 190, 283, 189, 190, 284, 189, 190, 
 -	285, 189, 190, 286, 189, 190, 287, 189, 
 -	190, 288, 189, 190, 289, 189, 190, 290, 
 -	189, 291, 190, 189, 292, 190, 189, 190, 
 -	260, 189, 190, 294, 189, 295, 190, 302, 
 -	306, 308, 189, 296, 190, 189, 190, 297, 
 -	189, 190, 298, 189, 190, 299, 189, 190, 
 -	300, 189, 190, 301, 189, 190, 260, 189, 
 -	190, 303, 189, 190, 304, 189, 305, 190, 
 -	189, 205, 190, 189, 190, 307, 189, 190, 
 -	205, 189, 190, 309, 189, 190, 310, 189, 
 -	190, 311, 189, 190, 261, 189, 190, 313, 
 -	189, 190, 314, 189, 190, 315, 189, 316, 
 -	190, 189, 317, 190, 189, 190, 261, 189, 
 -	190, 319, 189, 190, 205, 189, 190, 321, 
 -	189, 190, 322, 189, 190, 323, 189, 190, 
 -	324, 189, 190, 325, 189, 190, 326, 189, 
 -	190, 327, 189, 328, 190, 189, 261, 190, 
 -	189, 190, 330, 189, 190, 331, 189, 190, 
 -	332, 189, 190, 333, 189, 190, 334, 189, 
 -	190, 335, 189, 190, 336, 189, 190, 337, 
 -	189, 190, 338, 189, 190, 339, 189, 190, 
 -	340, 189, 190, 341, 189, 190, 205, 189, 
 -	343, 346, 0, 344, 0, 345, 0, 346, 
 -	0, 347, 0, 348, 0, 349, 0, 87, 
 -	0, 351, 0, 352, 0, 353, 0, 354, 
 -	0, 355, 0, 356, 0, 357, 0, 349, 
 -	0, 163, 178, 162, 163, 360, 162, 163, 
 -	361, 162, 163, 362, 162, 163, 363, 162, 
 -	163, 364, 162, 163, 365, 162, 163, 87, 
 -	162, 163, 367, 162, 368, 163, 162, 178, 
 -	163, 162, 370, 163, 162, 371, 163, 162, 
 -	372, 163, 162, 373, 163, 162, 163, 374, 
 -	162, 163, 375, 162, 163, 376, 162, 163, 
 -	377, 162, 163, 378, 162, 163, 379, 162, 
 -	163, 380, 162, 381, 163, 162, 382, 163, 
 -	162, 163, 383, 162, 163, 365, 365, 162, 
 -	163, 385, 162, 163, 386, 162, 163, 387, 
 -	162, 163, 388, 162, 163, 389, 162, 163, 
 -	390, 162, 163, 391, 162, 163, 392, 162, 
 -	163, 393, 162, 163, 394, 162, 395, 163, 
 -	162, 396, 163, 162, 163, 364, 162, 163, 
 -	398, 162, 399, 163, 406, 410, 162, 400, 
 -	163, 162, 163, 401, 162, 163, 402, 162, 
 -	163, 403, 162, 163, 404, 162, 163, 405, 
 -	162, 163, 364, 162, 163, 407, 162, 163, 
 -	408, 162, 409, 163, 162, 178, 163, 162, 
 -	163, 411, 162, 163, 178, 162, 163, 413, 
 -	162, 163, 414, 162, 163, 415, 162, 416, 
 -	163, 162, 417, 163, 162, 163, 365, 162, 
 -	163, 419, 162, 163, 178, 162, 163, 421, 
 -	162, 163, 422, 162, 163, 423, 162, 163, 
 -	424, 162, 163, 425, 162, 163, 426, 162, 
 -	163, 427, 162, 428, 163, 162, 365, 163, 
 -	162, 163, 430, 162, 163, 431, 162, 163, 
 -	432, 162, 163, 433, 162, 163, 434, 162, 
 -	163, 435, 162, 163, 436, 162, 163, 437, 
 -	162, 163, 438, 162, 163, 439, 162, 163, 
 -	440, 162, 163, 441, 162, 163, 178, 162, 
 -	443, 0, 444, 0, 445, 0, 446, 0, 
 -	447, 0, 448, 0, 449, 0, 450, 0, 
 -	452, 451, 452, 451, 452, 452, 4, 453, 
 -	460, 469, 4, 452, 451, 452, 454, 451, 
 -	452, 455, 451, 452, 456, 451, 452, 457, 
 -	451, 452, 458, 451, 452, 459, 451, 452, 
 -	87, 451, 452, 461, 451, 462, 452, 451, 
 -	463, 452, 451, 452, 464, 451, 452, 465, 
 -	451, 452, 466, 451, 452, 467, 451, 452, 
 -	468, 451, 452, 458, 451, 452, 470, 451, 
 -	452, 471, 451, 452, 472, 451, 452, 473, 
 -	451, 452, 474, 451, 452, 475, 451, 452, 
 -	476, 451, 477, 452, 451, 459, 452, 451, 
 -	479, 482, 0, 480, 0, 481, 0, 482, 
 -	0, 483, 0, 484, 0, 485, 0, 87, 
 -	0, 487, 0, 488, 0, 489, 0, 490, 
 -	0, 491, 0, 492, 0, 493, 0, 485, 
 -	0, 109, 124, 108, 109, 496, 108, 109, 
 -	497, 108, 109, 498, 108, 109, 499, 108, 
 -	109, 500, 108, 109, 501, 108, 109, 87, 
 -	108, 109, 503, 108, 504, 109, 108, 124, 
 -	109, 108, 109, 506, 108, 507, 109, 514, 
 -	518, 108, 508, 109, 108, 109, 509, 108, 
 -	109, 510, 108, 109, 511, 108, 109, 512, 
 -	108, 109, 513, 108, 109, 500, 108, 109, 
 -	515, 108, 109, 516, 108, 517, 109, 108, 
 -	124, 109, 108, 109, 519, 108, 109, 124, 
 -	108, 109, 521, 108, 109, 522, 108, 109, 
 -	523, 108, 524, 109, 108, 525, 109, 108, 
 -	109, 501, 108, 109, 527, 108, 109, 124, 
 -	108, 109, 529, 108, 109, 530, 108, 109, 
 -	531, 108, 109, 532, 108, 109, 533, 108, 
 -	109, 534, 108, 109, 535, 108, 536, 109, 
 -	108, 501, 109, 108, 109, 538, 108, 109, 
 -	539, 108, 109, 540, 108, 109, 541, 108, 
 -	109, 542, 108, 109, 543, 108, 109, 544, 
 -	108, 109, 545, 108, 109, 546, 108, 109, 
 -	547, 108, 109, 548, 108, 109, 549, 108, 
 -	109, 124, 108, 551, 65, 64, 552, 65, 
 -	64, 553, 65, 64, 554, 65, 64, 65, 
 -	555, 64, 65, 556, 64, 65, 557, 64, 
 -	65, 558, 64, 65, 559, 64, 65, 560, 
 -	64, 65, 561, 64, 562, 65, 64, 563, 
 -	65, 64, 65, 564, 64, 65, 86, 86, 
 -	64, 65, 566, 64, 65, 567, 64, 65, 
 -	568, 64, 65, 569, 64, 65, 570, 64, 
 -	65, 571, 64, 65, 572, 64, 65, 573, 
 -	64, 65, 574, 64, 65, 575, 64, 576, 
 -	65, 64, 577, 65, 64, 65, 85, 64, 
 -	65, 579, 591, 64, 580, 65, 587, 64, 
 -	581, 65, 64, 65, 582, 64, 65, 583, 
 -	64, 65, 584, 64, 65, 585, 64, 65, 
 -	586, 64, 65, 85, 64, 65, 588, 64, 
 -	65, 589, 64, 65, 590, 64, 65, 86, 
 -	64, 592, 65, 64, 593, 65, 64, 65, 
 -	594, 64, 65, 595, 64, 65, 596, 64, 
 -	65, 597, 64, 65, 86, 64, 65, 599, 
 -	64, 65, 600, 64, 65, 601, 64, 602, 
 -	65, 64, 603, 65, 64, 65, 86, 64, 
 -	65, 605, 64, 65, 606, 64, 65, 607, 
 -	64, 65, 608, 64, 65, 609, 64, 65, 
 -	610, 64, 65, 611, 64, 612, 65, 64, 
 -	86, 65, 64, 0, 0
 -};
 -
 -static const unsigned char _lexer_trans_actions[] = {
 -	0, 54, 0, 5, 1, 0, 29, 1, 
 -	29, 29, 29, 29, 29, 29, 29, 29, 
 -	29, 29, 35, 0, 43, 0, 43, 0, 
 -	43, 54, 0, 5, 1, 0, 29, 1, 
 -	29, 29, 29, 29, 29, 29, 29, 29, 
 -	29, 29, 35, 0, 43, 0, 43, 0, 
 -	43, 139, 48, 9, 106, 11, 0, 134, 
 -	45, 45, 45, 3, 122, 33, 33, 33, 
 -	0, 122, 33, 33, 33, 0, 122, 33, 
 -	0, 33, 0, 102, 7, 7, 43, 54, 
 -	0, 0, 43, 114, 25, 0, 54, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 149, 126, 
 -	57, 110, 23, 0, 43, 43, 43, 43, 
 -	0, 27, 118, 27, 27, 51, 27, 0, 
 -	54, 0, 1, 0, 43, 0, 0, 0, 
 -	43, 149, 126, 57, 57, 57, 110, 23, 
 -	0, 0, 0, 110, 23, 0, 0, 110, 
 -	23, 0, 0, 110, 23, 0, 0, 110, 
 -	23, 0, 0, 0, 110, 23, 0, 0, 
 -	110, 23, 0, 110, 23, 0, 0, 0, 
 -	110, 23, 0, 0, 110, 23, 0, 110, 
 -	23, 0, 0, 110, 23, 0, 0, 110, 
 -	23, 0, 0, 110, 23, 0, 0, 0, 
 -	110, 23, 0, 0, 110, 23, 0, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 144, 
 -	57, 54, 0, 54, 0, 69, 33, 69, 
 -	84, 84, 84, 84, 84, 84, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	13, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 13, 0, 130, 
 -	31, 60, 57, 31, 63, 57, 63, 63, 
 -	63, 63, 63, 63, 63, 63, 63, 63, 
 -	66, 31, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 0, 43, 
 -	0, 43, 144, 57, 54, 0, 54, 0, 
 -	78, 33, 84, 78, 84, 84, 84, 84, 
 -	84, 84, 84, 84, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 19, 0, 
 -	54, 19, 0, 54, 19, 0, 0, 0, 
 -	130, 31, 60, 57, 31, 63, 57, 63, 
 -	63, 63, 63, 63, 63, 63, 63, 63, 
 -	63, 0, 0, 66, 31, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 0, 43, 0, 0, 0, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 144, 57, 
 -	54, 0, 54, 0, 72, 33, 84, 72, 
 -	84, 84, 84, 84, 84, 84, 84, 84, 
 -	84, 84, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 15, 0, 54, 15, 
 -	0, 54, 15, 0, 0, 0, 130, 31, 
 -	60, 57, 31, 63, 57, 63, 63, 63, 
 -	63, 63, 63, 63, 63, 63, 63, 0, 
 -	0, 66, 31, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 144, 57, 54, 0, 54, 0, 
 -	75, 33, 84, 75, 84, 84, 84, 84, 
 -	84, 84, 84, 84, 84, 84, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	17, 0, 54, 17, 0, 54, 17, 0, 
 -	0, 0, 130, 31, 60, 57, 31, 63, 
 -	57, 63, 63, 63, 63, 63, 63, 63, 
 -	63, 63, 63, 0, 0, 66, 31, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 17, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 0, 0, 43, 54, 37, 37, 
 -	87, 37, 37, 43, 0, 39, 0, 43, 
 -	0, 0, 54, 0, 0, 39, 0, 0, 
 -	54, 0, 93, 90, 41, 96, 90, 96, 
 -	96, 96, 96, 96, 96, 96, 96, 96, 
 -	96, 99, 0, 43, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 17, 0, 54, 0, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 0, 54, 
 -	0, 0, 54, 0, 54, 0, 0, 54, 
 -	0, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 0, 54, 0, 0, 54, 0, 54, 
 -	0, 0, 54, 0, 0, 0, 54, 0, 
 -	0, 0, 0, 0, 54, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 0, 54, 
 -	0, 0, 54, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 0, 
 -	54, 0, 0, 54, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 0, 54, 0, 0, 54, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	0, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 15, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 15, 
 -	0, 54, 0, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 0, 54, 0, 0, 54, 
 -	0, 54, 0, 0, 54, 0, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 0, 54, 
 -	0, 0, 54, 0, 54, 0, 0, 54, 
 -	0, 0, 0, 54, 0, 0, 0, 0, 
 -	54, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 0, 54, 0, 0, 54, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 0, 
 -	54, 0, 0, 54, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 0, 54, 0, 0, 54, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	144, 57, 54, 0, 54, 0, 81, 84, 
 -	84, 84, 81, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	21, 0, 54, 0, 0, 0, 54, 0, 
 -	0, 54, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 19, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 19, 
 -	0, 54, 0, 0, 0, 54, 0, 0, 
 -	54, 0, 54, 0, 0, 0, 54, 0, 
 -	0, 0, 0, 54, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 0, 54, 0, 
 -	0, 54, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 0, 54, 0, 0, 54, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 0, 54, 
 -	0, 0, 54, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 0, 54, 0, 0, 
 -	54, 0, 54, 0, 0, 54, 0, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 0, 
 -	54, 0, 0, 54, 0, 54, 0, 0, 
 -	54, 0, 0, 0, 0, 54, 0, 0, 
 -	0, 54, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 0, 54, 0, 0, 54, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 0, 
 -	54, 0, 0, 54, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 0
 -};
 -
 -static const unsigned char _lexer_eof_actions[] = {
 -	0, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43
 -};
 -
 -static const int lexer_start = 1;
 -static const int lexer_first_final = 613;
 -static const int lexer_error = 0;
 -
 -static const int lexer_en_main = 1;
 -
 -
 -#line 258 "ragel/i18n/sk.c.rl"
 -
 -static VALUE 
 -unindent(VALUE con, int start_col)
 -{
 -  VALUE re;
 -  /* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */
 -  char pat[32]; 
 -  snprintf(pat, 32, "^[\t ]{0,%d}", start_col); 
 -  re = rb_reg_regcomp(rb_str_new2(pat));
 -  rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2(""));
 -
 -  return Qnil;
 -
 -}
 -
 -static void 
 -store_kw_con(VALUE listener, const char * event_name, 
 -             const char * keyword_at, size_t keyword_length, 
 -             const char * at,         size_t length, 
 -             int current_line)
 -{
 -  VALUE con = Qnil, kw = Qnil;
 -  kw = ENCODED_STR_NEW(keyword_at, keyword_length);
 -  con = ENCODED_STR_NEW(at, length);
 -  rb_funcall(con, rb_intern("strip!"), 0);
 -  rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); 
 -}
 -
 -static void
 -store_multiline_kw_con(VALUE listener, const char * event_name,
 -                      const char * keyword_at, size_t keyword_length,
 -                      const char * at,         size_t length,
 -                      int current_line, int start_col)
 -{
 -  VALUE split;
 -  VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil;
 -
 -  kw = ENCODED_STR_NEW(keyword_at, keyword_length);
 -  con = ENCODED_STR_NEW(at, length);
 -
 -  unindent(con, start_col);
 -  
 -  split = rb_str_split(con, "\n");
 -
 -  name = rb_funcall(split, rb_intern("shift"), 0);
 -  desc = rb_ary_join(split, rb_str_new2( "\n" ));
 -
 -  if( name == Qnil ) 
 -  {
 -    name = rb_str_new2("");
 -  }
 -  if( rb_funcall(desc, rb_intern("size"), 0) == 0) 
 -  {
 -    desc = rb_str_new2("");
 -  }
 -  rb_funcall(name, rb_intern("strip!"), 0);
 -  rb_funcall(desc, rb_intern("rstrip!"), 0);
 -  rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); 
 -}
 -
 -static void 
 -store_attr(VALUE listener, const char * attr_type,
 -           const char * at, size_t length, 
 -           int line)
 -{
 -  VALUE val = ENCODED_STR_NEW(at, length);
 -  rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line));
 -}
 -static void 
 -store_docstring_content(VALUE listener, 
 -          int start_col, 
 -          const char *type_at, size_t type_length,
 -          const char *at, size_t length, 
 -          int current_line)
 -{
 -  VALUE re2;
 -  VALUE unescape_escaped_quotes;
 -  VALUE con = ENCODED_STR_NEW(at, length);
 -  VALUE con_type = ENCODED_STR_NEW(type_at, type_length);
 -
 -  unindent(con, start_col);
 -
 -  re2 = rb_reg_regcomp(rb_str_new2("\r\\Z"));
 -  unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\""));
 -  rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2(""));
 -  rb_funcall(con_type, rb_intern("strip!"), 0);
 -  rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\""));
 -  rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line));
 -}
 -static void 
 -raise_lexer_error(const char * at, int line)
 -{ 
 -  rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at);
 -}
 -
 -static void lexer_init(lexer_state *lexer) {
 -  lexer->content_start = 0;
 -  lexer->content_end = 0;
 -  lexer->content_len = 0;
 -  lexer->docstring_content_type_start = 0;
 -  lexer->docstring_content_type_end = 0;
 -  lexer->mark = 0;
 -  lexer->keyword_start = 0;
 -  lexer->keyword_end = 0;
 -  lexer->next_keyword_start = 0;
 -  lexer->line_number = 1;
 -  lexer->last_newline = 0;
 -  lexer->final_newline = 0;
 -  lexer->start_col = 0;
 -}
 -
 -static VALUE CLexer_alloc(VALUE klass)
 -{
 -  VALUE obj;
 -  lexer_state *lxr = ALLOC(lexer_state);
 -  lexer_init(lxr);
 -
 -  obj = Data_Wrap_Struct(klass, NULL, -1, lxr);
 -
 -  return obj;
 -}
 -
 -static VALUE CLexer_init(VALUE self, VALUE listener)
 -{
 -  lexer_state *lxr; 
 -  rb_iv_set(self, "@listener", listener);
 -  
 -  lxr = NULL;
 -  DATA_GET(self, lexer_state, lxr);
 -  lexer_init(lxr);
 -  
 -  return self;
 -}
 -
 -static VALUE CLexer_scan(VALUE self, VALUE input)
 -{
 -  VALUE input_copy;
 -  char *data;
 -  size_t len;
 -  VALUE listener = rb_iv_get(self, "@listener");
 -
 -  lexer_state *lexer;
 -  lexer = NULL;
 -  DATA_GET(self, lexer_state, lexer);
 -
 -  input_copy = rb_str_dup(input);
 -
 -  rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%"));
 -  data = RSTRING_PTR(input_copy);
 -  len = RSTRING_LEN(input_copy);
 -  
 -  if (len == 0) { 
 -    rb_raise(rb_eGherkinLexingError, "No content to lex.");
 -  } else {
 -
 -    const char *p, *pe, *eof;
 -    int cs = 0;
 -    
 -    VALUE current_row = Qnil;
 -
 -    p = data;
 -    pe = data + len;
 -    eof = pe;
 -    
 -    assert(*pe == '\0' && "pointer does not end on NULL");
 -    
 -    
 -#line 1343 "ext/gherkin_lexer_sk/gherkin_lexer_sk.c"
 -	{
 -	cs = lexer_start;
 -	}
 -
 -#line 425 "ragel/i18n/sk.c.rl"
 -    
 -#line 1350 "ext/gherkin_lexer_sk/gherkin_lexer_sk.c"
 -	{
 -	int _klen;
 -	unsigned int _trans;
 -	const char *_acts;
 -	unsigned int _nacts;
 -	const char *_keys;
 -
 -	if ( p == pe )
 -		goto _test_eof;
 -	if ( cs == 0 )
 -		goto _out;
 -_resume:
 -	_keys = _lexer_trans_keys + _lexer_key_offsets[cs];
 -	_trans = _lexer_index_offsets[cs];
 -
 -	_klen = _lexer_single_lengths[cs];
 -	if ( _klen > 0 ) {
 -		const char *_lower = _keys;
 -		const char *_mid;
 -		const char *_upper = _keys + _klen - 1;
 -		while (1) {
 -			if ( _upper < _lower )
 -				break;
 -
 -			_mid = _lower + ((_upper-_lower) >> 1);
 -			if ( (*p) < *_mid )
 -				_upper = _mid - 1;
 -			else if ( (*p) > *_mid )
 -				_lower = _mid + 1;
 -			else {
 -				_trans += (unsigned int)(_mid - _keys);
 -				goto _match;
 -			}
 -		}
 -		_keys += _klen;
 -		_trans += _klen;
 -	}
 -
 -	_klen = _lexer_range_lengths[cs];
 -	if ( _klen > 0 ) {
 -		const char *_lower = _keys;
 -		const char *_mid;
 -		const char *_upper = _keys + (_klen<<1) - 2;
 -		while (1) {
 -			if ( _upper < _lower )
 -				break;
 -
 -			_mid = _lower + (((_upper-_lower) >> 1) & ~1);
 -			if ( (*p) < _mid[0] )
 -				_upper = _mid - 2;
 -			else if ( (*p) > _mid[1] )
 -				_lower = _mid + 2;
 -			else {
 -				_trans += (unsigned int)((_mid - _keys)>>1);
 -				goto _match;
 -			}
 -		}
 -		_trans += _klen;
 -	}
 -
 -_match:
 -	cs = _lexer_trans_targs[_trans];
 -
 -	if ( _lexer_trans_actions[_trans] == 0 )
 -		goto _again;
 -
 -	_acts = _lexer_actions + _lexer_trans_actions[_trans];
 -	_nacts = (unsigned int) *_acts++;
 -	while ( _nacts-- > 0 )
 -	{
 -		switch ( *_acts++ )
 -		{
 -	case 0:
 -#line 83 "ragel/i18n/sk.c.rl"
 -	{
 -		MARK(content_start, p);
 -    lexer->current_line = lexer->line_number;
 -    lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2;
 -  }
 -	break;
 -	case 1:
 -#line 89 "ragel/i18n/sk.c.rl"
 -	{
 -    MARK(content_start, p);
 -  }
 -	break;
 -	case 2:
 -#line 93 "ragel/i18n/sk.c.rl"
 -	{
 -    lexer->current_line = lexer->line_number;
 -    lexer->start_col = p - data - lexer->last_newline;
 -  }
 -	break;
 -	case 3:
 -#line 98 "ragel/i18n/sk.c.rl"
 -	{
 -    int len = LEN(content_start, PTR_TO(final_newline));
 -    int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end));
 -
 -    if (len < 0) len = 0;
 -    if (type_len < 0) len = 0;
 -
 -    store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line);
 -  }
 -	break;
 -	case 4:
 -#line 108 "ragel/i18n/sk.c.rl"
 -	{ 
 -    MARK(docstring_content_type_start, p);
 -  }
 -	break;
 -	case 5:
 -#line 112 "ragel/i18n/sk.c.rl"
 -	{ 
 -    MARK(docstring_content_type_end, p);
 -  }
 -	break;
 -	case 6:
 -#line 116 "ragel/i18n/sk.c.rl"
 -	{
 -    STORE_KW_END_CON(feature);
 -  }
 -	break;
 -	case 7:
 -#line 120 "ragel/i18n/sk.c.rl"
 -	{
 -    STORE_KW_END_CON(background);
 -  }
 -	break;
 -	case 8:
 -#line 124 "ragel/i18n/sk.c.rl"
 -	{
 -    STORE_KW_END_CON(scenario);
 -  }
 -	break;
 -	case 9:
 -#line 128 "ragel/i18n/sk.c.rl"
 -	{
 -    STORE_KW_END_CON(scenario_outline);
 -  }
 -	break;
 -	case 10:
 -#line 132 "ragel/i18n/sk.c.rl"
 -	{
 -    STORE_KW_END_CON(examples);
 -  }
 -	break;
 -	case 11:
 -#line 136 "ragel/i18n/sk.c.rl"
 -	{
 -    store_kw_con(listener, "step",
 -      PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
 -      PTR_TO(content_start), LEN(content_start, p), 
 -      lexer->current_line);
 -  }
 -	break;
 -	case 12:
 -#line 143 "ragel/i18n/sk.c.rl"
 -	{
 -    STORE_ATTR(comment);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 13:
 -#line 148 "ragel/i18n/sk.c.rl"
 -	{
 -    STORE_ATTR(tag);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 14:
 -#line 153 "ragel/i18n/sk.c.rl"
 -	{
 -    lexer->line_number += 1;
 -    MARK(final_newline, p);
 -  }
 -	break;
 -	case 15:
 -#line 158 "ragel/i18n/sk.c.rl"
 -	{
 -    MARK(last_newline, p + 1);
 -  }
 -	break;
 -	case 16:
 -#line 162 "ragel/i18n/sk.c.rl"
 -	{
 -    if (lexer->mark == 0) {
 -      MARK(mark, p);
 -    }
 -  }
 -	break;
 -	case 17:
 -#line 168 "ragel/i18n/sk.c.rl"
 -	{
 -    MARK(keyword_end, p);
 -    MARK(keyword_start, PTR_TO(mark));
 -    MARK(content_start, p + 1);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 18:
 -#line 175 "ragel/i18n/sk.c.rl"
 -	{
 -    MARK(content_end, p);
 -  }
 -	break;
 -	case 19:
 -#line 179 "ragel/i18n/sk.c.rl"
 -	{
 -    p = p - 1;
 -    lexer->current_line = lexer->line_number;
 -    current_row = rb_ary_new();
 -  }
 -	break;
 -	case 20:
 -#line 185 "ragel/i18n/sk.c.rl"
 -	{
 -		MARK(content_start, p);
 -  }
 -	break;
 -	case 21:
 -#line 189 "ragel/i18n/sk.c.rl"
 -	{
 -    VALUE re_pipe, re_newline, re_backslash;
 -    VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
 -    rb_funcall(con, rb_intern("strip!"), 0);
 -    re_pipe      = rb_reg_regcomp(rb_str_new2("\\\\\\|"));
 -    re_newline   = rb_reg_regcomp(rb_str_new2("\\\\n"));
 -    re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_pipe,      rb_str_new2("|"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_newline,   rb_str_new2("\n"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\"));
 -
 -    rb_ary_push(current_row, con);
 -  }
 -	break;
 -	case 22:
 -#line 203 "ragel/i18n/sk.c.rl"
 -	{
 -    rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
 -  }
 -	break;
 -	case 23:
 -#line 207 "ragel/i18n/sk.c.rl"
 -	{
 -    int line;
 -    if (cs < lexer_first_final) {
 -      size_t count = 0;
 -      VALUE newstr_val;
 -      char *newstr;
 -      int newstr_count = 0;        
 -      size_t len;
 -      const char *buff;
 -      if (lexer->last_newline != 0) {
 -        len = LEN(last_newline, eof);
 -        buff = PTR_TO(last_newline);
 -      } else {
 -        len = strlen(data);
 -        buff = data;
 -      }
 -
 -      /* Allocate as a ruby string so that it gets cleaned up by GC */
 -      newstr_val = rb_str_new(buff, len);
 -      newstr = RSTRING_PTR(newstr_val);
 -
 -
 -      for (count = 0; count < len; count++) {
 -        if(buff[count] == 10) {
 -          newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
 -          break;
 -        } else {
 -          if (buff[count] == '%') {
 -            newstr[newstr_count++] = buff[count];
 -            newstr[newstr_count] = buff[count];
 -          } else {
 -            newstr[newstr_count] = buff[count];
 -          }
 -        }
 -        newstr_count++;
 -      }
 -
 -      line = lexer->line_number;
 -      lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
 -      raise_lexer_error(newstr, line);
 -    } else {
 -      rb_funcall(listener, rb_intern("eof"), 0);
 -    }
 -  }
 -	break;
 -#line 1640 "ext/gherkin_lexer_sk/gherkin_lexer_sk.c"
 -		}
 -	}
 -
 -_again:
 -	if ( cs == 0 )
 -		goto _out;
 -	if ( ++p != pe )
 -		goto _resume;
 -	_test_eof: {}
 -	if ( p == eof )
 -	{
 -	const char *__acts = _lexer_actions + _lexer_eof_actions[cs];
 -	unsigned int __nacts = (unsigned int) *__acts++;
 -	while ( __nacts-- > 0 ) {
 -		switch ( *__acts++ ) {
 -	case 23:
 -#line 207 "ragel/i18n/sk.c.rl"
 -	{
 -    int line;
 -    if (cs < lexer_first_final) {
 -      size_t count = 0;
 -      VALUE newstr_val;
 -      char *newstr;
 -      int newstr_count = 0;        
 -      size_t len;
 -      const char *buff;
 -      if (lexer->last_newline != 0) {
 -        len = LEN(last_newline, eof);
 -        buff = PTR_TO(last_newline);
 -      } else {
 -        len = strlen(data);
 -        buff = data;
 -      }
 -
 -      /* Allocate as a ruby string so that it gets cleaned up by GC */
 -      newstr_val = rb_str_new(buff, len);
 -      newstr = RSTRING_PTR(newstr_val);
 -
 -
 -      for (count = 0; count < len; count++) {
 -        if(buff[count] == 10) {
 -          newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
 -          break;
 -        } else {
 -          if (buff[count] == '%') {
 -            newstr[newstr_count++] = buff[count];
 -            newstr[newstr_count] = buff[count];
 -          } else {
 -            newstr[newstr_count] = buff[count];
 -          }
 -        }
 -        newstr_count++;
 -      }
 -
 -      line = lexer->line_number;
 -      lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
 -      raise_lexer_error(newstr, line);
 -    } else {
 -      rb_funcall(listener, rb_intern("eof"), 0);
 -    }
 -  }
 -	break;
 -#line 1703 "ext/gherkin_lexer_sk/gherkin_lexer_sk.c"
 -		}
 -	}
 -	}
 -
 -	_out: {}
 -	}
 -
 -#line 426 "ragel/i18n/sk.c.rl"
 -
 -    assert(p <= pe && "data overflow after parsing execute");
 -    assert(lexer->content_start <= len && "content starts after data end");
 -    assert(lexer->mark < len && "mark is after data end");
 -    
 -    /* Reset lexer by re-initializing the whole thing */
 -    lexer_init(lexer);
 -
 -    if (cs == lexer_error) {
 -      rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails.");
 -    } else {
 -      return Qtrue;
 -    }
 -  }
 -}
 -
 -void Init_gherkin_lexer_sk()
 -{
 -  mGherkin = rb_define_module("Gherkin");
 -  mGherkinLexer = rb_define_module_under(mGherkin, "Lexer");
 -  rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError"));
 -
 -  mCLexer = rb_define_module_under(mGherkin, "CLexer");
 -  cI18nLexer = rb_define_class_under(mCLexer, "Sk", rb_cObject);
 -  rb_define_alloc_func(cI18nLexer, CLexer_alloc);
 -  rb_define_method(cI18nLexer, "initialize", CLexer_init, 1);
 -  rb_define_method(cI18nLexer, "scan", CLexer_scan, 1);
 -}
 -
diff --cc ext/gherkin_lexer_sr_cyrl/extconf.rb
index dacc158,dacc158..0000000
deleted file mode 100644,100644
--- a/ext/gherkin_lexer_sr_cyrl/extconf.rb
+++ /dev/null
@@@ -1,6 -1,6 +1,0 @@@
--require 'mkmf'
--CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags']
--$CFLAGS << ' -O0 -Wall' if CONFIG['CC'] =~ /gcc|clang/
--dir_config("gherkin_lexer_sr_cyrl")
--have_library("c", "main")
--create_makefile("gherkin_lexer_sr_cyrl")
diff --cc ext/gherkin_lexer_sr_cyrl/gherkin_lexer_sr_cyrl.c
index 9edc1e4,76a7541..0000000
deleted file mode 100644,100644
--- a/ext/gherkin_lexer_sr_cyrl/gherkin_lexer_sr_cyrl.c
+++ /dev/null
@@@ -1,2112 -1,2112 +1,0 @@@
--
- #line 1 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
- #include <assert.h>
- #include <ruby.h>
- 
- #if defined(_WIN32)
- #include <stddef.h>
- #endif
- 
- #ifdef HAVE_RUBY_RE_H
- #include <ruby/re.h>
- #else
- #include <re.h>
- #endif
- 
- #ifdef HAVE_RUBY_ENCODING_H
- #include <ruby/encoding.h>
- #define ENCODED_STR_NEW(ptr, len) \
-     rb_enc_str_new(ptr, len, rb_utf8_encoding())
- #else
- #define ENCODED_STR_NEW(ptr, len) \
-     rb_str_new(ptr, len)
- #endif
- 
- #ifndef RSTRING_PTR
- #define RSTRING_PTR(s) (RSTRING(s)->ptr)
- #endif
- 
- #ifndef RSTRING_LEN
- #define RSTRING_LEN(s) (RSTRING(s)->len)
- #endif
- 
- #define DATA_GET(FROM, TYPE, NAME) \
-   Data_Get_Struct(FROM, TYPE, NAME); \
-   if (NAME == NULL) { \
-     rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \
-   }
-  
- typedef struct lexer_state {
-   int content_len;
-   int line_number;
-   int current_line;
-   int start_col;
-   size_t mark;
-   size_t keyword_start;
-   size_t keyword_end;
-   size_t next_keyword_start;
-   size_t content_start;
-   size_t content_end;
-   size_t docstring_content_type_start;
-   size_t docstring_content_type_end;
-   size_t query_start;
-   size_t last_newline;
-   size_t final_newline;
- } lexer_state;
- 
- static VALUE mGherkin;
- static VALUE mGherkinLexer;
- static VALUE mCLexer;
- static VALUE cI18nLexer;
- static VALUE rb_eGherkinLexingError;
- 
- #define LEN(AT, P) (P - data - lexer->AT)
- #define MARK(M, P) (lexer->M = (P) - data)
- #define PTR_TO(P) (data + lexer->P)
- 
- #define STORE_KW_END_CON(EVENT) \
-   store_multiline_kw_con(listener, # EVENT, \
-     PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \
-     PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \
-     lexer->current_line, lexer->start_col); \
-     if (lexer->content_end != 0) { \
-       p = PTR_TO(content_end - 1); \
-     } \
-     lexer->content_end = 0
- 
- #define STORE_ATTR(ATTR) \
-     store_attr(listener, # ATTR, \
-       PTR_TO(content_start), LEN(content_start, p), \
-       lexer->line_number)
- 
- 
- #line 254 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
- 
- 
- /** Data **/
- 
- #line 89 "ext/gherkin_lexer_sr_cyrl/gherkin_lexer_sr_cyrl.c"
- static const char _lexer_actions[] = {
- 	0, 1, 0, 1, 1, 1, 2, 1, 
- 	3, 1, 4, 1, 5, 1, 6, 1, 
- 	7, 1, 8, 1, 9, 1, 10, 1, 
- 	11, 1, 12, 1, 13, 1, 16, 1, 
- 	17, 1, 18, 1, 19, 1, 20, 1, 
- 	21, 1, 22, 1, 23, 2, 1, 18, 
- 	2, 4, 5, 2, 13, 0, 2, 14, 
- 	15, 2, 17, 0, 2, 17, 2, 2, 
- 	17, 16, 2, 17, 19, 2, 18, 6, 
- 	2, 18, 7, 2, 18, 8, 2, 18, 
- 	9, 2, 18, 10, 2, 18, 16, 2, 
- 	20, 21, 2, 22, 0, 2, 22, 2, 
- 	2, 22, 16, 2, 22, 19, 3, 3, 
- 	14, 15, 3, 5, 14, 15, 3, 11, 
- 	14, 15, 3, 12, 14, 15, 3, 13, 
- 	14, 15, 3, 14, 15, 18, 3, 17, 
- 	0, 11, 3, 17, 14, 15, 4, 1, 
- 	14, 15, 18, 4, 4, 5, 14, 15, 
- 	4, 17, 0, 14, 15, 5, 17, 0, 
- 	11, 14, 15
- };
- 
- static const short _lexer_key_offsets[] = {
- 	0, 0, 12, 21, 22, 23, 24, 25, 
- 	26, 28, 30, 41, 42, 43, 45, 47, 
- 	52, 57, 62, 67, 71, 75, 77, 78, 
- 	79, 80, 81, 82, 83, 84, 85, 86, 
- 	87, 88, 89, 90, 91, 92, 97, 104, 
- 	109, 113, 119, 122, 124, 130, 141, 142, 
- 	143, 144, 145, 146, 147, 148, 149, 150, 
- 	153, 154, 156, 157, 158, 160, 161, 162, 
- 	163, 164, 166, 167, 168, 169, 170, 171, 
- 	172, 173, 174, 175, 176, 177, 186, 196, 
- 	198, 200, 202, 204, 206, 217, 219, 221, 
- 	223, 225, 227, 229, 231, 233, 235, 239, 
- 	241, 244, 246, 248, 251, 253, 255, 257, 
- 	259, 261, 263, 265, 267, 269, 271, 273, 
- 	275, 277, 279, 281, 283, 285, 287, 289, 
- 	291, 293, 295, 297, 299, 301, 303, 306, 
- 	308, 310, 312, 314, 316, 318, 320, 322, 
- 	324, 326, 328, 330, 332, 334, 336, 338, 
- 	340, 342, 344, 346, 348, 350, 352, 354, 
- 	356, 359, 361, 363, 365, 367, 369, 372, 
- 	374, 376, 378, 380, 382, 384, 386, 388, 
- 	390, 392, 394, 396, 398, 400, 402, 404, 
- 	406, 408, 410, 412, 414, 416, 418, 420, 
- 	422, 424, 426, 428, 430, 432, 434, 436, 
- 	438, 440, 442, 444, 446, 448, 450, 452, 
- 	454, 456, 458, 460, 462, 464, 466, 468, 
- 	470, 472, 474, 476, 478, 480, 482, 484, 
- 	486, 488, 490, 492, 494, 496, 498, 500, 
- 	502, 504, 506, 508, 510, 512, 514, 516, 
- 	518, 520, 522, 523, 524, 525, 526, 527, 
- 	528, 529, 530, 531, 540, 550, 552, 554, 
- 	556, 558, 560, 562, 564, 566, 568, 570, 
- 	572, 574, 576, 578, 582, 584, 586, 588, 
- 	590, 593, 595, 597, 599, 601, 603, 605, 
- 	607, 609, 611, 613, 615, 617, 619, 621, 
- 	623, 625, 627, 629, 632, 634, 636, 638, 
- 	640, 642, 644, 646, 648, 650, 652, 654, 
- 	656, 658, 660, 662, 664, 666, 668, 670, 
- 	672, 674, 676, 678, 680, 682, 684, 686, 
- 	688, 690, 692, 694, 696, 698, 700, 702, 
- 	704, 706, 708, 710, 712, 714, 716, 718, 
- 	720, 722, 724, 726, 728, 730, 732, 734, 
- 	736, 738, 740, 742, 744, 746, 748, 750, 
- 	752, 754, 756, 758, 760, 762, 764, 766, 
- 	768, 770, 772, 774, 775, 776, 777, 778, 
- 	779, 780, 781, 782, 783, 784, 785, 786, 
- 	787, 788, 789, 790, 791, 792, 793, 801, 
- 	808, 810, 812, 814, 816, 818, 821, 823, 
- 	825, 827, 829, 831, 833, 835, 837, 839, 
- 	841, 843, 845, 847, 849, 851, 853, 855, 
- 	857, 859, 861, 863, 865, 867, 869, 871, 
- 	873, 875, 877, 880, 882, 884, 886, 888, 
- 	890, 892, 894, 896, 898, 900, 902, 904, 
- 	907, 909, 911, 913, 915, 917, 919, 921, 
- 	923, 925, 927, 929, 931, 933, 935, 937, 
- 	939, 942, 944, 947, 949, 951, 953, 955, 
- 	957, 960, 962, 964, 966, 968, 970, 972, 
- 	974, 976, 978, 980, 982, 984, 986, 988, 
- 	990, 992, 994, 996, 998, 1000, 1002, 1004, 
- 	1006, 1008, 1010, 1012, 1014, 1016, 1018, 1020, 
- 	1022, 1024, 1026, 1028, 1030, 1032, 1034, 1036, 
- 	1038, 1040, 1042, 1045, 1047, 1049, 1051, 1053, 
- 	1055, 1057, 1059, 1061, 1063, 1065, 1067, 1069, 
- 	1071, 1073, 1075, 1077, 1079, 1081, 1083, 1085, 
- 	1087, 1089, 1091, 1093, 1095, 1097, 1099, 1101, 
- 	1103, 1105, 1107, 1109, 1111, 1113, 1115, 1117, 
- 	1118, 1119, 1120, 1121, 1122, 1123, 1125, 1126, 
- 	1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 
- 	1135, 1136, 1137, 1138, 1139, 1141, 1142, 1143, 
- 	1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 
- 	1152, 1153, 1154, 1155, 1156, 1157, 1158, 1159, 
- 	1160, 1161, 1163, 1164, 1165, 1166, 1167, 1174, 
- 	1178, 1180, 1182, 1184, 1186, 1188, 1190, 1192, 
- 	1194, 1196, 1198, 1200, 1202, 1204, 1206, 1208, 
- 	1210, 1212, 1214, 1216, 1218, 1220, 1222, 1224, 
- 	1226, 1228, 1230, 1232, 1234, 1236, 1238, 1240, 
- 	1242, 1244, 1246, 1248, 1250, 1252, 1254, 1256, 
- 	1258, 1260, 1262, 1264, 1266, 1268, 1270, 1272, 
- 	1273, 1274, 1283, 1293, 1295, 1297, 1299, 1301, 
- 	1303, 1305, 1307, 1309, 1311, 1313, 1315, 1317, 
- 	1319, 1321, 1325, 1327, 1330, 1332, 1334, 1337, 
- 	1339, 1341, 1343, 1345, 1348, 1350, 1352, 1354, 
- 	1356, 1358, 1360, 1362, 1364, 1366, 1368, 1370, 
- 	1372, 1374, 1376, 1378, 1380, 1382, 1384, 1386, 
- 	1388, 1390, 1392, 1394, 1396, 1398, 1401, 1403, 
- 	1405, 1407, 1409, 1411, 1413, 1416, 1418, 1420, 
- 	1422, 1424, 1426, 1428, 1430, 1432, 1434, 1436, 
- 	1438, 1440, 1443, 1445, 1447, 1449, 1451, 1453, 
- 	1455, 1457, 1459, 1461, 1463, 1465, 1467, 1469, 
- 	1471, 1473, 1475, 1478, 1480, 1482, 1484, 1486, 
- 	1488, 1491, 1493, 1495, 1497, 1499, 1501, 1503, 
- 	1505, 1507, 1509, 1511, 1513, 1515, 1517, 1519, 
- 	1521, 1523, 1525, 1527, 1529, 1531, 1533, 1535, 
- 	1537, 1539, 1541, 1543, 1545, 1547, 1549, 1551, 
- 	1553, 1555, 1557, 1559, 1561, 1563, 1565, 1567, 
- 	1569, 1571, 1573, 1575, 1577, 1579, 1581, 1583, 
- 	1585, 1587, 1589, 1591, 1593, 1595, 1597, 1599, 
- 	1601, 1603, 1605, 1607, 1609, 1611, 1613, 1615, 
- 	1617, 1619, 1621, 1623, 1625, 1627, 1629, 1631, 
- 	1633, 1635, 1637, 1639, 1641, 1643, 1644, 1645, 
- 	1646, 1647, 1648, 1649, 1650, 1652, 1653, 1654, 
- 	1655, 1656, 1657, 1658, 1659, 1660, 1661, 1662, 
- 	1663, 1664, 1665, 1666, 1667, 1668, 1669, 1670, 
- 	1671, 1672, 1673, 1674, 1675, 1676, 1677, 1678, 
- 	1679, 1680, 1681, 1682, 1683, 1684, 1685, 1686, 
- 	1687, 1688, 1689, 1690, 1691, 1692, 1693, 1695, 
- 	1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703, 
- 	1704, 1705, 1706, 1707, 1708, 1709, 1710, 1711, 
- 	1712, 1713, 1714, 1715, 1716, 1717, 1718, 1719
- };
- 
- static const char _lexer_trans_keys[] = {
- 	-48, -17, 10, 32, 34, 35, 37, 42, 
- 	64, 124, 9, 13, -112, -105, -104, -102, 
- 	-100, -98, -97, -95, -92, -48, -69, -48, 
- 	-72, 32, 10, 13, 10, 13, -48, 10, 
- 	32, 34, 35, 37, 42, 64, 124, 9, 
- 	13, 34, 34, 10, 13, 10, 13, 10, 
- 	32, 34, 9, 13, 10, 32, 34, 9, 
- 	13, 10, 32, 34, 9, 13, 10, 32, 
- 	34, 9, 13, 10, 32, 9, 13, 10, 
- 	32, 9, 13, 10, 13, 10, 95, 70, 
- 	69, 65, 84, 85, 82, 69, 95, 69, 
- 	78, 68, 95, 37, 13, 32, 64, 9, 
- 	10, 9, 10, 13, 32, 64, 11, 12, 
- 	10, 32, 64, 9, 13, 32, 124, 9, 
- 	13, 10, 32, 92, 124, 9, 13, 10, 
- 	92, 124, 10, 92, 10, 32, 92, 124, 
- 	9, 13, -48, 10, 32, 34, 35, 37, 
- 	42, 64, 124, 9, 13, -48, -80, -48, 
- 	-76, -48, -80, -47, -126, -48, -75, -72, 
- 	-66, -48, -80, -66, -48, -76, -48, 32, 
- 	-80, -48, -67, -47, -126, -122, -48, -75, 
- 	-48, -70, -47, -127, -47, -126, 58, 10, 
- 	10, -48, 10, 32, 35, 37, 42, 64, 
- 	9, 13, -112, -105, -104, -102, -100, -98, 
- 	-97, -95, -92, 10, -48, 10, -69, 10, 
- 	-48, 10, -72, 10, 10, 32, -48, 10, 
- 	32, 34, 35, 37, 42, 64, 124, 9, 
- 	13, -48, 10, -80, 10, -48, 10, -76, 
- 	10, -48, 10, -80, 10, -47, 10, -126, 
- 	10, -48, 10, -75, -72, -66, 10, -48, 
- 	10, -80, -66, 10, -48, 10, -76, 10, 
- 	-48, 10, 32, -80, 10, -48, 10, -67, 
- 	10, -47, 10, -122, 10, -48, 10, -75, 
- 	10, -48, 10, -65, 10, -47, 10, -126, 
- 	10, 10, 58, -48, 10, -66, 10, -48, 
- 	10, -77, 10, -47, 10, -125, 10, -47, 
- 	10, -101, 10, -48, 10, -67, 10, -48, 
- 	10, -66, 10, -47, 10, -127, 10, -48, 
- 	-47, 10, -67, 10, -48, 10, -76, 10, 
- 	-48, 10, -127, 10, -48, 10, -66, 10, 
- 	-48, 10, -79, 10, -48, 10, -72, 10, 
- 	-48, 10, -67, 10, -48, 10, -80, 10, 
- 	-47, 10, -128, 10, -48, 10, -72, 10, 
- 	-48, 10, -68, 10, -48, 10, -75, 10, 
- 	-47, 10, -128, 10, -48, -47, 10, -70, 
- 	10, -48, 10, -72, 10, -47, 10, -122, 
- 	10, -126, -122, 10, -47, 10, -128, 10, 
- 	-47, 10, -125, 10, -48, 10, -70, 10, 
- 	-47, 10, -126, 10, -47, 10, -125, 10, 
- 	-47, 10, -128, 10, -48, 10, -80, 10, 
- 	10, 32, -47, 10, -127, 10, -47, 10, 
- 	-122, 10, -48, 10, -75, 10, -48, 10, 
- 	-67, 10, -48, 10, -80, 10, -47, 10, 
- 	-128, 10, -48, 10, -72, 10, -47, 10, 
- 	-104, 10, -48, 10, -75, 10, -48, 10, 
- 	-67, 10, -48, 10, -80, 10, -47, 10, 
- 	-128, 10, -48, 10, -72, 10, -48, 10, 
- 	-66, 10, -47, 10, -125, 10, -48, 10, 
- 	-67, 10, -48, 10, -70, 10, -47, 10, 
- 	-122, 10, -48, 10, -72, 10, -48, 10, 
- 	-66, 10, -48, 10, -67, 10, -48, 10, 
- 	-80, 10, -48, 10, -69, 10, 10, 95, 
- 	10, 70, 10, 69, 10, 65, 10, 84, 
- 	10, 85, 10, 82, 10, 69, 10, 95, 
- 	10, 69, 10, 78, 10, 68, 10, 95, 
- 	10, 37, -48, -75, -48, -65, -47, -126, 
- 	58, 10, 10, -48, 10, 32, 35, 37, 
- 	42, 64, 9, 13, -112, -105, -104, -102, 
- 	-100, -98, -97, -95, -92, 10, -48, 10, 
- 	-69, 10, -48, 10, -72, 10, 10, 32, 
- 	-48, 10, -80, 10, -48, 10, -76, 10, 
- 	-48, 10, -80, 10, -47, 10, -126, 10, 
- 	-48, 10, -75, -72, -66, 10, -48, 10, 
- 	-80, 10, -48, 10, -76, 10, -48, 10, 
- 	32, -80, 10, -48, 10, -66, 10, -48, 
- 	10, -77, 10, -47, 10, -125, 10, -47, 
- 	10, -101, 10, -48, 10, -67, 10, -48, 
- 	10, -66, 10, -47, 10, -127, 10, -47, 
- 	10, -126, 10, 10, 58, -48, -47, 10, 
- 	-67, 10, -48, 10, -76, 10, -48, 10, 
- 	-127, 10, -48, 10, -66, 10, -48, 10, 
- 	-79, 10, -48, 10, -72, 10, -48, 10, 
- 	-67, 10, -48, 10, -80, 10, -47, 10, 
- 	-128, 10, -48, 10, -72, 10, -48, 10, 
- 	-68, 10, -48, 10, -75, 10, -47, 10, 
- 	-128, 10, -47, 10, -122, 10, -48, 10, 
- 	-75, 10, -48, 10, -67, 10, -48, 10, 
- 	-80, 10, -47, 10, -128, 10, -48, 10, 
- 	-72, 10, -48, 10, -66, 10, -47, 10, 
- 	-125, 10, -48, 10, -67, 10, -48, 10, 
- 	-70, 10, -47, 10, -122, 10, -48, 10, 
- 	-72, 10, -48, 10, -66, 10, -48, 10, 
- 	-67, 10, -48, 10, -80, 10, -48, 10, 
- 	-69, 10, 10, 95, 10, 70, 10, 69, 
- 	10, 65, 10, 84, 10, 85, 10, 82, 
- 	10, 69, 10, 95, 10, 69, 10, 78, 
- 	10, 68, 10, 95, 10, 37, -48, -66, 
- 	-48, -77, -47, -125, -47, -101, -48, -67, 
- 	-48, -66, -47, -127, -47, -126, 58, 10, 
- 	10, -48, 10, 32, 35, 37, 64, 9, 
- 	13, -102, -100, -98, -97, -95, -92, 10, 
- 	-48, 10, -66, 10, -48, 10, -67, 10, 
- 	-47, 10, -126, -122, 10, -48, 10, -75, 
- 	10, -48, 10, -70, 10, -47, 10, -127, 
- 	10, -47, 10, -126, 10, 10, 58, -48, 
- 	10, -75, 10, -48, 10, -65, 10, -48, 
- 	10, -66, 10, -48, 10, -77, 10, -47, 
- 	10, -125, 10, -47, 10, -101, 10, -48, 
- 	10, -67, 10, -48, 10, -66, 10, -47, 
- 	10, -127, 10, -48, 10, -67, -66, 10, 
- 	-48, 10, -66, 10, -48, 10, -78, 10, 
- 	-48, 10, -80, 10, -48, 10, -79, 10, 
- 	-48, 10, -72, 10, -48, 10, -67, 10, 
- 	-48, -47, 10, -66, 10, -48, 10, -73, 
- 	10, -48, 10, -80, 10, -48, 10, -76, 
- 	10, -128, 10, -48, 10, -72, 10, -48, 
- 	10, -68, 10, -48, 10, -75, 10, -47, 
- 	10, -128, 10, -48, 10, 58, -72, 10, 
- 	-48, -47, 10, -70, 10, -48, 10, -72, 
- 	10, -47, 10, -122, 10, -126, -122, 10, 
- 	-47, 10, -128, 10, -47, 10, -125, 10, 
- 	-48, 10, -70, 10, -47, 10, -126, 10, 
- 	-47, 10, -125, 10, -47, 10, -128, 10, 
- 	-48, 10, -80, 10, 10, 32, -47, 10, 
- 	-127, 10, -47, 10, -122, 10, -48, 10, 
- 	-75, 10, -48, 10, -67, 10, -48, 10, 
- 	-80, 10, -47, 10, -128, 10, -48, 10, 
- 	-72, 10, -47, 10, -104, 10, -48, 10, 
- 	-75, 10, -48, 10, -67, 10, -48, 10, 
- 	-80, 10, -47, 10, -128, 10, -48, 10, 
- 	-72, 10, -48, -47, 10, -66, 10, -104, 
- 	10, -48, 10, -47, 10, -125, 10, -48, 
- 	10, -67, 10, -48, 10, -70, 10, -47, 
- 	10, -122, 10, -48, 10, -72, 10, -48, 
- 	10, -66, 10, -48, 10, -67, 10, -48, 
- 	10, -80, 10, -48, 10, -69, 10, 10, 
- 	95, 10, 70, 10, 69, 10, 65, 10, 
- 	84, 10, 85, 10, 82, 10, 69, 10, 
- 	95, 10, 69, 10, 78, 10, 68, 10, 
- 	95, 10, 37, -48, -47, -67, -48, -76, 
- 	-48, -127, -48, -67, -66, -48, -66, -48, 
- 	-78, -48, -80, -48, -79, -48, -72, -48, 
- 	-67, -48, -80, -48, -47, -66, -48, -73, 
- 	-48, -80, -48, -76, -48, -72, -48, -67, 
- 	-128, -48, -72, -48, -68, -48, -75, -47, 
- 	-128, -48, 58, -72, 58, 10, 10, -48, 
- 	10, 32, 35, 124, 9, 13, -100, -98, 
- 	-92, 10, -48, 10, -66, 10, -48, 10, 
- 	-77, 10, -47, 10, -125, 10, -47, 10, 
- 	-101, 10, -48, 10, -67, 10, -48, 10, 
- 	-66, 10, -47, 10, -127, 10, -47, 10, 
- 	-126, 10, 10, 58, -47, 10, -127, 10, 
- 	-48, 10, -66, 10, -48, 10, -79, 10, 
- 	-48, 10, -72, 10, -48, 10, -67, 10, 
- 	-48, 10, -80, 10, -47, 10, -125, 10, 
- 	-48, 10, -67, 10, -48, 10, -70, 10, 
- 	-47, 10, -122, 10, -48, 10, -72, 10, 
- 	-48, 10, -66, 10, -48, 10, -67, 10, 
- 	-48, 10, -80, 10, -48, 10, -69, 10, 
- 	10, 10, -48, 10, 32, 35, 37, 42, 
- 	64, 9, 13, -112, -105, -104, -102, -100, 
- 	-98, -97, -95, -92, 10, -48, 10, -69, 
- 	10, -48, 10, -72, 10, 10, 32, -48, 
- 	10, -80, 10, -48, 10, -76, 10, -48, 
- 	10, -80, 10, -47, 10, -126, 10, -48, 
- 	10, -75, -72, -66, 10, -48, 10, -80, 
- 	-66, 10, -48, 10, -76, 10, -48, 10, 
- 	32, -80, 10, -48, 10, -67, 10, -47, 
- 	10, -126, -122, 10, -48, 10, -75, 10, 
- 	-48, 10, -70, 10, -47, 10, -127, 10, 
- 	-47, 10, -126, 10, 10, 58, -48, 10, 
- 	-75, 10, -48, 10, -65, 10, -48, 10, 
- 	-66, 10, -48, 10, -77, 10, -47, 10, 
- 	-125, 10, -47, 10, -101, 10, -48, 10, 
- 	-67, 10, -48, 10, -66, 10, -48, -47, 
- 	10, -67, 10, -48, 10, -76, 10, -48, 
- 	10, -127, 10, -48, 10, -67, -66, 10, 
- 	-48, 10, -66, 10, -48, 10, -78, 10, 
- 	-48, 10, -80, 10, -48, 10, -79, 10, 
- 	-48, 10, -72, 10, -48, 10, -67, 10, 
- 	-48, -47, 10, -66, 10, -48, 10, -73, 
- 	10, -48, 10, -80, 10, -48, 10, -76, 
- 	10, -128, 10, -48, 10, -72, 10, -48, 
- 	10, -68, 10, -48, 10, -75, 10, -47, 
- 	10, -128, 10, -48, -47, 10, -70, 10, 
- 	-48, 10, -72, 10, -47, 10, -122, 10, 
- 	-126, -122, 10, -47, 10, -128, 10, -47, 
- 	10, -125, 10, -48, 10, -70, 10, -47, 
- 	10, -126, 10, -47, 10, -125, 10, -47, 
- 	10, -128, 10, -48, 10, -80, 10, 10, 
- 	32, -47, 10, -127, 10, -47, 10, -122, 
- 	10, -48, 10, -75, 10, -48, 10, -67, 
- 	10, -48, 10, -80, 10, -47, 10, -128, 
- 	10, -48, 10, -72, 10, -47, 10, -104, 
- 	10, -48, 10, -75, 10, -48, 10, -67, 
- 	10, -48, 10, -80, 10, -47, 10, -128, 
- 	10, -48, 10, -72, 10, -48, 10, -66, 
- 	10, -47, 10, -125, 10, -48, 10, -67, 
- 	10, -48, 10, -70, 10, -47, 10, -122, 
- 	10, -48, 10, -72, 10, -48, 10, -66, 
- 	10, -48, 10, -67, 10, -48, 10, -80, 
- 	10, -48, 10, -69, 10, 10, 95, 10, 
- 	70, 10, 69, 10, 65, 10, 84, 10, 
- 	85, 10, 82, 10, 69, 10, 95, 10, 
- 	69, 10, 78, 10, 68, 10, 95, 10, 
- 	37, -48, -47, -70, -48, -72, -47, -122, 
- 	-48, -80, -126, -122, -47, -128, -47, -125, 
- 	-48, -70, -47, -126, -47, -125, -47, -128, 
- 	-48, -80, 32, -47, -127, -47, -122, -48, 
- 	-75, -48, -67, -48, -80, -47, -128, -48, 
- 	-72, -47, -104, -48, -75, -48, -67, -48, 
- 	-80, -47, -128, -48, -72, -48, -47, -66, 
- 	58, -104, -48, -47, -125, -48, -67, -48, 
- 	-70, -47, -122, -48, -72, -48, -66, -48, 
- 	-67, -48, -80, -48, -69, -69, -65, 0
- };
- 
- static const char _lexer_single_lengths[] = {
- 	0, 10, 9, 1, 1, 1, 1, 1, 
- 	2, 2, 9, 1, 1, 2, 2, 3, 
- 	3, 3, 3, 2, 2, 2, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 3, 5, 3, 
- 	2, 4, 3, 2, 4, 9, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 3, 
- 	1, 2, 1, 1, 2, 1, 1, 1, 
- 	1, 2, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 7, 10, 2, 
- 	2, 2, 2, 2, 9, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 4, 2, 
- 	3, 2, 2, 3, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 3, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	3, 2, 2, 2, 2, 2, 3, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 7, 10, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 4, 2, 2, 2, 2, 
- 	3, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 3, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 6, 7, 
- 	2, 2, 2, 2, 2, 3, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 3, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 3, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	3, 2, 3, 2, 2, 2, 2, 2, 
- 	3, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 3, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 1, 
- 	1, 1, 1, 1, 1, 2, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 2, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 2, 1, 1, 1, 1, 5, 4, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 1, 
- 	1, 7, 10, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 4, 2, 3, 2, 2, 3, 2, 
- 	2, 2, 2, 3, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 3, 2, 2, 
- 	2, 2, 2, 2, 3, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 3, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 3, 2, 2, 2, 2, 2, 
- 	3, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 1, 1, 1, 
- 	1, 1, 1, 1, 2, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 2, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 0
- };
- 
- static const char _lexer_range_lengths[] = {
- 	0, 1, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 1, 0, 0, 0, 0, 1, 
- 	1, 1, 1, 1, 1, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 1, 1, 1, 
- 	1, 1, 0, 0, 1, 1, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 1, 0, 0, 
- 	0, 0, 0, 0, 1, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 1, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 1, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 1, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 1, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0
- };
- 
- static const short _lexer_index_offsets[] = {
- 	0, 0, 12, 22, 24, 26, 28, 30, 
- 	32, 35, 38, 49, 51, 53, 56, 59, 
- 	64, 69, 74, 79, 83, 87, 90, 92, 
- 	94, 96, 98, 100, 102, 104, 106, 108, 
- 	110, 112, 114, 116, 118, 120, 125, 132, 
- 	137, 141, 147, 151, 154, 160, 171, 173, 
- 	175, 177, 179, 181, 183, 185, 187, 189, 
- 	193, 195, 198, 200, 202, 205, 207, 209, 
- 	211, 213, 216, 218, 220, 222, 224, 226, 
- 	228, 230, 232, 234, 236, 238, 247, 258, 
- 	261, 264, 267, 270, 273, 284, 287, 290, 
- 	293, 296, 299, 302, 305, 308, 311, 316, 
- 	319, 323, 326, 329, 333, 336, 339, 342, 
- 	345, 348, 351, 354, 357, 360, 363, 366, 
- 	369, 372, 375, 378, 381, 384, 387, 390, 
- 	393, 396, 399, 402, 405, 408, 411, 415, 
- 	418, 421, 424, 427, 430, 433, 436, 439, 
- 	442, 445, 448, 451, 454, 457, 460, 463, 
- 	466, 469, 472, 475, 478, 481, 484, 487, 
- 	490, 494, 497, 500, 503, 506, 509, 513, 
- 	516, 519, 522, 525, 528, 531, 534, 537, 
- 	540, 543, 546, 549, 552, 555, 558, 561, 
- 	564, 567, 570, 573, 576, 579, 582, 585, 
- 	588, 591, 594, 597, 600, 603, 606, 609, 
- 	612, 615, 618, 621, 624, 627, 630, 633, 
- 	636, 639, 642, 645, 648, 651, 654, 657, 
- 	660, 663, 666, 669, 672, 675, 678, 681, 
- 	684, 687, 690, 693, 696, 699, 702, 705, 
- 	708, 711, 714, 717, 720, 723, 726, 729, 
- 	732, 735, 738, 740, 742, 744, 746, 748, 
- 	750, 752, 754, 756, 765, 776, 779, 782, 
- 	785, 788, 791, 794, 797, 800, 803, 806, 
- 	809, 812, 815, 818, 823, 826, 829, 832, 
- 	835, 839, 842, 845, 848, 851, 854, 857, 
- 	860, 863, 866, 869, 872, 875, 878, 881, 
- 	884, 887, 890, 893, 897, 900, 903, 906, 
- 	909, 912, 915, 918, 921, 924, 927, 930, 
- 	933, 936, 939, 942, 945, 948, 951, 954, 
- 	957, 960, 963, 966, 969, 972, 975, 978, 
- 	981, 984, 987, 990, 993, 996, 999, 1002, 
- 	1005, 1008, 1011, 1014, 1017, 1020, 1023, 1026, 
- 	1029, 1032, 1035, 1038, 1041, 1044, 1047, 1050, 
- 	1053, 1056, 1059, 1062, 1065, 1068, 1071, 1074, 
- 	1077, 1080, 1083, 1086, 1089, 1092, 1095, 1098, 
- 	1101, 1104, 1107, 1110, 1112, 1114, 1116, 1118, 
- 	1120, 1122, 1124, 1126, 1128, 1130, 1132, 1134, 
- 	1136, 1138, 1140, 1142, 1144, 1146, 1148, 1156, 
- 	1164, 1167, 1170, 1173, 1176, 1179, 1183, 1186, 
- 	1189, 1192, 1195, 1198, 1201, 1204, 1207, 1210, 
- 	1213, 1216, 1219, 1222, 1225, 1228, 1231, 1234, 
- 	1237, 1240, 1243, 1246, 1249, 1252, 1255, 1258, 
- 	1261, 1264, 1267, 1271, 1274, 1277, 1280, 1283, 
- 	1286, 1289, 1292, 1295, 1298, 1301, 1304, 1307, 
- 	1311, 1314, 1317, 1320, 1323, 1326, 1329, 1332, 
- 	1335, 1338, 1341, 1344, 1347, 1350, 1353, 1356, 
- 	1359, 1363, 1366, 1370, 1373, 1376, 1379, 1382, 
- 	1385, 1389, 1392, 1395, 1398, 1401, 1404, 1407, 
- 	1410, 1413, 1416, 1419, 1422, 1425, 1428, 1431, 
- 	1434, 1437, 1440, 1443, 1446, 1449, 1452, 1455, 
- 	1458, 1461, 1464, 1467, 1470, 1473, 1476, 1479, 
- 	1482, 1485, 1488, 1491, 1494, 1497, 1500, 1503, 
- 	1506, 1509, 1512, 1516, 1519, 1522, 1525, 1528, 
- 	1531, 1534, 1537, 1540, 1543, 1546, 1549, 1552, 
- 	1555, 1558, 1561, 1564, 1567, 1570, 1573, 1576, 
- 	1579, 1582, 1585, 1588, 1591, 1594, 1597, 1600, 
- 	1603, 1606, 1609, 1612, 1615, 1618, 1621, 1624, 
- 	1626, 1628, 1630, 1632, 1634, 1636, 1639, 1641, 
- 	1643, 1645, 1647, 1649, 1651, 1653, 1655, 1657, 
- 	1659, 1661, 1663, 1665, 1667, 1670, 1672, 1674, 
- 	1676, 1678, 1680, 1682, 1684, 1686, 1688, 1690, 
- 	1692, 1694, 1696, 1698, 1700, 1702, 1704, 1706, 
- 	1708, 1710, 1713, 1715, 1717, 1719, 1721, 1728, 
- 	1733, 1736, 1739, 1742, 1745, 1748, 1751, 1754, 
- 	1757, 1760, 1763, 1766, 1769, 1772, 1775, 1778, 
- 	1781, 1784, 1787, 1790, 1793, 1796, 1799, 1802, 
- 	1805, 1808, 1811, 1814, 1817, 1820, 1823, 1826, 
- 	1829, 1832, 1835, 1838, 1841, 1844, 1847, 1850, 
- 	1853, 1856, 1859, 1862, 1865, 1868, 1871, 1874, 
- 	1876, 1878, 1887, 1898, 1901, 1904, 1907, 1910, 
- 	1913, 1916, 1919, 1922, 1925, 1928, 1931, 1934, 
- 	1937, 1940, 1945, 1948, 1952, 1955, 1958, 1962, 
- 	1965, 1968, 1971, 1974, 1978, 1981, 1984, 1987, 
- 	1990, 1993, 1996, 1999, 2002, 2005, 2008, 2011, 
- 	2014, 2017, 2020, 2023, 2026, 2029, 2032, 2035, 
- 	2038, 2041, 2044, 2047, 2050, 2053, 2057, 2060, 
- 	2063, 2066, 2069, 2072, 2075, 2079, 2082, 2085, 
- 	2088, 2091, 2094, 2097, 2100, 2103, 2106, 2109, 
- 	2112, 2115, 2119, 2122, 2125, 2128, 2131, 2134, 
- 	2137, 2140, 2143, 2146, 2149, 2152, 2155, 2158, 
- 	2161, 2164, 2167, 2171, 2174, 2177, 2180, 2183, 
- 	2186, 2190, 2193, 2196, 2199, 2202, 2205, 2208, 
- 	2211, 2214, 2217, 2220, 2223, 2226, 2229, 2232, 
- 	2235, 2238, 2241, 2244, 2247, 2250, 2253, 2256, 
- 	2259, 2262, 2265, 2268, 2271, 2274, 2277, 2280, 
- 	2283, 2286, 2289, 2292, 2295, 2298, 2301, 2304, 
- 	2307, 2310, 2313, 2316, 2319, 2322, 2325, 2328, 
- 	2331, 2334, 2337, 2340, 2343, 2346, 2349, 2352, 
- 	2355, 2358, 2361, 2364, 2367, 2370, 2373, 2376, 
- 	2379, 2382, 2385, 2388, 2391, 2394, 2397, 2400, 
- 	2403, 2406, 2409, 2412, 2415, 2418, 2420, 2422, 
- 	2424, 2426, 2428, 2430, 2432, 2435, 2437, 2439, 
- 	2441, 2443, 2445, 2447, 2449, 2451, 2453, 2455, 
- 	2457, 2459, 2461, 2463, 2465, 2467, 2469, 2471, 
- 	2473, 2475, 2477, 2479, 2481, 2483, 2485, 2487, 
- 	2489, 2491, 2493, 2495, 2497, 2499, 2501, 2503, 
- 	2505, 2507, 2509, 2511, 2513, 2515, 2517, 2520, 
- 	2522, 2524, 2526, 2528, 2530, 2532, 2534, 2536, 
- 	2538, 2540, 2542, 2544, 2546, 2548, 2550, 2552, 
- 	2554, 2556, 2558, 2560, 2562, 2564, 2566, 2568
- };
- 
- static const short _lexer_trans_targs[] = {
- 	2, 869, 10, 10, 11, 21, 23, 7, 
- 	37, 40, 10, 0, 3, 46, 7, 56, 
- 	355, 526, 548, 796, 851, 0, 4, 0, 
- 	5, 0, 6, 0, 7, 0, 8, 0, 
- 	10, 22, 9, 10, 22, 9, 2, 10, 
- 	10, 11, 21, 23, 7, 37, 40, 10, 
- 	0, 12, 0, 13, 0, 15, 14, 14, 
- 	15, 14, 14, 16, 16, 17, 16, 16, 
- 	16, 16, 17, 16, 16, 16, 16, 18, 
- 	16, 16, 16, 16, 19, 16, 16, 10, 
- 	20, 20, 0, 10, 20, 20, 0, 10, 
- 	22, 21, 10, 0, 24, 0, 25, 0, 
- 	26, 0, 27, 0, 28, 0, 29, 0, 
- 	30, 0, 31, 0, 32, 0, 33, 0, 
- 	34, 0, 35, 0, 36, 0, 871, 0, 
- 	0, 0, 0, 0, 38, 39, 10, 39, 
- 	39, 37, 38, 38, 10, 39, 37, 39, 
- 	0, 40, 41, 40, 0, 45, 44, 43, 
- 	41, 44, 42, 0, 43, 41, 42, 0, 
- 	43, 42, 45, 44, 43, 41, 44, 42, 
- 	2, 45, 45, 11, 21, 23, 7, 37, 
- 	40, 45, 0, 47, 0, 48, 0, 49, 
- 	0, 50, 0, 51, 0, 52, 0, 53, 
- 	0, 54, 0, 55, 0, 7, 7, 7, 
- 	0, 57, 0, 58, 62, 0, 59, 0, 
- 	60, 0, 61, 8, 0, 7, 0, 63, 
- 	0, 64, 0, 65, 0, 66, 234, 0, 
- 	67, 0, 68, 0, 69, 0, 70, 0, 
- 	71, 0, 72, 0, 73, 0, 74, 0, 
- 	75, 0, 77, 76, 77, 76, 78, 77, 
- 	77, 10, 220, 83, 10, 77, 76, 79, 
- 	85, 83, 95, 112, 126, 142, 152, 202, 
- 	77, 76, 80, 77, 76, 81, 77, 76, 
- 	82, 77, 76, 83, 77, 76, 77, 84, 
- 	76, 2, 10, 10, 11, 21, 23, 7, 
- 	37, 40, 10, 0, 86, 77, 76, 87, 
- 	77, 76, 88, 77, 76, 89, 77, 76, 
- 	90, 77, 76, 91, 77, 76, 92, 77, 
- 	76, 93, 77, 76, 94, 77, 76, 83, 
- 	83, 83, 77, 76, 96, 77, 76, 97, 
- 	101, 77, 76, 98, 77, 76, 99, 77, 
- 	76, 100, 77, 84, 76, 83, 77, 76, 
- 	102, 77, 76, 103, 77, 76, 104, 77, 
- 	76, 105, 77, 76, 106, 77, 76, 107, 
- 	77, 76, 108, 77, 76, 109, 77, 76, 
- 	110, 77, 76, 111, 77, 76, 77, 84, 
- 	76, 113, 77, 76, 114, 77, 76, 115, 
- 	77, 76, 116, 77, 76, 117, 77, 76, 
- 	118, 77, 76, 119, 77, 76, 120, 77, 
- 	76, 121, 77, 76, 122, 77, 76, 123, 
- 	77, 76, 124, 77, 76, 125, 77, 76, 
- 	109, 77, 76, 127, 131, 77, 76, 128, 
- 	77, 76, 129, 77, 76, 130, 77, 76, 
- 	100, 77, 76, 132, 77, 76, 133, 77, 
- 	76, 134, 77, 76, 135, 77, 76, 136, 
- 	77, 76, 137, 77, 76, 138, 77, 76, 
- 	139, 77, 76, 140, 77, 76, 141, 77, 
- 	76, 111, 77, 76, 143, 77, 76, 144, 
- 	77, 76, 145, 77, 76, 146, 77, 76, 
- 	147, 77, 76, 148, 77, 76, 149, 77, 
- 	76, 150, 77, 76, 151, 77, 76, 111, 
- 	77, 76, 153, 158, 77, 76, 154, 77, 
- 	76, 155, 77, 76, 156, 77, 76, 157, 
- 	77, 76, 140, 77, 76, 159, 190, 77, 
- 	76, 160, 77, 76, 161, 77, 76, 162, 
- 	77, 76, 163, 77, 76, 164, 77, 76, 
- 	165, 77, 76, 166, 77, 76, 167, 77, 
- 	76, 168, 77, 76, 169, 77, 76, 170, 
- 	77, 76, 171, 77, 76, 172, 77, 76, 
- 	173, 77, 76, 77, 174, 76, 175, 77, 
- 	76, 176, 77, 76, 177, 77, 76, 178, 
- 	77, 76, 179, 77, 76, 180, 77, 76, 
- 	181, 77, 76, 182, 77, 76, 183, 77, 
- 	76, 184, 77, 76, 185, 77, 76, 186, 
- 	77, 76, 187, 77, 76, 188, 77, 76, 
- 	189, 77, 76, 140, 77, 76, 191, 77, 
- 	76, 192, 77, 76, 193, 77, 76, 194, 
- 	77, 76, 195, 77, 76, 196, 77, 76, 
- 	197, 77, 76, 198, 77, 76, 199, 77, 
- 	76, 200, 77, 76, 201, 77, 76, 111, 
- 	77, 76, 203, 77, 76, 204, 77, 76, 
- 	205, 77, 76, 206, 77, 76, 207, 77, 
- 	76, 208, 77, 76, 209, 77, 76, 210, 
- 	77, 76, 211, 77, 76, 212, 77, 76, 
- 	213, 77, 76, 214, 77, 76, 215, 77, 
- 	76, 216, 77, 76, 217, 77, 76, 218, 
- 	77, 76, 219, 77, 76, 120, 77, 76, 
- 	77, 221, 76, 77, 222, 76, 77, 223, 
- 	76, 77, 224, 76, 77, 225, 76, 77, 
- 	226, 76, 77, 227, 76, 77, 228, 76, 
- 	77, 229, 76, 77, 230, 76, 77, 231, 
- 	76, 77, 232, 76, 77, 233, 76, 77, 
- 	10, 76, 235, 0, 236, 0, 237, 0, 
- 	238, 0, 239, 0, 240, 0, 241, 0, 
- 	243, 242, 243, 242, 244, 243, 243, 10, 
- 	341, 249, 10, 243, 242, 245, 250, 249, 
- 	260, 266, 283, 299, 309, 323, 243, 242, 
- 	246, 243, 242, 247, 243, 242, 248, 243, 
- 	242, 249, 243, 242, 243, 84, 242, 251, 
- 	243, 242, 252, 243, 242, 253, 243, 242, 
- 	254, 243, 242, 255, 243, 242, 256, 243, 
- 	242, 257, 243, 242, 258, 243, 242, 259, 
- 	243, 242, 249, 249, 249, 243, 242, 261, 
- 	243, 242, 262, 243, 242, 263, 243, 242, 
- 	264, 243, 242, 265, 243, 84, 242, 249, 
- 	243, 242, 267, 243, 242, 268, 243, 242, 
- 	269, 243, 242, 270, 243, 242, 271, 243, 
- 	242, 272, 243, 242, 273, 243, 242, 274, 
- 	243, 242, 275, 243, 242, 276, 243, 242, 
- 	277, 243, 242, 278, 243, 242, 279, 243, 
- 	242, 280, 243, 242, 281, 243, 242, 282, 
- 	243, 242, 243, 84, 242, 284, 288, 243, 
- 	242, 285, 243, 242, 286, 243, 242, 287, 
- 	243, 242, 265, 243, 242, 289, 243, 242, 
- 	290, 243, 242, 291, 243, 242, 292, 243, 
- 	242, 293, 243, 242, 294, 243, 242, 295, 
- 	243, 242, 296, 243, 242, 297, 243, 242, 
- 	298, 243, 242, 282, 243, 242, 300, 243, 
- 	242, 301, 243, 242, 302, 243, 242, 303, 
- 	243, 242, 304, 243, 242, 305, 243, 242, 
- 	306, 243, 242, 307, 243, 242, 308, 243, 
- 	242, 282, 243, 242, 310, 243, 242, 311, 
- 	243, 242, 312, 243, 242, 313, 243, 242, 
- 	314, 243, 242, 315, 243, 242, 316, 243, 
- 	242, 317, 243, 242, 318, 243, 242, 319, 
- 	243, 242, 320, 243, 242, 321, 243, 242, 
- 	322, 243, 242, 282, 243, 242, 324, 243, 
- 	242, 325, 243, 242, 326, 243, 242, 327, 
- 	243, 242, 328, 243, 242, 329, 243, 242, 
- 	330, 243, 242, 331, 243, 242, 332, 243, 
- 	242, 333, 243, 242, 334, 243, 242, 335, 
- 	243, 242, 336, 243, 242, 337, 243, 242, 
- 	338, 243, 242, 339, 243, 242, 340, 243, 
- 	242, 274, 243, 242, 243, 342, 242, 243, 
- 	343, 242, 243, 344, 242, 243, 345, 242, 
- 	243, 346, 242, 243, 347, 242, 243, 348, 
- 	242, 243, 349, 242, 243, 350, 242, 243, 
- 	351, 242, 243, 352, 242, 243, 353, 242, 
- 	243, 354, 242, 243, 10, 242, 356, 0, 
- 	357, 0, 358, 0, 359, 0, 360, 0, 
- 	361, 0, 362, 0, 363, 0, 364, 0, 
- 	365, 0, 366, 0, 367, 0, 368, 0, 
- 	369, 0, 370, 0, 371, 0, 372, 0, 
- 	374, 373, 374, 373, 375, 374, 374, 10, 
- 	512, 10, 374, 373, 376, 395, 407, 423, 
- 	442, 494, 374, 373, 377, 374, 373, 378, 
- 	374, 373, 379, 374, 373, 380, 374, 373, 
- 	381, 374, 373, 382, 391, 374, 373, 383, 
- 	374, 373, 384, 374, 373, 385, 374, 373, 
- 	386, 374, 373, 387, 374, 373, 388, 374, 
- 	373, 389, 374, 373, 390, 374, 373, 374, 
- 	84, 373, 392, 374, 373, 393, 374, 373, 
- 	394, 374, 373, 388, 374, 373, 396, 374, 
- 	373, 397, 374, 373, 398, 374, 373, 399, 
- 	374, 373, 400, 374, 373, 401, 374, 373, 
- 	402, 374, 373, 403, 374, 373, 404, 374, 
- 	373, 405, 374, 373, 406, 374, 373, 386, 
- 	374, 373, 408, 374, 373, 409, 374, 373, 
- 	410, 374, 373, 411, 417, 374, 373, 412, 
- 	374, 373, 413, 374, 373, 414, 374, 373, 
- 	415, 374, 373, 416, 374, 373, 390, 374, 
- 	373, 418, 374, 373, 419, 374, 373, 420, 
- 	374, 373, 421, 374, 373, 422, 374, 373, 
- 	415, 374, 373, 424, 431, 374, 373, 425, 
- 	374, 373, 426, 374, 373, 427, 374, 373, 
- 	428, 374, 373, 429, 374, 373, 430, 374, 
- 	373, 419, 374, 373, 432, 374, 373, 433, 
- 	374, 373, 434, 374, 373, 435, 374, 373, 
- 	436, 374, 373, 437, 374, 373, 438, 374, 
- 	373, 439, 374, 373, 440, 374, 373, 441, 
- 	374, 84, 373, 390, 374, 373, 443, 448, 
- 	374, 373, 444, 374, 373, 445, 374, 373, 
- 	446, 374, 373, 447, 374, 373, 415, 374, 
- 	373, 449, 480, 374, 373, 450, 374, 373, 
- 	451, 374, 373, 452, 374, 373, 453, 374, 
- 	373, 454, 374, 373, 455, 374, 373, 456, 
- 	374, 373, 457, 374, 373, 458, 374, 373, 
- 	459, 374, 373, 460, 374, 373, 461, 374, 
- 	373, 462, 374, 373, 463, 374, 373, 374, 
- 	464, 373, 465, 374, 373, 466, 374, 373, 
- 	467, 374, 373, 468, 374, 373, 469, 374, 
- 	373, 470, 374, 373, 471, 374, 373, 472, 
- 	374, 373, 473, 374, 373, 474, 374, 373, 
- 	475, 374, 373, 476, 374, 373, 477, 374, 
- 	373, 478, 374, 373, 479, 374, 373, 415, 
- 	374, 373, 481, 374, 373, 482, 374, 373, 
- 	483, 374, 373, 484, 374, 373, 485, 374, 
- 	373, 486, 374, 373, 487, 374, 373, 488, 
- 	374, 373, 489, 374, 373, 490, 374, 373, 
- 	491, 492, 374, 373, 390, 374, 373, 493, 
- 	374, 373, 441, 374, 373, 495, 374, 373, 
- 	496, 374, 373, 497, 374, 373, 498, 374, 
- 	373, 499, 374, 373, 500, 374, 373, 501, 
- 	374, 373, 502, 374, 373, 503, 374, 373, 
- 	504, 374, 373, 505, 374, 373, 506, 374, 
- 	373, 507, 374, 373, 508, 374, 373, 509, 
- 	374, 373, 510, 374, 373, 511, 374, 373, 
- 	403, 374, 373, 374, 513, 373, 374, 514, 
- 	373, 374, 515, 373, 374, 516, 373, 374, 
- 	517, 373, 374, 518, 373, 374, 519, 373, 
- 	374, 520, 373, 374, 521, 373, 374, 522, 
- 	373, 374, 523, 373, 374, 524, 373, 374, 
- 	525, 373, 374, 10, 373, 527, 531, 0, 
- 	528, 0, 529, 0, 530, 0, 61, 0, 
- 	532, 0, 533, 0, 534, 540, 0, 535, 
- 	0, 536, 0, 537, 0, 538, 0, 539, 
- 	0, 74, 0, 541, 0, 542, 0, 543, 
- 	0, 544, 0, 545, 0, 546, 0, 547, 
- 	0, 371, 0, 549, 560, 0, 550, 0, 
- 	551, 0, 552, 0, 553, 0, 554, 0, 
- 	555, 0, 556, 0, 557, 0, 558, 0, 
- 	559, 0, 538, 0, 561, 0, 562, 0, 
- 	563, 0, 564, 0, 565, 0, 566, 0, 
- 	567, 0, 568, 0, 569, 0, 570, 623, 
- 	0, 571, 0, 572, 0, 574, 573, 574, 
- 	573, 575, 574, 574, 10, 10, 574, 573, 
- 	576, 593, 605, 574, 573, 577, 574, 573, 
- 	578, 574, 573, 579, 574, 573, 580, 574, 
- 	573, 581, 574, 573, 582, 574, 573, 583, 
- 	574, 573, 584, 574, 573, 585, 574, 573, 
- 	586, 574, 573, 587, 574, 573, 588, 574, 
- 	573, 589, 574, 573, 590, 574, 573, 591, 
- 	574, 573, 592, 574, 573, 574, 84, 573, 
- 	594, 574, 573, 595, 574, 573, 596, 574, 
- 	573, 597, 574, 573, 598, 574, 573, 599, 
- 	574, 573, 600, 574, 573, 601, 574, 573, 
- 	602, 574, 573, 603, 574, 573, 604, 574, 
- 	573, 592, 574, 573, 606, 574, 573, 607, 
- 	574, 573, 608, 574, 573, 609, 574, 573, 
- 	610, 574, 573, 611, 574, 573, 612, 574, 
- 	573, 613, 574, 573, 614, 574, 573, 615, 
- 	574, 573, 616, 574, 573, 617, 574, 573, 
- 	618, 574, 573, 619, 574, 573, 620, 574, 
- 	573, 621, 574, 573, 622, 574, 573, 584, 
- 	574, 573, 625, 624, 625, 624, 626, 625, 
- 	625, 10, 782, 631, 10, 625, 624, 627, 
- 	632, 631, 642, 665, 677, 697, 714, 764, 
- 	625, 624, 628, 625, 624, 629, 625, 624, 
- 	630, 625, 624, 631, 625, 624, 625, 84, 
- 	624, 633, 625, 624, 634, 625, 624, 635, 
- 	625, 624, 636, 625, 624, 637, 625, 624, 
- 	638, 625, 624, 639, 625, 624, 640, 625, 
- 	624, 641, 625, 624, 631, 631, 631, 625, 
- 	624, 643, 625, 624, 644, 648, 625, 624, 
- 	645, 625, 624, 646, 625, 624, 647, 625, 
- 	84, 624, 631, 625, 624, 649, 625, 624, 
- 	650, 625, 624, 651, 625, 624, 652, 661, 
- 	625, 624, 653, 625, 624, 654, 625, 624, 
- 	655, 625, 624, 656, 625, 624, 657, 625, 
- 	624, 658, 625, 624, 659, 625, 624, 660, 
- 	625, 624, 625, 84, 624, 662, 625, 624, 
- 	663, 625, 624, 664, 625, 624, 658, 625, 
- 	624, 666, 625, 624, 667, 625, 624, 668, 
- 	625, 624, 669, 625, 624, 670, 625, 624, 
- 	671, 625, 624, 672, 625, 624, 673, 625, 
- 	624, 674, 625, 624, 675, 625, 624, 676, 
- 	625, 624, 656, 625, 624, 678, 682, 625, 
- 	624, 679, 625, 624, 680, 625, 624, 681, 
- 	625, 624, 647, 625, 624, 683, 625, 624, 
- 	684, 625, 624, 685, 691, 625, 624, 686, 
- 	625, 624, 687, 625, 624, 688, 625, 624, 
- 	689, 625, 624, 690, 625, 624, 660, 625, 
- 	624, 692, 625, 624, 693, 625, 624, 694, 
- 	625, 624, 695, 625, 624, 696, 625, 624, 
- 	689, 625, 624, 698, 705, 625, 624, 699, 
- 	625, 624, 700, 625, 624, 701, 625, 624, 
- 	702, 625, 624, 703, 625, 624, 704, 625, 
- 	624, 693, 625, 624, 706, 625, 624, 707, 
- 	625, 624, 708, 625, 624, 709, 625, 624, 
- 	710, 625, 624, 711, 625, 624, 712, 625, 
- 	624, 713, 625, 624, 660, 625, 624, 715, 
- 	720, 625, 624, 716, 625, 624, 717, 625, 
- 	624, 718, 625, 624, 719, 625, 624, 689, 
- 	625, 624, 721, 752, 625, 624, 722, 625, 
- 	624, 723, 625, 624, 724, 625, 624, 725, 
- 	625, 624, 726, 625, 624, 727, 625, 624, 
- 	728, 625, 624, 729, 625, 624, 730, 625, 
- 	624, 731, 625, 624, 732, 625, 624, 733, 
- 	625, 624, 734, 625, 624, 735, 625, 624, 
- 	625, 736, 624, 737, 625, 624, 738, 625, 
- 	624, 739, 625, 624, 740, 625, 624, 741, 
- 	625, 624, 742, 625, 624, 743, 625, 624, 
- 	744, 625, 624, 745, 625, 624, 746, 625, 
- 	624, 747, 625, 624, 748, 625, 624, 749, 
- 	625, 624, 750, 625, 624, 751, 625, 624, 
- 	689, 625, 624, 753, 625, 624, 754, 625, 
- 	624, 755, 625, 624, 756, 625, 624, 757, 
- 	625, 624, 758, 625, 624, 759, 625, 624, 
- 	760, 625, 624, 761, 625, 624, 762, 625, 
- 	624, 763, 625, 624, 660, 625, 624, 765, 
- 	625, 624, 766, 625, 624, 767, 625, 624, 
- 	768, 625, 624, 769, 625, 624, 770, 625, 
- 	624, 771, 625, 624, 772, 625, 624, 773, 
- 	625, 624, 774, 625, 624, 775, 625, 624, 
- 	776, 625, 624, 777, 625, 624, 778, 625, 
- 	624, 779, 625, 624, 780, 625, 624, 781, 
- 	625, 624, 673, 625, 624, 625, 783, 624, 
- 	625, 784, 624, 625, 785, 624, 625, 786, 
- 	624, 625, 787, 624, 625, 788, 624, 625, 
- 	789, 624, 625, 790, 624, 625, 791, 624, 
- 	625, 792, 624, 625, 793, 624, 625, 794, 
- 	624, 625, 795, 624, 625, 10, 624, 797, 
- 	804, 0, 798, 0, 799, 0, 800, 0, 
- 	801, 0, 802, 0, 803, 0, 240, 0, 
- 	805, 836, 0, 806, 0, 807, 0, 808, 
- 	0, 809, 0, 810, 0, 811, 0, 812, 
- 	0, 813, 0, 814, 0, 815, 0, 816, 
- 	0, 817, 0, 818, 0, 819, 0, 820, 
- 	0, 821, 0, 822, 0, 823, 0, 824, 
- 	0, 825, 0, 826, 0, 827, 0, 828, 
- 	0, 829, 0, 830, 0, 831, 0, 832, 
- 	0, 833, 0, 834, 0, 835, 0, 802, 
- 	0, 837, 0, 838, 0, 839, 0, 840, 
- 	0, 841, 0, 842, 0, 843, 0, 844, 
- 	0, 845, 0, 846, 0, 847, 849, 0, 
- 	848, 0, 623, 0, 850, 0, 570, 0, 
- 	852, 0, 853, 0, 854, 0, 855, 0, 
- 	856, 0, 857, 0, 858, 0, 859, 0, 
- 	860, 0, 861, 0, 862, 0, 863, 0, 
- 	864, 0, 865, 0, 866, 0, 867, 0, 
- 	868, 0, 363, 0, 870, 0, 10, 0, 
- 	0, 0
- };
- 
- static const unsigned char _lexer_trans_actions[] = {
- 	29, 0, 54, 0, 5, 1, 0, 29, 
- 	1, 35, 0, 43, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	149, 126, 57, 110, 23, 0, 29, 54, 
- 	0, 5, 1, 0, 29, 1, 35, 0, 
- 	43, 0, 43, 0, 43, 139, 48, 9, 
- 	106, 11, 0, 134, 45, 45, 45, 3, 
- 	122, 33, 33, 33, 0, 122, 33, 33, 
- 	33, 0, 122, 33, 0, 33, 0, 102, 
- 	7, 7, 43, 54, 0, 0, 43, 114, 
- 	25, 0, 54, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	43, 43, 43, 43, 0, 27, 118, 27, 
- 	27, 51, 27, 0, 54, 0, 1, 0, 
- 	43, 0, 0, 0, 43, 54, 37, 37, 
- 	87, 37, 37, 43, 0, 39, 0, 43, 
- 	0, 0, 54, 0, 0, 39, 0, 0, 
- 	96, 54, 0, 93, 90, 41, 96, 90, 
- 	99, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 0, 0, 
- 	43, 0, 43, 0, 0, 43, 0, 43, 
- 	0, 43, 0, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 144, 57, 54, 0, 84, 54, 
- 	0, 72, 33, 84, 72, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 54, 15, 
- 	0, 63, 130, 31, 60, 57, 31, 63, 
- 	57, 66, 31, 43, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 15, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 54, 15, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 54, 0, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	15, 0, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	144, 57, 54, 0, 84, 54, 0, 78, 
- 	33, 84, 78, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 54, 19, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 19, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 54, 19, 0, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 19, 0, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	144, 57, 54, 0, 84, 54, 0, 69, 
- 	33, 69, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 54, 
- 	13, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 13, 0, 0, 54, 0, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 54, 
- 	0, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 13, 0, 0, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 0, 
- 	43, 0, 43, 0, 43, 144, 57, 54, 
- 	0, 84, 54, 0, 81, 81, 0, 0, 
- 	0, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 54, 21, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 144, 57, 54, 0, 84, 54, 
- 	0, 75, 33, 84, 75, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 54, 17, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	17, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 54, 17, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	54, 0, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 17, 0, 0, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 0
- };
- 
- static const unsigned char _lexer_eof_actions[] = {
- 	0, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43
- };
- 
- static const int lexer_start = 1;
- static const int lexer_first_final = 871;
- static const int lexer_error = 0;
- 
- static const int lexer_en_main = 1;
- 
- 
- #line 258 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
- 
- static VALUE 
- unindent(VALUE con, int start_col)
- {
-   VALUE re;
-   // Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters
-   char pat[32]; 
-   snprintf(pat, 32, "^[\t ]{0,%d}", start_col); 
-   re = rb_reg_regcomp(rb_str_new2(pat));
-   rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2(""));
- 
-   return Qnil;
- 
- }
- 
- static void 
- store_kw_con(VALUE listener, const char * event_name, 
-              const char * keyword_at, size_t keyword_length, 
-              const char * at,         size_t length, 
-              int current_line)
- {
-   VALUE con = Qnil, kw = Qnil;
-   kw = ENCODED_STR_NEW(keyword_at, keyword_length);
-   con = ENCODED_STR_NEW(at, length);
-   rb_funcall(con, rb_intern("strip!"), 0);
-   rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); 
- }
- 
- static void
- store_multiline_kw_con(VALUE listener, const char * event_name,
-                       const char * keyword_at, size_t keyword_length,
-                       const char * at,         size_t length,
-                       int current_line, int start_col)
- {
-   VALUE split;
-   VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil;
- 
-   kw = ENCODED_STR_NEW(keyword_at, keyword_length);
-   con = ENCODED_STR_NEW(at, length);
- 
-   unindent(con, start_col);
-   
-   split = rb_str_split(con, "\n");
- 
-   name = rb_funcall(split, rb_intern("shift"), 0);
-   desc = rb_ary_join(split, rb_str_new2( "\n" ));
- 
-   if( name == Qnil ) 
-   {
-     name = rb_str_new2("");
-   }
-   if( rb_funcall(desc, rb_intern("size"), 0) == 0) 
-   {
-     desc = rb_str_new2("");
-   }
-   rb_funcall(name, rb_intern("strip!"), 0);
-   rb_funcall(desc, rb_intern("rstrip!"), 0);
-   rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); 
- }
- 
- static void 
- store_attr(VALUE listener, const char * attr_type,
-            const char * at, size_t length, 
-            int line)
- {
-   VALUE val = ENCODED_STR_NEW(at, length);
-   rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line));
- }
- static void 
- store_docstring_content(VALUE listener, 
-           int start_col, 
-           const char *type_at, size_t type_length,
-           const char *at, size_t length, 
-           int current_line)
- {
-   VALUE re2;
-   VALUE unescape_escaped_quotes;
-   VALUE con = ENCODED_STR_NEW(at, length);
-   VALUE con_type = ENCODED_STR_NEW(type_at, type_length);
- 
-   unindent(con, start_col);
- 
-   re2 = rb_reg_regcomp(rb_str_new2("\r\\Z"));
-   unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\""));
-   rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2(""));
-   rb_funcall(con_type, rb_intern("strip!"), 0);
-   rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\""));
-   rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line));
- }
- static void 
- raise_lexer_error(const char * at, int line)
- { 
-   rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at);
- }
- 
- static void lexer_init(lexer_state *lexer) {
-   lexer->content_start = 0;
-   lexer->content_end = 0;
-   lexer->content_len = 0;
-   lexer->docstring_content_type_start = 0;
-   lexer->docstring_content_type_end = 0;
-   lexer->mark = 0;
-   lexer->keyword_start = 0;
-   lexer->keyword_end = 0;
-   lexer->next_keyword_start = 0;
-   lexer->line_number = 1;
-   lexer->last_newline = 0;
-   lexer->final_newline = 0;
-   lexer->start_col = 0;
- }
- 
- static VALUE CLexer_alloc(VALUE klass)
- {
-   VALUE obj;
-   lexer_state *lxr = ALLOC(lexer_state);
-   lexer_init(lxr);
- 
-   obj = Data_Wrap_Struct(klass, NULL, -1, lxr);
- 
-   return obj;
- }
- 
- static VALUE CLexer_init(VALUE self, VALUE listener)
- {
-   lexer_state *lxr; 
-   rb_iv_set(self, "@listener", listener);
-   
-   lxr = NULL;
-   DATA_GET(self, lexer_state, lxr);
-   lexer_init(lxr);
-   
-   return self;
- }
- 
- static VALUE CLexer_scan(VALUE self, VALUE input)
- {
-   VALUE input_copy;
-   char *data;
-   size_t len;
-   VALUE listener = rb_iv_get(self, "@listener");
- 
-   lexer_state *lexer;
-   lexer = NULL;
-   DATA_GET(self, lexer_state, lexer);
- 
-   input_copy = rb_str_dup(input);
- 
-   rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%"));
-   data = RSTRING_PTR(input_copy);
-   len = RSTRING_LEN(input_copy);
-   
-   if (len == 0) { 
-     rb_raise(rb_eGherkinLexingError, "No content to lex.");
-   } else {
- 
-     const char *p, *pe, *eof;
-     int cs = 0;
-     
-     VALUE current_row = Qnil;
- 
-     p = data;
-     pe = data + len;
-     eof = pe;
-     
-     assert(*pe == '\0' && "pointer does not end on NULL");
-     
-     
- #line 1716 "ext/gherkin_lexer_sr_cyrl/gherkin_lexer_sr_cyrl.c"
- 	{
- 	cs = lexer_start;
- 	}
- 
- #line 425 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
-     
- #line 1723 "ext/gherkin_lexer_sr_cyrl/gherkin_lexer_sr_cyrl.c"
- 	{
- 	int _klen;
- 	unsigned int _trans;
- 	const char *_acts;
- 	unsigned int _nacts;
- 	const char *_keys;
- 
- 	if ( p == pe )
- 		goto _test_eof;
- 	if ( cs == 0 )
- 		goto _out;
- _resume:
- 	_keys = _lexer_trans_keys + _lexer_key_offsets[cs];
- 	_trans = _lexer_index_offsets[cs];
- 
- 	_klen = _lexer_single_lengths[cs];
- 	if ( _klen > 0 ) {
- 		const char *_lower = _keys;
- 		const char *_mid;
- 		const char *_upper = _keys + _klen - 1;
- 		while (1) {
- 			if ( _upper < _lower )
- 				break;
- 
- 			_mid = _lower + ((_upper-_lower) >> 1);
- 			if ( (*p) < *_mid )
- 				_upper = _mid - 1;
- 			else if ( (*p) > *_mid )
- 				_lower = _mid + 1;
- 			else {
- 				_trans += (_mid - _keys);
- 				goto _match;
- 			}
- 		}
- 		_keys += _klen;
- 		_trans += _klen;
- 	}
- 
- 	_klen = _lexer_range_lengths[cs];
- 	if ( _klen > 0 ) {
- 		const char *_lower = _keys;
- 		const char *_mid;
- 		const char *_upper = _keys + (_klen<<1) - 2;
- 		while (1) {
- 			if ( _upper < _lower )
- 				break;
- 
- 			_mid = _lower + (((_upper-_lower) >> 1) & ~1);
- 			if ( (*p) < _mid[0] )
- 				_upper = _mid - 2;
- 			else if ( (*p) > _mid[1] )
- 				_lower = _mid + 2;
- 			else {
- 				_trans += ((_mid - _keys)>>1);
- 				goto _match;
- 			}
- 		}
- 		_trans += _klen;
- 	}
- 
- _match:
- 	cs = _lexer_trans_targs[_trans];
- 
- 	if ( _lexer_trans_actions[_trans] == 0 )
- 		goto _again;
- 
- 	_acts = _lexer_actions + _lexer_trans_actions[_trans];
- 	_nacts = (unsigned int) *_acts++;
- 	while ( _nacts-- > 0 )
- 	{
- 		switch ( *_acts++ )
- 		{
- 	case 0:
- #line 83 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
- 	{
- 		MARK(content_start, p);
-     lexer->current_line = lexer->line_number;
-     lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2;
-   }
- 	break;
- 	case 1:
- #line 89 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
- 	{
-     MARK(content_start, p);
-   }
- 	break;
- 	case 2:
- #line 93 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
- 	{
-     lexer->current_line = lexer->line_number;
-     lexer->start_col = p - data - lexer->last_newline;
-   }
- 	break;
- 	case 3:
- #line 98 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
- 	{
-     int len = LEN(content_start, PTR_TO(final_newline));
-     int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end));
- 
-     if (len < 0) len = 0;
-     if (type_len < 0) len = 0;
- 
-     store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line);
-   }
- 	break;
- 	case 4:
- #line 108 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
- 	{ 
-     MARK(docstring_content_type_start, p);
-   }
- 	break;
- 	case 5:
- #line 112 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
- 	{ 
-     MARK(docstring_content_type_end, p);
-   }
- 	break;
- 	case 6:
- #line 116 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
- 	{
-     STORE_KW_END_CON(feature);
-   }
- 	break;
- 	case 7:
- #line 120 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
- 	{
-     STORE_KW_END_CON(background);
-   }
- 	break;
- 	case 8:
- #line 124 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
- 	{
-     STORE_KW_END_CON(scenario);
-   }
- 	break;
- 	case 9:
- #line 128 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
- 	{
-     STORE_KW_END_CON(scenario_outline);
-   }
- 	break;
- 	case 10:
- #line 132 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
- 	{
-     STORE_KW_END_CON(examples);
-   }
- 	break;
- 	case 11:
- #line 136 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
- 	{
-     store_kw_con(listener, "step",
-       PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-       PTR_TO(content_start), LEN(content_start, p), 
-       lexer->current_line);
-   }
- 	break;
- 	case 12:
- #line 143 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
- 	{
-     STORE_ATTR(comment);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 13:
- #line 148 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
- 	{
-     STORE_ATTR(tag);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 14:
- #line 153 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
- 	{
-     lexer->line_number += 1;
-     MARK(final_newline, p);
-   }
- 	break;
- 	case 15:
- #line 158 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
- 	{
-     MARK(last_newline, p + 1);
-   }
- 	break;
- 	case 16:
- #line 162 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
- 	{
-     if (lexer->mark == 0) {
-       MARK(mark, p);
-     }
-   }
- 	break;
- 	case 17:
- #line 168 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
- 	{
-     MARK(keyword_end, p);
-     MARK(keyword_start, PTR_TO(mark));
-     MARK(content_start, p + 1);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 18:
- #line 175 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
- 	{
-     MARK(content_end, p);
-   }
- 	break;
- 	case 19:
- #line 179 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
- 	{
-     p = p - 1;
-     lexer->current_line = lexer->line_number;
-     current_row = rb_ary_new();
-   }
- 	break;
- 	case 20:
- #line 185 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
- 	{
- 		MARK(content_start, p);
-   }
- 	break;
- 	case 21:
- #line 189 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
- 	{
-     VALUE re_pipe, re_newline, re_backslash;
-     VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
-     rb_funcall(con, rb_intern("strip!"), 0);
-     re_pipe      = rb_reg_regcomp(rb_str_new2("\\\\\\|"));
-     re_newline   = rb_reg_regcomp(rb_str_new2("\\\\n"));
-     re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_pipe,      rb_str_new2("|"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_newline,   rb_str_new2("\n"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\"));
- 
-     rb_ary_push(current_row, con);
-   }
- 	break;
- 	case 22:
- #line 203 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
- 	{
-     rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
-   }
- 	break;
- 	case 23:
- #line 207 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
- 	{
-     int line;
-     if (cs < lexer_first_final) {
-       size_t count = 0;
-       VALUE newstr_val;
-       char *newstr;
-       int newstr_count = 0;        
-       size_t len;
-       const char *buff;
-       if (lexer->last_newline != 0) {
-         len = LEN(last_newline, eof);
-         buff = PTR_TO(last_newline);
-       } else {
-         len = strlen(data);
-         buff = data;
-       }
- 
-       // Allocate as a ruby string so that it gets cleaned up by GC
-       newstr_val = rb_str_new(buff, len);
-       newstr = RSTRING_PTR(newstr_val);
- 
- 
-       for (count = 0; count < len; count++) {
-         if(buff[count] == 10) {
-           newstr[newstr_count] = '\0'; // terminate new string at first newline found
-           break;
-         } else {
-           if (buff[count] == '%') {
-             newstr[newstr_count++] = buff[count];
-             newstr[newstr_count] = buff[count];
-           } else {
-             newstr[newstr_count] = buff[count];
-           }
-         }
-         newstr_count++;
-       }
- 
-       line = lexer->line_number;
-       lexer_init(lexer); // Re-initialize so we can scan again with the same lexer
-       raise_lexer_error(newstr, line);
-     } else {
-       rb_funcall(listener, rb_intern("eof"), 0);
-     }
-   }
- 	break;
- #line 2013 "ext/gherkin_lexer_sr_cyrl/gherkin_lexer_sr_cyrl.c"
- 		}
- 	}
- 
- _again:
- 	if ( cs == 0 )
- 		goto _out;
- 	if ( ++p != pe )
- 		goto _resume;
- 	_test_eof: {}
- 	if ( p == eof )
- 	{
- 	const char *__acts = _lexer_actions + _lexer_eof_actions[cs];
- 	unsigned int __nacts = (unsigned int) *__acts++;
- 	while ( __nacts-- > 0 ) {
- 		switch ( *__acts++ ) {
- 	case 23:
- #line 207 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
- 	{
-     int line;
-     if (cs < lexer_first_final) {
-       size_t count = 0;
-       VALUE newstr_val;
-       char *newstr;
-       int newstr_count = 0;        
-       size_t len;
-       const char *buff;
-       if (lexer->last_newline != 0) {
-         len = LEN(last_newline, eof);
-         buff = PTR_TO(last_newline);
-       } else {
-         len = strlen(data);
-         buff = data;
-       }
- 
-       // Allocate as a ruby string so that it gets cleaned up by GC
-       newstr_val = rb_str_new(buff, len);
-       newstr = RSTRING_PTR(newstr_val);
- 
- 
-       for (count = 0; count < len; count++) {
-         if(buff[count] == 10) {
-           newstr[newstr_count] = '\0'; // terminate new string at first newline found
-           break;
-         } else {
-           if (buff[count] == '%') {
-             newstr[newstr_count++] = buff[count];
-             newstr[newstr_count] = buff[count];
-           } else {
-             newstr[newstr_count] = buff[count];
-           }
-         }
-         newstr_count++;
-       }
- 
-       line = lexer->line_number;
-       lexer_init(lexer); // Re-initialize so we can scan again with the same lexer
-       raise_lexer_error(newstr, line);
-     } else {
-       rb_funcall(listener, rb_intern("eof"), 0);
-     }
-   }
- 	break;
- #line 2076 "ext/gherkin_lexer_sr_cyrl/gherkin_lexer_sr_cyrl.c"
- 		}
- 	}
- 	}
- 
- 	_out: {}
- 	}
- 
- #line 426 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sr_cyrl.c.rl"
- 
-     assert(p <= pe && "data overflow after parsing execute");
-     assert(lexer->content_start <= len && "content starts after data end");
-     assert(lexer->mark < len && "mark is after data end");
-     
-     // Reset lexer by re-initializing the whole thing
-     lexer_init(lexer);
- 
-     if (cs == lexer_error) {
-       rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails.");
-     } else {
-       return Qtrue;
-     }
-   }
- }
- 
- void Init_gherkin_lexer_sr_cyrl()
- {
-   mGherkin = rb_define_module("Gherkin");
-   mGherkinLexer = rb_define_module_under(mGherkin, "Lexer");
-   rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError"));
- 
-   mCLexer = rb_define_module_under(mGherkin, "CLexer");
-   cI18nLexer = rb_define_class_under(mCLexer, "Sr_cyrl", rb_cObject);
-   rb_define_alloc_func(cI18nLexer, CLexer_alloc);
-   rb_define_method(cI18nLexer, "initialize", CLexer_init, 1);
-   rb_define_method(cI18nLexer, "scan", CLexer_scan, 1);
- }
- 
 -#line 1 "ragel/i18n/sr_cyrl.c.rl"
 -#include <assert.h>
 -#include <ruby.h>
 -
 -#if defined(_WIN32)
 -#include <stddef.h>
 -#endif
 -
 -#ifdef HAVE_RUBY_RE_H
 -#include <ruby/re.h>
 -#else
 -#include <re.h>
 -#endif
 -
 -#ifdef HAVE_RUBY_ENCODING_H
 -#include <ruby/encoding.h>
 -#define ENCODED_STR_NEW(ptr, len) \
 -    rb_enc_str_new(ptr, len, rb_utf8_encoding())
 -#else
 -#define ENCODED_STR_NEW(ptr, len) \
 -    rb_str_new(ptr, len)
 -#endif
 -
 -#ifndef RSTRING_PTR
 -#define RSTRING_PTR(s) (RSTRING(s)->ptr)
 -#endif
 -
 -#ifndef RSTRING_LEN
 -#define RSTRING_LEN(s) (RSTRING(s)->len)
 -#endif
 -
 -#define DATA_GET(FROM, TYPE, NAME) \
 -  Data_Get_Struct(FROM, TYPE, NAME); \
 -  if (NAME == NULL) { \
 -    rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \
 -  }
 - 
 -typedef struct lexer_state {
 -  int content_len;
 -  int line_number;
 -  int current_line;
 -  int start_col;
 -  size_t mark;
 -  size_t keyword_start;
 -  size_t keyword_end;
 -  size_t next_keyword_start;
 -  size_t content_start;
 -  size_t content_end;
 -  size_t docstring_content_type_start;
 -  size_t docstring_content_type_end;
 -  size_t query_start;
 -  size_t last_newline;
 -  size_t final_newline;
 -} lexer_state;
 -
 -static VALUE mGherkin;
 -static VALUE mGherkinLexer;
 -static VALUE mCLexer;
 -static VALUE cI18nLexer;
 -static VALUE rb_eGherkinLexingError;
 -
 -#define LEN(AT, P) (P - data - lexer->AT)
 -#define MARK(M, P) (lexer->M = (P) - data)
 -#define PTR_TO(P) (data + lexer->P)
 -
 -#define STORE_KW_END_CON(EVENT) \
 -  store_multiline_kw_con(listener, # EVENT, \
 -    PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \
 -    PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \
 -    lexer->current_line, lexer->start_col); \
 -    if (lexer->content_end != 0) { \
 -      p = PTR_TO(content_end - 1); \
 -    } \
 -    lexer->content_end = 0
 -
 -#define STORE_ATTR(ATTR) \
 -    store_attr(listener, # ATTR, \
 -      PTR_TO(content_start), LEN(content_start, p), \
 -      lexer->line_number)
 -
 -
 -#line 254 "ragel/i18n/sr_cyrl.c.rl"
 -
 -
 -/** Data **/
 -
 -#line 89 "ext/gherkin_lexer_sr_cyrl/gherkin_lexer_sr_cyrl.c"
 -static const char _lexer_actions[] = {
 -	0, 1, 0, 1, 1, 1, 2, 1, 
 -	3, 1, 4, 1, 5, 1, 6, 1, 
 -	7, 1, 8, 1, 9, 1, 10, 1, 
 -	11, 1, 12, 1, 13, 1, 16, 1, 
 -	17, 1, 18, 1, 19, 1, 20, 1, 
 -	21, 1, 22, 1, 23, 2, 1, 18, 
 -	2, 4, 5, 2, 13, 0, 2, 14, 
 -	15, 2, 17, 0, 2, 17, 2, 2, 
 -	17, 16, 2, 17, 19, 2, 18, 6, 
 -	2, 18, 7, 2, 18, 8, 2, 18, 
 -	9, 2, 18, 10, 2, 18, 16, 2, 
 -	20, 21, 2, 22, 0, 2, 22, 2, 
 -	2, 22, 16, 2, 22, 19, 3, 3, 
 -	14, 15, 3, 5, 14, 15, 3, 11, 
 -	14, 15, 3, 12, 14, 15, 3, 13, 
 -	14, 15, 3, 14, 15, 18, 3, 17, 
 -	0, 11, 3, 17, 14, 15, 4, 1, 
 -	14, 15, 18, 4, 4, 5, 14, 15, 
 -	4, 17, 0, 14, 15, 5, 17, 0, 
 -	11, 14, 15
 -};
 -
 -static const short _lexer_key_offsets[] = {
 -	0, 0, 12, 21, 22, 23, 24, 25, 
 -	26, 28, 30, 41, 42, 43, 45, 47, 
 -	52, 57, 62, 67, 71, 75, 77, 78, 
 -	79, 80, 81, 82, 83, 84, 85, 86, 
 -	87, 88, 89, 90, 91, 92, 97, 104, 
 -	109, 113, 119, 122, 124, 130, 141, 142, 
 -	143, 144, 145, 146, 147, 148, 149, 150, 
 -	153, 154, 156, 157, 158, 160, 161, 162, 
 -	163, 164, 166, 167, 168, 169, 170, 171, 
 -	172, 173, 174, 175, 176, 177, 186, 196, 
 -	198, 200, 202, 204, 206, 217, 219, 221, 
 -	223, 225, 227, 229, 231, 233, 235, 239, 
 -	241, 244, 246, 248, 251, 253, 255, 257, 
 -	259, 261, 263, 265, 267, 269, 271, 273, 
 -	275, 277, 279, 281, 283, 285, 287, 289, 
 -	291, 293, 295, 297, 299, 301, 303, 306, 
 -	308, 310, 312, 314, 316, 318, 320, 322, 
 -	324, 326, 328, 330, 332, 334, 336, 338, 
 -	340, 342, 344, 346, 348, 350, 352, 354, 
 -	356, 359, 361, 363, 365, 367, 369, 372, 
 -	374, 376, 378, 380, 382, 384, 386, 388, 
 -	390, 392, 394, 396, 398, 400, 402, 404, 
 -	406, 408, 410, 412, 414, 416, 418, 420, 
 -	422, 424, 426, 428, 430, 432, 434, 436, 
 -	438, 440, 442, 444, 446, 448, 450, 452, 
 -	454, 456, 458, 460, 462, 464, 466, 468, 
 -	470, 472, 474, 476, 478, 480, 482, 484, 
 -	486, 488, 490, 492, 494, 496, 498, 500, 
 -	502, 504, 506, 508, 510, 512, 514, 516, 
 -	518, 520, 522, 523, 524, 525, 526, 527, 
 -	528, 529, 530, 531, 540, 550, 552, 554, 
 -	556, 558, 560, 562, 564, 566, 568, 570, 
 -	572, 574, 576, 578, 582, 584, 586, 588, 
 -	590, 593, 595, 597, 599, 601, 603, 605, 
 -	607, 609, 611, 613, 615, 617, 619, 621, 
 -	623, 625, 627, 629, 632, 634, 636, 638, 
 -	640, 642, 644, 646, 648, 650, 652, 654, 
 -	656, 658, 660, 662, 664, 666, 668, 670, 
 -	672, 674, 676, 678, 680, 682, 684, 686, 
 -	688, 690, 692, 694, 696, 698, 700, 702, 
 -	704, 706, 708, 710, 712, 714, 716, 718, 
 -	720, 722, 724, 726, 728, 730, 732, 734, 
 -	736, 738, 740, 742, 744, 746, 748, 750, 
 -	752, 754, 756, 758, 760, 762, 764, 766, 
 -	768, 770, 772, 774, 775, 776, 777, 778, 
 -	779, 780, 781, 782, 783, 784, 785, 786, 
 -	787, 788, 789, 790, 791, 792, 793, 801, 
 -	808, 810, 812, 814, 816, 818, 821, 823, 
 -	825, 827, 829, 831, 833, 835, 837, 839, 
 -	841, 843, 845, 847, 849, 851, 853, 855, 
 -	857, 859, 861, 863, 865, 867, 869, 871, 
 -	873, 875, 877, 880, 882, 884, 886, 888, 
 -	890, 892, 894, 896, 898, 900, 902, 904, 
 -	907, 909, 911, 913, 915, 917, 919, 921, 
 -	923, 925, 927, 929, 931, 933, 935, 937, 
 -	939, 942, 944, 947, 949, 951, 953, 955, 
 -	957, 960, 962, 964, 966, 968, 970, 972, 
 -	974, 976, 978, 980, 982, 984, 986, 988, 
 -	990, 992, 994, 996, 998, 1000, 1002, 1004, 
 -	1006, 1008, 1010, 1012, 1014, 1016, 1018, 1020, 
 -	1022, 1024, 1026, 1028, 1030, 1032, 1034, 1036, 
 -	1038, 1040, 1042, 1045, 1047, 1049, 1051, 1053, 
 -	1055, 1057, 1059, 1061, 1063, 1065, 1067, 1069, 
 -	1071, 1073, 1075, 1077, 1079, 1081, 1083, 1085, 
 -	1087, 1089, 1091, 1093, 1095, 1097, 1099, 1101, 
 -	1103, 1105, 1107, 1109, 1111, 1113, 1115, 1117, 
 -	1118, 1119, 1120, 1121, 1122, 1123, 1125, 1126, 
 -	1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 
 -	1135, 1136, 1137, 1138, 1139, 1141, 1142, 1143, 
 -	1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 
 -	1152, 1153, 1154, 1155, 1156, 1157, 1158, 1159, 
 -	1160, 1161, 1163, 1164, 1165, 1166, 1167, 1174, 
 -	1178, 1180, 1182, 1184, 1186, 1188, 1190, 1192, 
 -	1194, 1196, 1198, 1200, 1202, 1204, 1206, 1208, 
 -	1210, 1212, 1214, 1216, 1218, 1220, 1222, 1224, 
 -	1226, 1228, 1230, 1232, 1234, 1236, 1238, 1240, 
 -	1242, 1244, 1246, 1248, 1250, 1252, 1254, 1256, 
 -	1258, 1260, 1262, 1264, 1266, 1268, 1270, 1272, 
 -	1273, 1274, 1283, 1293, 1295, 1297, 1299, 1301, 
 -	1303, 1305, 1307, 1309, 1311, 1313, 1315, 1317, 
 -	1319, 1321, 1325, 1327, 1330, 1332, 1334, 1337, 
 -	1339, 1341, 1343, 1345, 1348, 1350, 1352, 1354, 
 -	1356, 1358, 1360, 1362, 1364, 1366, 1368, 1370, 
 -	1372, 1374, 1376, 1378, 1380, 1382, 1384, 1386, 
 -	1388, 1390, 1392, 1394, 1396, 1398, 1401, 1403, 
 -	1405, 1407, 1409, 1411, 1413, 1416, 1418, 1420, 
 -	1422, 1424, 1426, 1428, 1430, 1432, 1434, 1436, 
 -	1438, 1440, 1443, 1445, 1447, 1449, 1451, 1453, 
 -	1455, 1457, 1459, 1461, 1463, 1465, 1467, 1469, 
 -	1471, 1473, 1475, 1478, 1480, 1482, 1484, 1486, 
 -	1488, 1491, 1493, 1495, 1497, 1499, 1501, 1503, 
 -	1505, 1507, 1509, 1511, 1513, 1515, 1517, 1519, 
 -	1521, 1523, 1525, 1527, 1529, 1531, 1533, 1535, 
 -	1537, 1539, 1541, 1543, 1545, 1547, 1549, 1551, 
 -	1553, 1555, 1557, 1559, 1561, 1563, 1565, 1567, 
 -	1569, 1571, 1573, 1575, 1577, 1579, 1581, 1583, 
 -	1585, 1587, 1589, 1591, 1593, 1595, 1597, 1599, 
 -	1601, 1603, 1605, 1607, 1609, 1611, 1613, 1615, 
 -	1617, 1619, 1621, 1623, 1625, 1627, 1629, 1631, 
 -	1633, 1635, 1637, 1639, 1641, 1643, 1644, 1645, 
 -	1646, 1647, 1648, 1649, 1650, 1652, 1653, 1654, 
 -	1655, 1656, 1657, 1658, 1659, 1660, 1661, 1662, 
 -	1663, 1664, 1665, 1666, 1667, 1668, 1669, 1670, 
 -	1671, 1672, 1673, 1674, 1675, 1676, 1677, 1678, 
 -	1679, 1680, 1681, 1682, 1683, 1684, 1685, 1686, 
 -	1687, 1688, 1689, 1690, 1691, 1692, 1693, 1695, 
 -	1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703, 
 -	1704, 1705, 1706, 1707, 1708, 1709, 1710, 1711, 
 -	1712, 1713, 1714, 1715, 1716, 1717, 1718, 1719
 -};
 -
 -static const char _lexer_trans_keys[] = {
 -	-48, -17, 10, 32, 34, 35, 37, 42, 
 -	64, 124, 9, 13, -112, -105, -104, -102, 
 -	-100, -98, -97, -95, -92, -48, -69, -48, 
 -	-72, 32, 10, 13, 10, 13, -48, 10, 
 -	32, 34, 35, 37, 42, 64, 124, 9, 
 -	13, 34, 34, 10, 13, 10, 13, 10, 
 -	32, 34, 9, 13, 10, 32, 34, 9, 
 -	13, 10, 32, 34, 9, 13, 10, 32, 
 -	34, 9, 13, 10, 32, 9, 13, 10, 
 -	32, 9, 13, 10, 13, 10, 95, 70, 
 -	69, 65, 84, 85, 82, 69, 95, 69, 
 -	78, 68, 95, 37, 13, 32, 64, 9, 
 -	10, 9, 10, 13, 32, 64, 11, 12, 
 -	10, 32, 64, 9, 13, 32, 124, 9, 
 -	13, 10, 32, 92, 124, 9, 13, 10, 
 -	92, 124, 10, 92, 10, 32, 92, 124, 
 -	9, 13, -48, 10, 32, 34, 35, 37, 
 -	42, 64, 124, 9, 13, -48, -80, -48, 
 -	-76, -48, -80, -47, -126, -48, -75, -72, 
 -	-66, -48, -80, -66, -48, -76, -48, 32, 
 -	-80, -48, -67, -47, -126, -122, -48, -75, 
 -	-48, -70, -47, -127, -47, -126, 58, 10, 
 -	10, -48, 10, 32, 35, 37, 42, 64, 
 -	9, 13, -112, -105, -104, -102, -100, -98, 
 -	-97, -95, -92, 10, -48, 10, -69, 10, 
 -	-48, 10, -72, 10, 10, 32, -48, 10, 
 -	32, 34, 35, 37, 42, 64, 124, 9, 
 -	13, -48, 10, -80, 10, -48, 10, -76, 
 -	10, -48, 10, -80, 10, -47, 10, -126, 
 -	10, -48, 10, -75, -72, -66, 10, -48, 
 -	10, -80, -66, 10, -48, 10, -76, 10, 
 -	-48, 10, 32, -80, 10, -48, 10, -67, 
 -	10, -47, 10, -122, 10, -48, 10, -75, 
 -	10, -48, 10, -65, 10, -47, 10, -126, 
 -	10, 10, 58, -48, 10, -66, 10, -48, 
 -	10, -77, 10, -47, 10, -125, 10, -47, 
 -	10, -101, 10, -48, 10, -67, 10, -48, 
 -	10, -66, 10, -47, 10, -127, 10, -48, 
 -	-47, 10, -67, 10, -48, 10, -76, 10, 
 -	-48, 10, -127, 10, -48, 10, -66, 10, 
 -	-48, 10, -79, 10, -48, 10, -72, 10, 
 -	-48, 10, -67, 10, -48, 10, -80, 10, 
 -	-47, 10, -128, 10, -48, 10, -72, 10, 
 -	-48, 10, -68, 10, -48, 10, -75, 10, 
 -	-47, 10, -128, 10, -48, -47, 10, -70, 
 -	10, -48, 10, -72, 10, -47, 10, -122, 
 -	10, -126, -122, 10, -47, 10, -128, 10, 
 -	-47, 10, -125, 10, -48, 10, -70, 10, 
 -	-47, 10, -126, 10, -47, 10, -125, 10, 
 -	-47, 10, -128, 10, -48, 10, -80, 10, 
 -	10, 32, -47, 10, -127, 10, -47, 10, 
 -	-122, 10, -48, 10, -75, 10, -48, 10, 
 -	-67, 10, -48, 10, -80, 10, -47, 10, 
 -	-128, 10, -48, 10, -72, 10, -47, 10, 
 -	-104, 10, -48, 10, -75, 10, -48, 10, 
 -	-67, 10, -48, 10, -80, 10, -47, 10, 
 -	-128, 10, -48, 10, -72, 10, -48, 10, 
 -	-66, 10, -47, 10, -125, 10, -48, 10, 
 -	-67, 10, -48, 10, -70, 10, -47, 10, 
 -	-122, 10, -48, 10, -72, 10, -48, 10, 
 -	-66, 10, -48, 10, -67, 10, -48, 10, 
 -	-80, 10, -48, 10, -69, 10, 10, 95, 
 -	10, 70, 10, 69, 10, 65, 10, 84, 
 -	10, 85, 10, 82, 10, 69, 10, 95, 
 -	10, 69, 10, 78, 10, 68, 10, 95, 
 -	10, 37, -48, -75, -48, -65, -47, -126, 
 -	58, 10, 10, -48, 10, 32, 35, 37, 
 -	42, 64, 9, 13, -112, -105, -104, -102, 
 -	-100, -98, -97, -95, -92, 10, -48, 10, 
 -	-69, 10, -48, 10, -72, 10, 10, 32, 
 -	-48, 10, -80, 10, -48, 10, -76, 10, 
 -	-48, 10, -80, 10, -47, 10, -126, 10, 
 -	-48, 10, -75, -72, -66, 10, -48, 10, 
 -	-80, 10, -48, 10, -76, 10, -48, 10, 
 -	32, -80, 10, -48, 10, -66, 10, -48, 
 -	10, -77, 10, -47, 10, -125, 10, -47, 
 -	10, -101, 10, -48, 10, -67, 10, -48, 
 -	10, -66, 10, -47, 10, -127, 10, -47, 
 -	10, -126, 10, 10, 58, -48, -47, 10, 
 -	-67, 10, -48, 10, -76, 10, -48, 10, 
 -	-127, 10, -48, 10, -66, 10, -48, 10, 
 -	-79, 10, -48, 10, -72, 10, -48, 10, 
 -	-67, 10, -48, 10, -80, 10, -47, 10, 
 -	-128, 10, -48, 10, -72, 10, -48, 10, 
 -	-68, 10, -48, 10, -75, 10, -47, 10, 
 -	-128, 10, -47, 10, -122, 10, -48, 10, 
 -	-75, 10, -48, 10, -67, 10, -48, 10, 
 -	-80, 10, -47, 10, -128, 10, -48, 10, 
 -	-72, 10, -48, 10, -66, 10, -47, 10, 
 -	-125, 10, -48, 10, -67, 10, -48, 10, 
 -	-70, 10, -47, 10, -122, 10, -48, 10, 
 -	-72, 10, -48, 10, -66, 10, -48, 10, 
 -	-67, 10, -48, 10, -80, 10, -48, 10, 
 -	-69, 10, 10, 95, 10, 70, 10, 69, 
 -	10, 65, 10, 84, 10, 85, 10, 82, 
 -	10, 69, 10, 95, 10, 69, 10, 78, 
 -	10, 68, 10, 95, 10, 37, -48, -66, 
 -	-48, -77, -47, -125, -47, -101, -48, -67, 
 -	-48, -66, -47, -127, -47, -126, 58, 10, 
 -	10, -48, 10, 32, 35, 37, 64, 9, 
 -	13, -102, -100, -98, -97, -95, -92, 10, 
 -	-48, 10, -66, 10, -48, 10, -67, 10, 
 -	-47, 10, -126, -122, 10, -48, 10, -75, 
 -	10, -48, 10, -70, 10, -47, 10, -127, 
 -	10, -47, 10, -126, 10, 10, 58, -48, 
 -	10, -75, 10, -48, 10, -65, 10, -48, 
 -	10, -66, 10, -48, 10, -77, 10, -47, 
 -	10, -125, 10, -47, 10, -101, 10, -48, 
 -	10, -67, 10, -48, 10, -66, 10, -47, 
 -	10, -127, 10, -48, 10, -67, -66, 10, 
 -	-48, 10, -66, 10, -48, 10, -78, 10, 
 -	-48, 10, -80, 10, -48, 10, -79, 10, 
 -	-48, 10, -72, 10, -48, 10, -67, 10, 
 -	-48, -47, 10, -66, 10, -48, 10, -73, 
 -	10, -48, 10, -80, 10, -48, 10, -76, 
 -	10, -128, 10, -48, 10, -72, 10, -48, 
 -	10, -68, 10, -48, 10, -75, 10, -47, 
 -	10, -128, 10, -48, 10, 58, -72, 10, 
 -	-48, -47, 10, -70, 10, -48, 10, -72, 
 -	10, -47, 10, -122, 10, -126, -122, 10, 
 -	-47, 10, -128, 10, -47, 10, -125, 10, 
 -	-48, 10, -70, 10, -47, 10, -126, 10, 
 -	-47, 10, -125, 10, -47, 10, -128, 10, 
 -	-48, 10, -80, 10, 10, 32, -47, 10, 
 -	-127, 10, -47, 10, -122, 10, -48, 10, 
 -	-75, 10, -48, 10, -67, 10, -48, 10, 
 -	-80, 10, -47, 10, -128, 10, -48, 10, 
 -	-72, 10, -47, 10, -104, 10, -48, 10, 
 -	-75, 10, -48, 10, -67, 10, -48, 10, 
 -	-80, 10, -47, 10, -128, 10, -48, 10, 
 -	-72, 10, -48, -47, 10, -66, 10, -104, 
 -	10, -48, 10, -47, 10, -125, 10, -48, 
 -	10, -67, 10, -48, 10, -70, 10, -47, 
 -	10, -122, 10, -48, 10, -72, 10, -48, 
 -	10, -66, 10, -48, 10, -67, 10, -48, 
 -	10, -80, 10, -48, 10, -69, 10, 10, 
 -	95, 10, 70, 10, 69, 10, 65, 10, 
 -	84, 10, 85, 10, 82, 10, 69, 10, 
 -	95, 10, 69, 10, 78, 10, 68, 10, 
 -	95, 10, 37, -48, -47, -67, -48, -76, 
 -	-48, -127, -48, -67, -66, -48, -66, -48, 
 -	-78, -48, -80, -48, -79, -48, -72, -48, 
 -	-67, -48, -80, -48, -47, -66, -48, -73, 
 -	-48, -80, -48, -76, -48, -72, -48, -67, 
 -	-128, -48, -72, -48, -68, -48, -75, -47, 
 -	-128, -48, 58, -72, 58, 10, 10, -48, 
 -	10, 32, 35, 124, 9, 13, -100, -98, 
 -	-92, 10, -48, 10, -66, 10, -48, 10, 
 -	-77, 10, -47, 10, -125, 10, -47, 10, 
 -	-101, 10, -48, 10, -67, 10, -48, 10, 
 -	-66, 10, -47, 10, -127, 10, -47, 10, 
 -	-126, 10, 10, 58, -47, 10, -127, 10, 
 -	-48, 10, -66, 10, -48, 10, -79, 10, 
 -	-48, 10, -72, 10, -48, 10, -67, 10, 
 -	-48, 10, -80, 10, -47, 10, -125, 10, 
 -	-48, 10, -67, 10, -48, 10, -70, 10, 
 -	-47, 10, -122, 10, -48, 10, -72, 10, 
 -	-48, 10, -66, 10, -48, 10, -67, 10, 
 -	-48, 10, -80, 10, -48, 10, -69, 10, 
 -	10, 10, -48, 10, 32, 35, 37, 42, 
 -	64, 9, 13, -112, -105, -104, -102, -100, 
 -	-98, -97, -95, -92, 10, -48, 10, -69, 
 -	10, -48, 10, -72, 10, 10, 32, -48, 
 -	10, -80, 10, -48, 10, -76, 10, -48, 
 -	10, -80, 10, -47, 10, -126, 10, -48, 
 -	10, -75, -72, -66, 10, -48, 10, -80, 
 -	-66, 10, -48, 10, -76, 10, -48, 10, 
 -	32, -80, 10, -48, 10, -67, 10, -47, 
 -	10, -126, -122, 10, -48, 10, -75, 10, 
 -	-48, 10, -70, 10, -47, 10, -127, 10, 
 -	-47, 10, -126, 10, 10, 58, -48, 10, 
 -	-75, 10, -48, 10, -65, 10, -48, 10, 
 -	-66, 10, -48, 10, -77, 10, -47, 10, 
 -	-125, 10, -47, 10, -101, 10, -48, 10, 
 -	-67, 10, -48, 10, -66, 10, -48, -47, 
 -	10, -67, 10, -48, 10, -76, 10, -48, 
 -	10, -127, 10, -48, 10, -67, -66, 10, 
 -	-48, 10, -66, 10, -48, 10, -78, 10, 
 -	-48, 10, -80, 10, -48, 10, -79, 10, 
 -	-48, 10, -72, 10, -48, 10, -67, 10, 
 -	-48, -47, 10, -66, 10, -48, 10, -73, 
 -	10, -48, 10, -80, 10, -48, 10, -76, 
 -	10, -128, 10, -48, 10, -72, 10, -48, 
 -	10, -68, 10, -48, 10, -75, 10, -47, 
 -	10, -128, 10, -48, -47, 10, -70, 10, 
 -	-48, 10, -72, 10, -47, 10, -122, 10, 
 -	-126, -122, 10, -47, 10, -128, 10, -47, 
 -	10, -125, 10, -48, 10, -70, 10, -47, 
 -	10, -126, 10, -47, 10, -125, 10, -47, 
 -	10, -128, 10, -48, 10, -80, 10, 10, 
 -	32, -47, 10, -127, 10, -47, 10, -122, 
 -	10, -48, 10, -75, 10, -48, 10, -67, 
 -	10, -48, 10, -80, 10, -47, 10, -128, 
 -	10, -48, 10, -72, 10, -47, 10, -104, 
 -	10, -48, 10, -75, 10, -48, 10, -67, 
 -	10, -48, 10, -80, 10, -47, 10, -128, 
 -	10, -48, 10, -72, 10, -48, 10, -66, 
 -	10, -47, 10, -125, 10, -48, 10, -67, 
 -	10, -48, 10, -70, 10, -47, 10, -122, 
 -	10, -48, 10, -72, 10, -48, 10, -66, 
 -	10, -48, 10, -67, 10, -48, 10, -80, 
 -	10, -48, 10, -69, 10, 10, 95, 10, 
 -	70, 10, 69, 10, 65, 10, 84, 10, 
 -	85, 10, 82, 10, 69, 10, 95, 10, 
 -	69, 10, 78, 10, 68, 10, 95, 10, 
 -	37, -48, -47, -70, -48, -72, -47, -122, 
 -	-48, -80, -126, -122, -47, -128, -47, -125, 
 -	-48, -70, -47, -126, -47, -125, -47, -128, 
 -	-48, -80, 32, -47, -127, -47, -122, -48, 
 -	-75, -48, -67, -48, -80, -47, -128, -48, 
 -	-72, -47, -104, -48, -75, -48, -67, -48, 
 -	-80, -47, -128, -48, -72, -48, -47, -66, 
 -	58, -104, -48, -47, -125, -48, -67, -48, 
 -	-70, -47, -122, -48, -72, -48, -66, -48, 
 -	-67, -48, -80, -48, -69, -69, -65, 0
 -};
 -
 -static const char _lexer_single_lengths[] = {
 -	0, 10, 9, 1, 1, 1, 1, 1, 
 -	2, 2, 9, 1, 1, 2, 2, 3, 
 -	3, 3, 3, 2, 2, 2, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 3, 5, 3, 
 -	2, 4, 3, 2, 4, 9, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 3, 
 -	1, 2, 1, 1, 2, 1, 1, 1, 
 -	1, 2, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 7, 10, 2, 
 -	2, 2, 2, 2, 9, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 4, 2, 
 -	3, 2, 2, 3, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 3, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	3, 2, 2, 2, 2, 2, 3, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 7, 10, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 4, 2, 2, 2, 2, 
 -	3, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 3, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 6, 7, 
 -	2, 2, 2, 2, 2, 3, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 3, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 3, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	3, 2, 3, 2, 2, 2, 2, 2, 
 -	3, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 3, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 1, 
 -	1, 1, 1, 1, 1, 2, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 2, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 2, 1, 1, 1, 1, 5, 4, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 1, 
 -	1, 7, 10, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 4, 2, 3, 2, 2, 3, 2, 
 -	2, 2, 2, 3, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 3, 2, 2, 
 -	2, 2, 2, 2, 3, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 3, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 3, 2, 2, 2, 2, 2, 
 -	3, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 1, 1, 1, 
 -	1, 1, 1, 1, 2, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 2, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 0
 -};
 -
 -static const char _lexer_range_lengths[] = {
 -	0, 1, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 1, 0, 0, 0, 0, 1, 
 -	1, 1, 1, 1, 1, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 1, 1, 1, 
 -	1, 1, 0, 0, 1, 1, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 1, 0, 0, 
 -	0, 0, 0, 0, 1, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 1, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 1, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 1, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 1, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0
 -};
 -
 -static const short _lexer_index_offsets[] = {
 -	0, 0, 12, 22, 24, 26, 28, 30, 
 -	32, 35, 38, 49, 51, 53, 56, 59, 
 -	64, 69, 74, 79, 83, 87, 90, 92, 
 -	94, 96, 98, 100, 102, 104, 106, 108, 
 -	110, 112, 114, 116, 118, 120, 125, 132, 
 -	137, 141, 147, 151, 154, 160, 171, 173, 
 -	175, 177, 179, 181, 183, 185, 187, 189, 
 -	193, 195, 198, 200, 202, 205, 207, 209, 
 -	211, 213, 216, 218, 220, 222, 224, 226, 
 -	228, 230, 232, 234, 236, 238, 247, 258, 
 -	261, 264, 267, 270, 273, 284, 287, 290, 
 -	293, 296, 299, 302, 305, 308, 311, 316, 
 -	319, 323, 326, 329, 333, 336, 339, 342, 
 -	345, 348, 351, 354, 357, 360, 363, 366, 
 -	369, 372, 375, 378, 381, 384, 387, 390, 
 -	393, 396, 399, 402, 405, 408, 411, 415, 
 -	418, 421, 424, 427, 430, 433, 436, 439, 
 -	442, 445, 448, 451, 454, 457, 460, 463, 
 -	466, 469, 472, 475, 478, 481, 484, 487, 
 -	490, 494, 497, 500, 503, 506, 509, 513, 
 -	516, 519, 522, 525, 528, 531, 534, 537, 
 -	540, 543, 546, 549, 552, 555, 558, 561, 
 -	564, 567, 570, 573, 576, 579, 582, 585, 
 -	588, 591, 594, 597, 600, 603, 606, 609, 
 -	612, 615, 618, 621, 624, 627, 630, 633, 
 -	636, 639, 642, 645, 648, 651, 654, 657, 
 -	660, 663, 666, 669, 672, 675, 678, 681, 
 -	684, 687, 690, 693, 696, 699, 702, 705, 
 -	708, 711, 714, 717, 720, 723, 726, 729, 
 -	732, 735, 738, 740, 742, 744, 746, 748, 
 -	750, 752, 754, 756, 765, 776, 779, 782, 
 -	785, 788, 791, 794, 797, 800, 803, 806, 
 -	809, 812, 815, 818, 823, 826, 829, 832, 
 -	835, 839, 842, 845, 848, 851, 854, 857, 
 -	860, 863, 866, 869, 872, 875, 878, 881, 
 -	884, 887, 890, 893, 897, 900, 903, 906, 
 -	909, 912, 915, 918, 921, 924, 927, 930, 
 -	933, 936, 939, 942, 945, 948, 951, 954, 
 -	957, 960, 963, 966, 969, 972, 975, 978, 
 -	981, 984, 987, 990, 993, 996, 999, 1002, 
 -	1005, 1008, 1011, 1014, 1017, 1020, 1023, 1026, 
 -	1029, 1032, 1035, 1038, 1041, 1044, 1047, 1050, 
 -	1053, 1056, 1059, 1062, 1065, 1068, 1071, 1074, 
 -	1077, 1080, 1083, 1086, 1089, 1092, 1095, 1098, 
 -	1101, 1104, 1107, 1110, 1112, 1114, 1116, 1118, 
 -	1120, 1122, 1124, 1126, 1128, 1130, 1132, 1134, 
 -	1136, 1138, 1140, 1142, 1144, 1146, 1148, 1156, 
 -	1164, 1167, 1170, 1173, 1176, 1179, 1183, 1186, 
 -	1189, 1192, 1195, 1198, 1201, 1204, 1207, 1210, 
 -	1213, 1216, 1219, 1222, 1225, 1228, 1231, 1234, 
 -	1237, 1240, 1243, 1246, 1249, 1252, 1255, 1258, 
 -	1261, 1264, 1267, 1271, 1274, 1277, 1280, 1283, 
 -	1286, 1289, 1292, 1295, 1298, 1301, 1304, 1307, 
 -	1311, 1314, 1317, 1320, 1323, 1326, 1329, 1332, 
 -	1335, 1338, 1341, 1344, 1347, 1350, 1353, 1356, 
 -	1359, 1363, 1366, 1370, 1373, 1376, 1379, 1382, 
 -	1385, 1389, 1392, 1395, 1398, 1401, 1404, 1407, 
 -	1410, 1413, 1416, 1419, 1422, 1425, 1428, 1431, 
 -	1434, 1437, 1440, 1443, 1446, 1449, 1452, 1455, 
 -	1458, 1461, 1464, 1467, 1470, 1473, 1476, 1479, 
 -	1482, 1485, 1488, 1491, 1494, 1497, 1500, 1503, 
 -	1506, 1509, 1512, 1516, 1519, 1522, 1525, 1528, 
 -	1531, 1534, 1537, 1540, 1543, 1546, 1549, 1552, 
 -	1555, 1558, 1561, 1564, 1567, 1570, 1573, 1576, 
 -	1579, 1582, 1585, 1588, 1591, 1594, 1597, 1600, 
 -	1603, 1606, 1609, 1612, 1615, 1618, 1621, 1624, 
 -	1626, 1628, 1630, 1632, 1634, 1636, 1639, 1641, 
 -	1643, 1645, 1647, 1649, 1651, 1653, 1655, 1657, 
 -	1659, 1661, 1663, 1665, 1667, 1670, 1672, 1674, 
 -	1676, 1678, 1680, 1682, 1684, 1686, 1688, 1690, 
 -	1692, 1694, 1696, 1698, 1700, 1702, 1704, 1706, 
 -	1708, 1710, 1713, 1715, 1717, 1719, 1721, 1728, 
 -	1733, 1736, 1739, 1742, 1745, 1748, 1751, 1754, 
 -	1757, 1760, 1763, 1766, 1769, 1772, 1775, 1778, 
 -	1781, 1784, 1787, 1790, 1793, 1796, 1799, 1802, 
 -	1805, 1808, 1811, 1814, 1817, 1820, 1823, 1826, 
 -	1829, 1832, 1835, 1838, 1841, 1844, 1847, 1850, 
 -	1853, 1856, 1859, 1862, 1865, 1868, 1871, 1874, 
 -	1876, 1878, 1887, 1898, 1901, 1904, 1907, 1910, 
 -	1913, 1916, 1919, 1922, 1925, 1928, 1931, 1934, 
 -	1937, 1940, 1945, 1948, 1952, 1955, 1958, 1962, 
 -	1965, 1968, 1971, 1974, 1978, 1981, 1984, 1987, 
 -	1990, 1993, 1996, 1999, 2002, 2005, 2008, 2011, 
 -	2014, 2017, 2020, 2023, 2026, 2029, 2032, 2035, 
 -	2038, 2041, 2044, 2047, 2050, 2053, 2057, 2060, 
 -	2063, 2066, 2069, 2072, 2075, 2079, 2082, 2085, 
 -	2088, 2091, 2094, 2097, 2100, 2103, 2106, 2109, 
 -	2112, 2115, 2119, 2122, 2125, 2128, 2131, 2134, 
 -	2137, 2140, 2143, 2146, 2149, 2152, 2155, 2158, 
 -	2161, 2164, 2167, 2171, 2174, 2177, 2180, 2183, 
 -	2186, 2190, 2193, 2196, 2199, 2202, 2205, 2208, 
 -	2211, 2214, 2217, 2220, 2223, 2226, 2229, 2232, 
 -	2235, 2238, 2241, 2244, 2247, 2250, 2253, 2256, 
 -	2259, 2262, 2265, 2268, 2271, 2274, 2277, 2280, 
 -	2283, 2286, 2289, 2292, 2295, 2298, 2301, 2304, 
 -	2307, 2310, 2313, 2316, 2319, 2322, 2325, 2328, 
 -	2331, 2334, 2337, 2340, 2343, 2346, 2349, 2352, 
 -	2355, 2358, 2361, 2364, 2367, 2370, 2373, 2376, 
 -	2379, 2382, 2385, 2388, 2391, 2394, 2397, 2400, 
 -	2403, 2406, 2409, 2412, 2415, 2418, 2420, 2422, 
 -	2424, 2426, 2428, 2430, 2432, 2435, 2437, 2439, 
 -	2441, 2443, 2445, 2447, 2449, 2451, 2453, 2455, 
 -	2457, 2459, 2461, 2463, 2465, 2467, 2469, 2471, 
 -	2473, 2475, 2477, 2479, 2481, 2483, 2485, 2487, 
 -	2489, 2491, 2493, 2495, 2497, 2499, 2501, 2503, 
 -	2505, 2507, 2509, 2511, 2513, 2515, 2517, 2520, 
 -	2522, 2524, 2526, 2528, 2530, 2532, 2534, 2536, 
 -	2538, 2540, 2542, 2544, 2546, 2548, 2550, 2552, 
 -	2554, 2556, 2558, 2560, 2562, 2564, 2566, 2568
 -};
 -
 -static const short _lexer_trans_targs[] = {
 -	2, 869, 10, 10, 11, 21, 23, 7, 
 -	37, 40, 10, 0, 3, 46, 7, 56, 
 -	355, 526, 548, 796, 851, 0, 4, 0, 
 -	5, 0, 6, 0, 7, 0, 8, 0, 
 -	10, 22, 9, 10, 22, 9, 2, 10, 
 -	10, 11, 21, 23, 7, 37, 40, 10, 
 -	0, 12, 0, 13, 0, 15, 14, 14, 
 -	15, 14, 14, 16, 16, 17, 16, 16, 
 -	16, 16, 17, 16, 16, 16, 16, 18, 
 -	16, 16, 16, 16, 19, 16, 16, 10, 
 -	20, 20, 0, 10, 20, 20, 0, 10, 
 -	22, 21, 10, 0, 24, 0, 25, 0, 
 -	26, 0, 27, 0, 28, 0, 29, 0, 
 -	30, 0, 31, 0, 32, 0, 33, 0, 
 -	34, 0, 35, 0, 36, 0, 871, 0, 
 -	0, 0, 0, 0, 38, 39, 10, 39, 
 -	39, 37, 38, 38, 10, 39, 37, 39, 
 -	0, 40, 41, 40, 0, 45, 44, 43, 
 -	41, 44, 42, 0, 43, 41, 42, 0, 
 -	43, 42, 45, 44, 43, 41, 44, 42, 
 -	2, 45, 45, 11, 21, 23, 7, 37, 
 -	40, 45, 0, 47, 0, 48, 0, 49, 
 -	0, 50, 0, 51, 0, 52, 0, 53, 
 -	0, 54, 0, 55, 0, 7, 7, 7, 
 -	0, 57, 0, 58, 62, 0, 59, 0, 
 -	60, 0, 61, 8, 0, 7, 0, 63, 
 -	0, 64, 0, 65, 0, 66, 234, 0, 
 -	67, 0, 68, 0, 69, 0, 70, 0, 
 -	71, 0, 72, 0, 73, 0, 74, 0, 
 -	75, 0, 77, 76, 77, 76, 78, 77, 
 -	77, 10, 220, 83, 10, 77, 76, 79, 
 -	85, 83, 95, 112, 126, 142, 152, 202, 
 -	77, 76, 80, 77, 76, 81, 77, 76, 
 -	82, 77, 76, 83, 77, 76, 77, 84, 
 -	76, 2, 10, 10, 11, 21, 23, 7, 
 -	37, 40, 10, 0, 86, 77, 76, 87, 
 -	77, 76, 88, 77, 76, 89, 77, 76, 
 -	90, 77, 76, 91, 77, 76, 92, 77, 
 -	76, 93, 77, 76, 94, 77, 76, 83, 
 -	83, 83, 77, 76, 96, 77, 76, 97, 
 -	101, 77, 76, 98, 77, 76, 99, 77, 
 -	76, 100, 77, 84, 76, 83, 77, 76, 
 -	102, 77, 76, 103, 77, 76, 104, 77, 
 -	76, 105, 77, 76, 106, 77, 76, 107, 
 -	77, 76, 108, 77, 76, 109, 77, 76, 
 -	110, 77, 76, 111, 77, 76, 77, 84, 
 -	76, 113, 77, 76, 114, 77, 76, 115, 
 -	77, 76, 116, 77, 76, 117, 77, 76, 
 -	118, 77, 76, 119, 77, 76, 120, 77, 
 -	76, 121, 77, 76, 122, 77, 76, 123, 
 -	77, 76, 124, 77, 76, 125, 77, 76, 
 -	109, 77, 76, 127, 131, 77, 76, 128, 
 -	77, 76, 129, 77, 76, 130, 77, 76, 
 -	100, 77, 76, 132, 77, 76, 133, 77, 
 -	76, 134, 77, 76, 135, 77, 76, 136, 
 -	77, 76, 137, 77, 76, 138, 77, 76, 
 -	139, 77, 76, 140, 77, 76, 141, 77, 
 -	76, 111, 77, 76, 143, 77, 76, 144, 
 -	77, 76, 145, 77, 76, 146, 77, 76, 
 -	147, 77, 76, 148, 77, 76, 149, 77, 
 -	76, 150, 77, 76, 151, 77, 76, 111, 
 -	77, 76, 153, 158, 77, 76, 154, 77, 
 -	76, 155, 77, 76, 156, 77, 76, 157, 
 -	77, 76, 140, 77, 76, 159, 190, 77, 
 -	76, 160, 77, 76, 161, 77, 76, 162, 
 -	77, 76, 163, 77, 76, 164, 77, 76, 
 -	165, 77, 76, 166, 77, 76, 167, 77, 
 -	76, 168, 77, 76, 169, 77, 76, 170, 
 -	77, 76, 171, 77, 76, 172, 77, 76, 
 -	173, 77, 76, 77, 174, 76, 175, 77, 
 -	76, 176, 77, 76, 177, 77, 76, 178, 
 -	77, 76, 179, 77, 76, 180, 77, 76, 
 -	181, 77, 76, 182, 77, 76, 183, 77, 
 -	76, 184, 77, 76, 185, 77, 76, 186, 
 -	77, 76, 187, 77, 76, 188, 77, 76, 
 -	189, 77, 76, 140, 77, 76, 191, 77, 
 -	76, 192, 77, 76, 193, 77, 76, 194, 
 -	77, 76, 195, 77, 76, 196, 77, 76, 
 -	197, 77, 76, 198, 77, 76, 199, 77, 
 -	76, 200, 77, 76, 201, 77, 76, 111, 
 -	77, 76, 203, 77, 76, 204, 77, 76, 
 -	205, 77, 76, 206, 77, 76, 207, 77, 
 -	76, 208, 77, 76, 209, 77, 76, 210, 
 -	77, 76, 211, 77, 76, 212, 77, 76, 
 -	213, 77, 76, 214, 77, 76, 215, 77, 
 -	76, 216, 77, 76, 217, 77, 76, 218, 
 -	77, 76, 219, 77, 76, 120, 77, 76, 
 -	77, 221, 76, 77, 222, 76, 77, 223, 
 -	76, 77, 224, 76, 77, 225, 76, 77, 
 -	226, 76, 77, 227, 76, 77, 228, 76, 
 -	77, 229, 76, 77, 230, 76, 77, 231, 
 -	76, 77, 232, 76, 77, 233, 76, 77, 
 -	10, 76, 235, 0, 236, 0, 237, 0, 
 -	238, 0, 239, 0, 240, 0, 241, 0, 
 -	243, 242, 243, 242, 244, 243, 243, 10, 
 -	341, 249, 10, 243, 242, 245, 250, 249, 
 -	260, 266, 283, 299, 309, 323, 243, 242, 
 -	246, 243, 242, 247, 243, 242, 248, 243, 
 -	242, 249, 243, 242, 243, 84, 242, 251, 
 -	243, 242, 252, 243, 242, 253, 243, 242, 
 -	254, 243, 242, 255, 243, 242, 256, 243, 
 -	242, 257, 243, 242, 258, 243, 242, 259, 
 -	243, 242, 249, 249, 249, 243, 242, 261, 
 -	243, 242, 262, 243, 242, 263, 243, 242, 
 -	264, 243, 242, 265, 243, 84, 242, 249, 
 -	243, 242, 267, 243, 242, 268, 243, 242, 
 -	269, 243, 242, 270, 243, 242, 271, 243, 
 -	242, 272, 243, 242, 273, 243, 242, 274, 
 -	243, 242, 275, 243, 242, 276, 243, 242, 
 -	277, 243, 242, 278, 243, 242, 279, 243, 
 -	242, 280, 243, 242, 281, 243, 242, 282, 
 -	243, 242, 243, 84, 242, 284, 288, 243, 
 -	242, 285, 243, 242, 286, 243, 242, 287, 
 -	243, 242, 265, 243, 242, 289, 243, 242, 
 -	290, 243, 242, 291, 243, 242, 292, 243, 
 -	242, 293, 243, 242, 294, 243, 242, 295, 
 -	243, 242, 296, 243, 242, 297, 243, 242, 
 -	298, 243, 242, 282, 243, 242, 300, 243, 
 -	242, 301, 243, 242, 302, 243, 242, 303, 
 -	243, 242, 304, 243, 242, 305, 243, 242, 
 -	306, 243, 242, 307, 243, 242, 308, 243, 
 -	242, 282, 243, 242, 310, 243, 242, 311, 
 -	243, 242, 312, 243, 242, 313, 243, 242, 
 -	314, 243, 242, 315, 243, 242, 316, 243, 
 -	242, 317, 243, 242, 318, 243, 242, 319, 
 -	243, 242, 320, 243, 242, 321, 243, 242, 
 -	322, 243, 242, 282, 243, 242, 324, 243, 
 -	242, 325, 243, 242, 326, 243, 242, 327, 
 -	243, 242, 328, 243, 242, 329, 243, 242, 
 -	330, 243, 242, 331, 243, 242, 332, 243, 
 -	242, 333, 243, 242, 334, 243, 242, 335, 
 -	243, 242, 336, 243, 242, 337, 243, 242, 
 -	338, 243, 242, 339, 243, 242, 340, 243, 
 -	242, 274, 243, 242, 243, 342, 242, 243, 
 -	343, 242, 243, 344, 242, 243, 345, 242, 
 -	243, 346, 242, 243, 347, 242, 243, 348, 
 -	242, 243, 349, 242, 243, 350, 242, 243, 
 -	351, 242, 243, 352, 242, 243, 353, 242, 
 -	243, 354, 242, 243, 10, 242, 356, 0, 
 -	357, 0, 358, 0, 359, 0, 360, 0, 
 -	361, 0, 362, 0, 363, 0, 364, 0, 
 -	365, 0, 366, 0, 367, 0, 368, 0, 
 -	369, 0, 370, 0, 371, 0, 372, 0, 
 -	374, 373, 374, 373, 375, 374, 374, 10, 
 -	512, 10, 374, 373, 376, 395, 407, 423, 
 -	442, 494, 374, 373, 377, 374, 373, 378, 
 -	374, 373, 379, 374, 373, 380, 374, 373, 
 -	381, 374, 373, 382, 391, 374, 373, 383, 
 -	374, 373, 384, 374, 373, 385, 374, 373, 
 -	386, 374, 373, 387, 374, 373, 388, 374, 
 -	373, 389, 374, 373, 390, 374, 373, 374, 
 -	84, 373, 392, 374, 373, 393, 374, 373, 
 -	394, 374, 373, 388, 374, 373, 396, 374, 
 -	373, 397, 374, 373, 398, 374, 373, 399, 
 -	374, 373, 400, 374, 373, 401, 374, 373, 
 -	402, 374, 373, 403, 374, 373, 404, 374, 
 -	373, 405, 374, 373, 406, 374, 373, 386, 
 -	374, 373, 408, 374, 373, 409, 374, 373, 
 -	410, 374, 373, 411, 417, 374, 373, 412, 
 -	374, 373, 413, 374, 373, 414, 374, 373, 
 -	415, 374, 373, 416, 374, 373, 390, 374, 
 -	373, 418, 374, 373, 419, 374, 373, 420, 
 -	374, 373, 421, 374, 373, 422, 374, 373, 
 -	415, 374, 373, 424, 431, 374, 373, 425, 
 -	374, 373, 426, 374, 373, 427, 374, 373, 
 -	428, 374, 373, 429, 374, 373, 430, 374, 
 -	373, 419, 374, 373, 432, 374, 373, 433, 
 -	374, 373, 434, 374, 373, 435, 374, 373, 
 -	436, 374, 373, 437, 374, 373, 438, 374, 
 -	373, 439, 374, 373, 440, 374, 373, 441, 
 -	374, 84, 373, 390, 374, 373, 443, 448, 
 -	374, 373, 444, 374, 373, 445, 374, 373, 
 -	446, 374, 373, 447, 374, 373, 415, 374, 
 -	373, 449, 480, 374, 373, 450, 374, 373, 
 -	451, 374, 373, 452, 374, 373, 453, 374, 
 -	373, 454, 374, 373, 455, 374, 373, 456, 
 -	374, 373, 457, 374, 373, 458, 374, 373, 
 -	459, 374, 373, 460, 374, 373, 461, 374, 
 -	373, 462, 374, 373, 463, 374, 373, 374, 
 -	464, 373, 465, 374, 373, 466, 374, 373, 
 -	467, 374, 373, 468, 374, 373, 469, 374, 
 -	373, 470, 374, 373, 471, 374, 373, 472, 
 -	374, 373, 473, 374, 373, 474, 374, 373, 
 -	475, 374, 373, 476, 374, 373, 477, 374, 
 -	373, 478, 374, 373, 479, 374, 373, 415, 
 -	374, 373, 481, 374, 373, 482, 374, 373, 
 -	483, 374, 373, 484, 374, 373, 485, 374, 
 -	373, 486, 374, 373, 487, 374, 373, 488, 
 -	374, 373, 489, 374, 373, 490, 374, 373, 
 -	491, 492, 374, 373, 390, 374, 373, 493, 
 -	374, 373, 441, 374, 373, 495, 374, 373, 
 -	496, 374, 373, 497, 374, 373, 498, 374, 
 -	373, 499, 374, 373, 500, 374, 373, 501, 
 -	374, 373, 502, 374, 373, 503, 374, 373, 
 -	504, 374, 373, 505, 374, 373, 506, 374, 
 -	373, 507, 374, 373, 508, 374, 373, 509, 
 -	374, 373, 510, 374, 373, 511, 374, 373, 
 -	403, 374, 373, 374, 513, 373, 374, 514, 
 -	373, 374, 515, 373, 374, 516, 373, 374, 
 -	517, 373, 374, 518, 373, 374, 519, 373, 
 -	374, 520, 373, 374, 521, 373, 374, 522, 
 -	373, 374, 523, 373, 374, 524, 373, 374, 
 -	525, 373, 374, 10, 373, 527, 531, 0, 
 -	528, 0, 529, 0, 530, 0, 61, 0, 
 -	532, 0, 533, 0, 534, 540, 0, 535, 
 -	0, 536, 0, 537, 0, 538, 0, 539, 
 -	0, 74, 0, 541, 0, 542, 0, 543, 
 -	0, 544, 0, 545, 0, 546, 0, 547, 
 -	0, 371, 0, 549, 560, 0, 550, 0, 
 -	551, 0, 552, 0, 553, 0, 554, 0, 
 -	555, 0, 556, 0, 557, 0, 558, 0, 
 -	559, 0, 538, 0, 561, 0, 562, 0, 
 -	563, 0, 564, 0, 565, 0, 566, 0, 
 -	567, 0, 568, 0, 569, 0, 570, 623, 
 -	0, 571, 0, 572, 0, 574, 573, 574, 
 -	573, 575, 574, 574, 10, 10, 574, 573, 
 -	576, 593, 605, 574, 573, 577, 574, 573, 
 -	578, 574, 573, 579, 574, 573, 580, 574, 
 -	573, 581, 574, 573, 582, 574, 573, 583, 
 -	574, 573, 584, 574, 573, 585, 574, 573, 
 -	586, 574, 573, 587, 574, 573, 588, 574, 
 -	573, 589, 574, 573, 590, 574, 573, 591, 
 -	574, 573, 592, 574, 573, 574, 84, 573, 
 -	594, 574, 573, 595, 574, 573, 596, 574, 
 -	573, 597, 574, 573, 598, 574, 573, 599, 
 -	574, 573, 600, 574, 573, 601, 574, 573, 
 -	602, 574, 573, 603, 574, 573, 604, 574, 
 -	573, 592, 574, 573, 606, 574, 573, 607, 
 -	574, 573, 608, 574, 573, 609, 574, 573, 
 -	610, 574, 573, 611, 574, 573, 612, 574, 
 -	573, 613, 574, 573, 614, 574, 573, 615, 
 -	574, 573, 616, 574, 573, 617, 574, 573, 
 -	618, 574, 573, 619, 574, 573, 620, 574, 
 -	573, 621, 574, 573, 622, 574, 573, 584, 
 -	574, 573, 625, 624, 625, 624, 626, 625, 
 -	625, 10, 782, 631, 10, 625, 624, 627, 
 -	632, 631, 642, 665, 677, 697, 714, 764, 
 -	625, 624, 628, 625, 624, 629, 625, 624, 
 -	630, 625, 624, 631, 625, 624, 625, 84, 
 -	624, 633, 625, 624, 634, 625, 624, 635, 
 -	625, 624, 636, 625, 624, 637, 625, 624, 
 -	638, 625, 624, 639, 625, 624, 640, 625, 
 -	624, 641, 625, 624, 631, 631, 631, 625, 
 -	624, 643, 625, 624, 644, 648, 625, 624, 
 -	645, 625, 624, 646, 625, 624, 647, 625, 
 -	84, 624, 631, 625, 624, 649, 625, 624, 
 -	650, 625, 624, 651, 625, 624, 652, 661, 
 -	625, 624, 653, 625, 624, 654, 625, 624, 
 -	655, 625, 624, 656, 625, 624, 657, 625, 
 -	624, 658, 625, 624, 659, 625, 624, 660, 
 -	625, 624, 625, 84, 624, 662, 625, 624, 
 -	663, 625, 624, 664, 625, 624, 658, 625, 
 -	624, 666, 625, 624, 667, 625, 624, 668, 
 -	625, 624, 669, 625, 624, 670, 625, 624, 
 -	671, 625, 624, 672, 625, 624, 673, 625, 
 -	624, 674, 625, 624, 675, 625, 624, 676, 
 -	625, 624, 656, 625, 624, 678, 682, 625, 
 -	624, 679, 625, 624, 680, 625, 624, 681, 
 -	625, 624, 647, 625, 624, 683, 625, 624, 
 -	684, 625, 624, 685, 691, 625, 624, 686, 
 -	625, 624, 687, 625, 624, 688, 625, 624, 
 -	689, 625, 624, 690, 625, 624, 660, 625, 
 -	624, 692, 625, 624, 693, 625, 624, 694, 
 -	625, 624, 695, 625, 624, 696, 625, 624, 
 -	689, 625, 624, 698, 705, 625, 624, 699, 
 -	625, 624, 700, 625, 624, 701, 625, 624, 
 -	702, 625, 624, 703, 625, 624, 704, 625, 
 -	624, 693, 625, 624, 706, 625, 624, 707, 
 -	625, 624, 708, 625, 624, 709, 625, 624, 
 -	710, 625, 624, 711, 625, 624, 712, 625, 
 -	624, 713, 625, 624, 660, 625, 624, 715, 
 -	720, 625, 624, 716, 625, 624, 717, 625, 
 -	624, 718, 625, 624, 719, 625, 624, 689, 
 -	625, 624, 721, 752, 625, 624, 722, 625, 
 -	624, 723, 625, 624, 724, 625, 624, 725, 
 -	625, 624, 726, 625, 624, 727, 625, 624, 
 -	728, 625, 624, 729, 625, 624, 730, 625, 
 -	624, 731, 625, 624, 732, 625, 624, 733, 
 -	625, 624, 734, 625, 624, 735, 625, 624, 
 -	625, 736, 624, 737, 625, 624, 738, 625, 
 -	624, 739, 625, 624, 740, 625, 624, 741, 
 -	625, 624, 742, 625, 624, 743, 625, 624, 
 -	744, 625, 624, 745, 625, 624, 746, 625, 
 -	624, 747, 625, 624, 748, 625, 624, 749, 
 -	625, 624, 750, 625, 624, 751, 625, 624, 
 -	689, 625, 624, 753, 625, 624, 754, 625, 
 -	624, 755, 625, 624, 756, 625, 624, 757, 
 -	625, 624, 758, 625, 624, 759, 625, 624, 
 -	760, 625, 624, 761, 625, 624, 762, 625, 
 -	624, 763, 625, 624, 660, 625, 624, 765, 
 -	625, 624, 766, 625, 624, 767, 625, 624, 
 -	768, 625, 624, 769, 625, 624, 770, 625, 
 -	624, 771, 625, 624, 772, 625, 624, 773, 
 -	625, 624, 774, 625, 624, 775, 625, 624, 
 -	776, 625, 624, 777, 625, 624, 778, 625, 
 -	624, 779, 625, 624, 780, 625, 624, 781, 
 -	625, 624, 673, 625, 624, 625, 783, 624, 
 -	625, 784, 624, 625, 785, 624, 625, 786, 
 -	624, 625, 787, 624, 625, 788, 624, 625, 
 -	789, 624, 625, 790, 624, 625, 791, 624, 
 -	625, 792, 624, 625, 793, 624, 625, 794, 
 -	624, 625, 795, 624, 625, 10, 624, 797, 
 -	804, 0, 798, 0, 799, 0, 800, 0, 
 -	801, 0, 802, 0, 803, 0, 240, 0, 
 -	805, 836, 0, 806, 0, 807, 0, 808, 
 -	0, 809, 0, 810, 0, 811, 0, 812, 
 -	0, 813, 0, 814, 0, 815, 0, 816, 
 -	0, 817, 0, 818, 0, 819, 0, 820, 
 -	0, 821, 0, 822, 0, 823, 0, 824, 
 -	0, 825, 0, 826, 0, 827, 0, 828, 
 -	0, 829, 0, 830, 0, 831, 0, 832, 
 -	0, 833, 0, 834, 0, 835, 0, 802, 
 -	0, 837, 0, 838, 0, 839, 0, 840, 
 -	0, 841, 0, 842, 0, 843, 0, 844, 
 -	0, 845, 0, 846, 0, 847, 849, 0, 
 -	848, 0, 623, 0, 850, 0, 570, 0, 
 -	852, 0, 853, 0, 854, 0, 855, 0, 
 -	856, 0, 857, 0, 858, 0, 859, 0, 
 -	860, 0, 861, 0, 862, 0, 863, 0, 
 -	864, 0, 865, 0, 866, 0, 867, 0, 
 -	868, 0, 363, 0, 870, 0, 10, 0, 
 -	0, 0
 -};
 -
 -static const unsigned char _lexer_trans_actions[] = {
 -	29, 0, 54, 0, 5, 1, 0, 29, 
 -	1, 35, 0, 43, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	149, 126, 57, 110, 23, 0, 29, 54, 
 -	0, 5, 1, 0, 29, 1, 35, 0, 
 -	43, 0, 43, 0, 43, 139, 48, 9, 
 -	106, 11, 0, 134, 45, 45, 45, 3, 
 -	122, 33, 33, 33, 0, 122, 33, 33, 
 -	33, 0, 122, 33, 0, 33, 0, 102, 
 -	7, 7, 43, 54, 0, 0, 43, 114, 
 -	25, 0, 54, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	43, 43, 43, 43, 0, 27, 118, 27, 
 -	27, 51, 27, 0, 54, 0, 1, 0, 
 -	43, 0, 0, 0, 43, 54, 37, 37, 
 -	87, 37, 37, 43, 0, 39, 0, 43, 
 -	0, 0, 54, 0, 0, 39, 0, 0, 
 -	96, 54, 0, 93, 90, 41, 96, 90, 
 -	99, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 0, 0, 
 -	43, 0, 43, 0, 0, 43, 0, 43, 
 -	0, 43, 0, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 144, 57, 54, 0, 84, 54, 
 -	0, 72, 33, 84, 72, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 54, 15, 
 -	0, 63, 130, 31, 60, 57, 31, 63, 
 -	57, 66, 31, 43, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 15, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 54, 15, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 54, 0, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	15, 0, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	144, 57, 54, 0, 84, 54, 0, 78, 
 -	33, 84, 78, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 54, 19, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 19, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 54, 19, 0, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 19, 0, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	144, 57, 54, 0, 84, 54, 0, 69, 
 -	33, 69, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 54, 
 -	13, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 13, 0, 0, 54, 0, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 54, 
 -	0, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 13, 0, 0, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 0, 
 -	43, 0, 43, 0, 43, 144, 57, 54, 
 -	0, 84, 54, 0, 81, 81, 0, 0, 
 -	0, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 54, 21, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 144, 57, 54, 0, 84, 54, 
 -	0, 75, 33, 84, 75, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 54, 17, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	17, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 54, 17, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	54, 0, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 17, 0, 0, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 0
 -};
 -
 -static const unsigned char _lexer_eof_actions[] = {
 -	0, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43
 -};
 -
 -static const int lexer_start = 1;
 -static const int lexer_first_final = 871;
 -static const int lexer_error = 0;
 -
 -static const int lexer_en_main = 1;
 -
 -
 -#line 258 "ragel/i18n/sr_cyrl.c.rl"
 -
 -static VALUE 
 -unindent(VALUE con, int start_col)
 -{
 -  VALUE re;
 -  /* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */
 -  char pat[32]; 
 -  snprintf(pat, 32, "^[\t ]{0,%d}", start_col); 
 -  re = rb_reg_regcomp(rb_str_new2(pat));
 -  rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2(""));
 -
 -  return Qnil;
 -
 -}
 -
 -static void 
 -store_kw_con(VALUE listener, const char * event_name, 
 -             const char * keyword_at, size_t keyword_length, 
 -             const char * at,         size_t length, 
 -             int current_line)
 -{
 -  VALUE con = Qnil, kw = Qnil;
 -  kw = ENCODED_STR_NEW(keyword_at, keyword_length);
 -  con = ENCODED_STR_NEW(at, length);
 -  rb_funcall(con, rb_intern("strip!"), 0);
 -  rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); 
 -}
 -
 -static void
 -store_multiline_kw_con(VALUE listener, const char * event_name,
 -                      const char * keyword_at, size_t keyword_length,
 -                      const char * at,         size_t length,
 -                      int current_line, int start_col)
 -{
 -  VALUE split;
 -  VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil;
 -
 -  kw = ENCODED_STR_NEW(keyword_at, keyword_length);
 -  con = ENCODED_STR_NEW(at, length);
 -
 -  unindent(con, start_col);
 -  
 -  split = rb_str_split(con, "\n");
 -
 -  name = rb_funcall(split, rb_intern("shift"), 0);
 -  desc = rb_ary_join(split, rb_str_new2( "\n" ));
 -
 -  if( name == Qnil ) 
 -  {
 -    name = rb_str_new2("");
 -  }
 -  if( rb_funcall(desc, rb_intern("size"), 0) == 0) 
 -  {
 -    desc = rb_str_new2("");
 -  }
 -  rb_funcall(name, rb_intern("strip!"), 0);
 -  rb_funcall(desc, rb_intern("rstrip!"), 0);
 -  rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); 
 -}
 -
 -static void 
 -store_attr(VALUE listener, const char * attr_type,
 -           const char * at, size_t length, 
 -           int line)
 -{
 -  VALUE val = ENCODED_STR_NEW(at, length);
 -  rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line));
 -}
 -static void 
 -store_docstring_content(VALUE listener, 
 -          int start_col, 
 -          const char *type_at, size_t type_length,
 -          const char *at, size_t length, 
 -          int current_line)
 -{
 -  VALUE re2;
 -  VALUE unescape_escaped_quotes;
 -  VALUE con = ENCODED_STR_NEW(at, length);
 -  VALUE con_type = ENCODED_STR_NEW(type_at, type_length);
 -
 -  unindent(con, start_col);
 -
 -  re2 = rb_reg_regcomp(rb_str_new2("\r\\Z"));
 -  unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\""));
 -  rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2(""));
 -  rb_funcall(con_type, rb_intern("strip!"), 0);
 -  rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\""));
 -  rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line));
 -}
 -static void 
 -raise_lexer_error(const char * at, int line)
 -{ 
 -  rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at);
 -}
 -
 -static void lexer_init(lexer_state *lexer) {
 -  lexer->content_start = 0;
 -  lexer->content_end = 0;
 -  lexer->content_len = 0;
 -  lexer->docstring_content_type_start = 0;
 -  lexer->docstring_content_type_end = 0;
 -  lexer->mark = 0;
 -  lexer->keyword_start = 0;
 -  lexer->keyword_end = 0;
 -  lexer->next_keyword_start = 0;
 -  lexer->line_number = 1;
 -  lexer->last_newline = 0;
 -  lexer->final_newline = 0;
 -  lexer->start_col = 0;
 -}
 -
 -static VALUE CLexer_alloc(VALUE klass)
 -{
 -  VALUE obj;
 -  lexer_state *lxr = ALLOC(lexer_state);
 -  lexer_init(lxr);
 -
 -  obj = Data_Wrap_Struct(klass, NULL, -1, lxr);
 -
 -  return obj;
 -}
 -
 -static VALUE CLexer_init(VALUE self, VALUE listener)
 -{
 -  lexer_state *lxr; 
 -  rb_iv_set(self, "@listener", listener);
 -  
 -  lxr = NULL;
 -  DATA_GET(self, lexer_state, lxr);
 -  lexer_init(lxr);
 -  
 -  return self;
 -}
 -
 -static VALUE CLexer_scan(VALUE self, VALUE input)
 -{
 -  VALUE input_copy;
 -  char *data;
 -  size_t len;
 -  VALUE listener = rb_iv_get(self, "@listener");
 -
 -  lexer_state *lexer;
 -  lexer = NULL;
 -  DATA_GET(self, lexer_state, lexer);
 -
 -  input_copy = rb_str_dup(input);
 -
 -  rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%"));
 -  data = RSTRING_PTR(input_copy);
 -  len = RSTRING_LEN(input_copy);
 -  
 -  if (len == 0) { 
 -    rb_raise(rb_eGherkinLexingError, "No content to lex.");
 -  } else {
 -
 -    const char *p, *pe, *eof;
 -    int cs = 0;
 -    
 -    VALUE current_row = Qnil;
 -
 -    p = data;
 -    pe = data + len;
 -    eof = pe;
 -    
 -    assert(*pe == '\0' && "pointer does not end on NULL");
 -    
 -    
 -#line 1716 "ext/gherkin_lexer_sr_cyrl/gherkin_lexer_sr_cyrl.c"
 -	{
 -	cs = lexer_start;
 -	}
 -
 -#line 425 "ragel/i18n/sr_cyrl.c.rl"
 -    
 -#line 1723 "ext/gherkin_lexer_sr_cyrl/gherkin_lexer_sr_cyrl.c"
 -	{
 -	int _klen;
 -	unsigned int _trans;
 -	const char *_acts;
 -	unsigned int _nacts;
 -	const char *_keys;
 -
 -	if ( p == pe )
 -		goto _test_eof;
 -	if ( cs == 0 )
 -		goto _out;
 -_resume:
 -	_keys = _lexer_trans_keys + _lexer_key_offsets[cs];
 -	_trans = _lexer_index_offsets[cs];
 -
 -	_klen = _lexer_single_lengths[cs];
 -	if ( _klen > 0 ) {
 -		const char *_lower = _keys;
 -		const char *_mid;
 -		const char *_upper = _keys + _klen - 1;
 -		while (1) {
 -			if ( _upper < _lower )
 -				break;
 -
 -			_mid = _lower + ((_upper-_lower) >> 1);
 -			if ( (*p) < *_mid )
 -				_upper = _mid - 1;
 -			else if ( (*p) > *_mid )
 -				_lower = _mid + 1;
 -			else {
 -				_trans += (unsigned int)(_mid - _keys);
 -				goto _match;
 -			}
 -		}
 -		_keys += _klen;
 -		_trans += _klen;
 -	}
 -
 -	_klen = _lexer_range_lengths[cs];
 -	if ( _klen > 0 ) {
 -		const char *_lower = _keys;
 -		const char *_mid;
 -		const char *_upper = _keys + (_klen<<1) - 2;
 -		while (1) {
 -			if ( _upper < _lower )
 -				break;
 -
 -			_mid = _lower + (((_upper-_lower) >> 1) & ~1);
 -			if ( (*p) < _mid[0] )
 -				_upper = _mid - 2;
 -			else if ( (*p) > _mid[1] )
 -				_lower = _mid + 2;
 -			else {
 -				_trans += (unsigned int)((_mid - _keys)>>1);
 -				goto _match;
 -			}
 -		}
 -		_trans += _klen;
 -	}
 -
 -_match:
 -	cs = _lexer_trans_targs[_trans];
 -
 -	if ( _lexer_trans_actions[_trans] == 0 )
 -		goto _again;
 -
 -	_acts = _lexer_actions + _lexer_trans_actions[_trans];
 -	_nacts = (unsigned int) *_acts++;
 -	while ( _nacts-- > 0 )
 -	{
 -		switch ( *_acts++ )
 -		{
 -	case 0:
 -#line 83 "ragel/i18n/sr_cyrl.c.rl"
 -	{
 -		MARK(content_start, p);
 -    lexer->current_line = lexer->line_number;
 -    lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2;
 -  }
 -	break;
 -	case 1:
 -#line 89 "ragel/i18n/sr_cyrl.c.rl"
 -	{
 -    MARK(content_start, p);
 -  }
 -	break;
 -	case 2:
 -#line 93 "ragel/i18n/sr_cyrl.c.rl"
 -	{
 -    lexer->current_line = lexer->line_number;
 -    lexer->start_col = p - data - lexer->last_newline;
 -  }
 -	break;
 -	case 3:
 -#line 98 "ragel/i18n/sr_cyrl.c.rl"
 -	{
 -    int len = LEN(content_start, PTR_TO(final_newline));
 -    int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end));
 -
 -    if (len < 0) len = 0;
 -    if (type_len < 0) len = 0;
 -
 -    store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line);
 -  }
 -	break;
 -	case 4:
 -#line 108 "ragel/i18n/sr_cyrl.c.rl"
 -	{ 
 -    MARK(docstring_content_type_start, p);
 -  }
 -	break;
 -	case 5:
 -#line 112 "ragel/i18n/sr_cyrl.c.rl"
 -	{ 
 -    MARK(docstring_content_type_end, p);
 -  }
 -	break;
 -	case 6:
 -#line 116 "ragel/i18n/sr_cyrl.c.rl"
 -	{
 -    STORE_KW_END_CON(feature);
 -  }
 -	break;
 -	case 7:
 -#line 120 "ragel/i18n/sr_cyrl.c.rl"
 -	{
 -    STORE_KW_END_CON(background);
 -  }
 -	break;
 -	case 8:
 -#line 124 "ragel/i18n/sr_cyrl.c.rl"
 -	{
 -    STORE_KW_END_CON(scenario);
 -  }
 -	break;
 -	case 9:
 -#line 128 "ragel/i18n/sr_cyrl.c.rl"
 -	{
 -    STORE_KW_END_CON(scenario_outline);
 -  }
 -	break;
 -	case 10:
 -#line 132 "ragel/i18n/sr_cyrl.c.rl"
 -	{
 -    STORE_KW_END_CON(examples);
 -  }
 -	break;
 -	case 11:
 -#line 136 "ragel/i18n/sr_cyrl.c.rl"
 -	{
 -    store_kw_con(listener, "step",
 -      PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
 -      PTR_TO(content_start), LEN(content_start, p), 
 -      lexer->current_line);
 -  }
 -	break;
 -	case 12:
 -#line 143 "ragel/i18n/sr_cyrl.c.rl"
 -	{
 -    STORE_ATTR(comment);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 13:
 -#line 148 "ragel/i18n/sr_cyrl.c.rl"
 -	{
 -    STORE_ATTR(tag);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 14:
 -#line 153 "ragel/i18n/sr_cyrl.c.rl"
 -	{
 -    lexer->line_number += 1;
 -    MARK(final_newline, p);
 -  }
 -	break;
 -	case 15:
 -#line 158 "ragel/i18n/sr_cyrl.c.rl"
 -	{
 -    MARK(last_newline, p + 1);
 -  }
 -	break;
 -	case 16:
 -#line 162 "ragel/i18n/sr_cyrl.c.rl"
 -	{
 -    if (lexer->mark == 0) {
 -      MARK(mark, p);
 -    }
 -  }
 -	break;
 -	case 17:
 -#line 168 "ragel/i18n/sr_cyrl.c.rl"
 -	{
 -    MARK(keyword_end, p);
 -    MARK(keyword_start, PTR_TO(mark));
 -    MARK(content_start, p + 1);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 18:
 -#line 175 "ragel/i18n/sr_cyrl.c.rl"
 -	{
 -    MARK(content_end, p);
 -  }
 -	break;
 -	case 19:
 -#line 179 "ragel/i18n/sr_cyrl.c.rl"
 -	{
 -    p = p - 1;
 -    lexer->current_line = lexer->line_number;
 -    current_row = rb_ary_new();
 -  }
 -	break;
 -	case 20:
 -#line 185 "ragel/i18n/sr_cyrl.c.rl"
 -	{
 -		MARK(content_start, p);
 -  }
 -	break;
 -	case 21:
 -#line 189 "ragel/i18n/sr_cyrl.c.rl"
 -	{
 -    VALUE re_pipe, re_newline, re_backslash;
 -    VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
 -    rb_funcall(con, rb_intern("strip!"), 0);
 -    re_pipe      = rb_reg_regcomp(rb_str_new2("\\\\\\|"));
 -    re_newline   = rb_reg_regcomp(rb_str_new2("\\\\n"));
 -    re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_pipe,      rb_str_new2("|"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_newline,   rb_str_new2("\n"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\"));
 -
 -    rb_ary_push(current_row, con);
 -  }
 -	break;
 -	case 22:
 -#line 203 "ragel/i18n/sr_cyrl.c.rl"
 -	{
 -    rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
 -  }
 -	break;
 -	case 23:
 -#line 207 "ragel/i18n/sr_cyrl.c.rl"
 -	{
 -    int line;
 -    if (cs < lexer_first_final) {
 -      size_t count = 0;
 -      VALUE newstr_val;
 -      char *newstr;
 -      int newstr_count = 0;        
 -      size_t len;
 -      const char *buff;
 -      if (lexer->last_newline != 0) {
 -        len = LEN(last_newline, eof);
 -        buff = PTR_TO(last_newline);
 -      } else {
 -        len = strlen(data);
 -        buff = data;
 -      }
 -
 -      /* Allocate as a ruby string so that it gets cleaned up by GC */
 -      newstr_val = rb_str_new(buff, len);
 -      newstr = RSTRING_PTR(newstr_val);
 -
 -
 -      for (count = 0; count < len; count++) {
 -        if(buff[count] == 10) {
 -          newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
 -          break;
 -        } else {
 -          if (buff[count] == '%') {
 -            newstr[newstr_count++] = buff[count];
 -            newstr[newstr_count] = buff[count];
 -          } else {
 -            newstr[newstr_count] = buff[count];
 -          }
 -        }
 -        newstr_count++;
 -      }
 -
 -      line = lexer->line_number;
 -      lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
 -      raise_lexer_error(newstr, line);
 -    } else {
 -      rb_funcall(listener, rb_intern("eof"), 0);
 -    }
 -  }
 -	break;
 -#line 2013 "ext/gherkin_lexer_sr_cyrl/gherkin_lexer_sr_cyrl.c"
 -		}
 -	}
 -
 -_again:
 -	if ( cs == 0 )
 -		goto _out;
 -	if ( ++p != pe )
 -		goto _resume;
 -	_test_eof: {}
 -	if ( p == eof )
 -	{
 -	const char *__acts = _lexer_actions + _lexer_eof_actions[cs];
 -	unsigned int __nacts = (unsigned int) *__acts++;
 -	while ( __nacts-- > 0 ) {
 -		switch ( *__acts++ ) {
 -	case 23:
 -#line 207 "ragel/i18n/sr_cyrl.c.rl"
 -	{
 -    int line;
 -    if (cs < lexer_first_final) {
 -      size_t count = 0;
 -      VALUE newstr_val;
 -      char *newstr;
 -      int newstr_count = 0;        
 -      size_t len;
 -      const char *buff;
 -      if (lexer->last_newline != 0) {
 -        len = LEN(last_newline, eof);
 -        buff = PTR_TO(last_newline);
 -      } else {
 -        len = strlen(data);
 -        buff = data;
 -      }
 -
 -      /* Allocate as a ruby string so that it gets cleaned up by GC */
 -      newstr_val = rb_str_new(buff, len);
 -      newstr = RSTRING_PTR(newstr_val);
 -
 -
 -      for (count = 0; count < len; count++) {
 -        if(buff[count] == 10) {
 -          newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
 -          break;
 -        } else {
 -          if (buff[count] == '%') {
 -            newstr[newstr_count++] = buff[count];
 -            newstr[newstr_count] = buff[count];
 -          } else {
 -            newstr[newstr_count] = buff[count];
 -          }
 -        }
 -        newstr_count++;
 -      }
 -
 -      line = lexer->line_number;
 -      lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
 -      raise_lexer_error(newstr, line);
 -    } else {
 -      rb_funcall(listener, rb_intern("eof"), 0);
 -    }
 -  }
 -	break;
 -#line 2076 "ext/gherkin_lexer_sr_cyrl/gherkin_lexer_sr_cyrl.c"
 -		}
 -	}
 -	}
 -
 -	_out: {}
 -	}
 -
 -#line 426 "ragel/i18n/sr_cyrl.c.rl"
 -
 -    assert(p <= pe && "data overflow after parsing execute");
 -    assert(lexer->content_start <= len && "content starts after data end");
 -    assert(lexer->mark < len && "mark is after data end");
 -    
 -    /* Reset lexer by re-initializing the whole thing */
 -    lexer_init(lexer);
 -
 -    if (cs == lexer_error) {
 -      rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails.");
 -    } else {
 -      return Qtrue;
 -    }
 -  }
 -}
 -
 -void Init_gherkin_lexer_sr_cyrl()
 -{
 -  mGherkin = rb_define_module("Gherkin");
 -  mGherkinLexer = rb_define_module_under(mGherkin, "Lexer");
 -  rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError"));
 -
 -  mCLexer = rb_define_module_under(mGherkin, "CLexer");
 -  cI18nLexer = rb_define_class_under(mCLexer, "Sr_cyrl", rb_cObject);
 -  rb_define_alloc_func(cI18nLexer, CLexer_alloc);
 -  rb_define_method(cI18nLexer, "initialize", CLexer_init, 1);
 -  rb_define_method(cI18nLexer, "scan", CLexer_scan, 1);
 -}
 -
diff --cc ext/gherkin_lexer_sr_latn/extconf.rb
index 1b586a0,1b586a0..0000000
deleted file mode 100644,100644
--- a/ext/gherkin_lexer_sr_latn/extconf.rb
+++ /dev/null
@@@ -1,6 -1,6 +1,0 @@@
--require 'mkmf'
--CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags']
--$CFLAGS << ' -O0 -Wall' if CONFIG['CC'] =~ /gcc|clang/
--dir_config("gherkin_lexer_sr_latn")
--have_library("c", "main")
--create_makefile("gherkin_lexer_sr_latn")
diff --cc ext/gherkin_lexer_sr_latn/gherkin_lexer_sr_latn.c
index bad6a66,2a26a93..0000000
deleted file mode 100644,100644
--- a/ext/gherkin_lexer_sr_latn/gherkin_lexer_sr_latn.c
+++ /dev/null
@@@ -1,1567 -1,1567 +1,0 @@@
--
- #line 1 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
- #include <assert.h>
- #include <ruby.h>
- 
- #if defined(_WIN32)
- #include <stddef.h>
- #endif
- 
- #ifdef HAVE_RUBY_RE_H
- #include <ruby/re.h>
- #else
- #include <re.h>
- #endif
- 
- #ifdef HAVE_RUBY_ENCODING_H
- #include <ruby/encoding.h>
- #define ENCODED_STR_NEW(ptr, len) \
-     rb_enc_str_new(ptr, len, rb_utf8_encoding())
- #else
- #define ENCODED_STR_NEW(ptr, len) \
-     rb_str_new(ptr, len)
- #endif
- 
- #ifndef RSTRING_PTR
- #define RSTRING_PTR(s) (RSTRING(s)->ptr)
- #endif
- 
- #ifndef RSTRING_LEN
- #define RSTRING_LEN(s) (RSTRING(s)->len)
- #endif
- 
- #define DATA_GET(FROM, TYPE, NAME) \
-   Data_Get_Struct(FROM, TYPE, NAME); \
-   if (NAME == NULL) { \
-     rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \
-   }
-  
- typedef struct lexer_state {
-   int content_len;
-   int line_number;
-   int current_line;
-   int start_col;
-   size_t mark;
-   size_t keyword_start;
-   size_t keyword_end;
-   size_t next_keyword_start;
-   size_t content_start;
-   size_t content_end;
-   size_t docstring_content_type_start;
-   size_t docstring_content_type_end;
-   size_t query_start;
-   size_t last_newline;
-   size_t final_newline;
- } lexer_state;
- 
- static VALUE mGherkin;
- static VALUE mGherkinLexer;
- static VALUE mCLexer;
- static VALUE cI18nLexer;
- static VALUE rb_eGherkinLexingError;
- 
- #define LEN(AT, P) (P - data - lexer->AT)
- #define MARK(M, P) (lexer->M = (P) - data)
- #define PTR_TO(P) (data + lexer->P)
- 
- #define STORE_KW_END_CON(EVENT) \
-   store_multiline_kw_con(listener, # EVENT, \
-     PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \
-     PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \
-     lexer->current_line, lexer->start_col); \
-     if (lexer->content_end != 0) { \
-       p = PTR_TO(content_end - 1); \
-     } \
-     lexer->content_end = 0
- 
- #define STORE_ATTR(ATTR) \
-     store_attr(listener, # ATTR, \
-       PTR_TO(content_start), LEN(content_start, p), \
-       lexer->line_number)
- 
- 
- #line 254 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
- 
- 
- /** Data **/
- 
- #line 89 "ext/gherkin_lexer_sr_latn/gherkin_lexer_sr_latn.c"
- static const char _lexer_actions[] = {
- 	0, 1, 0, 1, 1, 1, 2, 1, 
- 	3, 1, 4, 1, 5, 1, 6, 1, 
- 	7, 1, 8, 1, 9, 1, 10, 1, 
- 	11, 1, 12, 1, 13, 1, 16, 1, 
- 	17, 1, 18, 1, 19, 1, 20, 1, 
- 	21, 1, 22, 1, 23, 2, 1, 18, 
- 	2, 4, 5, 2, 13, 0, 2, 14, 
- 	15, 2, 17, 0, 2, 17, 2, 2, 
- 	17, 16, 2, 17, 19, 2, 18, 6, 
- 	2, 18, 7, 2, 18, 8, 2, 18, 
- 	9, 2, 18, 10, 2, 18, 16, 2, 
- 	20, 21, 2, 22, 0, 2, 22, 2, 
- 	2, 22, 16, 2, 22, 19, 3, 3, 
- 	14, 15, 3, 5, 14, 15, 3, 11, 
- 	14, 15, 3, 12, 14, 15, 3, 13, 
- 	14, 15, 3, 14, 15, 18, 3, 17, 
- 	0, 11, 3, 17, 14, 15, 4, 1, 
- 	14, 15, 18, 4, 4, 5, 14, 15, 
- 	4, 17, 0, 14, 15, 5, 17, 0, 
- 	11, 14, 15
- };
- 
- static const short _lexer_key_offsets[] = {
- 	0, 0, 20, 21, 22, 41, 42, 43, 
- 	45, 47, 52, 57, 62, 67, 71, 75, 
- 	77, 78, 79, 80, 81, 82, 83, 84, 
- 	85, 86, 87, 88, 89, 90, 91, 92, 
- 	93, 95, 97, 102, 109, 114, 115, 116, 
- 	117, 118, 119, 120, 121, 122, 123, 124, 
- 	125, 126, 127, 128, 129, 130, 131, 132, 
- 	145, 147, 149, 151, 153, 155, 157, 159, 
- 	161, 163, 165, 167, 169, 171, 173, 175, 
- 	177, 179, 181, 183, 185, 187, 189, 191, 
- 	193, 195, 197, 199, 201, 220, 222, 223, 
- 	225, 226, 228, 229, 230, 231, 232, 233, 
- 	234, 251, 253, 255, 257, 259, 261, 263, 
- 	265, 267, 269, 271, 273, 275, 277, 279, 
- 	281, 283, 285, 287, 289, 291, 293, 295, 
- 	297, 299, 301, 303, 305, 307, 309, 311, 
- 	313, 315, 317, 320, 322, 324, 326, 329, 
- 	331, 334, 336, 338, 340, 342, 344, 346, 
- 	348, 350, 352, 354, 356, 358, 360, 362, 
- 	364, 366, 368, 370, 372, 374, 377, 379, 
- 	381, 384, 386, 388, 389, 390, 391, 392, 
- 	393, 394, 395, 412, 414, 416, 418, 420, 
- 	422, 424, 426, 428, 430, 432, 434, 436, 
- 	438, 440, 442, 444, 446, 448, 450, 452, 
- 	454, 456, 458, 460, 462, 464, 466, 468, 
- 	470, 472, 474, 477, 479, 482, 484, 486, 
- 	488, 490, 492, 494, 496, 499, 501, 504, 
- 	506, 508, 510, 512, 514, 516, 518, 520, 
- 	522, 524, 526, 528, 532, 534, 536, 538, 
- 	540, 542, 544, 546, 548, 550, 552, 554, 
- 	556, 558, 560, 562, 564, 566, 568, 570, 
- 	572, 574, 576, 578, 580, 582, 585, 587, 
- 	589, 592, 594, 596, 597, 598, 599, 601, 
- 	602, 604, 605, 606, 608, 609, 610, 611, 
- 	612, 613, 614, 615, 617, 618, 619, 620, 
- 	621, 622, 623, 624, 625, 626, 628, 629, 
- 	630, 647, 649, 651, 653, 655, 657, 659, 
- 	661, 663, 665, 667, 669, 671, 673, 675, 
- 	677, 679, 681, 683, 685, 687, 689, 691, 
- 	693, 695, 697, 699, 701, 703, 705, 707, 
- 	709, 712, 714, 717, 719, 722, 724, 726, 
- 	728, 730, 732, 734, 736, 739, 741, 744, 
- 	746, 748, 751, 753, 755, 757, 759, 761, 
- 	763, 766, 768, 770, 772, 774, 776, 778, 
- 	780, 784, 786, 788, 790, 792, 794, 796, 
- 	798, 800, 802, 804, 806, 808, 810, 812, 
- 	814, 816, 818, 820, 822, 824, 826, 828, 
- 	830, 832, 834, 837, 839, 841, 844, 846, 
- 	848, 849, 850, 851, 860, 862, 864, 866, 
- 	868, 870, 872, 874, 876, 878, 880, 882, 
- 	884, 886, 888, 890, 892, 894, 897, 899, 
- 	901, 903, 905, 907, 909, 911, 914, 915, 
- 	916, 917, 918, 919, 921, 922, 923, 924, 
- 	925, 926, 927, 928, 929, 930, 931, 932, 
- 	933, 934, 935, 936, 937, 938, 939, 940, 
- 	941, 942, 943, 945, 946, 947, 949, 950, 
- 	951, 955, 961, 964, 966, 972, 991, 993, 
- 	995, 998, 1000, 1002, 1004, 1006, 1008, 1010, 
- 	1012, 1015, 1017, 1019, 1022, 1024, 1026, 1028, 
- 	1030, 1032, 1034, 1037, 1039, 1041, 1043, 1045, 
- 	1047, 1049, 1051, 1054, 1058, 1060, 1062, 1064, 
- 	1066, 1068, 1071, 1073, 1075, 1077, 1079, 1081, 
- 	1083, 1085, 1087, 1089, 1091, 1093, 1095, 1097, 
- 	1099, 1101, 1103, 1105, 1107, 1109
- };
- 
- static const char _lexer_trans_keys[] = {
- 	-17, 10, 32, 34, 35, 37, 42, 64, 
- 	65, 70, 73, 75, 77, 79, 80, 83, 
- 	90, 124, 9, 13, -69, -65, 10, 32, 
- 	34, 35, 37, 42, 64, 65, 70, 73, 
- 	75, 77, 79, 80, 83, 90, 124, 9, 
- 	13, 34, 34, 10, 13, 10, 13, 10, 
- 	32, 34, 9, 13, 10, 32, 34, 9, 
- 	13, 10, 32, 34, 9, 13, 10, 32, 
- 	34, 9, 13, 10, 32, 9, 13, 10, 
- 	32, 9, 13, 10, 13, 10, 95, 70, 
- 	69, 65, 84, 85, 82, 69, 95, 69, 
- 	78, 68, 95, 37, 32, 10, 13, 10, 
- 	13, 13, 32, 64, 9, 10, 9, 10, 
- 	13, 32, 64, 11, 12, 10, 32, 64, 
- 	9, 13, 108, 105, 117, 110, 107, 99, 
- 	105, 111, 110, 97, 108, 110, 111, 115, 
- 	116, 58, 10, 10, 10, 32, 35, 37, 
- 	64, 70, 75, 77, 79, 80, 83, 9, 
- 	13, 10, 95, 10, 70, 10, 69, 10, 
- 	65, 10, 84, 10, 85, 10, 82, 10, 
- 	69, 10, 95, 10, 69, 10, 78, 10, 
- 	68, 10, 95, 10, 37, 10, 117, 10, 
- 	110, 10, 107, 10, 99, 10, 105, 10, 
- 	111, 10, 110, 10, 97, 10, 108, 10, 
- 	110, 10, 111, 10, 115, 10, 116, 10, 
- 	58, 10, 32, 34, 35, 37, 42, 64, 
- 	65, 70, 73, 75, 77, 79, 80, 83, 
- 	90, 124, 9, 13, 97, 111, 100, 32, 
- 	97, 110, 99, 116, 101, 112, 116, 58, 
- 	10, 10, 10, 32, 35, 37, 42, 64, 
- 	65, 70, 73, 75, 77, 79, 80, 83, 
- 	90, 9, 13, 10, 95, 10, 70, 10, 
- 	69, 10, 65, 10, 84, 10, 85, 10, 
- 	82, 10, 69, 10, 95, 10, 69, 10, 
- 	78, 10, 68, 10, 95, 10, 37, 10, 
- 	32, 10, 108, 10, 105, 10, 117, 10, 
- 	110, 10, 107, 10, 99, 10, 105, 10, 
- 	111, 10, 110, 10, 97, 10, 108, 10, 
- 	110, 10, 111, 10, 115, 10, 116, 10, 
- 	58, 10, 97, 10, 100, 10, 32, 97, 
- 	10, 111, 10, 103, 10, 117, -60, 10, 
- 	99, -121, 10, 10, 110, 115, 10, 100, 
- 	10, 97, 10, 111, 10, 98, 10, 105, 
- 	10, 110, 10, 97, 10, 114, 10, 105, 
- 	10, 109, 10, 101, 10, 114, 10, 99, 
- 	10, 101, 10, 110, 10, 97, 10, 114, 
- 	10, 105, 10, 111, 10, 97, 10, 100, 
- 	116, 10, 97, 10, 116, 10, 101, 111, 
- 	10, 97, 10, 116, 101, 107, 115, 116, 
- 	58, 10, 10, 10, 32, 35, 37, 42, 
- 	64, 65, 70, 73, 75, 77, 79, 80, 
- 	83, 90, 9, 13, 10, 95, 10, 70, 
- 	10, 69, 10, 65, 10, 84, 10, 85, 
- 	10, 82, 10, 69, 10, 95, 10, 69, 
- 	10, 78, 10, 68, 10, 95, 10, 37, 
- 	10, 32, 10, 108, 10, 105, 10, 117, 
- 	10, 110, 10, 107, 10, 99, 10, 105, 
- 	10, 111, 10, 110, 10, 97, 10, 108, 
- 	10, 110, 10, 111, 10, 115, 10, 116, 
- 	10, 58, 10, 97, 111, 10, 100, 10, 
- 	32, 97, 10, 110, 10, 99, 10, 101, 
- 	10, 112, 10, 111, 10, 103, 10, 117, 
- 	-60, 10, 99, -121, 10, 10, 110, 115, 
- 	10, 100, 10, 97, 10, 111, 10, 98, 
- 	10, 105, 10, 110, 10, 97, 10, 114, 
- 	10, 105, 10, 109, 10, 101, 10, 114, 
- 	10, 99, 107, 116, 10, 101, 10, 110, 
- 	10, 97, 10, 114, 10, 105, 10, 111, 
- 	10, 105, 10, 99, 10, 114, 10, 117, 
- 	10, 107, 10, 116, 10, 117, 10, 114, 
- 	10, 97, 10, 32, 10, 115, 10, 99, 
- 	10, 101, 10, 110, 10, 97, 10, 114, 
- 	10, 105, 10, 106, 10, 97, 10, 100, 
- 	116, 10, 97, 10, 116, 10, 101, 111, 
- 	10, 97, 10, 116, 111, 103, 117, -60, 
- 	99, -121, 110, 115, 100, 97, 110, 111, 
- 	111, 118, 97, 98, 105, 110, 97, 111, 
- 	114, 122, 97, 100, 105, 110, 105, 109, 
- 	101, 114, 58, 105, 10, 10, 10, 32, 
- 	35, 37, 42, 64, 65, 70, 73, 75, 
- 	77, 79, 80, 83, 90, 9, 13, 10, 
- 	95, 10, 70, 10, 69, 10, 65, 10, 
- 	84, 10, 85, 10, 82, 10, 69, 10, 
- 	95, 10, 69, 10, 78, 10, 68, 10, 
- 	95, 10, 37, 10, 32, 10, 108, 10, 
- 	105, 10, 117, 10, 110, 10, 107, 10, 
- 	99, 10, 105, 10, 111, 10, 110, 10, 
- 	97, 10, 108, 10, 110, 10, 111, 10, 
- 	115, 10, 116, 10, 58, 10, 97, 111, 
- 	10, 100, 10, 32, 97, 10, 110, 10, 
- 	99, 116, 10, 101, 10, 112, 10, 101, 
- 	10, 107, 10, 111, 10, 103, 10, 117, 
- 	-60, 10, 99, -121, 10, 10, 110, 115, 
- 	10, 100, 10, 97, 10, 110, 111, 10, 
- 	111, 10, 118, 10, 97, 10, 98, 10, 
- 	105, 10, 110, 10, 111, 114, 10, 122, 
- 	10, 97, 10, 100, 10, 105, 10, 109, 
- 	10, 101, 10, 114, 10, 99, 107, 116, 
- 	10, 101, 10, 110, 10, 97, 10, 114, 
- 	10, 105, 10, 111, 10, 105, 10, 99, 
- 	10, 114, 10, 117, 10, 107, 10, 116, 
- 	10, 117, 10, 114, 10, 97, 10, 32, 
- 	10, 115, 10, 99, 10, 101, 10, 110, 
- 	10, 97, 10, 114, 10, 105, 10, 106, 
- 	10, 97, 10, 100, 116, 10, 97, 10, 
- 	116, 10, 101, 111, 10, 97, 10, 116, 
- 	58, 10, 10, 10, 32, 35, 70, 77, 
- 	79, 124, 9, 13, 10, 117, 10, 110, 
- 	10, 107, 10, 99, 10, 105, 10, 111, 
- 	10, 110, 10, 97, 10, 108, 10, 110, 
- 	10, 111, 10, 115, 10, 116, 10, 58, 
- 	10, 111, 10, 103, 10, 117, -60, 10, 
- 	99, -121, 10, 10, 115, 10, 111, 10, 
- 	98, 10, 105, 10, 110, 10, 97, 99, 
- 	107, 116, 101, 110, 97, 114, 105, 106, 
- 	111, 105, 58, 105, 99, 97, 114, 117, 
- 	107, 116, 117, 114, 97, 32, 115, 99, 
- 	101, 110, 97, 114, 105, 106, 97, 100, 
- 	116, 97, 116, 101, 111, 97, 116, 32, 
- 	124, 9, 13, 10, 32, 92, 124, 9, 
- 	13, 10, 92, 124, 10, 92, 10, 32, 
- 	92, 124, 9, 13, 10, 32, 34, 35, 
- 	37, 42, 64, 65, 70, 73, 75, 77, 
- 	79, 80, 83, 90, 124, 9, 13, 10, 
- 	111, 10, 110, 10, 99, 116, 10, 101, 
- 	10, 112, 10, 101, 10, 107, 10, 111, 
- 	10, 103, 10, 117, -60, 10, 99, -121, 
- 	10, 10, 115, 10, 110, 111, 10, 111, 
- 	10, 118, 10, 97, 10, 98, 10, 105, 
- 	10, 110, 10, 111, 114, 10, 122, 10, 
- 	97, 10, 100, 10, 105, 10, 109, 10, 
- 	101, 10, 114, 10, 58, 105, 10, 99, 
- 	107, 116, 10, 101, 10, 110, 10, 97, 
- 	10, 114, 10, 105, 10, 106, 111, 10, 
- 	105, 10, 105, 10, 99, 10, 114, 10, 
- 	117, 10, 107, 10, 116, 10, 117, 10, 
- 	114, 10, 97, 10, 32, 10, 115, 10, 
- 	99, 10, 101, 10, 110, 10, 97, 10, 
- 	114, 10, 105, 10, 106, 0
- };
- 
- static const char _lexer_single_lengths[] = {
- 	0, 18, 1, 1, 17, 1, 1, 2, 
- 	2, 3, 3, 3, 3, 2, 2, 2, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	2, 2, 3, 5, 3, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 11, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 17, 2, 1, 2, 
- 	1, 2, 1, 1, 1, 1, 1, 1, 
- 	15, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 3, 2, 2, 2, 3, 2, 
- 	3, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 3, 2, 2, 
- 	3, 2, 2, 1, 1, 1, 1, 1, 
- 	1, 1, 15, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 3, 2, 3, 2, 2, 2, 
- 	2, 2, 2, 2, 3, 2, 3, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 4, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 3, 2, 2, 
- 	3, 2, 2, 1, 1, 1, 2, 1, 
- 	2, 1, 1, 2, 1, 1, 1, 1, 
- 	1, 1, 1, 2, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 2, 1, 1, 
- 	15, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	3, 2, 3, 2, 3, 2, 2, 2, 
- 	2, 2, 2, 2, 3, 2, 3, 2, 
- 	2, 3, 2, 2, 2, 2, 2, 2, 
- 	3, 2, 2, 2, 2, 2, 2, 2, 
- 	4, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 3, 2, 2, 3, 2, 2, 
- 	1, 1, 1, 7, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 3, 2, 2, 
- 	2, 2, 2, 2, 2, 3, 1, 1, 
- 	1, 1, 1, 2, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 2, 1, 1, 2, 1, 1, 
- 	2, 4, 3, 2, 4, 17, 2, 2, 
- 	3, 2, 2, 2, 2, 2, 2, 2, 
- 	3, 2, 2, 3, 2, 2, 2, 2, 
- 	2, 2, 3, 2, 2, 2, 2, 2, 
- 	2, 2, 3, 4, 2, 2, 2, 2, 
- 	2, 3, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 0
- };
- 
- static const char _lexer_range_lengths[] = {
- 	0, 1, 0, 0, 1, 0, 0, 0, 
- 	0, 1, 1, 1, 1, 1, 1, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 1, 1, 1, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 1, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 1, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	1, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 1, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	1, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 1, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	1, 1, 0, 0, 1, 1, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0
- };
- 
- static const short _lexer_index_offsets[] = {
- 	0, 0, 20, 22, 24, 43, 45, 47, 
- 	50, 53, 58, 63, 68, 73, 77, 81, 
- 	84, 86, 88, 90, 92, 94, 96, 98, 
- 	100, 102, 104, 106, 108, 110, 112, 114, 
- 	116, 119, 122, 127, 134, 139, 141, 143, 
- 	145, 147, 149, 151, 153, 155, 157, 159, 
- 	161, 163, 165, 167, 169, 171, 173, 175, 
- 	188, 191, 194, 197, 200, 203, 206, 209, 
- 	212, 215, 218, 221, 224, 227, 230, 233, 
- 	236, 239, 242, 245, 248, 251, 254, 257, 
- 	260, 263, 266, 269, 272, 291, 294, 296, 
- 	299, 301, 304, 306, 308, 310, 312, 314, 
- 	316, 333, 336, 339, 342, 345, 348, 351, 
- 	354, 357, 360, 363, 366, 369, 372, 375, 
- 	378, 381, 384, 387, 390, 393, 396, 399, 
- 	402, 405, 408, 411, 414, 417, 420, 423, 
- 	426, 429, 432, 436, 439, 442, 445, 449, 
- 	452, 456, 459, 462, 465, 468, 471, 474, 
- 	477, 480, 483, 486, 489, 492, 495, 498, 
- 	501, 504, 507, 510, 513, 516, 520, 523, 
- 	526, 530, 533, 536, 538, 540, 542, 544, 
- 	546, 548, 550, 567, 570, 573, 576, 579, 
- 	582, 585, 588, 591, 594, 597, 600, 603, 
- 	606, 609, 612, 615, 618, 621, 624, 627, 
- 	630, 633, 636, 639, 642, 645, 648, 651, 
- 	654, 657, 660, 664, 667, 671, 674, 677, 
- 	680, 683, 686, 689, 692, 696, 699, 703, 
- 	706, 709, 712, 715, 718, 721, 724, 727, 
- 	730, 733, 736, 739, 744, 747, 750, 753, 
- 	756, 759, 762, 765, 768, 771, 774, 777, 
- 	780, 783, 786, 789, 792, 795, 798, 801, 
- 	804, 807, 810, 813, 816, 819, 823, 826, 
- 	829, 833, 836, 839, 841, 843, 845, 848, 
- 	850, 853, 855, 857, 860, 862, 864, 866, 
- 	868, 870, 872, 874, 877, 879, 881, 883, 
- 	885, 887, 889, 891, 893, 895, 898, 900, 
- 	902, 919, 922, 925, 928, 931, 934, 937, 
- 	940, 943, 946, 949, 952, 955, 958, 961, 
- 	964, 967, 970, 973, 976, 979, 982, 985, 
- 	988, 991, 994, 997, 1000, 1003, 1006, 1009, 
- 	1012, 1016, 1019, 1023, 1026, 1030, 1033, 1036, 
- 	1039, 1042, 1045, 1048, 1051, 1055, 1058, 1062, 
- 	1065, 1068, 1072, 1075, 1078, 1081, 1084, 1087, 
- 	1090, 1094, 1097, 1100, 1103, 1106, 1109, 1112, 
- 	1115, 1120, 1123, 1126, 1129, 1132, 1135, 1138, 
- 	1141, 1144, 1147, 1150, 1153, 1156, 1159, 1162, 
- 	1165, 1168, 1171, 1174, 1177, 1180, 1183, 1186, 
- 	1189, 1192, 1195, 1199, 1202, 1205, 1209, 1212, 
- 	1215, 1217, 1219, 1221, 1230, 1233, 1236, 1239, 
- 	1242, 1245, 1248, 1251, 1254, 1257, 1260, 1263, 
- 	1266, 1269, 1272, 1275, 1278, 1281, 1285, 1288, 
- 	1291, 1294, 1297, 1300, 1303, 1306, 1310, 1312, 
- 	1314, 1316, 1318, 1320, 1323, 1325, 1327, 1329, 
- 	1331, 1333, 1335, 1337, 1339, 1341, 1343, 1345, 
- 	1347, 1349, 1351, 1353, 1355, 1357, 1359, 1361, 
- 	1363, 1365, 1367, 1370, 1372, 1374, 1377, 1379, 
- 	1381, 1385, 1391, 1395, 1398, 1404, 1423, 1426, 
- 	1429, 1433, 1436, 1439, 1442, 1445, 1448, 1451, 
- 	1454, 1458, 1461, 1464, 1468, 1471, 1474, 1477, 
- 	1480, 1483, 1486, 1490, 1493, 1496, 1499, 1502, 
- 	1505, 1508, 1511, 1515, 1520, 1523, 1526, 1529, 
- 	1532, 1535, 1539, 1542, 1545, 1548, 1551, 1554, 
- 	1557, 1560, 1563, 1566, 1569, 1572, 1575, 1578, 
- 	1581, 1584, 1587, 1590, 1593, 1596
- };
- 
- static const short _lexer_trans_targs[] = {
- 	2, 4, 4, 5, 15, 17, 31, 34, 
- 	37, 39, 31, 85, 259, 264, 275, 413, 
- 	441, 448, 4, 0, 3, 0, 4, 0, 
- 	4, 4, 5, 15, 17, 31, 34, 37, 
- 	39, 31, 85, 259, 264, 275, 413, 441, 
- 	448, 4, 0, 6, 0, 7, 0, 9, 
- 	8, 8, 9, 8, 8, 10, 10, 11, 
- 	10, 10, 10, 10, 11, 10, 10, 10, 
- 	10, 12, 10, 10, 10, 10, 13, 10, 
- 	10, 4, 14, 14, 0, 4, 14, 14, 
- 	0, 4, 16, 15, 4, 0, 18, 0, 
- 	19, 0, 20, 0, 21, 0, 22, 0, 
- 	23, 0, 24, 0, 25, 0, 26, 0, 
- 	27, 0, 28, 0, 29, 0, 30, 0, 
- 	509, 0, 32, 0, 4, 16, 33, 4, 
- 	16, 33, 0, 0, 0, 0, 35, 36, 
- 	4, 36, 36, 34, 35, 35, 4, 36, 
- 	34, 36, 0, 38, 0, 31, 0, 40, 
- 	0, 41, 0, 42, 0, 43, 0, 44, 
- 	0, 45, 0, 46, 0, 47, 0, 48, 
- 	0, 49, 0, 50, 0, 51, 0, 52, 
- 	0, 53, 0, 55, 54, 55, 54, 55, 
- 	55, 4, 56, 4, 70, 454, 461, 466, 
- 	474, 483, 55, 54, 55, 57, 54, 55, 
- 	58, 54, 55, 59, 54, 55, 60, 54, 
- 	55, 61, 54, 55, 62, 54, 55, 63, 
- 	54, 55, 64, 54, 55, 65, 54, 55, 
- 	66, 54, 55, 67, 54, 55, 68, 54, 
- 	55, 69, 54, 55, 4, 54, 55, 71, 
- 	54, 55, 72, 54, 55, 73, 54, 55, 
- 	74, 54, 55, 75, 54, 55, 76, 54, 
- 	55, 77, 54, 55, 78, 54, 55, 79, 
- 	54, 55, 80, 54, 55, 81, 54, 55, 
- 	82, 54, 55, 83, 54, 55, 84, 54, 
- 	4, 4, 5, 15, 17, 31, 34, 37, 
- 	39, 31, 85, 259, 264, 275, 413, 441, 
- 	448, 4, 0, 86, 88, 0, 87, 0, 
- 	32, 31, 0, 89, 0, 90, 163, 0, 
- 	91, 0, 92, 0, 93, 0, 94, 0, 
- 	96, 95, 96, 95, 96, 96, 4, 97, 
- 	111, 4, 112, 114, 111, 128, 131, 136, 
- 	144, 149, 156, 96, 95, 96, 98, 95, 
- 	96, 99, 95, 96, 100, 95, 96, 101, 
- 	95, 96, 102, 95, 96, 103, 95, 96, 
- 	104, 95, 96, 105, 95, 96, 106, 95, 
- 	96, 107, 95, 96, 108, 95, 96, 109, 
- 	95, 96, 110, 95, 96, 4, 95, 96, 
- 	84, 95, 96, 113, 95, 96, 111, 95, 
- 	96, 115, 95, 96, 116, 95, 96, 117, 
- 	95, 96, 118, 95, 96, 119, 95, 96, 
- 	120, 95, 96, 121, 95, 96, 122, 95, 
- 	96, 123, 95, 96, 124, 95, 96, 125, 
- 	95, 96, 126, 95, 96, 127, 95, 96, 
- 	84, 95, 96, 129, 95, 96, 130, 95, 
- 	96, 84, 111, 95, 96, 132, 95, 96, 
- 	133, 95, 96, 134, 95, 135, 96, 123, 
- 	95, 123, 96, 95, 96, 137, 139, 95, 
- 	96, 138, 95, 96, 111, 95, 96, 140, 
- 	95, 96, 141, 95, 96, 142, 95, 96, 
- 	143, 95, 96, 127, 95, 96, 145, 95, 
- 	96, 146, 95, 96, 147, 95, 96, 148, 
- 	95, 96, 127, 95, 96, 150, 95, 96, 
- 	151, 95, 96, 152, 95, 96, 153, 95, 
- 	96, 154, 95, 96, 155, 95, 96, 127, 
- 	95, 96, 157, 95, 96, 158, 161, 95, 
- 	96, 159, 95, 96, 160, 95, 96, 111, 
- 	111, 95, 96, 162, 95, 96, 113, 95, 
- 	164, 0, 165, 0, 166, 0, 167, 0, 
- 	168, 0, 170, 169, 170, 169, 170, 170, 
- 	4, 171, 185, 4, 186, 188, 185, 202, 
- 	209, 214, 222, 227, 252, 170, 169, 170, 
- 	172, 169, 170, 173, 169, 170, 174, 169, 
- 	170, 175, 169, 170, 176, 169, 170, 177, 
- 	169, 170, 178, 169, 170, 179, 169, 170, 
- 	180, 169, 170, 181, 169, 170, 182, 169, 
- 	170, 183, 169, 170, 184, 169, 170, 4, 
- 	169, 170, 84, 169, 170, 187, 169, 170, 
- 	185, 169, 170, 189, 169, 170, 190, 169, 
- 	170, 191, 169, 170, 192, 169, 170, 193, 
- 	169, 170, 194, 169, 170, 195, 169, 170, 
- 	196, 169, 170, 197, 169, 170, 198, 169, 
- 	170, 199, 169, 170, 200, 169, 170, 201, 
- 	169, 170, 84, 169, 170, 203, 205, 169, 
- 	170, 204, 169, 170, 84, 185, 169, 170, 
- 	206, 169, 170, 207, 169, 170, 208, 169, 
- 	170, 200, 169, 170, 210, 169, 170, 211, 
- 	169, 170, 212, 169, 213, 170, 197, 169, 
- 	197, 170, 169, 170, 215, 217, 169, 170, 
- 	216, 169, 170, 185, 169, 170, 218, 169, 
- 	170, 219, 169, 170, 220, 169, 170, 221, 
- 	169, 170, 201, 169, 170, 223, 169, 170, 
- 	224, 169, 170, 225, 169, 170, 226, 169, 
- 	170, 201, 169, 170, 228, 234, 236, 169, 
- 	170, 229, 169, 170, 230, 169, 170, 231, 
- 	169, 170, 232, 169, 170, 233, 169, 170, 
- 	201, 169, 170, 235, 169, 170, 221, 169, 
- 	170, 237, 169, 170, 238, 169, 170, 239, 
- 	169, 170, 240, 169, 170, 241, 169, 170, 
- 	242, 169, 170, 243, 169, 170, 244, 169, 
- 	170, 245, 169, 170, 246, 169, 170, 247, 
- 	169, 170, 248, 169, 170, 249, 169, 170, 
- 	250, 169, 170, 251, 169, 170, 221, 169, 
- 	170, 253, 169, 170, 254, 257, 169, 170, 
- 	255, 169, 170, 256, 169, 170, 185, 185, 
- 	169, 170, 258, 169, 170, 187, 169, 260, 
- 	0, 261, 0, 262, 0, 263, 48, 0, 
- 	48, 0, 265, 267, 0, 266, 0, 31, 
- 	0, 268, 271, 0, 269, 0, 270, 0, 
- 	167, 0, 272, 0, 273, 0, 274, 0, 
- 	52, 0, 276, 281, 0, 277, 0, 278, 
- 	0, 279, 0, 280, 0, 270, 0, 282, 
- 	0, 283, 0, 284, 0, 285, 0, 286, 
- 	384, 0, 288, 287, 288, 287, 288, 288, 
- 	4, 289, 303, 4, 304, 306, 303, 320, 
- 	329, 334, 344, 352, 377, 288, 287, 288, 
- 	290, 287, 288, 291, 287, 288, 292, 287, 
- 	288, 293, 287, 288, 294, 287, 288, 295, 
- 	287, 288, 296, 287, 288, 297, 287, 288, 
- 	298, 287, 288, 299, 287, 288, 300, 287, 
- 	288, 301, 287, 288, 302, 287, 288, 4, 
- 	287, 288, 84, 287, 288, 305, 287, 288, 
- 	303, 287, 288, 307, 287, 288, 308, 287, 
- 	288, 309, 287, 288, 310, 287, 288, 311, 
- 	287, 288, 312, 287, 288, 313, 287, 288, 
- 	314, 287, 288, 315, 287, 288, 316, 287, 
- 	288, 317, 287, 288, 318, 287, 288, 319, 
- 	287, 288, 84, 287, 288, 321, 323, 287, 
- 	288, 322, 287, 288, 84, 303, 287, 288, 
- 	324, 287, 288, 325, 327, 287, 288, 326, 
- 	287, 288, 318, 287, 288, 328, 287, 288, 
- 	317, 287, 288, 330, 287, 288, 331, 287, 
- 	288, 332, 287, 333, 288, 315, 287, 315, 
- 	288, 287, 288, 335, 337, 287, 288, 336, 
- 	287, 288, 303, 287, 288, 338, 341, 287, 
- 	288, 339, 287, 288, 340, 287, 288, 319, 
- 	287, 288, 342, 287, 288, 343, 287, 288, 
- 	340, 287, 288, 345, 348, 287, 288, 346, 
- 	287, 288, 347, 287, 288, 342, 287, 288, 
- 	349, 287, 288, 350, 287, 288, 351, 287, 
- 	288, 319, 287, 288, 353, 359, 361, 287, 
- 	288, 354, 287, 288, 355, 287, 288, 356, 
- 	287, 288, 357, 287, 288, 358, 287, 288, 
- 	319, 287, 288, 360, 287, 288, 340, 287, 
- 	288, 362, 287, 288, 363, 287, 288, 364, 
- 	287, 288, 365, 287, 288, 366, 287, 288, 
- 	367, 287, 288, 368, 287, 288, 369, 287, 
- 	288, 370, 287, 288, 371, 287, 288, 372, 
- 	287, 288, 373, 287, 288, 374, 287, 288, 
- 	375, 287, 288, 376, 287, 288, 340, 287, 
- 	288, 378, 287, 288, 379, 382, 287, 288, 
- 	380, 287, 288, 381, 287, 288, 303, 303, 
- 	287, 288, 383, 287, 288, 305, 287, 385, 
- 	0, 387, 386, 387, 386, 387, 387, 4, 
- 	388, 402, 407, 4, 387, 386, 387, 389, 
- 	386, 387, 390, 386, 387, 391, 386, 387, 
- 	392, 386, 387, 393, 386, 387, 394, 386, 
- 	387, 395, 386, 387, 396, 386, 387, 397, 
- 	386, 387, 398, 386, 387, 399, 386, 387, 
- 	400, 386, 387, 401, 386, 387, 84, 386, 
- 	387, 403, 386, 387, 404, 386, 387, 405, 
- 	386, 406, 387, 397, 386, 397, 387, 386, 
- 	387, 408, 386, 387, 409, 386, 387, 410, 
- 	386, 387, 411, 386, 387, 412, 386, 387, 
- 	401, 386, 414, 422, 425, 0, 415, 0, 
- 	416, 0, 417, 0, 418, 0, 419, 0, 
- 	420, 421, 0, 384, 0, 286, 0, 423, 
- 	0, 424, 0, 93, 0, 426, 0, 427, 
- 	0, 428, 0, 429, 0, 430, 0, 431, 
- 	0, 432, 0, 433, 0, 434, 0, 435, 
- 	0, 436, 0, 437, 0, 438, 0, 439, 
- 	0, 440, 0, 424, 0, 442, 0, 443, 
- 	446, 0, 444, 0, 445, 0, 31, 31, 
- 	0, 447, 0, 38, 0, 448, 449, 448, 
- 	0, 453, 452, 451, 449, 452, 450, 0, 
- 	451, 449, 450, 0, 451, 450, 453, 452, 
- 	451, 449, 452, 450, 453, 453, 5, 15, 
- 	17, 31, 34, 37, 39, 31, 85, 259, 
- 	264, 275, 413, 441, 448, 453, 0, 55, 
- 	455, 54, 55, 456, 54, 55, 457, 459, 
- 	54, 55, 458, 54, 55, 82, 54, 55, 
- 	460, 54, 55, 81, 54, 55, 462, 54, 
- 	55, 463, 54, 55, 464, 54, 465, 55, 
- 	79, 54, 79, 55, 54, 55, 467, 54, 
- 	55, 468, 471, 54, 55, 469, 54, 55, 
- 	470, 54, 55, 83, 54, 55, 472, 54, 
- 	55, 473, 54, 55, 470, 54, 55, 475, 
- 	478, 54, 55, 476, 54, 55, 477, 54, 
- 	55, 472, 54, 55, 479, 54, 55, 480, 
- 	54, 55, 481, 54, 55, 482, 54, 55, 
- 	84, 83, 54, 55, 484, 491, 493, 54, 
- 	55, 485, 54, 55, 486, 54, 55, 487, 
- 	54, 55, 488, 54, 55, 489, 54, 55, 
- 	490, 83, 54, 55, 83, 54, 55, 492, 
- 	54, 55, 470, 54, 55, 494, 54, 55, 
- 	495, 54, 55, 496, 54, 55, 497, 54, 
- 	55, 498, 54, 55, 499, 54, 55, 500, 
- 	54, 55, 501, 54, 55, 502, 54, 55, 
- 	503, 54, 55, 504, 54, 55, 505, 54, 
- 	55, 506, 54, 55, 507, 54, 55, 508, 
- 	54, 55, 470, 54, 0, 0
- };
- 
- static const unsigned char _lexer_trans_actions[] = {
- 	0, 54, 0, 5, 1, 0, 29, 1, 
- 	29, 29, 29, 29, 29, 29, 29, 29, 
- 	29, 35, 0, 43, 0, 43, 0, 43, 
- 	54, 0, 5, 1, 0, 29, 1, 29, 
- 	29, 29, 29, 29, 29, 29, 29, 29, 
- 	35, 0, 43, 0, 43, 0, 43, 139, 
- 	48, 9, 106, 11, 0, 134, 45, 45, 
- 	45, 3, 122, 33, 33, 33, 0, 122, 
- 	33, 33, 33, 0, 122, 33, 0, 33, 
- 	0, 102, 7, 7, 43, 54, 0, 0, 
- 	43, 114, 25, 0, 54, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 149, 126, 57, 110, 
- 	23, 0, 43, 43, 43, 43, 0, 27, 
- 	118, 27, 27, 51, 27, 0, 54, 0, 
- 	1, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 144, 57, 54, 0, 54, 
- 	0, 69, 33, 69, 84, 84, 84, 84, 
- 	84, 84, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 13, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 13, 0, 
- 	130, 31, 60, 57, 31, 63, 57, 63, 
- 	63, 63, 63, 63, 63, 63, 63, 63, 
- 	66, 31, 43, 0, 0, 43, 0, 43, 
- 	0, 0, 43, 0, 43, 0, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	144, 57, 54, 0, 54, 0, 78, 33, 
- 	84, 78, 84, 84, 84, 84, 84, 84, 
- 	84, 84, 84, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 19, 0, 54, 
- 	19, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	19, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 19, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 0, 54, 0, 
- 	0, 0, 54, 0, 54, 0, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 144, 57, 54, 0, 54, 0, 
- 	72, 33, 84, 72, 84, 84, 84, 84, 
- 	84, 84, 84, 84, 84, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 15, 
- 	0, 54, 15, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 15, 0, 54, 0, 0, 0, 
- 	54, 0, 0, 54, 15, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 0, 54, 0, 0, 
- 	0, 54, 0, 54, 0, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 0, 
- 	43, 0, 43, 0, 43, 0, 0, 43, 
- 	0, 43, 0, 0, 43, 0, 43, 0, 
- 	43, 0, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	0, 43, 144, 57, 54, 0, 54, 0, 
- 	75, 33, 84, 75, 84, 84, 84, 84, 
- 	84, 84, 84, 84, 84, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 17, 
- 	0, 54, 17, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 17, 0, 54, 0, 0, 0, 
- 	54, 0, 0, 54, 17, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 0, 54, 0, 0, 0, 
- 	54, 0, 54, 0, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 0, 
- 	43, 144, 57, 54, 0, 54, 0, 81, 
- 	84, 84, 84, 81, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 21, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 0, 54, 0, 0, 0, 54, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 0, 0, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	0, 43, 0, 43, 0, 43, 0, 0, 
- 	43, 0, 43, 0, 43, 0, 0, 0, 
- 	43, 54, 37, 37, 87, 37, 37, 43, 
- 	0, 39, 0, 43, 0, 0, 54, 0, 
- 	0, 39, 0, 0, 54, 0, 93, 90, 
- 	41, 96, 90, 96, 96, 96, 96, 96, 
- 	96, 96, 96, 96, 99, 0, 43, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 0, 54, 
- 	0, 0, 0, 54, 0, 54, 0, 0, 
- 	54, 0, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	13, 0, 0, 54, 0, 0, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 0, 0
- };
- 
- static const unsigned char _lexer_eof_actions[] = {
- 	0, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43
- };
- 
- static const int lexer_start = 1;
- static const int lexer_first_final = 509;
- static const int lexer_error = 0;
- 
- static const int lexer_en_main = 1;
- 
- 
- #line 258 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
- 
- static VALUE 
- unindent(VALUE con, int start_col)
- {
-   VALUE re;
-   // Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters
-   char pat[32]; 
-   snprintf(pat, 32, "^[\t ]{0,%d}", start_col); 
-   re = rb_reg_regcomp(rb_str_new2(pat));
-   rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2(""));
- 
-   return Qnil;
- 
- }
- 
- static void 
- store_kw_con(VALUE listener, const char * event_name, 
-              const char * keyword_at, size_t keyword_length, 
-              const char * at,         size_t length, 
-              int current_line)
- {
-   VALUE con = Qnil, kw = Qnil;
-   kw = ENCODED_STR_NEW(keyword_at, keyword_length);
-   con = ENCODED_STR_NEW(at, length);
-   rb_funcall(con, rb_intern("strip!"), 0);
-   rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); 
- }
- 
- static void
- store_multiline_kw_con(VALUE listener, const char * event_name,
-                       const char * keyword_at, size_t keyword_length,
-                       const char * at,         size_t length,
-                       int current_line, int start_col)
- {
-   VALUE split;
-   VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil;
- 
-   kw = ENCODED_STR_NEW(keyword_at, keyword_length);
-   con = ENCODED_STR_NEW(at, length);
- 
-   unindent(con, start_col);
-   
-   split = rb_str_split(con, "\n");
- 
-   name = rb_funcall(split, rb_intern("shift"), 0);
-   desc = rb_ary_join(split, rb_str_new2( "\n" ));
- 
-   if( name == Qnil ) 
-   {
-     name = rb_str_new2("");
-   }
-   if( rb_funcall(desc, rb_intern("size"), 0) == 0) 
-   {
-     desc = rb_str_new2("");
-   }
-   rb_funcall(name, rb_intern("strip!"), 0);
-   rb_funcall(desc, rb_intern("rstrip!"), 0);
-   rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); 
- }
- 
- static void 
- store_attr(VALUE listener, const char * attr_type,
-            const char * at, size_t length, 
-            int line)
- {
-   VALUE val = ENCODED_STR_NEW(at, length);
-   rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line));
- }
- static void 
- store_docstring_content(VALUE listener, 
-           int start_col, 
-           const char *type_at, size_t type_length,
-           const char *at, size_t length, 
-           int current_line)
- {
-   VALUE re2;
-   VALUE unescape_escaped_quotes;
-   VALUE con = ENCODED_STR_NEW(at, length);
-   VALUE con_type = ENCODED_STR_NEW(type_at, type_length);
- 
-   unindent(con, start_col);
- 
-   re2 = rb_reg_regcomp(rb_str_new2("\r\\Z"));
-   unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\""));
-   rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2(""));
-   rb_funcall(con_type, rb_intern("strip!"), 0);
-   rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\""));
-   rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line));
- }
- static void 
- raise_lexer_error(const char * at, int line)
- { 
-   rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at);
- }
- 
- static void lexer_init(lexer_state *lexer) {
-   lexer->content_start = 0;
-   lexer->content_end = 0;
-   lexer->content_len = 0;
-   lexer->docstring_content_type_start = 0;
-   lexer->docstring_content_type_end = 0;
-   lexer->mark = 0;
-   lexer->keyword_start = 0;
-   lexer->keyword_end = 0;
-   lexer->next_keyword_start = 0;
-   lexer->line_number = 1;
-   lexer->last_newline = 0;
-   lexer->final_newline = 0;
-   lexer->start_col = 0;
- }
- 
- static VALUE CLexer_alloc(VALUE klass)
- {
-   VALUE obj;
-   lexer_state *lxr = ALLOC(lexer_state);
-   lexer_init(lxr);
- 
-   obj = Data_Wrap_Struct(klass, NULL, -1, lxr);
- 
-   return obj;
- }
- 
- static VALUE CLexer_init(VALUE self, VALUE listener)
- {
-   lexer_state *lxr; 
-   rb_iv_set(self, "@listener", listener);
-   
-   lxr = NULL;
-   DATA_GET(self, lexer_state, lxr);
-   lexer_init(lxr);
-   
-   return self;
- }
- 
- static VALUE CLexer_scan(VALUE self, VALUE input)
- {
-   VALUE input_copy;
-   char *data;
-   size_t len;
-   VALUE listener = rb_iv_get(self, "@listener");
- 
-   lexer_state *lexer;
-   lexer = NULL;
-   DATA_GET(self, lexer_state, lexer);
- 
-   input_copy = rb_str_dup(input);
- 
-   rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%"));
-   data = RSTRING_PTR(input_copy);
-   len = RSTRING_LEN(input_copy);
-   
-   if (len == 0) { 
-     rb_raise(rb_eGherkinLexingError, "No content to lex.");
-   } else {
- 
-     const char *p, *pe, *eof;
-     int cs = 0;
-     
-     VALUE current_row = Qnil;
- 
-     p = data;
-     pe = data + len;
-     eof = pe;
-     
-     assert(*pe == '\0' && "pointer does not end on NULL");
-     
-     
- #line 1171 "ext/gherkin_lexer_sr_latn/gherkin_lexer_sr_latn.c"
- 	{
- 	cs = lexer_start;
- 	}
- 
- #line 425 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
-     
- #line 1178 "ext/gherkin_lexer_sr_latn/gherkin_lexer_sr_latn.c"
- 	{
- 	int _klen;
- 	unsigned int _trans;
- 	const char *_acts;
- 	unsigned int _nacts;
- 	const char *_keys;
- 
- 	if ( p == pe )
- 		goto _test_eof;
- 	if ( cs == 0 )
- 		goto _out;
- _resume:
- 	_keys = _lexer_trans_keys + _lexer_key_offsets[cs];
- 	_trans = _lexer_index_offsets[cs];
- 
- 	_klen = _lexer_single_lengths[cs];
- 	if ( _klen > 0 ) {
- 		const char *_lower = _keys;
- 		const char *_mid;
- 		const char *_upper = _keys + _klen - 1;
- 		while (1) {
- 			if ( _upper < _lower )
- 				break;
- 
- 			_mid = _lower + ((_upper-_lower) >> 1);
- 			if ( (*p) < *_mid )
- 				_upper = _mid - 1;
- 			else if ( (*p) > *_mid )
- 				_lower = _mid + 1;
- 			else {
- 				_trans += (_mid - _keys);
- 				goto _match;
- 			}
- 		}
- 		_keys += _klen;
- 		_trans += _klen;
- 	}
- 
- 	_klen = _lexer_range_lengths[cs];
- 	if ( _klen > 0 ) {
- 		const char *_lower = _keys;
- 		const char *_mid;
- 		const char *_upper = _keys + (_klen<<1) - 2;
- 		while (1) {
- 			if ( _upper < _lower )
- 				break;
- 
- 			_mid = _lower + (((_upper-_lower) >> 1) & ~1);
- 			if ( (*p) < _mid[0] )
- 				_upper = _mid - 2;
- 			else if ( (*p) > _mid[1] )
- 				_lower = _mid + 2;
- 			else {
- 				_trans += ((_mid - _keys)>>1);
- 				goto _match;
- 			}
- 		}
- 		_trans += _klen;
- 	}
- 
- _match:
- 	cs = _lexer_trans_targs[_trans];
- 
- 	if ( _lexer_trans_actions[_trans] == 0 )
- 		goto _again;
- 
- 	_acts = _lexer_actions + _lexer_trans_actions[_trans];
- 	_nacts = (unsigned int) *_acts++;
- 	while ( _nacts-- > 0 )
- 	{
- 		switch ( *_acts++ )
- 		{
- 	case 0:
- #line 83 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
- 	{
- 		MARK(content_start, p);
-     lexer->current_line = lexer->line_number;
-     lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2;
-   }
- 	break;
- 	case 1:
- #line 89 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
- 	{
-     MARK(content_start, p);
-   }
- 	break;
- 	case 2:
- #line 93 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
- 	{
-     lexer->current_line = lexer->line_number;
-     lexer->start_col = p - data - lexer->last_newline;
-   }
- 	break;
- 	case 3:
- #line 98 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
- 	{
-     int len = LEN(content_start, PTR_TO(final_newline));
-     int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end));
- 
-     if (len < 0) len = 0;
-     if (type_len < 0) len = 0;
- 
-     store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line);
-   }
- 	break;
- 	case 4:
- #line 108 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
- 	{ 
-     MARK(docstring_content_type_start, p);
-   }
- 	break;
- 	case 5:
- #line 112 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
- 	{ 
-     MARK(docstring_content_type_end, p);
-   }
- 	break;
- 	case 6:
- #line 116 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
- 	{
-     STORE_KW_END_CON(feature);
-   }
- 	break;
- 	case 7:
- #line 120 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
- 	{
-     STORE_KW_END_CON(background);
-   }
- 	break;
- 	case 8:
- #line 124 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
- 	{
-     STORE_KW_END_CON(scenario);
-   }
- 	break;
- 	case 9:
- #line 128 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
- 	{
-     STORE_KW_END_CON(scenario_outline);
-   }
- 	break;
- 	case 10:
- #line 132 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
- 	{
-     STORE_KW_END_CON(examples);
-   }
- 	break;
- 	case 11:
- #line 136 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
- 	{
-     store_kw_con(listener, "step",
-       PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-       PTR_TO(content_start), LEN(content_start, p), 
-       lexer->current_line);
-   }
- 	break;
- 	case 12:
- #line 143 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
- 	{
-     STORE_ATTR(comment);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 13:
- #line 148 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
- 	{
-     STORE_ATTR(tag);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 14:
- #line 153 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
- 	{
-     lexer->line_number += 1;
-     MARK(final_newline, p);
-   }
- 	break;
- 	case 15:
- #line 158 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
- 	{
-     MARK(last_newline, p + 1);
-   }
- 	break;
- 	case 16:
- #line 162 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
- 	{
-     if (lexer->mark == 0) {
-       MARK(mark, p);
-     }
-   }
- 	break;
- 	case 17:
- #line 168 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
- 	{
-     MARK(keyword_end, p);
-     MARK(keyword_start, PTR_TO(mark));
-     MARK(content_start, p + 1);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 18:
- #line 175 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
- 	{
-     MARK(content_end, p);
-   }
- 	break;
- 	case 19:
- #line 179 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
- 	{
-     p = p - 1;
-     lexer->current_line = lexer->line_number;
-     current_row = rb_ary_new();
-   }
- 	break;
- 	case 20:
- #line 185 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
- 	{
- 		MARK(content_start, p);
-   }
- 	break;
- 	case 21:
- #line 189 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
- 	{
-     VALUE re_pipe, re_newline, re_backslash;
-     VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
-     rb_funcall(con, rb_intern("strip!"), 0);
-     re_pipe      = rb_reg_regcomp(rb_str_new2("\\\\\\|"));
-     re_newline   = rb_reg_regcomp(rb_str_new2("\\\\n"));
-     re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_pipe,      rb_str_new2("|"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_newline,   rb_str_new2("\n"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\"));
- 
-     rb_ary_push(current_row, con);
-   }
- 	break;
- 	case 22:
- #line 203 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
- 	{
-     rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
-   }
- 	break;
- 	case 23:
- #line 207 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
- 	{
-     int line;
-     if (cs < lexer_first_final) {
-       size_t count = 0;
-       VALUE newstr_val;
-       char *newstr;
-       int newstr_count = 0;        
-       size_t len;
-       const char *buff;
-       if (lexer->last_newline != 0) {
-         len = LEN(last_newline, eof);
-         buff = PTR_TO(last_newline);
-       } else {
-         len = strlen(data);
-         buff = data;
-       }
- 
-       // Allocate as a ruby string so that it gets cleaned up by GC
-       newstr_val = rb_str_new(buff, len);
-       newstr = RSTRING_PTR(newstr_val);
- 
- 
-       for (count = 0; count < len; count++) {
-         if(buff[count] == 10) {
-           newstr[newstr_count] = '\0'; // terminate new string at first newline found
-           break;
-         } else {
-           if (buff[count] == '%') {
-             newstr[newstr_count++] = buff[count];
-             newstr[newstr_count] = buff[count];
-           } else {
-             newstr[newstr_count] = buff[count];
-           }
-         }
-         newstr_count++;
-       }
- 
-       line = lexer->line_number;
-       lexer_init(lexer); // Re-initialize so we can scan again with the same lexer
-       raise_lexer_error(newstr, line);
-     } else {
-       rb_funcall(listener, rb_intern("eof"), 0);
-     }
-   }
- 	break;
- #line 1468 "ext/gherkin_lexer_sr_latn/gherkin_lexer_sr_latn.c"
- 		}
- 	}
- 
- _again:
- 	if ( cs == 0 )
- 		goto _out;
- 	if ( ++p != pe )
- 		goto _resume;
- 	_test_eof: {}
- 	if ( p == eof )
- 	{
- 	const char *__acts = _lexer_actions + _lexer_eof_actions[cs];
- 	unsigned int __nacts = (unsigned int) *__acts++;
- 	while ( __nacts-- > 0 ) {
- 		switch ( *__acts++ ) {
- 	case 23:
- #line 207 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
- 	{
-     int line;
-     if (cs < lexer_first_final) {
-       size_t count = 0;
-       VALUE newstr_val;
-       char *newstr;
-       int newstr_count = 0;        
-       size_t len;
-       const char *buff;
-       if (lexer->last_newline != 0) {
-         len = LEN(last_newline, eof);
-         buff = PTR_TO(last_newline);
-       } else {
-         len = strlen(data);
-         buff = data;
-       }
- 
-       // Allocate as a ruby string so that it gets cleaned up by GC
-       newstr_val = rb_str_new(buff, len);
-       newstr = RSTRING_PTR(newstr_val);
- 
- 
-       for (count = 0; count < len; count++) {
-         if(buff[count] == 10) {
-           newstr[newstr_count] = '\0'; // terminate new string at first newline found
-           break;
-         } else {
-           if (buff[count] == '%') {
-             newstr[newstr_count++] = buff[count];
-             newstr[newstr_count] = buff[count];
-           } else {
-             newstr[newstr_count] = buff[count];
-           }
-         }
-         newstr_count++;
-       }
- 
-       line = lexer->line_number;
-       lexer_init(lexer); // Re-initialize so we can scan again with the same lexer
-       raise_lexer_error(newstr, line);
-     } else {
-       rb_funcall(listener, rb_intern("eof"), 0);
-     }
-   }
- 	break;
- #line 1531 "ext/gherkin_lexer_sr_latn/gherkin_lexer_sr_latn.c"
- 		}
- 	}
- 	}
- 
- 	_out: {}
- 	}
- 
- #line 426 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sr_latn.c.rl"
- 
-     assert(p <= pe && "data overflow after parsing execute");
-     assert(lexer->content_start <= len && "content starts after data end");
-     assert(lexer->mark < len && "mark is after data end");
-     
-     // Reset lexer by re-initializing the whole thing
-     lexer_init(lexer);
- 
-     if (cs == lexer_error) {
-       rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails.");
-     } else {
-       return Qtrue;
-     }
-   }
- }
- 
- void Init_gherkin_lexer_sr_latn()
- {
-   mGherkin = rb_define_module("Gherkin");
-   mGherkinLexer = rb_define_module_under(mGherkin, "Lexer");
-   rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError"));
- 
-   mCLexer = rb_define_module_under(mGherkin, "CLexer");
-   cI18nLexer = rb_define_class_under(mCLexer, "Sr_latn", rb_cObject);
-   rb_define_alloc_func(cI18nLexer, CLexer_alloc);
-   rb_define_method(cI18nLexer, "initialize", CLexer_init, 1);
-   rb_define_method(cI18nLexer, "scan", CLexer_scan, 1);
- }
- 
 -#line 1 "ragel/i18n/sr_latn.c.rl"
 -#include <assert.h>
 -#include <ruby.h>
 -
 -#if defined(_WIN32)
 -#include <stddef.h>
 -#endif
 -
 -#ifdef HAVE_RUBY_RE_H
 -#include <ruby/re.h>
 -#else
 -#include <re.h>
 -#endif
 -
 -#ifdef HAVE_RUBY_ENCODING_H
 -#include <ruby/encoding.h>
 -#define ENCODED_STR_NEW(ptr, len) \
 -    rb_enc_str_new(ptr, len, rb_utf8_encoding())
 -#else
 -#define ENCODED_STR_NEW(ptr, len) \
 -    rb_str_new(ptr, len)
 -#endif
 -
 -#ifndef RSTRING_PTR
 -#define RSTRING_PTR(s) (RSTRING(s)->ptr)
 -#endif
 -
 -#ifndef RSTRING_LEN
 -#define RSTRING_LEN(s) (RSTRING(s)->len)
 -#endif
 -
 -#define DATA_GET(FROM, TYPE, NAME) \
 -  Data_Get_Struct(FROM, TYPE, NAME); \
 -  if (NAME == NULL) { \
 -    rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \
 -  }
 - 
 -typedef struct lexer_state {
 -  int content_len;
 -  int line_number;
 -  int current_line;
 -  int start_col;
 -  size_t mark;
 -  size_t keyword_start;
 -  size_t keyword_end;
 -  size_t next_keyword_start;
 -  size_t content_start;
 -  size_t content_end;
 -  size_t docstring_content_type_start;
 -  size_t docstring_content_type_end;
 -  size_t query_start;
 -  size_t last_newline;
 -  size_t final_newline;
 -} lexer_state;
 -
 -static VALUE mGherkin;
 -static VALUE mGherkinLexer;
 -static VALUE mCLexer;
 -static VALUE cI18nLexer;
 -static VALUE rb_eGherkinLexingError;
 -
 -#define LEN(AT, P) (P - data - lexer->AT)
 -#define MARK(M, P) (lexer->M = (P) - data)
 -#define PTR_TO(P) (data + lexer->P)
 -
 -#define STORE_KW_END_CON(EVENT) \
 -  store_multiline_kw_con(listener, # EVENT, \
 -    PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \
 -    PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \
 -    lexer->current_line, lexer->start_col); \
 -    if (lexer->content_end != 0) { \
 -      p = PTR_TO(content_end - 1); \
 -    } \
 -    lexer->content_end = 0
 -
 -#define STORE_ATTR(ATTR) \
 -    store_attr(listener, # ATTR, \
 -      PTR_TO(content_start), LEN(content_start, p), \
 -      lexer->line_number)
 -
 -
 -#line 254 "ragel/i18n/sr_latn.c.rl"
 -
 -
 -/** Data **/
 -
 -#line 89 "ext/gherkin_lexer_sr_latn/gherkin_lexer_sr_latn.c"
 -static const char _lexer_actions[] = {
 -	0, 1, 0, 1, 1, 1, 2, 1, 
 -	3, 1, 4, 1, 5, 1, 6, 1, 
 -	7, 1, 8, 1, 9, 1, 10, 1, 
 -	11, 1, 12, 1, 13, 1, 16, 1, 
 -	17, 1, 18, 1, 19, 1, 20, 1, 
 -	21, 1, 22, 1, 23, 2, 1, 18, 
 -	2, 4, 5, 2, 13, 0, 2, 14, 
 -	15, 2, 17, 0, 2, 17, 2, 2, 
 -	17, 16, 2, 17, 19, 2, 18, 6, 
 -	2, 18, 7, 2, 18, 8, 2, 18, 
 -	9, 2, 18, 10, 2, 18, 16, 2, 
 -	20, 21, 2, 22, 0, 2, 22, 2, 
 -	2, 22, 16, 2, 22, 19, 3, 3, 
 -	14, 15, 3, 5, 14, 15, 3, 11, 
 -	14, 15, 3, 12, 14, 15, 3, 13, 
 -	14, 15, 3, 14, 15, 18, 3, 17, 
 -	0, 11, 3, 17, 14, 15, 4, 1, 
 -	14, 15, 18, 4, 4, 5, 14, 15, 
 -	4, 17, 0, 14, 15, 5, 17, 0, 
 -	11, 14, 15
 -};
 -
 -static const short _lexer_key_offsets[] = {
 -	0, 0, 20, 21, 22, 41, 42, 43, 
 -	45, 47, 52, 57, 62, 67, 71, 75, 
 -	77, 78, 79, 80, 81, 82, 83, 84, 
 -	85, 86, 87, 88, 89, 90, 91, 92, 
 -	93, 95, 97, 102, 109, 114, 115, 116, 
 -	117, 118, 119, 120, 121, 122, 123, 124, 
 -	125, 126, 127, 128, 129, 130, 131, 132, 
 -	145, 147, 149, 151, 153, 155, 157, 159, 
 -	161, 163, 165, 167, 169, 171, 173, 175, 
 -	177, 179, 181, 183, 185, 187, 189, 191, 
 -	193, 195, 197, 199, 201, 220, 222, 223, 
 -	225, 226, 228, 229, 230, 231, 232, 233, 
 -	234, 251, 253, 255, 257, 259, 261, 263, 
 -	265, 267, 269, 271, 273, 275, 277, 279, 
 -	281, 283, 285, 287, 289, 291, 293, 295, 
 -	297, 299, 301, 303, 305, 307, 309, 311, 
 -	313, 315, 317, 320, 322, 324, 326, 329, 
 -	331, 334, 336, 338, 340, 342, 344, 346, 
 -	348, 350, 352, 354, 356, 358, 360, 362, 
 -	364, 366, 368, 370, 372, 374, 377, 379, 
 -	381, 384, 386, 388, 389, 390, 391, 392, 
 -	393, 394, 395, 412, 414, 416, 418, 420, 
 -	422, 424, 426, 428, 430, 432, 434, 436, 
 -	438, 440, 442, 444, 446, 448, 450, 452, 
 -	454, 456, 458, 460, 462, 464, 466, 468, 
 -	470, 472, 474, 477, 479, 482, 484, 486, 
 -	488, 490, 492, 494, 496, 499, 501, 504, 
 -	506, 508, 510, 512, 514, 516, 518, 520, 
 -	522, 524, 526, 528, 532, 534, 536, 538, 
 -	540, 542, 544, 546, 548, 550, 552, 554, 
 -	556, 558, 560, 562, 564, 566, 568, 570, 
 -	572, 574, 576, 578, 580, 582, 585, 587, 
 -	589, 592, 594, 596, 597, 598, 599, 601, 
 -	602, 604, 605, 606, 608, 609, 610, 611, 
 -	612, 613, 614, 615, 617, 618, 619, 620, 
 -	621, 622, 623, 624, 625, 626, 628, 629, 
 -	630, 647, 649, 651, 653, 655, 657, 659, 
 -	661, 663, 665, 667, 669, 671, 673, 675, 
 -	677, 679, 681, 683, 685, 687, 689, 691, 
 -	693, 695, 697, 699, 701, 703, 705, 707, 
 -	709, 712, 714, 717, 719, 722, 724, 726, 
 -	728, 730, 732, 734, 736, 739, 741, 744, 
 -	746, 748, 751, 753, 755, 757, 759, 761, 
 -	763, 766, 768, 770, 772, 774, 776, 778, 
 -	780, 784, 786, 788, 790, 792, 794, 796, 
 -	798, 800, 802, 804, 806, 808, 810, 812, 
 -	814, 816, 818, 820, 822, 824, 826, 828, 
 -	830, 832, 834, 837, 839, 841, 844, 846, 
 -	848, 849, 850, 851, 860, 862, 864, 866, 
 -	868, 870, 872, 874, 876, 878, 880, 882, 
 -	884, 886, 888, 890, 892, 894, 897, 899, 
 -	901, 903, 905, 907, 909, 911, 914, 915, 
 -	916, 917, 918, 919, 921, 922, 923, 924, 
 -	925, 926, 927, 928, 929, 930, 931, 932, 
 -	933, 934, 935, 936, 937, 938, 939, 940, 
 -	941, 942, 943, 945, 946, 947, 949, 950, 
 -	951, 955, 961, 964, 966, 972, 991, 993, 
 -	995, 998, 1000, 1002, 1004, 1006, 1008, 1010, 
 -	1012, 1015, 1017, 1019, 1022, 1024, 1026, 1028, 
 -	1030, 1032, 1034, 1037, 1039, 1041, 1043, 1045, 
 -	1047, 1049, 1051, 1054, 1058, 1060, 1062, 1064, 
 -	1066, 1068, 1071, 1073, 1075, 1077, 1079, 1081, 
 -	1083, 1085, 1087, 1089, 1091, 1093, 1095, 1097, 
 -	1099, 1101, 1103, 1105, 1107, 1109
 -};
 -
 -static const char _lexer_trans_keys[] = {
 -	-17, 10, 32, 34, 35, 37, 42, 64, 
 -	65, 70, 73, 75, 77, 79, 80, 83, 
 -	90, 124, 9, 13, -69, -65, 10, 32, 
 -	34, 35, 37, 42, 64, 65, 70, 73, 
 -	75, 77, 79, 80, 83, 90, 124, 9, 
 -	13, 34, 34, 10, 13, 10, 13, 10, 
 -	32, 34, 9, 13, 10, 32, 34, 9, 
 -	13, 10, 32, 34, 9, 13, 10, 32, 
 -	34, 9, 13, 10, 32, 9, 13, 10, 
 -	32, 9, 13, 10, 13, 10, 95, 70, 
 -	69, 65, 84, 85, 82, 69, 95, 69, 
 -	78, 68, 95, 37, 32, 10, 13, 10, 
 -	13, 13, 32, 64, 9, 10, 9, 10, 
 -	13, 32, 64, 11, 12, 10, 32, 64, 
 -	9, 13, 108, 105, 117, 110, 107, 99, 
 -	105, 111, 110, 97, 108, 110, 111, 115, 
 -	116, 58, 10, 10, 10, 32, 35, 37, 
 -	64, 70, 75, 77, 79, 80, 83, 9, 
 -	13, 10, 95, 10, 70, 10, 69, 10, 
 -	65, 10, 84, 10, 85, 10, 82, 10, 
 -	69, 10, 95, 10, 69, 10, 78, 10, 
 -	68, 10, 95, 10, 37, 10, 117, 10, 
 -	110, 10, 107, 10, 99, 10, 105, 10, 
 -	111, 10, 110, 10, 97, 10, 108, 10, 
 -	110, 10, 111, 10, 115, 10, 116, 10, 
 -	58, 10, 32, 34, 35, 37, 42, 64, 
 -	65, 70, 73, 75, 77, 79, 80, 83, 
 -	90, 124, 9, 13, 97, 111, 100, 32, 
 -	97, 110, 99, 116, 101, 112, 116, 58, 
 -	10, 10, 10, 32, 35, 37, 42, 64, 
 -	65, 70, 73, 75, 77, 79, 80, 83, 
 -	90, 9, 13, 10, 95, 10, 70, 10, 
 -	69, 10, 65, 10, 84, 10, 85, 10, 
 -	82, 10, 69, 10, 95, 10, 69, 10, 
 -	78, 10, 68, 10, 95, 10, 37, 10, 
 -	32, 10, 108, 10, 105, 10, 117, 10, 
 -	110, 10, 107, 10, 99, 10, 105, 10, 
 -	111, 10, 110, 10, 97, 10, 108, 10, 
 -	110, 10, 111, 10, 115, 10, 116, 10, 
 -	58, 10, 97, 10, 100, 10, 32, 97, 
 -	10, 111, 10, 103, 10, 117, -60, 10, 
 -	99, -121, 10, 10, 110, 115, 10, 100, 
 -	10, 97, 10, 111, 10, 98, 10, 105, 
 -	10, 110, 10, 97, 10, 114, 10, 105, 
 -	10, 109, 10, 101, 10, 114, 10, 99, 
 -	10, 101, 10, 110, 10, 97, 10, 114, 
 -	10, 105, 10, 111, 10, 97, 10, 100, 
 -	116, 10, 97, 10, 116, 10, 101, 111, 
 -	10, 97, 10, 116, 101, 107, 115, 116, 
 -	58, 10, 10, 10, 32, 35, 37, 42, 
 -	64, 65, 70, 73, 75, 77, 79, 80, 
 -	83, 90, 9, 13, 10, 95, 10, 70, 
 -	10, 69, 10, 65, 10, 84, 10, 85, 
 -	10, 82, 10, 69, 10, 95, 10, 69, 
 -	10, 78, 10, 68, 10, 95, 10, 37, 
 -	10, 32, 10, 108, 10, 105, 10, 117, 
 -	10, 110, 10, 107, 10, 99, 10, 105, 
 -	10, 111, 10, 110, 10, 97, 10, 108, 
 -	10, 110, 10, 111, 10, 115, 10, 116, 
 -	10, 58, 10, 97, 111, 10, 100, 10, 
 -	32, 97, 10, 110, 10, 99, 10, 101, 
 -	10, 112, 10, 111, 10, 103, 10, 117, 
 -	-60, 10, 99, -121, 10, 10, 110, 115, 
 -	10, 100, 10, 97, 10, 111, 10, 98, 
 -	10, 105, 10, 110, 10, 97, 10, 114, 
 -	10, 105, 10, 109, 10, 101, 10, 114, 
 -	10, 99, 107, 116, 10, 101, 10, 110, 
 -	10, 97, 10, 114, 10, 105, 10, 111, 
 -	10, 105, 10, 99, 10, 114, 10, 117, 
 -	10, 107, 10, 116, 10, 117, 10, 114, 
 -	10, 97, 10, 32, 10, 115, 10, 99, 
 -	10, 101, 10, 110, 10, 97, 10, 114, 
 -	10, 105, 10, 106, 10, 97, 10, 100, 
 -	116, 10, 97, 10, 116, 10, 101, 111, 
 -	10, 97, 10, 116, 111, 103, 117, -60, 
 -	99, -121, 110, 115, 100, 97, 110, 111, 
 -	111, 118, 97, 98, 105, 110, 97, 111, 
 -	114, 122, 97, 100, 105, 110, 105, 109, 
 -	101, 114, 58, 105, 10, 10, 10, 32, 
 -	35, 37, 42, 64, 65, 70, 73, 75, 
 -	77, 79, 80, 83, 90, 9, 13, 10, 
 -	95, 10, 70, 10, 69, 10, 65, 10, 
 -	84, 10, 85, 10, 82, 10, 69, 10, 
 -	95, 10, 69, 10, 78, 10, 68, 10, 
 -	95, 10, 37, 10, 32, 10, 108, 10, 
 -	105, 10, 117, 10, 110, 10, 107, 10, 
 -	99, 10, 105, 10, 111, 10, 110, 10, 
 -	97, 10, 108, 10, 110, 10, 111, 10, 
 -	115, 10, 116, 10, 58, 10, 97, 111, 
 -	10, 100, 10, 32, 97, 10, 110, 10, 
 -	99, 116, 10, 101, 10, 112, 10, 101, 
 -	10, 107, 10, 111, 10, 103, 10, 117, 
 -	-60, 10, 99, -121, 10, 10, 110, 115, 
 -	10, 100, 10, 97, 10, 110, 111, 10, 
 -	111, 10, 118, 10, 97, 10, 98, 10, 
 -	105, 10, 110, 10, 111, 114, 10, 122, 
 -	10, 97, 10, 100, 10, 105, 10, 109, 
 -	10, 101, 10, 114, 10, 99, 107, 116, 
 -	10, 101, 10, 110, 10, 97, 10, 114, 
 -	10, 105, 10, 111, 10, 105, 10, 99, 
 -	10, 114, 10, 117, 10, 107, 10, 116, 
 -	10, 117, 10, 114, 10, 97, 10, 32, 
 -	10, 115, 10, 99, 10, 101, 10, 110, 
 -	10, 97, 10, 114, 10, 105, 10, 106, 
 -	10, 97, 10, 100, 116, 10, 97, 10, 
 -	116, 10, 101, 111, 10, 97, 10, 116, 
 -	58, 10, 10, 10, 32, 35, 70, 77, 
 -	79, 124, 9, 13, 10, 117, 10, 110, 
 -	10, 107, 10, 99, 10, 105, 10, 111, 
 -	10, 110, 10, 97, 10, 108, 10, 110, 
 -	10, 111, 10, 115, 10, 116, 10, 58, 
 -	10, 111, 10, 103, 10, 117, -60, 10, 
 -	99, -121, 10, 10, 115, 10, 111, 10, 
 -	98, 10, 105, 10, 110, 10, 97, 99, 
 -	107, 116, 101, 110, 97, 114, 105, 106, 
 -	111, 105, 58, 105, 99, 97, 114, 117, 
 -	107, 116, 117, 114, 97, 32, 115, 99, 
 -	101, 110, 97, 114, 105, 106, 97, 100, 
 -	116, 97, 116, 101, 111, 97, 116, 32, 
 -	124, 9, 13, 10, 32, 92, 124, 9, 
 -	13, 10, 92, 124, 10, 92, 10, 32, 
 -	92, 124, 9, 13, 10, 32, 34, 35, 
 -	37, 42, 64, 65, 70, 73, 75, 77, 
 -	79, 80, 83, 90, 124, 9, 13, 10, 
 -	111, 10, 110, 10, 99, 116, 10, 101, 
 -	10, 112, 10, 101, 10, 107, 10, 111, 
 -	10, 103, 10, 117, -60, 10, 99, -121, 
 -	10, 10, 115, 10, 110, 111, 10, 111, 
 -	10, 118, 10, 97, 10, 98, 10, 105, 
 -	10, 110, 10, 111, 114, 10, 122, 10, 
 -	97, 10, 100, 10, 105, 10, 109, 10, 
 -	101, 10, 114, 10, 58, 105, 10, 99, 
 -	107, 116, 10, 101, 10, 110, 10, 97, 
 -	10, 114, 10, 105, 10, 106, 111, 10, 
 -	105, 10, 105, 10, 99, 10, 114, 10, 
 -	117, 10, 107, 10, 116, 10, 117, 10, 
 -	114, 10, 97, 10, 32, 10, 115, 10, 
 -	99, 10, 101, 10, 110, 10, 97, 10, 
 -	114, 10, 105, 10, 106, 0
 -};
 -
 -static const char _lexer_single_lengths[] = {
 -	0, 18, 1, 1, 17, 1, 1, 2, 
 -	2, 3, 3, 3, 3, 2, 2, 2, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	2, 2, 3, 5, 3, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 11, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 17, 2, 1, 2, 
 -	1, 2, 1, 1, 1, 1, 1, 1, 
 -	15, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 3, 2, 2, 2, 3, 2, 
 -	3, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 3, 2, 2, 
 -	3, 2, 2, 1, 1, 1, 1, 1, 
 -	1, 1, 15, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 3, 2, 3, 2, 2, 2, 
 -	2, 2, 2, 2, 3, 2, 3, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 4, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 3, 2, 2, 
 -	3, 2, 2, 1, 1, 1, 2, 1, 
 -	2, 1, 1, 2, 1, 1, 1, 1, 
 -	1, 1, 1, 2, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 2, 1, 1, 
 -	15, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	3, 2, 3, 2, 3, 2, 2, 2, 
 -	2, 2, 2, 2, 3, 2, 3, 2, 
 -	2, 3, 2, 2, 2, 2, 2, 2, 
 -	3, 2, 2, 2, 2, 2, 2, 2, 
 -	4, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 3, 2, 2, 3, 2, 2, 
 -	1, 1, 1, 7, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 3, 2, 2, 
 -	2, 2, 2, 2, 2, 3, 1, 1, 
 -	1, 1, 1, 2, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 2, 1, 1, 2, 1, 1, 
 -	2, 4, 3, 2, 4, 17, 2, 2, 
 -	3, 2, 2, 2, 2, 2, 2, 2, 
 -	3, 2, 2, 3, 2, 2, 2, 2, 
 -	2, 2, 3, 2, 2, 2, 2, 2, 
 -	2, 2, 3, 4, 2, 2, 2, 2, 
 -	2, 3, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 0
 -};
 -
 -static const char _lexer_range_lengths[] = {
 -	0, 1, 0, 0, 1, 0, 0, 0, 
 -	0, 1, 1, 1, 1, 1, 1, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 1, 1, 1, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 1, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 1, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	1, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 1, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	1, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 1, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	1, 1, 0, 0, 1, 1, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0
 -};
 -
 -static const short _lexer_index_offsets[] = {
 -	0, 0, 20, 22, 24, 43, 45, 47, 
 -	50, 53, 58, 63, 68, 73, 77, 81, 
 -	84, 86, 88, 90, 92, 94, 96, 98, 
 -	100, 102, 104, 106, 108, 110, 112, 114, 
 -	116, 119, 122, 127, 134, 139, 141, 143, 
 -	145, 147, 149, 151, 153, 155, 157, 159, 
 -	161, 163, 165, 167, 169, 171, 173, 175, 
 -	188, 191, 194, 197, 200, 203, 206, 209, 
 -	212, 215, 218, 221, 224, 227, 230, 233, 
 -	236, 239, 242, 245, 248, 251, 254, 257, 
 -	260, 263, 266, 269, 272, 291, 294, 296, 
 -	299, 301, 304, 306, 308, 310, 312, 314, 
 -	316, 333, 336, 339, 342, 345, 348, 351, 
 -	354, 357, 360, 363, 366, 369, 372, 375, 
 -	378, 381, 384, 387, 390, 393, 396, 399, 
 -	402, 405, 408, 411, 414, 417, 420, 423, 
 -	426, 429, 432, 436, 439, 442, 445, 449, 
 -	452, 456, 459, 462, 465, 468, 471, 474, 
 -	477, 480, 483, 486, 489, 492, 495, 498, 
 -	501, 504, 507, 510, 513, 516, 520, 523, 
 -	526, 530, 533, 536, 538, 540, 542, 544, 
 -	546, 548, 550, 567, 570, 573, 576, 579, 
 -	582, 585, 588, 591, 594, 597, 600, 603, 
 -	606, 609, 612, 615, 618, 621, 624, 627, 
 -	630, 633, 636, 639, 642, 645, 648, 651, 
 -	654, 657, 660, 664, 667, 671, 674, 677, 
 -	680, 683, 686, 689, 692, 696, 699, 703, 
 -	706, 709, 712, 715, 718, 721, 724, 727, 
 -	730, 733, 736, 739, 744, 747, 750, 753, 
 -	756, 759, 762, 765, 768, 771, 774, 777, 
 -	780, 783, 786, 789, 792, 795, 798, 801, 
 -	804, 807, 810, 813, 816, 819, 823, 826, 
 -	829, 833, 836, 839, 841, 843, 845, 848, 
 -	850, 853, 855, 857, 860, 862, 864, 866, 
 -	868, 870, 872, 874, 877, 879, 881, 883, 
 -	885, 887, 889, 891, 893, 895, 898, 900, 
 -	902, 919, 922, 925, 928, 931, 934, 937, 
 -	940, 943, 946, 949, 952, 955, 958, 961, 
 -	964, 967, 970, 973, 976, 979, 982, 985, 
 -	988, 991, 994, 997, 1000, 1003, 1006, 1009, 
 -	1012, 1016, 1019, 1023, 1026, 1030, 1033, 1036, 
 -	1039, 1042, 1045, 1048, 1051, 1055, 1058, 1062, 
 -	1065, 1068, 1072, 1075, 1078, 1081, 1084, 1087, 
 -	1090, 1094, 1097, 1100, 1103, 1106, 1109, 1112, 
 -	1115, 1120, 1123, 1126, 1129, 1132, 1135, 1138, 
 -	1141, 1144, 1147, 1150, 1153, 1156, 1159, 1162, 
 -	1165, 1168, 1171, 1174, 1177, 1180, 1183, 1186, 
 -	1189, 1192, 1195, 1199, 1202, 1205, 1209, 1212, 
 -	1215, 1217, 1219, 1221, 1230, 1233, 1236, 1239, 
 -	1242, 1245, 1248, 1251, 1254, 1257, 1260, 1263, 
 -	1266, 1269, 1272, 1275, 1278, 1281, 1285, 1288, 
 -	1291, 1294, 1297, 1300, 1303, 1306, 1310, 1312, 
 -	1314, 1316, 1318, 1320, 1323, 1325, 1327, 1329, 
 -	1331, 1333, 1335, 1337, 1339, 1341, 1343, 1345, 
 -	1347, 1349, 1351, 1353, 1355, 1357, 1359, 1361, 
 -	1363, 1365, 1367, 1370, 1372, 1374, 1377, 1379, 
 -	1381, 1385, 1391, 1395, 1398, 1404, 1423, 1426, 
 -	1429, 1433, 1436, 1439, 1442, 1445, 1448, 1451, 
 -	1454, 1458, 1461, 1464, 1468, 1471, 1474, 1477, 
 -	1480, 1483, 1486, 1490, 1493, 1496, 1499, 1502, 
 -	1505, 1508, 1511, 1515, 1520, 1523, 1526, 1529, 
 -	1532, 1535, 1539, 1542, 1545, 1548, 1551, 1554, 
 -	1557, 1560, 1563, 1566, 1569, 1572, 1575, 1578, 
 -	1581, 1584, 1587, 1590, 1593, 1596
 -};
 -
 -static const short _lexer_trans_targs[] = {
 -	2, 4, 4, 5, 15, 17, 31, 34, 
 -	37, 39, 31, 85, 259, 264, 275, 413, 
 -	441, 448, 4, 0, 3, 0, 4, 0, 
 -	4, 4, 5, 15, 17, 31, 34, 37, 
 -	39, 31, 85, 259, 264, 275, 413, 441, 
 -	448, 4, 0, 6, 0, 7, 0, 9, 
 -	8, 8, 9, 8, 8, 10, 10, 11, 
 -	10, 10, 10, 10, 11, 10, 10, 10, 
 -	10, 12, 10, 10, 10, 10, 13, 10, 
 -	10, 4, 14, 14, 0, 4, 14, 14, 
 -	0, 4, 16, 15, 4, 0, 18, 0, 
 -	19, 0, 20, 0, 21, 0, 22, 0, 
 -	23, 0, 24, 0, 25, 0, 26, 0, 
 -	27, 0, 28, 0, 29, 0, 30, 0, 
 -	509, 0, 32, 0, 4, 16, 33, 4, 
 -	16, 33, 0, 0, 0, 0, 35, 36, 
 -	4, 36, 36, 34, 35, 35, 4, 36, 
 -	34, 36, 0, 38, 0, 31, 0, 40, 
 -	0, 41, 0, 42, 0, 43, 0, 44, 
 -	0, 45, 0, 46, 0, 47, 0, 48, 
 -	0, 49, 0, 50, 0, 51, 0, 52, 
 -	0, 53, 0, 55, 54, 55, 54, 55, 
 -	55, 4, 56, 4, 70, 454, 461, 466, 
 -	474, 483, 55, 54, 55, 57, 54, 55, 
 -	58, 54, 55, 59, 54, 55, 60, 54, 
 -	55, 61, 54, 55, 62, 54, 55, 63, 
 -	54, 55, 64, 54, 55, 65, 54, 55, 
 -	66, 54, 55, 67, 54, 55, 68, 54, 
 -	55, 69, 54, 55, 4, 54, 55, 71, 
 -	54, 55, 72, 54, 55, 73, 54, 55, 
 -	74, 54, 55, 75, 54, 55, 76, 54, 
 -	55, 77, 54, 55, 78, 54, 55, 79, 
 -	54, 55, 80, 54, 55, 81, 54, 55, 
 -	82, 54, 55, 83, 54, 55, 84, 54, 
 -	4, 4, 5, 15, 17, 31, 34, 37, 
 -	39, 31, 85, 259, 264, 275, 413, 441, 
 -	448, 4, 0, 86, 88, 0, 87, 0, 
 -	32, 31, 0, 89, 0, 90, 163, 0, 
 -	91, 0, 92, 0, 93, 0, 94, 0, 
 -	96, 95, 96, 95, 96, 96, 4, 97, 
 -	111, 4, 112, 114, 111, 128, 131, 136, 
 -	144, 149, 156, 96, 95, 96, 98, 95, 
 -	96, 99, 95, 96, 100, 95, 96, 101, 
 -	95, 96, 102, 95, 96, 103, 95, 96, 
 -	104, 95, 96, 105, 95, 96, 106, 95, 
 -	96, 107, 95, 96, 108, 95, 96, 109, 
 -	95, 96, 110, 95, 96, 4, 95, 96, 
 -	84, 95, 96, 113, 95, 96, 111, 95, 
 -	96, 115, 95, 96, 116, 95, 96, 117, 
 -	95, 96, 118, 95, 96, 119, 95, 96, 
 -	120, 95, 96, 121, 95, 96, 122, 95, 
 -	96, 123, 95, 96, 124, 95, 96, 125, 
 -	95, 96, 126, 95, 96, 127, 95, 96, 
 -	84, 95, 96, 129, 95, 96, 130, 95, 
 -	96, 84, 111, 95, 96, 132, 95, 96, 
 -	133, 95, 96, 134, 95, 135, 96, 123, 
 -	95, 123, 96, 95, 96, 137, 139, 95, 
 -	96, 138, 95, 96, 111, 95, 96, 140, 
 -	95, 96, 141, 95, 96, 142, 95, 96, 
 -	143, 95, 96, 127, 95, 96, 145, 95, 
 -	96, 146, 95, 96, 147, 95, 96, 148, 
 -	95, 96, 127, 95, 96, 150, 95, 96, 
 -	151, 95, 96, 152, 95, 96, 153, 95, 
 -	96, 154, 95, 96, 155, 95, 96, 127, 
 -	95, 96, 157, 95, 96, 158, 161, 95, 
 -	96, 159, 95, 96, 160, 95, 96, 111, 
 -	111, 95, 96, 162, 95, 96, 113, 95, 
 -	164, 0, 165, 0, 166, 0, 167, 0, 
 -	168, 0, 170, 169, 170, 169, 170, 170, 
 -	4, 171, 185, 4, 186, 188, 185, 202, 
 -	209, 214, 222, 227, 252, 170, 169, 170, 
 -	172, 169, 170, 173, 169, 170, 174, 169, 
 -	170, 175, 169, 170, 176, 169, 170, 177, 
 -	169, 170, 178, 169, 170, 179, 169, 170, 
 -	180, 169, 170, 181, 169, 170, 182, 169, 
 -	170, 183, 169, 170, 184, 169, 170, 4, 
 -	169, 170, 84, 169, 170, 187, 169, 170, 
 -	185, 169, 170, 189, 169, 170, 190, 169, 
 -	170, 191, 169, 170, 192, 169, 170, 193, 
 -	169, 170, 194, 169, 170, 195, 169, 170, 
 -	196, 169, 170, 197, 169, 170, 198, 169, 
 -	170, 199, 169, 170, 200, 169, 170, 201, 
 -	169, 170, 84, 169, 170, 203, 205, 169, 
 -	170, 204, 169, 170, 84, 185, 169, 170, 
 -	206, 169, 170, 207, 169, 170, 208, 169, 
 -	170, 200, 169, 170, 210, 169, 170, 211, 
 -	169, 170, 212, 169, 213, 170, 197, 169, 
 -	197, 170, 169, 170, 215, 217, 169, 170, 
 -	216, 169, 170, 185, 169, 170, 218, 169, 
 -	170, 219, 169, 170, 220, 169, 170, 221, 
 -	169, 170, 201, 169, 170, 223, 169, 170, 
 -	224, 169, 170, 225, 169, 170, 226, 169, 
 -	170, 201, 169, 170, 228, 234, 236, 169, 
 -	170, 229, 169, 170, 230, 169, 170, 231, 
 -	169, 170, 232, 169, 170, 233, 169, 170, 
 -	201, 169, 170, 235, 169, 170, 221, 169, 
 -	170, 237, 169, 170, 238, 169, 170, 239, 
 -	169, 170, 240, 169, 170, 241, 169, 170, 
 -	242, 169, 170, 243, 169, 170, 244, 169, 
 -	170, 245, 169, 170, 246, 169, 170, 247, 
 -	169, 170, 248, 169, 170, 249, 169, 170, 
 -	250, 169, 170, 251, 169, 170, 221, 169, 
 -	170, 253, 169, 170, 254, 257, 169, 170, 
 -	255, 169, 170, 256, 169, 170, 185, 185, 
 -	169, 170, 258, 169, 170, 187, 169, 260, 
 -	0, 261, 0, 262, 0, 263, 48, 0, 
 -	48, 0, 265, 267, 0, 266, 0, 31, 
 -	0, 268, 271, 0, 269, 0, 270, 0, 
 -	167, 0, 272, 0, 273, 0, 274, 0, 
 -	52, 0, 276, 281, 0, 277, 0, 278, 
 -	0, 279, 0, 280, 0, 270, 0, 282, 
 -	0, 283, 0, 284, 0, 285, 0, 286, 
 -	384, 0, 288, 287, 288, 287, 288, 288, 
 -	4, 289, 303, 4, 304, 306, 303, 320, 
 -	329, 334, 344, 352, 377, 288, 287, 288, 
 -	290, 287, 288, 291, 287, 288, 292, 287, 
 -	288, 293, 287, 288, 294, 287, 288, 295, 
 -	287, 288, 296, 287, 288, 297, 287, 288, 
 -	298, 287, 288, 299, 287, 288, 300, 287, 
 -	288, 301, 287, 288, 302, 287, 288, 4, 
 -	287, 288, 84, 287, 288, 305, 287, 288, 
 -	303, 287, 288, 307, 287, 288, 308, 287, 
 -	288, 309, 287, 288, 310, 287, 288, 311, 
 -	287, 288, 312, 287, 288, 313, 287, 288, 
 -	314, 287, 288, 315, 287, 288, 316, 287, 
 -	288, 317, 287, 288, 318, 287, 288, 319, 
 -	287, 288, 84, 287, 288, 321, 323, 287, 
 -	288, 322, 287, 288, 84, 303, 287, 288, 
 -	324, 287, 288, 325, 327, 287, 288, 326, 
 -	287, 288, 318, 287, 288, 328, 287, 288, 
 -	317, 287, 288, 330, 287, 288, 331, 287, 
 -	288, 332, 287, 333, 288, 315, 287, 315, 
 -	288, 287, 288, 335, 337, 287, 288, 336, 
 -	287, 288, 303, 287, 288, 338, 341, 287, 
 -	288, 339, 287, 288, 340, 287, 288, 319, 
 -	287, 288, 342, 287, 288, 343, 287, 288, 
 -	340, 287, 288, 345, 348, 287, 288, 346, 
 -	287, 288, 347, 287, 288, 342, 287, 288, 
 -	349, 287, 288, 350, 287, 288, 351, 287, 
 -	288, 319, 287, 288, 353, 359, 361, 287, 
 -	288, 354, 287, 288, 355, 287, 288, 356, 
 -	287, 288, 357, 287, 288, 358, 287, 288, 
 -	319, 287, 288, 360, 287, 288, 340, 287, 
 -	288, 362, 287, 288, 363, 287, 288, 364, 
 -	287, 288, 365, 287, 288, 366, 287, 288, 
 -	367, 287, 288, 368, 287, 288, 369, 287, 
 -	288, 370, 287, 288, 371, 287, 288, 372, 
 -	287, 288, 373, 287, 288, 374, 287, 288, 
 -	375, 287, 288, 376, 287, 288, 340, 287, 
 -	288, 378, 287, 288, 379, 382, 287, 288, 
 -	380, 287, 288, 381, 287, 288, 303, 303, 
 -	287, 288, 383, 287, 288, 305, 287, 385, 
 -	0, 387, 386, 387, 386, 387, 387, 4, 
 -	388, 402, 407, 4, 387, 386, 387, 389, 
 -	386, 387, 390, 386, 387, 391, 386, 387, 
 -	392, 386, 387, 393, 386, 387, 394, 386, 
 -	387, 395, 386, 387, 396, 386, 387, 397, 
 -	386, 387, 398, 386, 387, 399, 386, 387, 
 -	400, 386, 387, 401, 386, 387, 84, 386, 
 -	387, 403, 386, 387, 404, 386, 387, 405, 
 -	386, 406, 387, 397, 386, 397, 387, 386, 
 -	387, 408, 386, 387, 409, 386, 387, 410, 
 -	386, 387, 411, 386, 387, 412, 386, 387, 
 -	401, 386, 414, 422, 425, 0, 415, 0, 
 -	416, 0, 417, 0, 418, 0, 419, 0, 
 -	420, 421, 0, 384, 0, 286, 0, 423, 
 -	0, 424, 0, 93, 0, 426, 0, 427, 
 -	0, 428, 0, 429, 0, 430, 0, 431, 
 -	0, 432, 0, 433, 0, 434, 0, 435, 
 -	0, 436, 0, 437, 0, 438, 0, 439, 
 -	0, 440, 0, 424, 0, 442, 0, 443, 
 -	446, 0, 444, 0, 445, 0, 31, 31, 
 -	0, 447, 0, 38, 0, 448, 449, 448, 
 -	0, 453, 452, 451, 449, 452, 450, 0, 
 -	451, 449, 450, 0, 451, 450, 453, 452, 
 -	451, 449, 452, 450, 453, 453, 5, 15, 
 -	17, 31, 34, 37, 39, 31, 85, 259, 
 -	264, 275, 413, 441, 448, 453, 0, 55, 
 -	455, 54, 55, 456, 54, 55, 457, 459, 
 -	54, 55, 458, 54, 55, 82, 54, 55, 
 -	460, 54, 55, 81, 54, 55, 462, 54, 
 -	55, 463, 54, 55, 464, 54, 465, 55, 
 -	79, 54, 79, 55, 54, 55, 467, 54, 
 -	55, 468, 471, 54, 55, 469, 54, 55, 
 -	470, 54, 55, 83, 54, 55, 472, 54, 
 -	55, 473, 54, 55, 470, 54, 55, 475, 
 -	478, 54, 55, 476, 54, 55, 477, 54, 
 -	55, 472, 54, 55, 479, 54, 55, 480, 
 -	54, 55, 481, 54, 55, 482, 54, 55, 
 -	84, 83, 54, 55, 484, 491, 493, 54, 
 -	55, 485, 54, 55, 486, 54, 55, 487, 
 -	54, 55, 488, 54, 55, 489, 54, 55, 
 -	490, 83, 54, 55, 83, 54, 55, 492, 
 -	54, 55, 470, 54, 55, 494, 54, 55, 
 -	495, 54, 55, 496, 54, 55, 497, 54, 
 -	55, 498, 54, 55, 499, 54, 55, 500, 
 -	54, 55, 501, 54, 55, 502, 54, 55, 
 -	503, 54, 55, 504, 54, 55, 505, 54, 
 -	55, 506, 54, 55, 507, 54, 55, 508, 
 -	54, 55, 470, 54, 0, 0
 -};
 -
 -static const unsigned char _lexer_trans_actions[] = {
 -	0, 54, 0, 5, 1, 0, 29, 1, 
 -	29, 29, 29, 29, 29, 29, 29, 29, 
 -	29, 35, 0, 43, 0, 43, 0, 43, 
 -	54, 0, 5, 1, 0, 29, 1, 29, 
 -	29, 29, 29, 29, 29, 29, 29, 29, 
 -	35, 0, 43, 0, 43, 0, 43, 139, 
 -	48, 9, 106, 11, 0, 134, 45, 45, 
 -	45, 3, 122, 33, 33, 33, 0, 122, 
 -	33, 33, 33, 0, 122, 33, 0, 33, 
 -	0, 102, 7, 7, 43, 54, 0, 0, 
 -	43, 114, 25, 0, 54, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 149, 126, 57, 110, 
 -	23, 0, 43, 43, 43, 43, 0, 27, 
 -	118, 27, 27, 51, 27, 0, 54, 0, 
 -	1, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 144, 57, 54, 0, 54, 
 -	0, 69, 33, 69, 84, 84, 84, 84, 
 -	84, 84, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 13, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 13, 0, 
 -	130, 31, 60, 57, 31, 63, 57, 63, 
 -	63, 63, 63, 63, 63, 63, 63, 63, 
 -	66, 31, 43, 0, 0, 43, 0, 43, 
 -	0, 0, 43, 0, 43, 0, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	144, 57, 54, 0, 54, 0, 78, 33, 
 -	84, 78, 84, 84, 84, 84, 84, 84, 
 -	84, 84, 84, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 19, 0, 54, 
 -	19, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	19, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 19, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 0, 54, 0, 
 -	0, 0, 54, 0, 54, 0, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 144, 57, 54, 0, 54, 0, 
 -	72, 33, 84, 72, 84, 84, 84, 84, 
 -	84, 84, 84, 84, 84, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 15, 
 -	0, 54, 15, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 15, 0, 54, 0, 0, 0, 
 -	54, 0, 0, 54, 15, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 0, 54, 0, 0, 
 -	0, 54, 0, 54, 0, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 0, 
 -	43, 0, 43, 0, 43, 0, 0, 43, 
 -	0, 43, 0, 0, 43, 0, 43, 0, 
 -	43, 0, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	0, 43, 144, 57, 54, 0, 54, 0, 
 -	75, 33, 84, 75, 84, 84, 84, 84, 
 -	84, 84, 84, 84, 84, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 17, 
 -	0, 54, 17, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 17, 0, 54, 0, 0, 0, 
 -	54, 0, 0, 54, 17, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 0, 54, 0, 0, 0, 
 -	54, 0, 54, 0, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 0, 
 -	43, 144, 57, 54, 0, 54, 0, 81, 
 -	84, 84, 84, 81, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 21, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 0, 54, 0, 0, 0, 54, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 0, 0, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	0, 43, 0, 43, 0, 43, 0, 0, 
 -	43, 0, 43, 0, 43, 0, 0, 0, 
 -	43, 54, 37, 37, 87, 37, 37, 43, 
 -	0, 39, 0, 43, 0, 0, 54, 0, 
 -	0, 39, 0, 0, 54, 0, 93, 90, 
 -	41, 96, 90, 96, 96, 96, 96, 96, 
 -	96, 96, 96, 96, 99, 0, 43, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 0, 54, 
 -	0, 0, 0, 54, 0, 54, 0, 0, 
 -	54, 0, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	13, 0, 0, 54, 0, 0, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 0, 0
 -};
 -
 -static const unsigned char _lexer_eof_actions[] = {
 -	0, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43
 -};
 -
 -static const int lexer_start = 1;
 -static const int lexer_first_final = 509;
 -static const int lexer_error = 0;
 -
 -static const int lexer_en_main = 1;
 -
 -
 -#line 258 "ragel/i18n/sr_latn.c.rl"
 -
 -static VALUE 
 -unindent(VALUE con, int start_col)
 -{
 -  VALUE re;
 -  /* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */
 -  char pat[32]; 
 -  snprintf(pat, 32, "^[\t ]{0,%d}", start_col); 
 -  re = rb_reg_regcomp(rb_str_new2(pat));
 -  rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2(""));
 -
 -  return Qnil;
 -
 -}
 -
 -static void 
 -store_kw_con(VALUE listener, const char * event_name, 
 -             const char * keyword_at, size_t keyword_length, 
 -             const char * at,         size_t length, 
 -             int current_line)
 -{
 -  VALUE con = Qnil, kw = Qnil;
 -  kw = ENCODED_STR_NEW(keyword_at, keyword_length);
 -  con = ENCODED_STR_NEW(at, length);
 -  rb_funcall(con, rb_intern("strip!"), 0);
 -  rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); 
 -}
 -
 -static void
 -store_multiline_kw_con(VALUE listener, const char * event_name,
 -                      const char * keyword_at, size_t keyword_length,
 -                      const char * at,         size_t length,
 -                      int current_line, int start_col)
 -{
 -  VALUE split;
 -  VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil;
 -
 -  kw = ENCODED_STR_NEW(keyword_at, keyword_length);
 -  con = ENCODED_STR_NEW(at, length);
 -
 -  unindent(con, start_col);
 -  
 -  split = rb_str_split(con, "\n");
 -
 -  name = rb_funcall(split, rb_intern("shift"), 0);
 -  desc = rb_ary_join(split, rb_str_new2( "\n" ));
 -
 -  if( name == Qnil ) 
 -  {
 -    name = rb_str_new2("");
 -  }
 -  if( rb_funcall(desc, rb_intern("size"), 0) == 0) 
 -  {
 -    desc = rb_str_new2("");
 -  }
 -  rb_funcall(name, rb_intern("strip!"), 0);
 -  rb_funcall(desc, rb_intern("rstrip!"), 0);
 -  rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); 
 -}
 -
 -static void 
 -store_attr(VALUE listener, const char * attr_type,
 -           const char * at, size_t length, 
 -           int line)
 -{
 -  VALUE val = ENCODED_STR_NEW(at, length);
 -  rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line));
 -}
 -static void 
 -store_docstring_content(VALUE listener, 
 -          int start_col, 
 -          const char *type_at, size_t type_length,
 -          const char *at, size_t length, 
 -          int current_line)
 -{
 -  VALUE re2;
 -  VALUE unescape_escaped_quotes;
 -  VALUE con = ENCODED_STR_NEW(at, length);
 -  VALUE con_type = ENCODED_STR_NEW(type_at, type_length);
 -
 -  unindent(con, start_col);
 -
 -  re2 = rb_reg_regcomp(rb_str_new2("\r\\Z"));
 -  unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\""));
 -  rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2(""));
 -  rb_funcall(con_type, rb_intern("strip!"), 0);
 -  rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\""));
 -  rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line));
 -}
 -static void 
 -raise_lexer_error(const char * at, int line)
 -{ 
 -  rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at);
 -}
 -
 -static void lexer_init(lexer_state *lexer) {
 -  lexer->content_start = 0;
 -  lexer->content_end = 0;
 -  lexer->content_len = 0;
 -  lexer->docstring_content_type_start = 0;
 -  lexer->docstring_content_type_end = 0;
 -  lexer->mark = 0;
 -  lexer->keyword_start = 0;
 -  lexer->keyword_end = 0;
 -  lexer->next_keyword_start = 0;
 -  lexer->line_number = 1;
 -  lexer->last_newline = 0;
 -  lexer->final_newline = 0;
 -  lexer->start_col = 0;
 -}
 -
 -static VALUE CLexer_alloc(VALUE klass)
 -{
 -  VALUE obj;
 -  lexer_state *lxr = ALLOC(lexer_state);
 -  lexer_init(lxr);
 -
 -  obj = Data_Wrap_Struct(klass, NULL, -1, lxr);
 -
 -  return obj;
 -}
 -
 -static VALUE CLexer_init(VALUE self, VALUE listener)
 -{
 -  lexer_state *lxr; 
 -  rb_iv_set(self, "@listener", listener);
 -  
 -  lxr = NULL;
 -  DATA_GET(self, lexer_state, lxr);
 -  lexer_init(lxr);
 -  
 -  return self;
 -}
 -
 -static VALUE CLexer_scan(VALUE self, VALUE input)
 -{
 -  VALUE input_copy;
 -  char *data;
 -  size_t len;
 -  VALUE listener = rb_iv_get(self, "@listener");
 -
 -  lexer_state *lexer;
 -  lexer = NULL;
 -  DATA_GET(self, lexer_state, lexer);
 -
 -  input_copy = rb_str_dup(input);
 -
 -  rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%"));
 -  data = RSTRING_PTR(input_copy);
 -  len = RSTRING_LEN(input_copy);
 -  
 -  if (len == 0) { 
 -    rb_raise(rb_eGherkinLexingError, "No content to lex.");
 -  } else {
 -
 -    const char *p, *pe, *eof;
 -    int cs = 0;
 -    
 -    VALUE current_row = Qnil;
 -
 -    p = data;
 -    pe = data + len;
 -    eof = pe;
 -    
 -    assert(*pe == '\0' && "pointer does not end on NULL");
 -    
 -    
 -#line 1171 "ext/gherkin_lexer_sr_latn/gherkin_lexer_sr_latn.c"
 -	{
 -	cs = lexer_start;
 -	}
 -
 -#line 425 "ragel/i18n/sr_latn.c.rl"
 -    
 -#line 1178 "ext/gherkin_lexer_sr_latn/gherkin_lexer_sr_latn.c"
 -	{
 -	int _klen;
 -	unsigned int _trans;
 -	const char *_acts;
 -	unsigned int _nacts;
 -	const char *_keys;
 -
 -	if ( p == pe )
 -		goto _test_eof;
 -	if ( cs == 0 )
 -		goto _out;
 -_resume:
 -	_keys = _lexer_trans_keys + _lexer_key_offsets[cs];
 -	_trans = _lexer_index_offsets[cs];
 -
 -	_klen = _lexer_single_lengths[cs];
 -	if ( _klen > 0 ) {
 -		const char *_lower = _keys;
 -		const char *_mid;
 -		const char *_upper = _keys + _klen - 1;
 -		while (1) {
 -			if ( _upper < _lower )
 -				break;
 -
 -			_mid = _lower + ((_upper-_lower) >> 1);
 -			if ( (*p) < *_mid )
 -				_upper = _mid - 1;
 -			else if ( (*p) > *_mid )
 -				_lower = _mid + 1;
 -			else {
 -				_trans += (unsigned int)(_mid - _keys);
 -				goto _match;
 -			}
 -		}
 -		_keys += _klen;
 -		_trans += _klen;
 -	}
 -
 -	_klen = _lexer_range_lengths[cs];
 -	if ( _klen > 0 ) {
 -		const char *_lower = _keys;
 -		const char *_mid;
 -		const char *_upper = _keys + (_klen<<1) - 2;
 -		while (1) {
 -			if ( _upper < _lower )
 -				break;
 -
 -			_mid = _lower + (((_upper-_lower) >> 1) & ~1);
 -			if ( (*p) < _mid[0] )
 -				_upper = _mid - 2;
 -			else if ( (*p) > _mid[1] )
 -				_lower = _mid + 2;
 -			else {
 -				_trans += (unsigned int)((_mid - _keys)>>1);
 -				goto _match;
 -			}
 -		}
 -		_trans += _klen;
 -	}
 -
 -_match:
 -	cs = _lexer_trans_targs[_trans];
 -
 -	if ( _lexer_trans_actions[_trans] == 0 )
 -		goto _again;
 -
 -	_acts = _lexer_actions + _lexer_trans_actions[_trans];
 -	_nacts = (unsigned int) *_acts++;
 -	while ( _nacts-- > 0 )
 -	{
 -		switch ( *_acts++ )
 -		{
 -	case 0:
 -#line 83 "ragel/i18n/sr_latn.c.rl"
 -	{
 -		MARK(content_start, p);
 -    lexer->current_line = lexer->line_number;
 -    lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2;
 -  }
 -	break;
 -	case 1:
 -#line 89 "ragel/i18n/sr_latn.c.rl"
 -	{
 -    MARK(content_start, p);
 -  }
 -	break;
 -	case 2:
 -#line 93 "ragel/i18n/sr_latn.c.rl"
 -	{
 -    lexer->current_line = lexer->line_number;
 -    lexer->start_col = p - data - lexer->last_newline;
 -  }
 -	break;
 -	case 3:
 -#line 98 "ragel/i18n/sr_latn.c.rl"
 -	{
 -    int len = LEN(content_start, PTR_TO(final_newline));
 -    int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end));
 -
 -    if (len < 0) len = 0;
 -    if (type_len < 0) len = 0;
 -
 -    store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line);
 -  }
 -	break;
 -	case 4:
 -#line 108 "ragel/i18n/sr_latn.c.rl"
 -	{ 
 -    MARK(docstring_content_type_start, p);
 -  }
 -	break;
 -	case 5:
 -#line 112 "ragel/i18n/sr_latn.c.rl"
 -	{ 
 -    MARK(docstring_content_type_end, p);
 -  }
 -	break;
 -	case 6:
 -#line 116 "ragel/i18n/sr_latn.c.rl"
 -	{
 -    STORE_KW_END_CON(feature);
 -  }
 -	break;
 -	case 7:
 -#line 120 "ragel/i18n/sr_latn.c.rl"
 -	{
 -    STORE_KW_END_CON(background);
 -  }
 -	break;
 -	case 8:
 -#line 124 "ragel/i18n/sr_latn.c.rl"
 -	{
 -    STORE_KW_END_CON(scenario);
 -  }
 -	break;
 -	case 9:
 -#line 128 "ragel/i18n/sr_latn.c.rl"
 -	{
 -    STORE_KW_END_CON(scenario_outline);
 -  }
 -	break;
 -	case 10:
 -#line 132 "ragel/i18n/sr_latn.c.rl"
 -	{
 -    STORE_KW_END_CON(examples);
 -  }
 -	break;
 -	case 11:
 -#line 136 "ragel/i18n/sr_latn.c.rl"
 -	{
 -    store_kw_con(listener, "step",
 -      PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
 -      PTR_TO(content_start), LEN(content_start, p), 
 -      lexer->current_line);
 -  }
 -	break;
 -	case 12:
 -#line 143 "ragel/i18n/sr_latn.c.rl"
 -	{
 -    STORE_ATTR(comment);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 13:
 -#line 148 "ragel/i18n/sr_latn.c.rl"
 -	{
 -    STORE_ATTR(tag);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 14:
 -#line 153 "ragel/i18n/sr_latn.c.rl"
 -	{
 -    lexer->line_number += 1;
 -    MARK(final_newline, p);
 -  }
 -	break;
 -	case 15:
 -#line 158 "ragel/i18n/sr_latn.c.rl"
 -	{
 -    MARK(last_newline, p + 1);
 -  }
 -	break;
 -	case 16:
 -#line 162 "ragel/i18n/sr_latn.c.rl"
 -	{
 -    if (lexer->mark == 0) {
 -      MARK(mark, p);
 -    }
 -  }
 -	break;
 -	case 17:
 -#line 168 "ragel/i18n/sr_latn.c.rl"
 -	{
 -    MARK(keyword_end, p);
 -    MARK(keyword_start, PTR_TO(mark));
 -    MARK(content_start, p + 1);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 18:
 -#line 175 "ragel/i18n/sr_latn.c.rl"
 -	{
 -    MARK(content_end, p);
 -  }
 -	break;
 -	case 19:
 -#line 179 "ragel/i18n/sr_latn.c.rl"
 -	{
 -    p = p - 1;
 -    lexer->current_line = lexer->line_number;
 -    current_row = rb_ary_new();
 -  }
 -	break;
 -	case 20:
 -#line 185 "ragel/i18n/sr_latn.c.rl"
 -	{
 -		MARK(content_start, p);
 -  }
 -	break;
 -	case 21:
 -#line 189 "ragel/i18n/sr_latn.c.rl"
 -	{
 -    VALUE re_pipe, re_newline, re_backslash;
 -    VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
 -    rb_funcall(con, rb_intern("strip!"), 0);
 -    re_pipe      = rb_reg_regcomp(rb_str_new2("\\\\\\|"));
 -    re_newline   = rb_reg_regcomp(rb_str_new2("\\\\n"));
 -    re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_pipe,      rb_str_new2("|"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_newline,   rb_str_new2("\n"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\"));
 -
 -    rb_ary_push(current_row, con);
 -  }
 -	break;
 -	case 22:
 -#line 203 "ragel/i18n/sr_latn.c.rl"
 -	{
 -    rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
 -  }
 -	break;
 -	case 23:
 -#line 207 "ragel/i18n/sr_latn.c.rl"
 -	{
 -    int line;
 -    if (cs < lexer_first_final) {
 -      size_t count = 0;
 -      VALUE newstr_val;
 -      char *newstr;
 -      int newstr_count = 0;        
 -      size_t len;
 -      const char *buff;
 -      if (lexer->last_newline != 0) {
 -        len = LEN(last_newline, eof);
 -        buff = PTR_TO(last_newline);
 -      } else {
 -        len = strlen(data);
 -        buff = data;
 -      }
 -
 -      /* Allocate as a ruby string so that it gets cleaned up by GC */
 -      newstr_val = rb_str_new(buff, len);
 -      newstr = RSTRING_PTR(newstr_val);
 -
 -
 -      for (count = 0; count < len; count++) {
 -        if(buff[count] == 10) {
 -          newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
 -          break;
 -        } else {
 -          if (buff[count] == '%') {
 -            newstr[newstr_count++] = buff[count];
 -            newstr[newstr_count] = buff[count];
 -          } else {
 -            newstr[newstr_count] = buff[count];
 -          }
 -        }
 -        newstr_count++;
 -      }
 -
 -      line = lexer->line_number;
 -      lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
 -      raise_lexer_error(newstr, line);
 -    } else {
 -      rb_funcall(listener, rb_intern("eof"), 0);
 -    }
 -  }
 -	break;
 -#line 1468 "ext/gherkin_lexer_sr_latn/gherkin_lexer_sr_latn.c"
 -		}
 -	}
 -
 -_again:
 -	if ( cs == 0 )
 -		goto _out;
 -	if ( ++p != pe )
 -		goto _resume;
 -	_test_eof: {}
 -	if ( p == eof )
 -	{
 -	const char *__acts = _lexer_actions + _lexer_eof_actions[cs];
 -	unsigned int __nacts = (unsigned int) *__acts++;
 -	while ( __nacts-- > 0 ) {
 -		switch ( *__acts++ ) {
 -	case 23:
 -#line 207 "ragel/i18n/sr_latn.c.rl"
 -	{
 -    int line;
 -    if (cs < lexer_first_final) {
 -      size_t count = 0;
 -      VALUE newstr_val;
 -      char *newstr;
 -      int newstr_count = 0;        
 -      size_t len;
 -      const char *buff;
 -      if (lexer->last_newline != 0) {
 -        len = LEN(last_newline, eof);
 -        buff = PTR_TO(last_newline);
 -      } else {
 -        len = strlen(data);
 -        buff = data;
 -      }
 -
 -      /* Allocate as a ruby string so that it gets cleaned up by GC */
 -      newstr_val = rb_str_new(buff, len);
 -      newstr = RSTRING_PTR(newstr_val);
 -
 -
 -      for (count = 0; count < len; count++) {
 -        if(buff[count] == 10) {
 -          newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
 -          break;
 -        } else {
 -          if (buff[count] == '%') {
 -            newstr[newstr_count++] = buff[count];
 -            newstr[newstr_count] = buff[count];
 -          } else {
 -            newstr[newstr_count] = buff[count];
 -          }
 -        }
 -        newstr_count++;
 -      }
 -
 -      line = lexer->line_number;
 -      lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
 -      raise_lexer_error(newstr, line);
 -    } else {
 -      rb_funcall(listener, rb_intern("eof"), 0);
 -    }
 -  }
 -	break;
 -#line 1531 "ext/gherkin_lexer_sr_latn/gherkin_lexer_sr_latn.c"
 -		}
 -	}
 -	}
 -
 -	_out: {}
 -	}
 -
 -#line 426 "ragel/i18n/sr_latn.c.rl"
 -
 -    assert(p <= pe && "data overflow after parsing execute");
 -    assert(lexer->content_start <= len && "content starts after data end");
 -    assert(lexer->mark < len && "mark is after data end");
 -    
 -    /* Reset lexer by re-initializing the whole thing */
 -    lexer_init(lexer);
 -
 -    if (cs == lexer_error) {
 -      rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails.");
 -    } else {
 -      return Qtrue;
 -    }
 -  }
 -}
 -
 -void Init_gherkin_lexer_sr_latn()
 -{
 -  mGherkin = rb_define_module("Gherkin");
 -  mGherkinLexer = rb_define_module_under(mGherkin, "Lexer");
 -  rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError"));
 -
 -  mCLexer = rb_define_module_under(mGherkin, "CLexer");
 -  cI18nLexer = rb_define_class_under(mCLexer, "Sr_latn", rb_cObject);
 -  rb_define_alloc_func(cI18nLexer, CLexer_alloc);
 -  rb_define_method(cI18nLexer, "initialize", CLexer_init, 1);
 -  rb_define_method(cI18nLexer, "scan", CLexer_scan, 1);
 -}
 -
diff --cc ext/gherkin_lexer_sv/extconf.rb
index 633b85c,633b85c..0000000
deleted file mode 100644,100644
--- a/ext/gherkin_lexer_sv/extconf.rb
+++ /dev/null
@@@ -1,6 -1,6 +1,0 @@@
--require 'mkmf'
--CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags']
--$CFLAGS << ' -O0 -Wall' if CONFIG['CC'] =~ /gcc|clang/
--dir_config("gherkin_lexer_sv")
--have_library("c", "main")
--create_makefile("gherkin_lexer_sv")
diff --cc ext/gherkin_lexer_sv/gherkin_lexer_sv.c
index 2aa69da,aac4307..0000000
deleted file mode 100644,100644
--- a/ext/gherkin_lexer_sv/gherkin_lexer_sv.c
+++ /dev/null
@@@ -1,1324 -1,1324 +1,0 @@@
--
- #line 1 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sv.c.rl"
- #include <assert.h>
- #include <ruby.h>
- 
- #if defined(_WIN32)
- #include <stddef.h>
- #endif
- 
- #ifdef HAVE_RUBY_RE_H
- #include <ruby/re.h>
- #else
- #include <re.h>
- #endif
- 
- #ifdef HAVE_RUBY_ENCODING_H
- #include <ruby/encoding.h>
- #define ENCODED_STR_NEW(ptr, len) \
-     rb_enc_str_new(ptr, len, rb_utf8_encoding())
- #else
- #define ENCODED_STR_NEW(ptr, len) \
-     rb_str_new(ptr, len)
- #endif
- 
- #ifndef RSTRING_PTR
- #define RSTRING_PTR(s) (RSTRING(s)->ptr)
- #endif
- 
- #ifndef RSTRING_LEN
- #define RSTRING_LEN(s) (RSTRING(s)->len)
- #endif
- 
- #define DATA_GET(FROM, TYPE, NAME) \
-   Data_Get_Struct(FROM, TYPE, NAME); \
-   if (NAME == NULL) { \
-     rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \
-   }
-  
- typedef struct lexer_state {
-   int content_len;
-   int line_number;
-   int current_line;
-   int start_col;
-   size_t mark;
-   size_t keyword_start;
-   size_t keyword_end;
-   size_t next_keyword_start;
-   size_t content_start;
-   size_t content_end;
-   size_t docstring_content_type_start;
-   size_t docstring_content_type_end;
-   size_t query_start;
-   size_t last_newline;
-   size_t final_newline;
- } lexer_state;
- 
- static VALUE mGherkin;
- static VALUE mGherkinLexer;
- static VALUE mCLexer;
- static VALUE cI18nLexer;
- static VALUE rb_eGherkinLexingError;
- 
- #define LEN(AT, P) (P - data - lexer->AT)
- #define MARK(M, P) (lexer->M = (P) - data)
- #define PTR_TO(P) (data + lexer->P)
- 
- #define STORE_KW_END_CON(EVENT) \
-   store_multiline_kw_con(listener, # EVENT, \
-     PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \
-     PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \
-     lexer->current_line, lexer->start_col); \
-     if (lexer->content_end != 0) { \
-       p = PTR_TO(content_end - 1); \
-     } \
-     lexer->content_end = 0
- 
- #define STORE_ATTR(ATTR) \
-     store_attr(listener, # ATTR, \
-       PTR_TO(content_start), LEN(content_start, p), \
-       lexer->line_number)
- 
- 
- #line 254 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sv.c.rl"
- 
- 
- /** Data **/
- 
- #line 89 "ext/gherkin_lexer_sv/gherkin_lexer_sv.c"
- static const char _lexer_actions[] = {
- 	0, 1, 0, 1, 1, 1, 2, 1, 
- 	3, 1, 4, 1, 5, 1, 6, 1, 
- 	7, 1, 8, 1, 9, 1, 10, 1, 
- 	11, 1, 12, 1, 13, 1, 16, 1, 
- 	17, 1, 18, 1, 19, 1, 20, 1, 
- 	21, 1, 22, 1, 23, 2, 1, 18, 
- 	2, 4, 5, 2, 13, 0, 2, 14, 
- 	15, 2, 17, 0, 2, 17, 2, 2, 
- 	17, 16, 2, 17, 19, 2, 18, 6, 
- 	2, 18, 7, 2, 18, 8, 2, 18, 
- 	9, 2, 18, 10, 2, 18, 16, 2, 
- 	20, 21, 2, 22, 0, 2, 22, 2, 
- 	2, 22, 16, 2, 22, 19, 3, 3, 
- 	14, 15, 3, 5, 14, 15, 3, 11, 
- 	14, 15, 3, 12, 14, 15, 3, 13, 
- 	14, 15, 3, 14, 15, 18, 3, 17, 
- 	0, 11, 3, 17, 14, 15, 4, 1, 
- 	14, 15, 18, 4, 4, 5, 14, 15, 
- 	4, 17, 0, 14, 15, 5, 17, 0, 
- 	11, 14, 15
- };
- 
- static const short _lexer_key_offsets[] = {
- 	0, 0, 19, 20, 21, 39, 40, 41, 
- 	43, 45, 50, 55, 60, 65, 69, 73, 
- 	75, 76, 77, 78, 79, 80, 81, 82, 
- 	83, 84, 85, 86, 87, 88, 89, 90, 
- 	91, 93, 95, 100, 107, 112, 113, 114, 
- 	115, 116, 117, 118, 119, 120, 121, 122, 
- 	123, 124, 125, 126, 127, 128, 129, 130, 
- 	131, 145, 147, 149, 151, 153, 155, 157, 
- 	159, 161, 163, 165, 167, 169, 171, 173, 
- 	175, 193, 194, 195, 196, 197, 198, 199, 
- 	200, 201, 202, 203, 218, 220, 222, 224, 
- 	226, 228, 230, 232, 234, 236, 238, 240, 
- 	242, 244, 246, 248, 250, 252, 254, 256, 
- 	258, 260, 262, 264, 266, 268, 270, 272, 
- 	274, 276, 278, 280, 282, 284, 286, 288, 
- 	290, 292, 294, 296, 298, 300, 302, 304, 
- 	306, 308, 310, 312, 314, 316, 318, 321, 
- 	323, 325, 327, 329, 331, 333, 335, 338, 
- 	340, 342, 344, 346, 347, 348, 349, 350, 
- 	351, 352, 353, 354, 355, 366, 368, 370, 
- 	372, 374, 376, 378, 380, 382, 384, 386, 
- 	388, 390, 392, 394, 396, 398, 400, 402, 
- 	404, 406, 408, 410, 412, 414, 416, 418, 
- 	420, 422, 424, 426, 428, 430, 432, 434, 
- 	436, 438, 440, 442, 445, 447, 449, 451, 
- 	453, 455, 457, 459, 461, 463, 465, 467, 
- 	469, 471, 473, 475, 477, 479, 481, 484, 
- 	486, 488, 489, 490, 491, 492, 493, 494, 
- 	495, 496, 503, 505, 507, 509, 511, 513, 
- 	515, 517, 519, 520, 521, 522, 523, 524, 
- 	525, 526, 527, 528, 529, 530, 532, 533, 
- 	534, 535, 536, 537, 538, 539, 541, 542, 
- 	543, 559, 561, 563, 565, 567, 569, 571, 
- 	573, 575, 577, 579, 581, 583, 585, 587, 
- 	589, 591, 593, 595, 597, 599, 601, 603, 
- 	605, 607, 609, 611, 613, 615, 617, 619, 
- 	621, 623, 625, 627, 629, 631, 633, 635, 
- 	637, 639, 641, 643, 645, 647, 649, 651, 
- 	653, 655, 657, 659, 661, 663, 665, 667, 
- 	669, 671, 673, 676, 678, 680, 682, 684, 
- 	686, 688, 690, 693, 695, 697, 699, 700, 
- 	701, 702, 706, 712, 715, 717, 723, 741, 
- 	743, 745, 747, 749, 751, 753, 755, 757, 
- 	759, 761, 763, 765, 767, 769, 771, 773, 
- 	775, 777, 779, 782, 784, 786, 788, 790, 
- 	792, 794, 796
- };
- 
- static const char _lexer_trans_keys[] = {
- 	-17, 10, 32, 34, 35, 37, 42, 64, 
- 	65, 66, 69, 71, 77, 78, 79, 83, 
- 	124, 9, 13, -69, -65, 10, 32, 34, 
- 	35, 37, 42, 64, 65, 66, 69, 71, 
- 	77, 78, 79, 83, 124, 9, 13, 34, 
- 	34, 10, 13, 10, 13, 10, 32, 34, 
- 	9, 13, 10, 32, 34, 9, 13, 10, 
- 	32, 34, 9, 13, 10, 32, 34, 9, 
- 	13, 10, 32, 9, 13, 10, 32, 9, 
- 	13, 10, 13, 10, 95, 70, 69, 65, 
- 	84, 85, 82, 69, 95, 69, 78, 68, 
- 	95, 37, 32, 10, 13, 10, 13, 13, 
- 	32, 64, 9, 10, 9, 10, 13, 32, 
- 	64, 11, 12, 10, 32, 64, 9, 13, 
- 	98, 115, 116, 114, 97, 107, 116, 32, 
- 	83, 99, 101, 110, 97, 114, 105, 111, 
- 	58, 10, 10, 10, 32, 35, 37, 42, 
- 	64, 69, 71, 77, 78, 79, 83, 9, 
- 	13, 10, 95, 10, 70, 10, 69, 10, 
- 	65, 10, 84, 10, 85, 10, 82, 10, 
- 	69, 10, 95, 10, 69, 10, 78, 10, 
- 	68, 10, 95, 10, 37, 10, 32, 10, 
- 	32, 34, 35, 37, 42, 64, 65, 66, 
- 	69, 71, 77, 78, 79, 83, 124, 9, 
- 	13, 97, 107, 103, 114, 117, 110, 100, 
- 	58, 10, 10, 10, 32, 35, 37, 42, 
- 	64, 65, 69, 71, 77, 78, 79, 83, 
- 	9, 13, 10, 95, 10, 70, 10, 69, 
- 	10, 65, 10, 84, 10, 85, 10, 82, 
- 	10, 69, 10, 95, 10, 69, 10, 78, 
- 	10, 68, 10, 95, 10, 37, 10, 32, 
- 	10, 98, 10, 115, 10, 116, 10, 114, 
- 	10, 97, 10, 107, 10, 116, 10, 32, 
- 	10, 83, 10, 99, 10, 101, 10, 110, 
- 	10, 97, 10, 114, 10, 105, 10, 111, 
- 	10, 58, 10, 103, 10, 101, 10, 110, 
- 	10, 115, 10, 107, 10, 97, 10, 112, 
- 	10, 105, 10, 118, 10, 101, 10, 116, 
- 	10, 101, 10, 110, -61, 10, -92, 10, 
- 	10, 114, 10, 99, 10, 104, -61, 10, 
- 	99, -91, 10, 10, 101, 10, 110, 10, 
- 	97, 10, 114, 10, 105, 10, 111, 10, 
- 	58, 109, 10, 97, 10, 108, 10, 108, 
- 	103, 120, 101, 110, 115, 107, 97, 112, 
- 	58, 10, 10, 10, 32, 35, 37, 64, 
- 	65, 66, 69, 83, 9, 13, 10, 95, 
- 	10, 70, 10, 69, 10, 65, 10, 84, 
- 	10, 85, 10, 82, 10, 69, 10, 95, 
- 	10, 69, 10, 78, 10, 68, 10, 95, 
- 	10, 37, 10, 98, 10, 115, 10, 116, 
- 	10, 114, 10, 97, 10, 107, 10, 116, 
- 	10, 32, 10, 83, 10, 99, 10, 101, 
- 	10, 110, 10, 97, 10, 114, 10, 105, 
- 	10, 111, 10, 58, 10, 97, 10, 107, 
- 	10, 103, 10, 114, 10, 117, 10, 110, 
- 	10, 100, 10, 103, 120, 10, 101, 10, 
- 	110, 10, 115, 10, 107, 10, 97, 10, 
- 	112, 10, 101, 10, 109, 10, 112, 10, 
- 	101, 10, 108, 10, 99, 10, 101, 10, 
- 	110, 10, 97, 10, 114, 10, 105, 10, 
- 	111, 10, 58, 109, 10, 97, 10, 108, 
- 	101, 109, 112, 101, 108, 58, 10, 10, 
- 	10, 32, 35, 69, 124, 9, 13, 10, 
- 	103, 10, 101, 10, 110, 10, 115, 10, 
- 	107, 10, 97, 10, 112, 10, 58, 105, 
- 	118, 101, 116, 101, 110, -61, -92, 114, 
- 	99, 104, -61, 99, -91, 101, 110, 97, 
- 	114, 105, 111, 58, 109, 10, 10, 10, 
- 	32, 35, 37, 42, 64, 65, 66, 69, 
- 	71, 77, 78, 79, 83, 9, 13, 10, 
- 	95, 10, 70, 10, 69, 10, 65, 10, 
- 	84, 10, 85, 10, 82, 10, 69, 10, 
- 	95, 10, 69, 10, 78, 10, 68, 10, 
- 	95, 10, 37, 10, 32, 10, 98, 10, 
- 	115, 10, 116, 10, 114, 10, 97, 10, 
- 	107, 10, 116, 10, 32, 10, 83, 10, 
- 	99, 10, 101, 10, 110, 10, 97, 10, 
- 	114, 10, 105, 10, 111, 10, 58, 10, 
- 	97, 10, 107, 10, 103, 10, 114, 10, 
- 	117, 10, 110, 10, 100, 10, 103, 10, 
- 	101, 10, 110, 10, 115, 10, 107, 10, 
- 	97, 10, 112, 10, 105, 10, 118, 10, 
- 	101, 10, 116, 10, 101, 10, 110, -61, 
- 	10, -92, 10, 10, 114, 10, 99, 10, 
- 	104, -61, 10, 99, -91, 10, 10, 101, 
- 	10, 110, 10, 97, 10, 114, 10, 105, 
- 	10, 111, 10, 58, 109, 10, 97, 10, 
- 	108, 10, 108, 97, 108, 108, 32, 124, 
- 	9, 13, 10, 32, 92, 124, 9, 13, 
- 	10, 92, 124, 10, 92, 10, 32, 92, 
- 	124, 9, 13, 10, 32, 34, 35, 37, 
- 	42, 64, 65, 66, 69, 71, 77, 78, 
- 	79, 83, 124, 9, 13, 10, 103, 10, 
- 	101, 10, 110, 10, 115, 10, 107, 10, 
- 	97, 10, 112, 10, 58, 10, 105, 10, 
- 	118, 10, 101, 10, 116, 10, 101, 10, 
- 	110, -61, 10, -92, 10, 10, 114, 10, 
- 	99, 10, 104, -61, 10, 99, -91, 10, 
- 	10, 101, 10, 110, 10, 97, 10, 114, 
- 	10, 105, 10, 111, 0
- };
- 
- static const char _lexer_single_lengths[] = {
- 	0, 17, 1, 1, 16, 1, 1, 2, 
- 	2, 3, 3, 3, 3, 2, 2, 2, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	2, 2, 3, 5, 3, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	12, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	16, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 13, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 3, 2, 
- 	2, 2, 2, 2, 2, 2, 3, 2, 
- 	2, 2, 2, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 9, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 3, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 3, 2, 
- 	2, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 5, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 2, 1, 1, 
- 	1, 1, 1, 1, 1, 2, 1, 1, 
- 	14, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 3, 2, 2, 2, 2, 2, 
- 	2, 2, 3, 2, 2, 2, 1, 1, 
- 	1, 2, 4, 3, 2, 4, 16, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 3, 2, 2, 2, 2, 2, 
- 	2, 2, 0
- };
- 
- static const char _lexer_range_lengths[] = {
- 	0, 1, 0, 0, 1, 0, 0, 0, 
- 	0, 1, 1, 1, 1, 1, 1, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 1, 1, 1, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	1, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	1, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 1, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 1, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 1, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	1, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 1, 1, 0, 0, 1, 1, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0
- };
- 
- static const short _lexer_index_offsets[] = {
- 	0, 0, 19, 21, 23, 41, 43, 45, 
- 	48, 51, 56, 61, 66, 71, 75, 79, 
- 	82, 84, 86, 88, 90, 92, 94, 96, 
- 	98, 100, 102, 104, 106, 108, 110, 112, 
- 	114, 117, 120, 125, 132, 137, 139, 141, 
- 	143, 145, 147, 149, 151, 153, 155, 157, 
- 	159, 161, 163, 165, 167, 169, 171, 173, 
- 	175, 189, 192, 195, 198, 201, 204, 207, 
- 	210, 213, 216, 219, 222, 225, 228, 231, 
- 	234, 252, 254, 256, 258, 260, 262, 264, 
- 	266, 268, 270, 272, 287, 290, 293, 296, 
- 	299, 302, 305, 308, 311, 314, 317, 320, 
- 	323, 326, 329, 332, 335, 338, 341, 344, 
- 	347, 350, 353, 356, 359, 362, 365, 368, 
- 	371, 374, 377, 380, 383, 386, 389, 392, 
- 	395, 398, 401, 404, 407, 410, 413, 416, 
- 	419, 422, 425, 428, 431, 434, 437, 441, 
- 	444, 447, 450, 453, 456, 459, 462, 466, 
- 	469, 472, 475, 478, 480, 482, 484, 486, 
- 	488, 490, 492, 494, 496, 507, 510, 513, 
- 	516, 519, 522, 525, 528, 531, 534, 537, 
- 	540, 543, 546, 549, 552, 555, 558, 561, 
- 	564, 567, 570, 573, 576, 579, 582, 585, 
- 	588, 591, 594, 597, 600, 603, 606, 609, 
- 	612, 615, 618, 621, 625, 628, 631, 634, 
- 	637, 640, 643, 646, 649, 652, 655, 658, 
- 	661, 664, 667, 670, 673, 676, 679, 683, 
- 	686, 689, 691, 693, 695, 697, 699, 701, 
- 	703, 705, 712, 715, 718, 721, 724, 727, 
- 	730, 733, 736, 738, 740, 742, 744, 746, 
- 	748, 750, 752, 754, 756, 758, 761, 763, 
- 	765, 767, 769, 771, 773, 775, 778, 780, 
- 	782, 798, 801, 804, 807, 810, 813, 816, 
- 	819, 822, 825, 828, 831, 834, 837, 840, 
- 	843, 846, 849, 852, 855, 858, 861, 864, 
- 	867, 870, 873, 876, 879, 882, 885, 888, 
- 	891, 894, 897, 900, 903, 906, 909, 912, 
- 	915, 918, 921, 924, 927, 930, 933, 936, 
- 	939, 942, 945, 948, 951, 954, 957, 960, 
- 	963, 966, 969, 973, 976, 979, 982, 985, 
- 	988, 991, 994, 998, 1001, 1004, 1007, 1009, 
- 	1011, 1013, 1017, 1023, 1027, 1030, 1036, 1054, 
- 	1057, 1060, 1063, 1066, 1069, 1072, 1075, 1078, 
- 	1081, 1084, 1087, 1090, 1093, 1096, 1099, 1102, 
- 	1105, 1108, 1111, 1115, 1118, 1121, 1124, 1127, 
- 	1130, 1133, 1136
- };
- 
- static const short _lexer_trans_targs[] = {
- 	2, 4, 4, 5, 15, 17, 31, 34, 
- 	37, 73, 146, 234, 238, 240, 243, 245, 
- 	329, 4, 0, 3, 0, 4, 0, 4, 
- 	4, 5, 15, 17, 31, 34, 37, 73, 
- 	146, 234, 238, 240, 243, 245, 329, 4, 
- 	0, 6, 0, 7, 0, 9, 8, 8, 
- 	9, 8, 8, 10, 10, 11, 10, 10, 
- 	10, 10, 11, 10, 10, 10, 10, 12, 
- 	10, 10, 10, 10, 13, 10, 10, 4, 
- 	14, 14, 0, 4, 14, 14, 0, 4, 
- 	16, 15, 4, 0, 18, 0, 19, 0, 
- 	20, 0, 21, 0, 22, 0, 23, 0, 
- 	24, 0, 25, 0, 26, 0, 27, 0, 
- 	28, 0, 29, 0, 30, 0, 362, 0, 
- 	32, 0, 4, 16, 33, 4, 16, 33, 
- 	0, 0, 0, 0, 35, 36, 4, 36, 
- 	36, 34, 35, 35, 4, 36, 34, 36, 
- 	0, 38, 0, 39, 0, 40, 0, 41, 
- 	0, 42, 0, 43, 0, 44, 0, 45, 
- 	0, 46, 0, 47, 0, 48, 0, 49, 
- 	0, 50, 0, 51, 0, 52, 0, 53, 
- 	0, 54, 0, 56, 55, 56, 55, 56, 
- 	56, 4, 57, 71, 4, 335, 343, 347, 
- 	349, 352, 354, 56, 55, 56, 58, 55, 
- 	56, 59, 55, 56, 60, 55, 56, 61, 
- 	55, 56, 62, 55, 56, 63, 55, 56, 
- 	64, 55, 56, 65, 55, 56, 66, 55, 
- 	56, 67, 55, 56, 68, 55, 56, 69, 
- 	55, 56, 70, 55, 56, 4, 55, 56, 
- 	72, 55, 4, 4, 5, 15, 17, 31, 
- 	34, 37, 73, 146, 234, 238, 240, 243, 
- 	245, 329, 4, 0, 74, 0, 75, 0, 
- 	76, 0, 77, 0, 78, 0, 79, 0, 
- 	80, 0, 81, 0, 83, 82, 83, 82, 
- 	83, 83, 4, 84, 98, 4, 99, 116, 
- 	123, 127, 129, 132, 134, 83, 82, 83, 
- 	85, 82, 83, 86, 82, 83, 87, 82, 
- 	83, 88, 82, 83, 89, 82, 83, 90, 
- 	82, 83, 91, 82, 83, 92, 82, 83, 
- 	93, 82, 83, 94, 82, 83, 95, 82, 
- 	83, 96, 82, 83, 97, 82, 83, 4, 
- 	82, 83, 72, 82, 83, 100, 82, 83, 
- 	101, 82, 83, 102, 82, 83, 103, 82, 
- 	83, 104, 82, 83, 105, 82, 83, 106, 
- 	82, 83, 107, 82, 83, 108, 82, 83, 
- 	109, 82, 83, 110, 82, 83, 111, 82, 
- 	83, 112, 82, 83, 113, 82, 83, 114, 
- 	82, 83, 115, 82, 83, 72, 82, 83, 
- 	117, 82, 83, 118, 82, 83, 119, 82, 
- 	83, 120, 82, 83, 121, 82, 83, 122, 
- 	82, 83, 115, 82, 83, 124, 82, 83, 
- 	125, 82, 83, 126, 82, 83, 98, 82, 
- 	83, 128, 82, 83, 98, 82, 130, 83, 
- 	82, 131, 83, 82, 83, 98, 82, 83, 
- 	133, 82, 83, 98, 82, 135, 83, 136, 
- 	82, 98, 83, 82, 83, 137, 82, 83, 
- 	138, 82, 83, 139, 82, 83, 140, 82, 
- 	83, 141, 82, 83, 142, 82, 83, 72, 
- 	143, 82, 83, 144, 82, 83, 145, 82, 
- 	83, 115, 82, 147, 217, 0, 148, 0, 
- 	149, 0, 150, 0, 151, 0, 152, 0, 
- 	153, 0, 154, 0, 156, 155, 156, 155, 
- 	156, 156, 4, 157, 4, 171, 188, 195, 
- 	207, 156, 155, 156, 158, 155, 156, 159, 
- 	155, 156, 160, 155, 156, 161, 155, 156, 
- 	162, 155, 156, 163, 155, 156, 164, 155, 
- 	156, 165, 155, 156, 166, 155, 156, 167, 
- 	155, 156, 168, 155, 156, 169, 155, 156, 
- 	170, 155, 156, 4, 155, 156, 172, 155, 
- 	156, 173, 155, 156, 174, 155, 156, 175, 
- 	155, 156, 176, 155, 156, 177, 155, 156, 
- 	178, 155, 156, 179, 155, 156, 180, 155, 
- 	156, 181, 155, 156, 182, 155, 156, 183, 
- 	155, 156, 184, 155, 156, 185, 155, 156, 
- 	186, 155, 156, 187, 155, 156, 72, 155, 
- 	156, 189, 155, 156, 190, 155, 156, 191, 
- 	155, 156, 192, 155, 156, 193, 155, 156, 
- 	194, 155, 156, 187, 155, 156, 196, 202, 
- 	155, 156, 197, 155, 156, 198, 155, 156, 
- 	199, 155, 156, 200, 155, 156, 201, 155, 
- 	156, 187, 155, 156, 203, 155, 156, 204, 
- 	155, 156, 205, 155, 156, 206, 155, 156, 
- 	187, 155, 156, 208, 155, 156, 209, 155, 
- 	156, 210, 155, 156, 211, 155, 156, 212, 
- 	155, 156, 213, 155, 156, 214, 155, 156, 
- 	72, 215, 155, 156, 216, 155, 156, 206, 
- 	155, 218, 0, 219, 0, 220, 0, 221, 
- 	0, 222, 0, 223, 0, 225, 224, 225, 
- 	224, 225, 225, 4, 226, 4, 225, 224, 
- 	225, 227, 224, 225, 228, 224, 225, 229, 
- 	224, 225, 230, 224, 225, 231, 224, 225, 
- 	232, 224, 225, 233, 224, 225, 72, 224, 
- 	235, 0, 236, 0, 237, 0, 31, 0, 
- 	239, 0, 31, 0, 241, 0, 242, 0, 
- 	31, 0, 244, 0, 31, 0, 246, 247, 
- 	0, 31, 0, 248, 0, 249, 0, 250, 
- 	0, 251, 0, 252, 0, 253, 0, 254, 
- 	326, 0, 256, 255, 256, 255, 256, 256, 
- 	4, 257, 271, 4, 272, 289, 296, 303, 
- 	307, 309, 312, 314, 256, 255, 256, 258, 
- 	255, 256, 259, 255, 256, 260, 255, 256, 
- 	261, 255, 256, 262, 255, 256, 263, 255, 
- 	256, 264, 255, 256, 265, 255, 256, 266, 
- 	255, 256, 267, 255, 256, 268, 255, 256, 
- 	269, 255, 256, 270, 255, 256, 4, 255, 
- 	256, 72, 255, 256, 273, 255, 256, 274, 
- 	255, 256, 275, 255, 256, 276, 255, 256, 
- 	277, 255, 256, 278, 255, 256, 279, 255, 
- 	256, 280, 255, 256, 281, 255, 256, 282, 
- 	255, 256, 283, 255, 256, 284, 255, 256, 
- 	285, 255, 256, 286, 255, 256, 287, 255, 
- 	256, 288, 255, 256, 72, 255, 256, 290, 
- 	255, 256, 291, 255, 256, 292, 255, 256, 
- 	293, 255, 256, 294, 255, 256, 295, 255, 
- 	256, 288, 255, 256, 297, 255, 256, 298, 
- 	255, 256, 299, 255, 256, 300, 255, 256, 
- 	301, 255, 256, 302, 255, 256, 288, 255, 
- 	256, 304, 255, 256, 305, 255, 256, 306, 
- 	255, 256, 271, 255, 256, 308, 255, 256, 
- 	271, 255, 310, 256, 255, 311, 256, 255, 
- 	256, 271, 255, 256, 313, 255, 256, 271, 
- 	255, 315, 256, 316, 255, 271, 256, 255, 
- 	256, 317, 255, 256, 318, 255, 256, 319, 
- 	255, 256, 320, 255, 256, 321, 255, 256, 
- 	322, 255, 256, 72, 323, 255, 256, 324, 
- 	255, 256, 325, 255, 256, 288, 255, 327, 
- 	0, 328, 0, 53, 0, 329, 330, 329, 
- 	0, 334, 333, 332, 330, 333, 331, 0, 
- 	332, 330, 331, 0, 332, 331, 334, 333, 
- 	332, 330, 333, 331, 334, 334, 5, 15, 
- 	17, 31, 34, 37, 73, 146, 234, 238, 
- 	240, 243, 245, 329, 334, 0, 56, 336, 
- 	55, 56, 337, 55, 56, 338, 55, 56, 
- 	339, 55, 56, 340, 55, 56, 341, 55, 
- 	56, 342, 55, 56, 72, 55, 56, 344, 
- 	55, 56, 345, 55, 56, 346, 55, 56, 
- 	71, 55, 56, 348, 55, 56, 71, 55, 
- 	350, 56, 55, 351, 56, 55, 56, 71, 
- 	55, 56, 353, 55, 56, 71, 55, 355, 
- 	56, 356, 55, 71, 56, 55, 56, 357, 
- 	55, 56, 358, 55, 56, 359, 55, 56, 
- 	360, 55, 56, 361, 55, 56, 342, 55, 
- 	0, 0
- };
- 
- static const unsigned char _lexer_trans_actions[] = {
- 	0, 54, 0, 5, 1, 0, 29, 1, 
- 	29, 29, 29, 29, 29, 29, 29, 29, 
- 	35, 0, 43, 0, 43, 0, 43, 54, 
- 	0, 5, 1, 0, 29, 1, 29, 29, 
- 	29, 29, 29, 29, 29, 29, 35, 0, 
- 	43, 0, 43, 0, 43, 139, 48, 9, 
- 	106, 11, 0, 134, 45, 45, 45, 3, 
- 	122, 33, 33, 33, 0, 122, 33, 33, 
- 	33, 0, 122, 33, 0, 33, 0, 102, 
- 	7, 7, 43, 54, 0, 0, 43, 114, 
- 	25, 0, 54, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 149, 126, 57, 110, 23, 0, 
- 	43, 43, 43, 43, 0, 27, 118, 27, 
- 	27, 51, 27, 0, 54, 0, 1, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 144, 57, 54, 0, 54, 
- 	0, 78, 33, 84, 78, 84, 84, 84, 
- 	84, 84, 84, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 19, 0, 54, 
- 	19, 0, 130, 31, 60, 57, 31, 63, 
- 	57, 63, 63, 63, 63, 63, 63, 63, 
- 	63, 66, 31, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 144, 57, 54, 0, 
- 	54, 0, 72, 33, 84, 72, 84, 84, 
- 	84, 84, 84, 84, 84, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 15, 
- 	0, 54, 15, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 15, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 0, 54, 
- 	0, 0, 54, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 0, 54, 0, 
- 	0, 0, 54, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 15, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 0, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 144, 57, 54, 0, 
- 	54, 0, 69, 33, 69, 84, 84, 84, 
- 	84, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 13, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 13, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	13, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 144, 57, 54, 
- 	0, 54, 0, 81, 84, 81, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 21, 0, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	0, 43, 144, 57, 54, 0, 54, 0, 
- 	75, 33, 84, 75, 84, 84, 84, 84, 
- 	84, 84, 84, 84, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 17, 0, 
- 	54, 17, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 17, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 0, 54, 0, 0, 54, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 0, 54, 0, 0, 0, 54, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 17, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 0, 
- 	43, 0, 43, 0, 43, 0, 0, 0, 
- 	43, 54, 37, 37, 87, 37, 37, 43, 
- 	0, 39, 0, 43, 0, 0, 54, 0, 
- 	0, 39, 0, 0, 54, 0, 93, 90, 
- 	41, 96, 90, 96, 96, 96, 96, 96, 
- 	96, 96, 96, 99, 0, 43, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 19, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	0, 54, 0, 0, 54, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 0, 
- 	54, 0, 0, 0, 54, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	0, 0
- };
- 
- static const unsigned char _lexer_eof_actions[] = {
- 	0, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43
- };
- 
- static const int lexer_start = 1;
- static const int lexer_first_final = 362;
- static const int lexer_error = 0;
- 
- static const int lexer_en_main = 1;
- 
- 
- #line 258 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sv.c.rl"
- 
- static VALUE 
- unindent(VALUE con, int start_col)
- {
-   VALUE re;
-   // Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters
-   char pat[32]; 
-   snprintf(pat, 32, "^[\t ]{0,%d}", start_col); 
-   re = rb_reg_regcomp(rb_str_new2(pat));
-   rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2(""));
- 
-   return Qnil;
- 
- }
- 
- static void 
- store_kw_con(VALUE listener, const char * event_name, 
-              const char * keyword_at, size_t keyword_length, 
-              const char * at,         size_t length, 
-              int current_line)
- {
-   VALUE con = Qnil, kw = Qnil;
-   kw = ENCODED_STR_NEW(keyword_at, keyword_length);
-   con = ENCODED_STR_NEW(at, length);
-   rb_funcall(con, rb_intern("strip!"), 0);
-   rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); 
- }
- 
- static void
- store_multiline_kw_con(VALUE listener, const char * event_name,
-                       const char * keyword_at, size_t keyword_length,
-                       const char * at,         size_t length,
-                       int current_line, int start_col)
- {
-   VALUE split;
-   VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil;
- 
-   kw = ENCODED_STR_NEW(keyword_at, keyword_length);
-   con = ENCODED_STR_NEW(at, length);
- 
-   unindent(con, start_col);
-   
-   split = rb_str_split(con, "\n");
- 
-   name = rb_funcall(split, rb_intern("shift"), 0);
-   desc = rb_ary_join(split, rb_str_new2( "\n" ));
- 
-   if( name == Qnil ) 
-   {
-     name = rb_str_new2("");
-   }
-   if( rb_funcall(desc, rb_intern("size"), 0) == 0) 
-   {
-     desc = rb_str_new2("");
-   }
-   rb_funcall(name, rb_intern("strip!"), 0);
-   rb_funcall(desc, rb_intern("rstrip!"), 0);
-   rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); 
- }
- 
- static void 
- store_attr(VALUE listener, const char * attr_type,
-            const char * at, size_t length, 
-            int line)
- {
-   VALUE val = ENCODED_STR_NEW(at, length);
-   rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line));
- }
- static void 
- store_docstring_content(VALUE listener, 
-           int start_col, 
-           const char *type_at, size_t type_length,
-           const char *at, size_t length, 
-           int current_line)
- {
-   VALUE re2;
-   VALUE unescape_escaped_quotes;
-   VALUE con = ENCODED_STR_NEW(at, length);
-   VALUE con_type = ENCODED_STR_NEW(type_at, type_length);
- 
-   unindent(con, start_col);
- 
-   re2 = rb_reg_regcomp(rb_str_new2("\r\\Z"));
-   unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\""));
-   rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2(""));
-   rb_funcall(con_type, rb_intern("strip!"), 0);
-   rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\""));
-   rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line));
- }
- static void 
- raise_lexer_error(const char * at, int line)
- { 
-   rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at);
- }
- 
- static void lexer_init(lexer_state *lexer) {
-   lexer->content_start = 0;
-   lexer->content_end = 0;
-   lexer->content_len = 0;
-   lexer->docstring_content_type_start = 0;
-   lexer->docstring_content_type_end = 0;
-   lexer->mark = 0;
-   lexer->keyword_start = 0;
-   lexer->keyword_end = 0;
-   lexer->next_keyword_start = 0;
-   lexer->line_number = 1;
-   lexer->last_newline = 0;
-   lexer->final_newline = 0;
-   lexer->start_col = 0;
- }
- 
- static VALUE CLexer_alloc(VALUE klass)
- {
-   VALUE obj;
-   lexer_state *lxr = ALLOC(lexer_state);
-   lexer_init(lxr);
- 
-   obj = Data_Wrap_Struct(klass, NULL, -1, lxr);
- 
-   return obj;
- }
- 
- static VALUE CLexer_init(VALUE self, VALUE listener)
- {
-   lexer_state *lxr; 
-   rb_iv_set(self, "@listener", listener);
-   
-   lxr = NULL;
-   DATA_GET(self, lexer_state, lxr);
-   lexer_init(lxr);
-   
-   return self;
- }
- 
- static VALUE CLexer_scan(VALUE self, VALUE input)
- {
-   VALUE input_copy;
-   char *data;
-   size_t len;
-   VALUE listener = rb_iv_get(self, "@listener");
- 
-   lexer_state *lexer;
-   lexer = NULL;
-   DATA_GET(self, lexer_state, lexer);
- 
-   input_copy = rb_str_dup(input);
- 
-   rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%"));
-   data = RSTRING_PTR(input_copy);
-   len = RSTRING_LEN(input_copy);
-   
-   if (len == 0) { 
-     rb_raise(rb_eGherkinLexingError, "No content to lex.");
-   } else {
- 
-     const char *p, *pe, *eof;
-     int cs = 0;
-     
-     VALUE current_row = Qnil;
- 
-     p = data;
-     pe = data + len;
-     eof = pe;
-     
-     assert(*pe == '\0' && "pointer does not end on NULL");
-     
-     
- #line 928 "ext/gherkin_lexer_sv/gherkin_lexer_sv.c"
- 	{
- 	cs = lexer_start;
- 	}
- 
- #line 425 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sv.c.rl"
-     
- #line 935 "ext/gherkin_lexer_sv/gherkin_lexer_sv.c"
- 	{
- 	int _klen;
- 	unsigned int _trans;
- 	const char *_acts;
- 	unsigned int _nacts;
- 	const char *_keys;
- 
- 	if ( p == pe )
- 		goto _test_eof;
- 	if ( cs == 0 )
- 		goto _out;
- _resume:
- 	_keys = _lexer_trans_keys + _lexer_key_offsets[cs];
- 	_trans = _lexer_index_offsets[cs];
- 
- 	_klen = _lexer_single_lengths[cs];
- 	if ( _klen > 0 ) {
- 		const char *_lower = _keys;
- 		const char *_mid;
- 		const char *_upper = _keys + _klen - 1;
- 		while (1) {
- 			if ( _upper < _lower )
- 				break;
- 
- 			_mid = _lower + ((_upper-_lower) >> 1);
- 			if ( (*p) < *_mid )
- 				_upper = _mid - 1;
- 			else if ( (*p) > *_mid )
- 				_lower = _mid + 1;
- 			else {
- 				_trans += (_mid - _keys);
- 				goto _match;
- 			}
- 		}
- 		_keys += _klen;
- 		_trans += _klen;
- 	}
- 
- 	_klen = _lexer_range_lengths[cs];
- 	if ( _klen > 0 ) {
- 		const char *_lower = _keys;
- 		const char *_mid;
- 		const char *_upper = _keys + (_klen<<1) - 2;
- 		while (1) {
- 			if ( _upper < _lower )
- 				break;
- 
- 			_mid = _lower + (((_upper-_lower) >> 1) & ~1);
- 			if ( (*p) < _mid[0] )
- 				_upper = _mid - 2;
- 			else if ( (*p) > _mid[1] )
- 				_lower = _mid + 2;
- 			else {
- 				_trans += ((_mid - _keys)>>1);
- 				goto _match;
- 			}
- 		}
- 		_trans += _klen;
- 	}
- 
- _match:
- 	cs = _lexer_trans_targs[_trans];
- 
- 	if ( _lexer_trans_actions[_trans] == 0 )
- 		goto _again;
- 
- 	_acts = _lexer_actions + _lexer_trans_actions[_trans];
- 	_nacts = (unsigned int) *_acts++;
- 	while ( _nacts-- > 0 )
- 	{
- 		switch ( *_acts++ )
- 		{
- 	case 0:
- #line 83 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sv.c.rl"
- 	{
- 		MARK(content_start, p);
-     lexer->current_line = lexer->line_number;
-     lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2;
-   }
- 	break;
- 	case 1:
- #line 89 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sv.c.rl"
- 	{
-     MARK(content_start, p);
-   }
- 	break;
- 	case 2:
- #line 93 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sv.c.rl"
- 	{
-     lexer->current_line = lexer->line_number;
-     lexer->start_col = p - data - lexer->last_newline;
-   }
- 	break;
- 	case 3:
- #line 98 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sv.c.rl"
- 	{
-     int len = LEN(content_start, PTR_TO(final_newline));
-     int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end));
- 
-     if (len < 0) len = 0;
-     if (type_len < 0) len = 0;
- 
-     store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line);
-   }
- 	break;
- 	case 4:
- #line 108 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sv.c.rl"
- 	{ 
-     MARK(docstring_content_type_start, p);
-   }
- 	break;
- 	case 5:
- #line 112 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sv.c.rl"
- 	{ 
-     MARK(docstring_content_type_end, p);
-   }
- 	break;
- 	case 6:
- #line 116 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sv.c.rl"
- 	{
-     STORE_KW_END_CON(feature);
-   }
- 	break;
- 	case 7:
- #line 120 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sv.c.rl"
- 	{
-     STORE_KW_END_CON(background);
-   }
- 	break;
- 	case 8:
- #line 124 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sv.c.rl"
- 	{
-     STORE_KW_END_CON(scenario);
-   }
- 	break;
- 	case 9:
- #line 128 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sv.c.rl"
- 	{
-     STORE_KW_END_CON(scenario_outline);
-   }
- 	break;
- 	case 10:
- #line 132 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sv.c.rl"
- 	{
-     STORE_KW_END_CON(examples);
-   }
- 	break;
- 	case 11:
- #line 136 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sv.c.rl"
- 	{
-     store_kw_con(listener, "step",
-       PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-       PTR_TO(content_start), LEN(content_start, p), 
-       lexer->current_line);
-   }
- 	break;
- 	case 12:
- #line 143 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sv.c.rl"
- 	{
-     STORE_ATTR(comment);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 13:
- #line 148 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sv.c.rl"
- 	{
-     STORE_ATTR(tag);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 14:
- #line 153 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sv.c.rl"
- 	{
-     lexer->line_number += 1;
-     MARK(final_newline, p);
-   }
- 	break;
- 	case 15:
- #line 158 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sv.c.rl"
- 	{
-     MARK(last_newline, p + 1);
-   }
- 	break;
- 	case 16:
- #line 162 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sv.c.rl"
- 	{
-     if (lexer->mark == 0) {
-       MARK(mark, p);
-     }
-   }
- 	break;
- 	case 17:
- #line 168 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sv.c.rl"
- 	{
-     MARK(keyword_end, p);
-     MARK(keyword_start, PTR_TO(mark));
-     MARK(content_start, p + 1);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 18:
- #line 175 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sv.c.rl"
- 	{
-     MARK(content_end, p);
-   }
- 	break;
- 	case 19:
- #line 179 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sv.c.rl"
- 	{
-     p = p - 1;
-     lexer->current_line = lexer->line_number;
-     current_row = rb_ary_new();
-   }
- 	break;
- 	case 20:
- #line 185 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sv.c.rl"
- 	{
- 		MARK(content_start, p);
-   }
- 	break;
- 	case 21:
- #line 189 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sv.c.rl"
- 	{
-     VALUE re_pipe, re_newline, re_backslash;
-     VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
-     rb_funcall(con, rb_intern("strip!"), 0);
-     re_pipe      = rb_reg_regcomp(rb_str_new2("\\\\\\|"));
-     re_newline   = rb_reg_regcomp(rb_str_new2("\\\\n"));
-     re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_pipe,      rb_str_new2("|"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_newline,   rb_str_new2("\n"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\"));
- 
-     rb_ary_push(current_row, con);
-   }
- 	break;
- 	case 22:
- #line 203 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sv.c.rl"
- 	{
-     rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
-   }
- 	break;
- 	case 23:
- #line 207 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sv.c.rl"
- 	{
-     int line;
-     if (cs < lexer_first_final) {
-       size_t count = 0;
-       VALUE newstr_val;
-       char *newstr;
-       int newstr_count = 0;        
-       size_t len;
-       const char *buff;
-       if (lexer->last_newline != 0) {
-         len = LEN(last_newline, eof);
-         buff = PTR_TO(last_newline);
-       } else {
-         len = strlen(data);
-         buff = data;
-       }
- 
-       // Allocate as a ruby string so that it gets cleaned up by GC
-       newstr_val = rb_str_new(buff, len);
-       newstr = RSTRING_PTR(newstr_val);
- 
- 
-       for (count = 0; count < len; count++) {
-         if(buff[count] == 10) {
-           newstr[newstr_count] = '\0'; // terminate new string at first newline found
-           break;
-         } else {
-           if (buff[count] == '%') {
-             newstr[newstr_count++] = buff[count];
-             newstr[newstr_count] = buff[count];
-           } else {
-             newstr[newstr_count] = buff[count];
-           }
-         }
-         newstr_count++;
-       }
- 
-       line = lexer->line_number;
-       lexer_init(lexer); // Re-initialize so we can scan again with the same lexer
-       raise_lexer_error(newstr, line);
-     } else {
-       rb_funcall(listener, rb_intern("eof"), 0);
-     }
-   }
- 	break;
- #line 1225 "ext/gherkin_lexer_sv/gherkin_lexer_sv.c"
- 		}
- 	}
- 
- _again:
- 	if ( cs == 0 )
- 		goto _out;
- 	if ( ++p != pe )
- 		goto _resume;
- 	_test_eof: {}
- 	if ( p == eof )
- 	{
- 	const char *__acts = _lexer_actions + _lexer_eof_actions[cs];
- 	unsigned int __nacts = (unsigned int) *__acts++;
- 	while ( __nacts-- > 0 ) {
- 		switch ( *__acts++ ) {
- 	case 23:
- #line 207 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sv.c.rl"
- 	{
-     int line;
-     if (cs < lexer_first_final) {
-       size_t count = 0;
-       VALUE newstr_val;
-       char *newstr;
-       int newstr_count = 0;        
-       size_t len;
-       const char *buff;
-       if (lexer->last_newline != 0) {
-         len = LEN(last_newline, eof);
-         buff = PTR_TO(last_newline);
-       } else {
-         len = strlen(data);
-         buff = data;
-       }
- 
-       // Allocate as a ruby string so that it gets cleaned up by GC
-       newstr_val = rb_str_new(buff, len);
-       newstr = RSTRING_PTR(newstr_val);
- 
- 
-       for (count = 0; count < len; count++) {
-         if(buff[count] == 10) {
-           newstr[newstr_count] = '\0'; // terminate new string at first newline found
-           break;
-         } else {
-           if (buff[count] == '%') {
-             newstr[newstr_count++] = buff[count];
-             newstr[newstr_count] = buff[count];
-           } else {
-             newstr[newstr_count] = buff[count];
-           }
-         }
-         newstr_count++;
-       }
- 
-       line = lexer->line_number;
-       lexer_init(lexer); // Re-initialize so we can scan again with the same lexer
-       raise_lexer_error(newstr, line);
-     } else {
-       rb_funcall(listener, rb_intern("eof"), 0);
-     }
-   }
- 	break;
- #line 1288 "ext/gherkin_lexer_sv/gherkin_lexer_sv.c"
- 		}
- 	}
- 	}
- 
- 	_out: {}
- 	}
- 
- #line 426 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/sv.c.rl"
- 
-     assert(p <= pe && "data overflow after parsing execute");
-     assert(lexer->content_start <= len && "content starts after data end");
-     assert(lexer->mark < len && "mark is after data end");
-     
-     // Reset lexer by re-initializing the whole thing
-     lexer_init(lexer);
- 
-     if (cs == lexer_error) {
-       rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails.");
-     } else {
-       return Qtrue;
-     }
-   }
- }
- 
- void Init_gherkin_lexer_sv()
- {
-   mGherkin = rb_define_module("Gherkin");
-   mGherkinLexer = rb_define_module_under(mGherkin, "Lexer");
-   rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError"));
- 
-   mCLexer = rb_define_module_under(mGherkin, "CLexer");
-   cI18nLexer = rb_define_class_under(mCLexer, "Sv", rb_cObject);
-   rb_define_alloc_func(cI18nLexer, CLexer_alloc);
-   rb_define_method(cI18nLexer, "initialize", CLexer_init, 1);
-   rb_define_method(cI18nLexer, "scan", CLexer_scan, 1);
- }
- 
 -#line 1 "ragel/i18n/sv.c.rl"
 -#include <assert.h>
 -#include <ruby.h>
 -
 -#if defined(_WIN32)
 -#include <stddef.h>
 -#endif
 -
 -#ifdef HAVE_RUBY_RE_H
 -#include <ruby/re.h>
 -#else
 -#include <re.h>
 -#endif
 -
 -#ifdef HAVE_RUBY_ENCODING_H
 -#include <ruby/encoding.h>
 -#define ENCODED_STR_NEW(ptr, len) \
 -    rb_enc_str_new(ptr, len, rb_utf8_encoding())
 -#else
 -#define ENCODED_STR_NEW(ptr, len) \
 -    rb_str_new(ptr, len)
 -#endif
 -
 -#ifndef RSTRING_PTR
 -#define RSTRING_PTR(s) (RSTRING(s)->ptr)
 -#endif
 -
 -#ifndef RSTRING_LEN
 -#define RSTRING_LEN(s) (RSTRING(s)->len)
 -#endif
 -
 -#define DATA_GET(FROM, TYPE, NAME) \
 -  Data_Get_Struct(FROM, TYPE, NAME); \
 -  if (NAME == NULL) { \
 -    rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \
 -  }
 - 
 -typedef struct lexer_state {
 -  int content_len;
 -  int line_number;
 -  int current_line;
 -  int start_col;
 -  size_t mark;
 -  size_t keyword_start;
 -  size_t keyword_end;
 -  size_t next_keyword_start;
 -  size_t content_start;
 -  size_t content_end;
 -  size_t docstring_content_type_start;
 -  size_t docstring_content_type_end;
 -  size_t query_start;
 -  size_t last_newline;
 -  size_t final_newline;
 -} lexer_state;
 -
 -static VALUE mGherkin;
 -static VALUE mGherkinLexer;
 -static VALUE mCLexer;
 -static VALUE cI18nLexer;
 -static VALUE rb_eGherkinLexingError;
 -
 -#define LEN(AT, P) (P - data - lexer->AT)
 -#define MARK(M, P) (lexer->M = (P) - data)
 -#define PTR_TO(P) (data + lexer->P)
 -
 -#define STORE_KW_END_CON(EVENT) \
 -  store_multiline_kw_con(listener, # EVENT, \
 -    PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \
 -    PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \
 -    lexer->current_line, lexer->start_col); \
 -    if (lexer->content_end != 0) { \
 -      p = PTR_TO(content_end - 1); \
 -    } \
 -    lexer->content_end = 0
 -
 -#define STORE_ATTR(ATTR) \
 -    store_attr(listener, # ATTR, \
 -      PTR_TO(content_start), LEN(content_start, p), \
 -      lexer->line_number)
 -
 -
 -#line 254 "ragel/i18n/sv.c.rl"
 -
 -
 -/** Data **/
 -
 -#line 89 "ext/gherkin_lexer_sv/gherkin_lexer_sv.c"
 -static const char _lexer_actions[] = {
 -	0, 1, 0, 1, 1, 1, 2, 1, 
 -	3, 1, 4, 1, 5, 1, 6, 1, 
 -	7, 1, 8, 1, 9, 1, 10, 1, 
 -	11, 1, 12, 1, 13, 1, 16, 1, 
 -	17, 1, 18, 1, 19, 1, 20, 1, 
 -	21, 1, 22, 1, 23, 2, 1, 18, 
 -	2, 4, 5, 2, 13, 0, 2, 14, 
 -	15, 2, 17, 0, 2, 17, 2, 2, 
 -	17, 16, 2, 17, 19, 2, 18, 6, 
 -	2, 18, 7, 2, 18, 8, 2, 18, 
 -	9, 2, 18, 10, 2, 18, 16, 2, 
 -	20, 21, 2, 22, 0, 2, 22, 2, 
 -	2, 22, 16, 2, 22, 19, 3, 3, 
 -	14, 15, 3, 5, 14, 15, 3, 11, 
 -	14, 15, 3, 12, 14, 15, 3, 13, 
 -	14, 15, 3, 14, 15, 18, 3, 17, 
 -	0, 11, 3, 17, 14, 15, 4, 1, 
 -	14, 15, 18, 4, 4, 5, 14, 15, 
 -	4, 17, 0, 14, 15, 5, 17, 0, 
 -	11, 14, 15
 -};
 -
 -static const short _lexer_key_offsets[] = {
 -	0, 0, 19, 20, 21, 39, 40, 41, 
 -	43, 45, 50, 55, 60, 65, 69, 73, 
 -	75, 76, 77, 78, 79, 80, 81, 82, 
 -	83, 84, 85, 86, 87, 88, 89, 90, 
 -	91, 93, 95, 100, 107, 112, 113, 114, 
 -	115, 116, 117, 118, 119, 120, 121, 122, 
 -	123, 124, 125, 126, 127, 128, 129, 130, 
 -	131, 145, 147, 149, 151, 153, 155, 157, 
 -	159, 161, 163, 165, 167, 169, 171, 173, 
 -	175, 193, 194, 195, 196, 197, 198, 199, 
 -	200, 201, 202, 203, 218, 220, 222, 224, 
 -	226, 228, 230, 232, 234, 236, 238, 240, 
 -	242, 244, 246, 248, 250, 252, 254, 256, 
 -	258, 260, 262, 264, 266, 268, 270, 272, 
 -	274, 276, 278, 280, 282, 284, 286, 288, 
 -	290, 292, 294, 296, 298, 300, 302, 304, 
 -	306, 308, 310, 312, 314, 316, 318, 321, 
 -	323, 325, 327, 329, 331, 333, 335, 338, 
 -	340, 342, 344, 346, 347, 348, 349, 350, 
 -	351, 352, 353, 354, 355, 366, 368, 370, 
 -	372, 374, 376, 378, 380, 382, 384, 386, 
 -	388, 390, 392, 394, 396, 398, 400, 402, 
 -	404, 406, 408, 410, 412, 414, 416, 418, 
 -	420, 422, 424, 426, 428, 430, 432, 434, 
 -	436, 438, 440, 442, 445, 447, 449, 451, 
 -	453, 455, 457, 459, 461, 463, 465, 467, 
 -	469, 471, 473, 475, 477, 479, 481, 484, 
 -	486, 488, 489, 490, 491, 492, 493, 494, 
 -	495, 496, 503, 505, 507, 509, 511, 513, 
 -	515, 517, 519, 520, 521, 522, 523, 524, 
 -	525, 526, 527, 528, 529, 530, 532, 533, 
 -	534, 535, 536, 537, 538, 539, 541, 542, 
 -	543, 559, 561, 563, 565, 567, 569, 571, 
 -	573, 575, 577, 579, 581, 583, 585, 587, 
 -	589, 591, 593, 595, 597, 599, 601, 603, 
 -	605, 607, 609, 611, 613, 615, 617, 619, 
 -	621, 623, 625, 627, 629, 631, 633, 635, 
 -	637, 639, 641, 643, 645, 647, 649, 651, 
 -	653, 655, 657, 659, 661, 663, 665, 667, 
 -	669, 671, 673, 676, 678, 680, 682, 684, 
 -	686, 688, 690, 693, 695, 697, 699, 700, 
 -	701, 702, 706, 712, 715, 717, 723, 741, 
 -	743, 745, 747, 749, 751, 753, 755, 757, 
 -	759, 761, 763, 765, 767, 769, 771, 773, 
 -	775, 777, 779, 782, 784, 786, 788, 790, 
 -	792, 794, 796
 -};
 -
 -static const char _lexer_trans_keys[] = {
 -	-17, 10, 32, 34, 35, 37, 42, 64, 
 -	65, 66, 69, 71, 77, 78, 79, 83, 
 -	124, 9, 13, -69, -65, 10, 32, 34, 
 -	35, 37, 42, 64, 65, 66, 69, 71, 
 -	77, 78, 79, 83, 124, 9, 13, 34, 
 -	34, 10, 13, 10, 13, 10, 32, 34, 
 -	9, 13, 10, 32, 34, 9, 13, 10, 
 -	32, 34, 9, 13, 10, 32, 34, 9, 
 -	13, 10, 32, 9, 13, 10, 32, 9, 
 -	13, 10, 13, 10, 95, 70, 69, 65, 
 -	84, 85, 82, 69, 95, 69, 78, 68, 
 -	95, 37, 32, 10, 13, 10, 13, 13, 
 -	32, 64, 9, 10, 9, 10, 13, 32, 
 -	64, 11, 12, 10, 32, 64, 9, 13, 
 -	98, 115, 116, 114, 97, 107, 116, 32, 
 -	83, 99, 101, 110, 97, 114, 105, 111, 
 -	58, 10, 10, 10, 32, 35, 37, 42, 
 -	64, 69, 71, 77, 78, 79, 83, 9, 
 -	13, 10, 95, 10, 70, 10, 69, 10, 
 -	65, 10, 84, 10, 85, 10, 82, 10, 
 -	69, 10, 95, 10, 69, 10, 78, 10, 
 -	68, 10, 95, 10, 37, 10, 32, 10, 
 -	32, 34, 35, 37, 42, 64, 65, 66, 
 -	69, 71, 77, 78, 79, 83, 124, 9, 
 -	13, 97, 107, 103, 114, 117, 110, 100, 
 -	58, 10, 10, 10, 32, 35, 37, 42, 
 -	64, 65, 69, 71, 77, 78, 79, 83, 
 -	9, 13, 10, 95, 10, 70, 10, 69, 
 -	10, 65, 10, 84, 10, 85, 10, 82, 
 -	10, 69, 10, 95, 10, 69, 10, 78, 
 -	10, 68, 10, 95, 10, 37, 10, 32, 
 -	10, 98, 10, 115, 10, 116, 10, 114, 
 -	10, 97, 10, 107, 10, 116, 10, 32, 
 -	10, 83, 10, 99, 10, 101, 10, 110, 
 -	10, 97, 10, 114, 10, 105, 10, 111, 
 -	10, 58, 10, 103, 10, 101, 10, 110, 
 -	10, 115, 10, 107, 10, 97, 10, 112, 
 -	10, 105, 10, 118, 10, 101, 10, 116, 
 -	10, 101, 10, 110, -61, 10, -92, 10, 
 -	10, 114, 10, 99, 10, 104, -61, 10, 
 -	99, -91, 10, 10, 101, 10, 110, 10, 
 -	97, 10, 114, 10, 105, 10, 111, 10, 
 -	58, 109, 10, 97, 10, 108, 10, 108, 
 -	103, 120, 101, 110, 115, 107, 97, 112, 
 -	58, 10, 10, 10, 32, 35, 37, 64, 
 -	65, 66, 69, 83, 9, 13, 10, 95, 
 -	10, 70, 10, 69, 10, 65, 10, 84, 
 -	10, 85, 10, 82, 10, 69, 10, 95, 
 -	10, 69, 10, 78, 10, 68, 10, 95, 
 -	10, 37, 10, 98, 10, 115, 10, 116, 
 -	10, 114, 10, 97, 10, 107, 10, 116, 
 -	10, 32, 10, 83, 10, 99, 10, 101, 
 -	10, 110, 10, 97, 10, 114, 10, 105, 
 -	10, 111, 10, 58, 10, 97, 10, 107, 
 -	10, 103, 10, 114, 10, 117, 10, 110, 
 -	10, 100, 10, 103, 120, 10, 101, 10, 
 -	110, 10, 115, 10, 107, 10, 97, 10, 
 -	112, 10, 101, 10, 109, 10, 112, 10, 
 -	101, 10, 108, 10, 99, 10, 101, 10, 
 -	110, 10, 97, 10, 114, 10, 105, 10, 
 -	111, 10, 58, 109, 10, 97, 10, 108, 
 -	101, 109, 112, 101, 108, 58, 10, 10, 
 -	10, 32, 35, 69, 124, 9, 13, 10, 
 -	103, 10, 101, 10, 110, 10, 115, 10, 
 -	107, 10, 97, 10, 112, 10, 58, 105, 
 -	118, 101, 116, 101, 110, -61, -92, 114, 
 -	99, 104, -61, 99, -91, 101, 110, 97, 
 -	114, 105, 111, 58, 109, 10, 10, 10, 
 -	32, 35, 37, 42, 64, 65, 66, 69, 
 -	71, 77, 78, 79, 83, 9, 13, 10, 
 -	95, 10, 70, 10, 69, 10, 65, 10, 
 -	84, 10, 85, 10, 82, 10, 69, 10, 
 -	95, 10, 69, 10, 78, 10, 68, 10, 
 -	95, 10, 37, 10, 32, 10, 98, 10, 
 -	115, 10, 116, 10, 114, 10, 97, 10, 
 -	107, 10, 116, 10, 32, 10, 83, 10, 
 -	99, 10, 101, 10, 110, 10, 97, 10, 
 -	114, 10, 105, 10, 111, 10, 58, 10, 
 -	97, 10, 107, 10, 103, 10, 114, 10, 
 -	117, 10, 110, 10, 100, 10, 103, 10, 
 -	101, 10, 110, 10, 115, 10, 107, 10, 
 -	97, 10, 112, 10, 105, 10, 118, 10, 
 -	101, 10, 116, 10, 101, 10, 110, -61, 
 -	10, -92, 10, 10, 114, 10, 99, 10, 
 -	104, -61, 10, 99, -91, 10, 10, 101, 
 -	10, 110, 10, 97, 10, 114, 10, 105, 
 -	10, 111, 10, 58, 109, 10, 97, 10, 
 -	108, 10, 108, 97, 108, 108, 32, 124, 
 -	9, 13, 10, 32, 92, 124, 9, 13, 
 -	10, 92, 124, 10, 92, 10, 32, 92, 
 -	124, 9, 13, 10, 32, 34, 35, 37, 
 -	42, 64, 65, 66, 69, 71, 77, 78, 
 -	79, 83, 124, 9, 13, 10, 103, 10, 
 -	101, 10, 110, 10, 115, 10, 107, 10, 
 -	97, 10, 112, 10, 58, 10, 105, 10, 
 -	118, 10, 101, 10, 116, 10, 101, 10, 
 -	110, -61, 10, -92, 10, 10, 114, 10, 
 -	99, 10, 104, -61, 10, 99, -91, 10, 
 -	10, 101, 10, 110, 10, 97, 10, 114, 
 -	10, 105, 10, 111, 0
 -};
 -
 -static const char _lexer_single_lengths[] = {
 -	0, 17, 1, 1, 16, 1, 1, 2, 
 -	2, 3, 3, 3, 3, 2, 2, 2, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	2, 2, 3, 5, 3, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	12, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	16, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 13, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 3, 2, 
 -	2, 2, 2, 2, 2, 2, 3, 2, 
 -	2, 2, 2, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 9, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 3, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 3, 2, 
 -	2, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 5, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 2, 1, 1, 
 -	1, 1, 1, 1, 1, 2, 1, 1, 
 -	14, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 3, 2, 2, 2, 2, 2, 
 -	2, 2, 3, 2, 2, 2, 1, 1, 
 -	1, 2, 4, 3, 2, 4, 16, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 3, 2, 2, 2, 2, 2, 
 -	2, 2, 0
 -};
 -
 -static const char _lexer_range_lengths[] = {
 -	0, 1, 0, 0, 1, 0, 0, 0, 
 -	0, 1, 1, 1, 1, 1, 1, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 1, 1, 1, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	1, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	1, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 1, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 1, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 1, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	1, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 1, 1, 0, 0, 1, 1, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0
 -};
 -
 -static const short _lexer_index_offsets[] = {
 -	0, 0, 19, 21, 23, 41, 43, 45, 
 -	48, 51, 56, 61, 66, 71, 75, 79, 
 -	82, 84, 86, 88, 90, 92, 94, 96, 
 -	98, 100, 102, 104, 106, 108, 110, 112, 
 -	114, 117, 120, 125, 132, 137, 139, 141, 
 -	143, 145, 147, 149, 151, 153, 155, 157, 
 -	159, 161, 163, 165, 167, 169, 171, 173, 
 -	175, 189, 192, 195, 198, 201, 204, 207, 
 -	210, 213, 216, 219, 222, 225, 228, 231, 
 -	234, 252, 254, 256, 258, 260, 262, 264, 
 -	266, 268, 270, 272, 287, 290, 293, 296, 
 -	299, 302, 305, 308, 311, 314, 317, 320, 
 -	323, 326, 329, 332, 335, 338, 341, 344, 
 -	347, 350, 353, 356, 359, 362, 365, 368, 
 -	371, 374, 377, 380, 383, 386, 389, 392, 
 -	395, 398, 401, 404, 407, 410, 413, 416, 
 -	419, 422, 425, 428, 431, 434, 437, 441, 
 -	444, 447, 450, 453, 456, 459, 462, 466, 
 -	469, 472, 475, 478, 480, 482, 484, 486, 
 -	488, 490, 492, 494, 496, 507, 510, 513, 
 -	516, 519, 522, 525, 528, 531, 534, 537, 
 -	540, 543, 546, 549, 552, 555, 558, 561, 
 -	564, 567, 570, 573, 576, 579, 582, 585, 
 -	588, 591, 594, 597, 600, 603, 606, 609, 
 -	612, 615, 618, 621, 625, 628, 631, 634, 
 -	637, 640, 643, 646, 649, 652, 655, 658, 
 -	661, 664, 667, 670, 673, 676, 679, 683, 
 -	686, 689, 691, 693, 695, 697, 699, 701, 
 -	703, 705, 712, 715, 718, 721, 724, 727, 
 -	730, 733, 736, 738, 740, 742, 744, 746, 
 -	748, 750, 752, 754, 756, 758, 761, 763, 
 -	765, 767, 769, 771, 773, 775, 778, 780, 
 -	782, 798, 801, 804, 807, 810, 813, 816, 
 -	819, 822, 825, 828, 831, 834, 837, 840, 
 -	843, 846, 849, 852, 855, 858, 861, 864, 
 -	867, 870, 873, 876, 879, 882, 885, 888, 
 -	891, 894, 897, 900, 903, 906, 909, 912, 
 -	915, 918, 921, 924, 927, 930, 933, 936, 
 -	939, 942, 945, 948, 951, 954, 957, 960, 
 -	963, 966, 969, 973, 976, 979, 982, 985, 
 -	988, 991, 994, 998, 1001, 1004, 1007, 1009, 
 -	1011, 1013, 1017, 1023, 1027, 1030, 1036, 1054, 
 -	1057, 1060, 1063, 1066, 1069, 1072, 1075, 1078, 
 -	1081, 1084, 1087, 1090, 1093, 1096, 1099, 1102, 
 -	1105, 1108, 1111, 1115, 1118, 1121, 1124, 1127, 
 -	1130, 1133, 1136
 -};
 -
 -static const short _lexer_trans_targs[] = {
 -	2, 4, 4, 5, 15, 17, 31, 34, 
 -	37, 73, 146, 234, 238, 240, 243, 245, 
 -	329, 4, 0, 3, 0, 4, 0, 4, 
 -	4, 5, 15, 17, 31, 34, 37, 73, 
 -	146, 234, 238, 240, 243, 245, 329, 4, 
 -	0, 6, 0, 7, 0, 9, 8, 8, 
 -	9, 8, 8, 10, 10, 11, 10, 10, 
 -	10, 10, 11, 10, 10, 10, 10, 12, 
 -	10, 10, 10, 10, 13, 10, 10, 4, 
 -	14, 14, 0, 4, 14, 14, 0, 4, 
 -	16, 15, 4, 0, 18, 0, 19, 0, 
 -	20, 0, 21, 0, 22, 0, 23, 0, 
 -	24, 0, 25, 0, 26, 0, 27, 0, 
 -	28, 0, 29, 0, 30, 0, 362, 0, 
 -	32, 0, 4, 16, 33, 4, 16, 33, 
 -	0, 0, 0, 0, 35, 36, 4, 36, 
 -	36, 34, 35, 35, 4, 36, 34, 36, 
 -	0, 38, 0, 39, 0, 40, 0, 41, 
 -	0, 42, 0, 43, 0, 44, 0, 45, 
 -	0, 46, 0, 47, 0, 48, 0, 49, 
 -	0, 50, 0, 51, 0, 52, 0, 53, 
 -	0, 54, 0, 56, 55, 56, 55, 56, 
 -	56, 4, 57, 71, 4, 335, 343, 347, 
 -	349, 352, 354, 56, 55, 56, 58, 55, 
 -	56, 59, 55, 56, 60, 55, 56, 61, 
 -	55, 56, 62, 55, 56, 63, 55, 56, 
 -	64, 55, 56, 65, 55, 56, 66, 55, 
 -	56, 67, 55, 56, 68, 55, 56, 69, 
 -	55, 56, 70, 55, 56, 4, 55, 56, 
 -	72, 55, 4, 4, 5, 15, 17, 31, 
 -	34, 37, 73, 146, 234, 238, 240, 243, 
 -	245, 329, 4, 0, 74, 0, 75, 0, 
 -	76, 0, 77, 0, 78, 0, 79, 0, 
 -	80, 0, 81, 0, 83, 82, 83, 82, 
 -	83, 83, 4, 84, 98, 4, 99, 116, 
 -	123, 127, 129, 132, 134, 83, 82, 83, 
 -	85, 82, 83, 86, 82, 83, 87, 82, 
 -	83, 88, 82, 83, 89, 82, 83, 90, 
 -	82, 83, 91, 82, 83, 92, 82, 83, 
 -	93, 82, 83, 94, 82, 83, 95, 82, 
 -	83, 96, 82, 83, 97, 82, 83, 4, 
 -	82, 83, 72, 82, 83, 100, 82, 83, 
 -	101, 82, 83, 102, 82, 83, 103, 82, 
 -	83, 104, 82, 83, 105, 82, 83, 106, 
 -	82, 83, 107, 82, 83, 108, 82, 83, 
 -	109, 82, 83, 110, 82, 83, 111, 82, 
 -	83, 112, 82, 83, 113, 82, 83, 114, 
 -	82, 83, 115, 82, 83, 72, 82, 83, 
 -	117, 82, 83, 118, 82, 83, 119, 82, 
 -	83, 120, 82, 83, 121, 82, 83, 122, 
 -	82, 83, 115, 82, 83, 124, 82, 83, 
 -	125, 82, 83, 126, 82, 83, 98, 82, 
 -	83, 128, 82, 83, 98, 82, 130, 83, 
 -	82, 131, 83, 82, 83, 98, 82, 83, 
 -	133, 82, 83, 98, 82, 135, 83, 136, 
 -	82, 98, 83, 82, 83, 137, 82, 83, 
 -	138, 82, 83, 139, 82, 83, 140, 82, 
 -	83, 141, 82, 83, 142, 82, 83, 72, 
 -	143, 82, 83, 144, 82, 83, 145, 82, 
 -	83, 115, 82, 147, 217, 0, 148, 0, 
 -	149, 0, 150, 0, 151, 0, 152, 0, 
 -	153, 0, 154, 0, 156, 155, 156, 155, 
 -	156, 156, 4, 157, 4, 171, 188, 195, 
 -	207, 156, 155, 156, 158, 155, 156, 159, 
 -	155, 156, 160, 155, 156, 161, 155, 156, 
 -	162, 155, 156, 163, 155, 156, 164, 155, 
 -	156, 165, 155, 156, 166, 155, 156, 167, 
 -	155, 156, 168, 155, 156, 169, 155, 156, 
 -	170, 155, 156, 4, 155, 156, 172, 155, 
 -	156, 173, 155, 156, 174, 155, 156, 175, 
 -	155, 156, 176, 155, 156, 177, 155, 156, 
 -	178, 155, 156, 179, 155, 156, 180, 155, 
 -	156, 181, 155, 156, 182, 155, 156, 183, 
 -	155, 156, 184, 155, 156, 185, 155, 156, 
 -	186, 155, 156, 187, 155, 156, 72, 155, 
 -	156, 189, 155, 156, 190, 155, 156, 191, 
 -	155, 156, 192, 155, 156, 193, 155, 156, 
 -	194, 155, 156, 187, 155, 156, 196, 202, 
 -	155, 156, 197, 155, 156, 198, 155, 156, 
 -	199, 155, 156, 200, 155, 156, 201, 155, 
 -	156, 187, 155, 156, 203, 155, 156, 204, 
 -	155, 156, 205, 155, 156, 206, 155, 156, 
 -	187, 155, 156, 208, 155, 156, 209, 155, 
 -	156, 210, 155, 156, 211, 155, 156, 212, 
 -	155, 156, 213, 155, 156, 214, 155, 156, 
 -	72, 215, 155, 156, 216, 155, 156, 206, 
 -	155, 218, 0, 219, 0, 220, 0, 221, 
 -	0, 222, 0, 223, 0, 225, 224, 225, 
 -	224, 225, 225, 4, 226, 4, 225, 224, 
 -	225, 227, 224, 225, 228, 224, 225, 229, 
 -	224, 225, 230, 224, 225, 231, 224, 225, 
 -	232, 224, 225, 233, 224, 225, 72, 224, 
 -	235, 0, 236, 0, 237, 0, 31, 0, 
 -	239, 0, 31, 0, 241, 0, 242, 0, 
 -	31, 0, 244, 0, 31, 0, 246, 247, 
 -	0, 31, 0, 248, 0, 249, 0, 250, 
 -	0, 251, 0, 252, 0, 253, 0, 254, 
 -	326, 0, 256, 255, 256, 255, 256, 256, 
 -	4, 257, 271, 4, 272, 289, 296, 303, 
 -	307, 309, 312, 314, 256, 255, 256, 258, 
 -	255, 256, 259, 255, 256, 260, 255, 256, 
 -	261, 255, 256, 262, 255, 256, 263, 255, 
 -	256, 264, 255, 256, 265, 255, 256, 266, 
 -	255, 256, 267, 255, 256, 268, 255, 256, 
 -	269, 255, 256, 270, 255, 256, 4, 255, 
 -	256, 72, 255, 256, 273, 255, 256, 274, 
 -	255, 256, 275, 255, 256, 276, 255, 256, 
 -	277, 255, 256, 278, 255, 256, 279, 255, 
 -	256, 280, 255, 256, 281, 255, 256, 282, 
 -	255, 256, 283, 255, 256, 284, 255, 256, 
 -	285, 255, 256, 286, 255, 256, 287, 255, 
 -	256, 288, 255, 256, 72, 255, 256, 290, 
 -	255, 256, 291, 255, 256, 292, 255, 256, 
 -	293, 255, 256, 294, 255, 256, 295, 255, 
 -	256, 288, 255, 256, 297, 255, 256, 298, 
 -	255, 256, 299, 255, 256, 300, 255, 256, 
 -	301, 255, 256, 302, 255, 256, 288, 255, 
 -	256, 304, 255, 256, 305, 255, 256, 306, 
 -	255, 256, 271, 255, 256, 308, 255, 256, 
 -	271, 255, 310, 256, 255, 311, 256, 255, 
 -	256, 271, 255, 256, 313, 255, 256, 271, 
 -	255, 315, 256, 316, 255, 271, 256, 255, 
 -	256, 317, 255, 256, 318, 255, 256, 319, 
 -	255, 256, 320, 255, 256, 321, 255, 256, 
 -	322, 255, 256, 72, 323, 255, 256, 324, 
 -	255, 256, 325, 255, 256, 288, 255, 327, 
 -	0, 328, 0, 53, 0, 329, 330, 329, 
 -	0, 334, 333, 332, 330, 333, 331, 0, 
 -	332, 330, 331, 0, 332, 331, 334, 333, 
 -	332, 330, 333, 331, 334, 334, 5, 15, 
 -	17, 31, 34, 37, 73, 146, 234, 238, 
 -	240, 243, 245, 329, 334, 0, 56, 336, 
 -	55, 56, 337, 55, 56, 338, 55, 56, 
 -	339, 55, 56, 340, 55, 56, 341, 55, 
 -	56, 342, 55, 56, 72, 55, 56, 344, 
 -	55, 56, 345, 55, 56, 346, 55, 56, 
 -	71, 55, 56, 348, 55, 56, 71, 55, 
 -	350, 56, 55, 351, 56, 55, 56, 71, 
 -	55, 56, 353, 55, 56, 71, 55, 355, 
 -	56, 356, 55, 71, 56, 55, 56, 357, 
 -	55, 56, 358, 55, 56, 359, 55, 56, 
 -	360, 55, 56, 361, 55, 56, 342, 55, 
 -	0, 0
 -};
 -
 -static const unsigned char _lexer_trans_actions[] = {
 -	0, 54, 0, 5, 1, 0, 29, 1, 
 -	29, 29, 29, 29, 29, 29, 29, 29, 
 -	35, 0, 43, 0, 43, 0, 43, 54, 
 -	0, 5, 1, 0, 29, 1, 29, 29, 
 -	29, 29, 29, 29, 29, 29, 35, 0, 
 -	43, 0, 43, 0, 43, 139, 48, 9, 
 -	106, 11, 0, 134, 45, 45, 45, 3, 
 -	122, 33, 33, 33, 0, 122, 33, 33, 
 -	33, 0, 122, 33, 0, 33, 0, 102, 
 -	7, 7, 43, 54, 0, 0, 43, 114, 
 -	25, 0, 54, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 149, 126, 57, 110, 23, 0, 
 -	43, 43, 43, 43, 0, 27, 118, 27, 
 -	27, 51, 27, 0, 54, 0, 1, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 144, 57, 54, 0, 54, 
 -	0, 78, 33, 84, 78, 84, 84, 84, 
 -	84, 84, 84, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 19, 0, 54, 
 -	19, 0, 130, 31, 60, 57, 31, 63, 
 -	57, 63, 63, 63, 63, 63, 63, 63, 
 -	63, 66, 31, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 144, 57, 54, 0, 
 -	54, 0, 72, 33, 84, 72, 84, 84, 
 -	84, 84, 84, 84, 84, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 15, 
 -	0, 54, 15, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 15, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 0, 54, 
 -	0, 0, 54, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 0, 54, 0, 
 -	0, 0, 54, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 15, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 0, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 144, 57, 54, 0, 
 -	54, 0, 69, 33, 69, 84, 84, 84, 
 -	84, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 13, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 13, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	13, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 144, 57, 54, 
 -	0, 54, 0, 81, 84, 81, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 21, 0, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	0, 43, 144, 57, 54, 0, 54, 0, 
 -	75, 33, 84, 75, 84, 84, 84, 84, 
 -	84, 84, 84, 84, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 17, 0, 
 -	54, 17, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 17, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 0, 54, 0, 0, 54, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 0, 54, 0, 0, 0, 54, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 17, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 0, 
 -	43, 0, 43, 0, 43, 0, 0, 0, 
 -	43, 54, 37, 37, 87, 37, 37, 43, 
 -	0, 39, 0, 43, 0, 0, 54, 0, 
 -	0, 39, 0, 0, 54, 0, 93, 90, 
 -	41, 96, 90, 96, 96, 96, 96, 96, 
 -	96, 96, 96, 99, 0, 43, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 19, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	0, 54, 0, 0, 54, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 0, 
 -	54, 0, 0, 0, 54, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	0, 0
 -};
 -
 -static const unsigned char _lexer_eof_actions[] = {
 -	0, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43
 -};
 -
 -static const int lexer_start = 1;
 -static const int lexer_first_final = 362;
 -static const int lexer_error = 0;
 -
 -static const int lexer_en_main = 1;
 -
 -
 -#line 258 "ragel/i18n/sv.c.rl"
 -
 -static VALUE 
 -unindent(VALUE con, int start_col)
 -{
 -  VALUE re;
 -  /* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */
 -  char pat[32]; 
 -  snprintf(pat, 32, "^[\t ]{0,%d}", start_col); 
 -  re = rb_reg_regcomp(rb_str_new2(pat));
 -  rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2(""));
 -
 -  return Qnil;
 -
 -}
 -
 -static void 
 -store_kw_con(VALUE listener, const char * event_name, 
 -             const char * keyword_at, size_t keyword_length, 
 -             const char * at,         size_t length, 
 -             int current_line)
 -{
 -  VALUE con = Qnil, kw = Qnil;
 -  kw = ENCODED_STR_NEW(keyword_at, keyword_length);
 -  con = ENCODED_STR_NEW(at, length);
 -  rb_funcall(con, rb_intern("strip!"), 0);
 -  rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); 
 -}
 -
 -static void
 -store_multiline_kw_con(VALUE listener, const char * event_name,
 -                      const char * keyword_at, size_t keyword_length,
 -                      const char * at,         size_t length,
 -                      int current_line, int start_col)
 -{
 -  VALUE split;
 -  VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil;
 -
 -  kw = ENCODED_STR_NEW(keyword_at, keyword_length);
 -  con = ENCODED_STR_NEW(at, length);
 -
 -  unindent(con, start_col);
 -  
 -  split = rb_str_split(con, "\n");
 -
 -  name = rb_funcall(split, rb_intern("shift"), 0);
 -  desc = rb_ary_join(split, rb_str_new2( "\n" ));
 -
 -  if( name == Qnil ) 
 -  {
 -    name = rb_str_new2("");
 -  }
 -  if( rb_funcall(desc, rb_intern("size"), 0) == 0) 
 -  {
 -    desc = rb_str_new2("");
 -  }
 -  rb_funcall(name, rb_intern("strip!"), 0);
 -  rb_funcall(desc, rb_intern("rstrip!"), 0);
 -  rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); 
 -}
 -
 -static void 
 -store_attr(VALUE listener, const char * attr_type,
 -           const char * at, size_t length, 
 -           int line)
 -{
 -  VALUE val = ENCODED_STR_NEW(at, length);
 -  rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line));
 -}
 -static void 
 -store_docstring_content(VALUE listener, 
 -          int start_col, 
 -          const char *type_at, size_t type_length,
 -          const char *at, size_t length, 
 -          int current_line)
 -{
 -  VALUE re2;
 -  VALUE unescape_escaped_quotes;
 -  VALUE con = ENCODED_STR_NEW(at, length);
 -  VALUE con_type = ENCODED_STR_NEW(type_at, type_length);
 -
 -  unindent(con, start_col);
 -
 -  re2 = rb_reg_regcomp(rb_str_new2("\r\\Z"));
 -  unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\""));
 -  rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2(""));
 -  rb_funcall(con_type, rb_intern("strip!"), 0);
 -  rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\""));
 -  rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line));
 -}
 -static void 
 -raise_lexer_error(const char * at, int line)
 -{ 
 -  rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at);
 -}
 -
 -static void lexer_init(lexer_state *lexer) {
 -  lexer->content_start = 0;
 -  lexer->content_end = 0;
 -  lexer->content_len = 0;
 -  lexer->docstring_content_type_start = 0;
 -  lexer->docstring_content_type_end = 0;
 -  lexer->mark = 0;
 -  lexer->keyword_start = 0;
 -  lexer->keyword_end = 0;
 -  lexer->next_keyword_start = 0;
 -  lexer->line_number = 1;
 -  lexer->last_newline = 0;
 -  lexer->final_newline = 0;
 -  lexer->start_col = 0;
 -}
 -
 -static VALUE CLexer_alloc(VALUE klass)
 -{
 -  VALUE obj;
 -  lexer_state *lxr = ALLOC(lexer_state);
 -  lexer_init(lxr);
 -
 -  obj = Data_Wrap_Struct(klass, NULL, -1, lxr);
 -
 -  return obj;
 -}
 -
 -static VALUE CLexer_init(VALUE self, VALUE listener)
 -{
 -  lexer_state *lxr; 
 -  rb_iv_set(self, "@listener", listener);
 -  
 -  lxr = NULL;
 -  DATA_GET(self, lexer_state, lxr);
 -  lexer_init(lxr);
 -  
 -  return self;
 -}
 -
 -static VALUE CLexer_scan(VALUE self, VALUE input)
 -{
 -  VALUE input_copy;
 -  char *data;
 -  size_t len;
 -  VALUE listener = rb_iv_get(self, "@listener");
 -
 -  lexer_state *lexer;
 -  lexer = NULL;
 -  DATA_GET(self, lexer_state, lexer);
 -
 -  input_copy = rb_str_dup(input);
 -
 -  rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%"));
 -  data = RSTRING_PTR(input_copy);
 -  len = RSTRING_LEN(input_copy);
 -  
 -  if (len == 0) { 
 -    rb_raise(rb_eGherkinLexingError, "No content to lex.");
 -  } else {
 -
 -    const char *p, *pe, *eof;
 -    int cs = 0;
 -    
 -    VALUE current_row = Qnil;
 -
 -    p = data;
 -    pe = data + len;
 -    eof = pe;
 -    
 -    assert(*pe == '\0' && "pointer does not end on NULL");
 -    
 -    
 -#line 928 "ext/gherkin_lexer_sv/gherkin_lexer_sv.c"
 -	{
 -	cs = lexer_start;
 -	}
 -
 -#line 425 "ragel/i18n/sv.c.rl"
 -    
 -#line 935 "ext/gherkin_lexer_sv/gherkin_lexer_sv.c"
 -	{
 -	int _klen;
 -	unsigned int _trans;
 -	const char *_acts;
 -	unsigned int _nacts;
 -	const char *_keys;
 -
 -	if ( p == pe )
 -		goto _test_eof;
 -	if ( cs == 0 )
 -		goto _out;
 -_resume:
 -	_keys = _lexer_trans_keys + _lexer_key_offsets[cs];
 -	_trans = _lexer_index_offsets[cs];
 -
 -	_klen = _lexer_single_lengths[cs];
 -	if ( _klen > 0 ) {
 -		const char *_lower = _keys;
 -		const char *_mid;
 -		const char *_upper = _keys + _klen - 1;
 -		while (1) {
 -			if ( _upper < _lower )
 -				break;
 -
 -			_mid = _lower + ((_upper-_lower) >> 1);
 -			if ( (*p) < *_mid )
 -				_upper = _mid - 1;
 -			else if ( (*p) > *_mid )
 -				_lower = _mid + 1;
 -			else {
 -				_trans += (unsigned int)(_mid - _keys);
 -				goto _match;
 -			}
 -		}
 -		_keys += _klen;
 -		_trans += _klen;
 -	}
 -
 -	_klen = _lexer_range_lengths[cs];
 -	if ( _klen > 0 ) {
 -		const char *_lower = _keys;
 -		const char *_mid;
 -		const char *_upper = _keys + (_klen<<1) - 2;
 -		while (1) {
 -			if ( _upper < _lower )
 -				break;
 -
 -			_mid = _lower + (((_upper-_lower) >> 1) & ~1);
 -			if ( (*p) < _mid[0] )
 -				_upper = _mid - 2;
 -			else if ( (*p) > _mid[1] )
 -				_lower = _mid + 2;
 -			else {
 -				_trans += (unsigned int)((_mid - _keys)>>1);
 -				goto _match;
 -			}
 -		}
 -		_trans += _klen;
 -	}
 -
 -_match:
 -	cs = _lexer_trans_targs[_trans];
 -
 -	if ( _lexer_trans_actions[_trans] == 0 )
 -		goto _again;
 -
 -	_acts = _lexer_actions + _lexer_trans_actions[_trans];
 -	_nacts = (unsigned int) *_acts++;
 -	while ( _nacts-- > 0 )
 -	{
 -		switch ( *_acts++ )
 -		{
 -	case 0:
 -#line 83 "ragel/i18n/sv.c.rl"
 -	{
 -		MARK(content_start, p);
 -    lexer->current_line = lexer->line_number;
 -    lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2;
 -  }
 -	break;
 -	case 1:
 -#line 89 "ragel/i18n/sv.c.rl"
 -	{
 -    MARK(content_start, p);
 -  }
 -	break;
 -	case 2:
 -#line 93 "ragel/i18n/sv.c.rl"
 -	{
 -    lexer->current_line = lexer->line_number;
 -    lexer->start_col = p - data - lexer->last_newline;
 -  }
 -	break;
 -	case 3:
 -#line 98 "ragel/i18n/sv.c.rl"
 -	{
 -    int len = LEN(content_start, PTR_TO(final_newline));
 -    int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end));
 -
 -    if (len < 0) len = 0;
 -    if (type_len < 0) len = 0;
 -
 -    store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line);
 -  }
 -	break;
 -	case 4:
 -#line 108 "ragel/i18n/sv.c.rl"
 -	{ 
 -    MARK(docstring_content_type_start, p);
 -  }
 -	break;
 -	case 5:
 -#line 112 "ragel/i18n/sv.c.rl"
 -	{ 
 -    MARK(docstring_content_type_end, p);
 -  }
 -	break;
 -	case 6:
 -#line 116 "ragel/i18n/sv.c.rl"
 -	{
 -    STORE_KW_END_CON(feature);
 -  }
 -	break;
 -	case 7:
 -#line 120 "ragel/i18n/sv.c.rl"
 -	{
 -    STORE_KW_END_CON(background);
 -  }
 -	break;
 -	case 8:
 -#line 124 "ragel/i18n/sv.c.rl"
 -	{
 -    STORE_KW_END_CON(scenario);
 -  }
 -	break;
 -	case 9:
 -#line 128 "ragel/i18n/sv.c.rl"
 -	{
 -    STORE_KW_END_CON(scenario_outline);
 -  }
 -	break;
 -	case 10:
 -#line 132 "ragel/i18n/sv.c.rl"
 -	{
 -    STORE_KW_END_CON(examples);
 -  }
 -	break;
 -	case 11:
 -#line 136 "ragel/i18n/sv.c.rl"
 -	{
 -    store_kw_con(listener, "step",
 -      PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
 -      PTR_TO(content_start), LEN(content_start, p), 
 -      lexer->current_line);
 -  }
 -	break;
 -	case 12:
 -#line 143 "ragel/i18n/sv.c.rl"
 -	{
 -    STORE_ATTR(comment);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 13:
 -#line 148 "ragel/i18n/sv.c.rl"
 -	{
 -    STORE_ATTR(tag);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 14:
 -#line 153 "ragel/i18n/sv.c.rl"
 -	{
 -    lexer->line_number += 1;
 -    MARK(final_newline, p);
 -  }
 -	break;
 -	case 15:
 -#line 158 "ragel/i18n/sv.c.rl"
 -	{
 -    MARK(last_newline, p + 1);
 -  }
 -	break;
 -	case 16:
 -#line 162 "ragel/i18n/sv.c.rl"
 -	{
 -    if (lexer->mark == 0) {
 -      MARK(mark, p);
 -    }
 -  }
 -	break;
 -	case 17:
 -#line 168 "ragel/i18n/sv.c.rl"
 -	{
 -    MARK(keyword_end, p);
 -    MARK(keyword_start, PTR_TO(mark));
 -    MARK(content_start, p + 1);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 18:
 -#line 175 "ragel/i18n/sv.c.rl"
 -	{
 -    MARK(content_end, p);
 -  }
 -	break;
 -	case 19:
 -#line 179 "ragel/i18n/sv.c.rl"
 -	{
 -    p = p - 1;
 -    lexer->current_line = lexer->line_number;
 -    current_row = rb_ary_new();
 -  }
 -	break;
 -	case 20:
 -#line 185 "ragel/i18n/sv.c.rl"
 -	{
 -		MARK(content_start, p);
 -  }
 -	break;
 -	case 21:
 -#line 189 "ragel/i18n/sv.c.rl"
 -	{
 -    VALUE re_pipe, re_newline, re_backslash;
 -    VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
 -    rb_funcall(con, rb_intern("strip!"), 0);
 -    re_pipe      = rb_reg_regcomp(rb_str_new2("\\\\\\|"));
 -    re_newline   = rb_reg_regcomp(rb_str_new2("\\\\n"));
 -    re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_pipe,      rb_str_new2("|"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_newline,   rb_str_new2("\n"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\"));
 -
 -    rb_ary_push(current_row, con);
 -  }
 -	break;
 -	case 22:
 -#line 203 "ragel/i18n/sv.c.rl"
 -	{
 -    rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
 -  }
 -	break;
 -	case 23:
 -#line 207 "ragel/i18n/sv.c.rl"
 -	{
 -    int line;
 -    if (cs < lexer_first_final) {
 -      size_t count = 0;
 -      VALUE newstr_val;
 -      char *newstr;
 -      int newstr_count = 0;        
 -      size_t len;
 -      const char *buff;
 -      if (lexer->last_newline != 0) {
 -        len = LEN(last_newline, eof);
 -        buff = PTR_TO(last_newline);
 -      } else {
 -        len = strlen(data);
 -        buff = data;
 -      }
 -
 -      /* Allocate as a ruby string so that it gets cleaned up by GC */
 -      newstr_val = rb_str_new(buff, len);
 -      newstr = RSTRING_PTR(newstr_val);
 -
 -
 -      for (count = 0; count < len; count++) {
 -        if(buff[count] == 10) {
 -          newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
 -          break;
 -        } else {
 -          if (buff[count] == '%') {
 -            newstr[newstr_count++] = buff[count];
 -            newstr[newstr_count] = buff[count];
 -          } else {
 -            newstr[newstr_count] = buff[count];
 -          }
 -        }
 -        newstr_count++;
 -      }
 -
 -      line = lexer->line_number;
 -      lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
 -      raise_lexer_error(newstr, line);
 -    } else {
 -      rb_funcall(listener, rb_intern("eof"), 0);
 -    }
 -  }
 -	break;
 -#line 1225 "ext/gherkin_lexer_sv/gherkin_lexer_sv.c"
 -		}
 -	}
 -
 -_again:
 -	if ( cs == 0 )
 -		goto _out;
 -	if ( ++p != pe )
 -		goto _resume;
 -	_test_eof: {}
 -	if ( p == eof )
 -	{
 -	const char *__acts = _lexer_actions + _lexer_eof_actions[cs];
 -	unsigned int __nacts = (unsigned int) *__acts++;
 -	while ( __nacts-- > 0 ) {
 -		switch ( *__acts++ ) {
 -	case 23:
 -#line 207 "ragel/i18n/sv.c.rl"
 -	{
 -    int line;
 -    if (cs < lexer_first_final) {
 -      size_t count = 0;
 -      VALUE newstr_val;
 -      char *newstr;
 -      int newstr_count = 0;        
 -      size_t len;
 -      const char *buff;
 -      if (lexer->last_newline != 0) {
 -        len = LEN(last_newline, eof);
 -        buff = PTR_TO(last_newline);
 -      } else {
 -        len = strlen(data);
 -        buff = data;
 -      }
 -
 -      /* Allocate as a ruby string so that it gets cleaned up by GC */
 -      newstr_val = rb_str_new(buff, len);
 -      newstr = RSTRING_PTR(newstr_val);
 -
 -
 -      for (count = 0; count < len; count++) {
 -        if(buff[count] == 10) {
 -          newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
 -          break;
 -        } else {
 -          if (buff[count] == '%') {
 -            newstr[newstr_count++] = buff[count];
 -            newstr[newstr_count] = buff[count];
 -          } else {
 -            newstr[newstr_count] = buff[count];
 -          }
 -        }
 -        newstr_count++;
 -      }
 -
 -      line = lexer->line_number;
 -      lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
 -      raise_lexer_error(newstr, line);
 -    } else {
 -      rb_funcall(listener, rb_intern("eof"), 0);
 -    }
 -  }
 -	break;
 -#line 1288 "ext/gherkin_lexer_sv/gherkin_lexer_sv.c"
 -		}
 -	}
 -	}
 -
 -	_out: {}
 -	}
 -
 -#line 426 "ragel/i18n/sv.c.rl"
 -
 -    assert(p <= pe && "data overflow after parsing execute");
 -    assert(lexer->content_start <= len && "content starts after data end");
 -    assert(lexer->mark < len && "mark is after data end");
 -    
 -    /* Reset lexer by re-initializing the whole thing */
 -    lexer_init(lexer);
 -
 -    if (cs == lexer_error) {
 -      rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails.");
 -    } else {
 -      return Qtrue;
 -    }
 -  }
 -}
 -
 -void Init_gherkin_lexer_sv()
 -{
 -  mGherkin = rb_define_module("Gherkin");
 -  mGherkinLexer = rb_define_module_under(mGherkin, "Lexer");
 -  rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError"));
 -
 -  mCLexer = rb_define_module_under(mGherkin, "CLexer");
 -  cI18nLexer = rb_define_class_under(mCLexer, "Sv", rb_cObject);
 -  rb_define_alloc_func(cI18nLexer, CLexer_alloc);
 -  rb_define_method(cI18nLexer, "initialize", CLexer_init, 1);
 -  rb_define_method(cI18nLexer, "scan", CLexer_scan, 1);
 -}
 -
diff --cc ext/gherkin_lexer_tr/extconf.rb
index d234a39,d234a39..0000000
deleted file mode 100644,100644
--- a/ext/gherkin_lexer_tr/extconf.rb
+++ /dev/null
@@@ -1,6 -1,6 +1,0 @@@
--require 'mkmf'
--CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags']
--$CFLAGS << ' -O0 -Wall' if CONFIG['CC'] =~ /gcc|clang/
--dir_config("gherkin_lexer_tr")
--have_library("c", "main")
--create_makefile("gherkin_lexer_tr")
diff --cc ext/gherkin_lexer_tr/gherkin_lexer_tr.c
index 1d233ae,7f83b30..0000000
deleted file mode 100644,100644
--- a/ext/gherkin_lexer_tr/gherkin_lexer_tr.c
+++ /dev/null
@@@ -1,1347 -1,1347 +1,0 @@@
--
- #line 1 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/tr.c.rl"
- #include <assert.h>
- #include <ruby.h>
- 
- #if defined(_WIN32)
- #include <stddef.h>
- #endif
- 
- #ifdef HAVE_RUBY_RE_H
- #include <ruby/re.h>
- #else
- #include <re.h>
- #endif
- 
- #ifdef HAVE_RUBY_ENCODING_H
- #include <ruby/encoding.h>
- #define ENCODED_STR_NEW(ptr, len) \
-     rb_enc_str_new(ptr, len, rb_utf8_encoding())
- #else
- #define ENCODED_STR_NEW(ptr, len) \
-     rb_str_new(ptr, len)
- #endif
- 
- #ifndef RSTRING_PTR
- #define RSTRING_PTR(s) (RSTRING(s)->ptr)
- #endif
- 
- #ifndef RSTRING_LEN
- #define RSTRING_LEN(s) (RSTRING(s)->len)
- #endif
- 
- #define DATA_GET(FROM, TYPE, NAME) \
-   Data_Get_Struct(FROM, TYPE, NAME); \
-   if (NAME == NULL) { \
-     rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \
-   }
-  
- typedef struct lexer_state {
-   int content_len;
-   int line_number;
-   int current_line;
-   int start_col;
-   size_t mark;
-   size_t keyword_start;
-   size_t keyword_end;
-   size_t next_keyword_start;
-   size_t content_start;
-   size_t content_end;
-   size_t docstring_content_type_start;
-   size_t docstring_content_type_end;
-   size_t query_start;
-   size_t last_newline;
-   size_t final_newline;
- } lexer_state;
- 
- static VALUE mGherkin;
- static VALUE mGherkinLexer;
- static VALUE mCLexer;
- static VALUE cI18nLexer;
- static VALUE rb_eGherkinLexingError;
- 
- #define LEN(AT, P) (P - data - lexer->AT)
- #define MARK(M, P) (lexer->M = (P) - data)
- #define PTR_TO(P) (data + lexer->P)
- 
- #define STORE_KW_END_CON(EVENT) \
-   store_multiline_kw_con(listener, # EVENT, \
-     PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \
-     PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \
-     lexer->current_line, lexer->start_col); \
-     if (lexer->content_end != 0) { \
-       p = PTR_TO(content_end - 1); \
-     } \
-     lexer->content_end = 0
- 
- #define STORE_ATTR(ATTR) \
-     store_attr(listener, # ATTR, \
-       PTR_TO(content_start), LEN(content_start, p), \
-       lexer->line_number)
- 
- 
- #line 254 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/tr.c.rl"
- 
- 
- /** Data **/
- 
- #line 89 "ext/gherkin_lexer_tr/gherkin_lexer_tr.c"
- static const char _lexer_actions[] = {
- 	0, 1, 0, 1, 1, 1, 2, 1, 
- 	3, 1, 4, 1, 5, 1, 6, 1, 
- 	7, 1, 8, 1, 9, 1, 10, 1, 
- 	11, 1, 12, 1, 13, 1, 16, 1, 
- 	17, 1, 18, 1, 19, 1, 20, 1, 
- 	21, 1, 22, 1, 23, 2, 1, 18, 
- 	2, 4, 5, 2, 13, 0, 2, 14, 
- 	15, 2, 17, 0, 2, 17, 2, 2, 
- 	17, 16, 2, 17, 19, 2, 18, 6, 
- 	2, 18, 7, 2, 18, 8, 2, 18, 
- 	9, 2, 18, 10, 2, 18, 16, 2, 
- 	20, 21, 2, 22, 0, 2, 22, 2, 
- 	2, 22, 16, 2, 22, 19, 3, 3, 
- 	14, 15, 3, 5, 14, 15, 3, 11, 
- 	14, 15, 3, 12, 14, 15, 3, 13, 
- 	14, 15, 3, 14, 15, 18, 3, 17, 
- 	0, 11, 3, 17, 14, 15, 4, 1, 
- 	14, 15, 18, 4, 4, 5, 14, 15, 
- 	4, 17, 0, 14, 15, 5, 17, 0, 
- 	11, 14, 15
- };
- 
- static const short _lexer_key_offsets[] = {
- 	0, 0, 20, 21, 23, 24, 25, 26, 
- 	27, 28, 29, 30, 31, 32, 39, 41, 
- 	43, 45, 47, 49, 51, 53, 55, 74, 
- 	93, 94, 95, 97, 99, 104, 109, 114, 
- 	119, 123, 127, 129, 130, 131, 132, 133, 
- 	134, 135, 136, 137, 138, 139, 140, 141, 
- 	142, 143, 144, 145, 147, 149, 154, 161, 
- 	166, 167, 168, 169, 170, 171, 172, 173, 
- 	174, 175, 176, 177, 178, 179, 180, 181, 
- 	182, 183, 184, 185, 186, 187, 188, 189, 
- 	190, 191, 192, 193, 194, 195, 211, 213, 
- 	215, 217, 219, 221, 223, 225, 227, 229, 
- 	231, 233, 235, 237, 239, 241, 243, 245, 
- 	247, 249, 251, 253, 255, 257, 259, 261, 
- 	263, 265, 267, 269, 271, 273, 275, 277, 
- 	279, 281, 283, 285, 287, 289, 291, 293, 
- 	295, 297, 299, 301, 303, 305, 307, 309, 
- 	311, 313, 315, 317, 319, 322, 324, 326, 
- 	328, 330, 332, 334, 336, 338, 340, 342, 
- 	343, 344, 345, 346, 347, 348, 349, 350, 
- 	351, 352, 353, 354, 356, 357, 358, 359, 
- 	360, 361, 362, 363, 364, 365, 366, 367, 
- 	368, 384, 386, 388, 390, 392, 394, 396, 
- 	398, 400, 402, 404, 406, 408, 410, 412, 
- 	414, 416, 418, 420, 422, 424, 426, 428, 
- 	430, 432, 434, 436, 438, 440, 442, 444, 
- 	446, 448, 450, 452, 454, 456, 458, 460, 
- 	462, 464, 466, 468, 470, 472, 474, 476, 
- 	478, 480, 482, 484, 486, 488, 490, 492, 
- 	494, 495, 496, 513, 515, 517, 519, 521, 
- 	523, 525, 527, 529, 531, 533, 535, 537, 
- 	539, 541, 543, 545, 547, 549, 551, 553, 
- 	555, 557, 559, 561, 563, 565, 567, 569, 
- 	571, 573, 575, 577, 579, 581, 583, 585, 
- 	587, 589, 591, 593, 595, 597, 599, 601, 
- 	603, 605, 607, 609, 611, 613, 615, 617, 
- 	619, 621, 623, 625, 627, 629, 631, 633, 
- 	635, 638, 640, 642, 644, 646, 648, 650, 
- 	652, 654, 656, 658, 659, 663, 669, 672, 
- 	674, 680, 699, 700, 701, 702, 703, 704, 
- 	705, 706, 707, 717, 719, 722, 724, 726, 
- 	728, 730, 732, 734, 736, 738, 740, 742, 
- 	744, 746, 748, 750, 752, 754, 756, 758, 
- 	760, 762, 764, 766, 768, 770, 772, 774, 
- 	776, 778, 780, 782, 784, 786, 788, 790, 
- 	792, 794, 796, 798, 800, 803, 805, 807, 
- 	809, 811, 813, 815, 817, 819, 821, 822, 
- 	823
- };
- 
- static const char _lexer_trans_keys[] = {
- 	-61, -17, 10, 32, 34, 35, 37, 42, 
- 	64, 65, 68, 69, 70, 71, 79, 83, 
- 	86, 124, 9, 13, -106, 114, 122, 110, 
- 	101, 107, 108, 101, 114, 58, 10, 10, 
- 	-61, 10, 32, 35, 124, 9, 13, -106, 
- 	10, 10, 122, 10, 101, 10, 108, 10, 
- 	108, 10, 105, 10, 107, 10, 58, -61, 
- 	10, 32, 34, 35, 37, 42, 64, 65, 
- 	68, 69, 70, 71, 79, 83, 86, 124, 
- 	9, 13, -61, 10, 32, 34, 35, 37, 
- 	42, 64, 65, 68, 69, 70, 71, 79, 
- 	83, 86, 124, 9, 13, 34, 34, 10, 
- 	13, 10, 13, 10, 32, 34, 9, 13, 
- 	10, 32, 34, 9, 13, 10, 32, 34, 
- 	9, 13, 10, 32, 34, 9, 13, 10, 
- 	32, 9, 13, 10, 32, 9, 13, 10, 
- 	13, 10, 95, 70, 69, 65, 84, 85, 
- 	82, 69, 95, 69, 78, 68, 95, 37, 
- 	32, 10, 13, 10, 13, 13, 32, 64, 
- 	9, 10, 9, 10, 13, 32, 64, 11, 
- 	12, 10, 32, 64, 9, 13, 109, 97, 
- 	105, 121, 101, 108, 105, 109, 32, 107, 
- 	105, -60, -97, 101, 114, 97, 107, 97, 
- 	116, 101, -61, -89, 109, 105, -59, -97, 
- 	58, 10, 10, -61, 10, 32, 35, 37, 
- 	42, 64, 65, 68, 69, 70, 79, 83, 
- 	86, 9, 13, -106, 10, 10, 122, 10, 
- 	101, 10, 108, 10, 108, 10, 105, 10, 
- 	107, 10, 58, 10, 95, 10, 70, 10, 
- 	69, 10, 65, 10, 84, 10, 85, 10, 
- 	82, 10, 69, 10, 95, 10, 69, 10, 
- 	78, 10, 68, 10, 95, 10, 37, 10, 
- 	32, 10, 109, 10, 97, 10, 105, 10, 
- 	121, 10, 101, 10, 108, 10, 105, 10, 
- 	109, 10, 32, 10, 107, 10, 105, -60, 
- 	10, -97, 10, 10, 101, 10, 114, 10, 
- 	97, 10, 107, 10, 97, 10, 116, 10, 
- 	32, 10, 122, 10, 97, 10, 109, 10, 
- 	97, 10, 110, 10, 101, 10, 110, 10, 
- 	97, 10, 114, 10, 121, 10, 111, 10, 
- 	32, 58, 10, 116, 10, 97, 10, 115, 
- 	10, 108, 10, 97, -60, 10, -97, 10, 
- 	-60, 10, -79, 10, 10, 101, 32, 122, 
- 	97, 109, 97, 110, 101, 110, 97, 114, 
- 	121, 111, 32, 58, 116, 97, 115, 108, 
- 	97, -60, -97, -60, -79, 58, 10, 10, 
- 	-61, 10, 32, 35, 37, 42, 64, 65, 
- 	68, 69, 70, 79, 83, 86, 9, 13, 
- 	-106, 10, 10, 122, 10, 101, 10, 108, 
- 	10, 108, 10, 105, 10, 107, 10, 58, 
- 	10, 95, 10, 70, 10, 69, 10, 65, 
- 	10, 84, 10, 85, 10, 82, 10, 69, 
- 	10, 95, 10, 69, 10, 78, 10, 68, 
- 	10, 95, 10, 37, 10, 32, 10, 109, 
- 	10, 97, 10, 105, 10, 121, 10, 101, 
- 	10, 108, 10, 105, 10, 109, 10, 32, 
- 	10, 107, 10, 105, -60, 10, -97, 10, 
- 	10, 101, 10, 114, 10, 97, 10, 107, 
- 	10, 97, 10, 116, 10, 32, 10, 122, 
- 	10, 97, 10, 109, 10, 97, 10, 110, 
- 	10, 101, 10, 110, 10, 97, 10, 114, 
- 	10, 121, 10, 111, 10, 101, 10, 10, 
- 	-61, 10, 32, 35, 37, 42, 64, 65, 
- 	68, 69, 70, 71, 79, 83, 86, 9, 
- 	13, -106, 10, 10, 122, 10, 101, 10, 
- 	108, 10, 108, 10, 105, 10, 107, 10, 
- 	58, 10, 95, 10, 70, 10, 69, 10, 
- 	65, 10, 84, 10, 85, 10, 82, 10, 
- 	69, 10, 95, 10, 69, 10, 78, 10, 
- 	68, 10, 95, 10, 37, 10, 32, 10, 
- 	109, 10, 97, 10, 105, 10, 121, 10, 
- 	101, 10, 108, 10, 105, 10, 109, 10, 
- 	32, 10, 107, 10, 105, -60, 10, -97, 
- 	10, 10, 101, 10, 114, 10, 97, 10, 
- 	107, 10, 97, 10, 116, 10, 101, -61, 
- 	10, -89, 10, 10, 109, 10, 105, -59, 
- 	10, -97, 10, 10, 32, 10, 122, 10, 
- 	97, 10, 109, 10, 97, 10, 110, 10, 
- 	101, 10, 110, 10, 97, 10, 114, 10, 
- 	121, 10, 111, 10, 32, 58, 10, 116, 
- 	10, 97, 10, 115, 10, 108, 10, 97, 
- 	-60, 10, -97, 10, -60, 10, -79, 10, 
- 	10, 101, 101, 32, 124, 9, 13, 10, 
- 	32, 92, 124, 9, 13, 10, 92, 124, 
- 	10, 92, 10, 32, 92, 124, 9, 13, 
- 	-61, 10, 32, 34, 35, 37, 42, 64, 
- 	65, 68, 69, 70, 71, 79, 83, 86, 
- 	124, 9, 13, 101, 108, 108, 105, 107, 
- 	58, 10, 10, -61, 10, 32, 35, 37, 
- 	64, 71, 83, 9, 13, -106, 10, 10, 
- 	114, 122, 10, 110, 10, 101, 10, 107, 
- 	10, 108, 10, 101, 10, 114, 10, 58, 
- 	10, 101, 10, 108, 10, 108, 10, 105, 
- 	10, 107, 10, 95, 10, 70, 10, 69, 
- 	10, 65, 10, 84, 10, 85, 10, 82, 
- 	10, 69, 10, 95, 10, 69, 10, 78, 
- 	10, 68, 10, 95, 10, 37, 10, 101, 
- 	-61, 10, -89, 10, 10, 109, 10, 105, 
- 	-59, 10, -97, 10, 10, 101, 10, 110, 
- 	10, 97, 10, 114, 10, 121, 10, 111, 
- 	10, 32, 58, 10, 116, 10, 97, 10, 
- 	115, 10, 108, 10, 97, -60, 10, -97, 
- 	10, -60, 10, -79, 10, -69, -65, 0
- };
- 
- static const char _lexer_single_lengths[] = {
- 	0, 18, 1, 2, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 5, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 17, 17, 
- 	1, 1, 2, 2, 3, 3, 3, 3, 
- 	2, 2, 2, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 2, 2, 3, 5, 3, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 14, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 3, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 2, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	14, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	1, 1, 15, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	3, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 1, 2, 4, 3, 2, 
- 	4, 17, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 8, 2, 3, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 3, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 1, 1, 
- 	0
- };
- 
- static const char _lexer_range_lengths[] = {
- 	0, 1, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 1, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 1, 1, 
- 	0, 0, 0, 0, 1, 1, 1, 1, 
- 	1, 1, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 1, 1, 1, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 1, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	1, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 1, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 1, 1, 0, 0, 
- 	1, 1, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 1, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0
- };
- 
- static const short _lexer_index_offsets[] = {
- 	0, 0, 20, 22, 25, 27, 29, 31, 
- 	33, 35, 37, 39, 41, 43, 50, 53, 
- 	56, 59, 62, 65, 68, 71, 74, 93, 
- 	112, 114, 116, 119, 122, 127, 132, 137, 
- 	142, 146, 150, 153, 155, 157, 159, 161, 
- 	163, 165, 167, 169, 171, 173, 175, 177, 
- 	179, 181, 183, 185, 188, 191, 196, 203, 
- 	208, 210, 212, 214, 216, 218, 220, 222, 
- 	224, 226, 228, 230, 232, 234, 236, 238, 
- 	240, 242, 244, 246, 248, 250, 252, 254, 
- 	256, 258, 260, 262, 264, 266, 282, 285, 
- 	288, 291, 294, 297, 300, 303, 306, 309, 
- 	312, 315, 318, 321, 324, 327, 330, 333, 
- 	336, 339, 342, 345, 348, 351, 354, 357, 
- 	360, 363, 366, 369, 372, 375, 378, 381, 
- 	384, 387, 390, 393, 396, 399, 402, 405, 
- 	408, 411, 414, 417, 420, 423, 426, 429, 
- 	432, 435, 438, 441, 444, 448, 451, 454, 
- 	457, 460, 463, 466, 469, 472, 475, 478, 
- 	480, 482, 484, 486, 488, 490, 492, 494, 
- 	496, 498, 500, 502, 505, 507, 509, 511, 
- 	513, 515, 517, 519, 521, 523, 525, 527, 
- 	529, 545, 548, 551, 554, 557, 560, 563, 
- 	566, 569, 572, 575, 578, 581, 584, 587, 
- 	590, 593, 596, 599, 602, 605, 608, 611, 
- 	614, 617, 620, 623, 626, 629, 632, 635, 
- 	638, 641, 644, 647, 650, 653, 656, 659, 
- 	662, 665, 668, 671, 674, 677, 680, 683, 
- 	686, 689, 692, 695, 698, 701, 704, 707, 
- 	710, 712, 714, 731, 734, 737, 740, 743, 
- 	746, 749, 752, 755, 758, 761, 764, 767, 
- 	770, 773, 776, 779, 782, 785, 788, 791, 
- 	794, 797, 800, 803, 806, 809, 812, 815, 
- 	818, 821, 824, 827, 830, 833, 836, 839, 
- 	842, 845, 848, 851, 854, 857, 860, 863, 
- 	866, 869, 872, 875, 878, 881, 884, 887, 
- 	890, 893, 896, 899, 902, 905, 908, 911, 
- 	914, 918, 921, 924, 927, 930, 933, 936, 
- 	939, 942, 945, 948, 950, 954, 960, 964, 
- 	967, 973, 992, 994, 996, 998, 1000, 1002, 
- 	1004, 1006, 1008, 1018, 1021, 1025, 1028, 1031, 
- 	1034, 1037, 1040, 1043, 1046, 1049, 1052, 1055, 
- 	1058, 1061, 1064, 1067, 1070, 1073, 1076, 1079, 
- 	1082, 1085, 1088, 1091, 1094, 1097, 1100, 1103, 
- 	1106, 1109, 1112, 1115, 1118, 1121, 1124, 1127, 
- 	1130, 1133, 1136, 1139, 1142, 1146, 1149, 1152, 
- 	1155, 1158, 1161, 1164, 1167, 1170, 1173, 1175, 
- 	1177
- };
- 
- static const short _lexer_trans_targs[] = {
- 	2, 374, 23, 23, 24, 34, 36, 50, 
- 	53, 56, 58, 67, 71, 75, 151, 157, 
- 	307, 308, 23, 0, 3, 0, 4, 314, 
- 	0, 5, 0, 6, 0, 7, 0, 8, 
- 	0, 9, 0, 10, 0, 11, 0, 13, 
- 	12, 13, 12, 14, 13, 13, 23, 23, 
- 	13, 12, 15, 13, 12, 13, 16, 12, 
- 	13, 17, 12, 13, 18, 12, 13, 19, 
- 	12, 13, 20, 12, 13, 21, 12, 13, 
- 	22, 12, 2, 23, 23, 24, 34, 36, 
- 	50, 53, 56, 58, 67, 71, 75, 151, 
- 	157, 307, 308, 23, 0, 2, 23, 23, 
- 	24, 34, 36, 50, 53, 56, 58, 67, 
- 	71, 75, 151, 157, 307, 308, 23, 0, 
- 	25, 0, 26, 0, 28, 27, 27, 28, 
- 	27, 27, 29, 29, 30, 29, 29, 29, 
- 	29, 30, 29, 29, 29, 29, 31, 29, 
- 	29, 29, 29, 32, 29, 29, 23, 33, 
- 	33, 0, 23, 33, 33, 0, 23, 35, 
- 	34, 23, 0, 37, 0, 38, 0, 39, 
- 	0, 40, 0, 41, 0, 42, 0, 43, 
- 	0, 44, 0, 45, 0, 46, 0, 47, 
- 	0, 48, 0, 49, 0, 376, 0, 51, 
- 	0, 23, 35, 52, 23, 35, 52, 0, 
- 	0, 0, 0, 54, 55, 23, 55, 55, 
- 	53, 54, 54, 23, 55, 53, 55, 0, 
- 	57, 0, 50, 0, 59, 0, 60, 0, 
- 	61, 0, 62, 0, 63, 0, 64, 0, 
- 	65, 0, 66, 0, 50, 0, 68, 0, 
- 	69, 0, 70, 0, 64, 0, 72, 0, 
- 	73, 0, 74, 0, 50, 0, 76, 0, 
- 	77, 0, 78, 0, 79, 0, 80, 0, 
- 	81, 0, 82, 0, 83, 0, 85, 84, 
- 	85, 84, 86, 85, 85, 23, 94, 108, 
- 	23, 109, 111, 120, 124, 128, 134, 150, 
- 	85, 84, 87, 85, 84, 85, 88, 84, 
- 	85, 89, 84, 85, 90, 84, 85, 91, 
- 	84, 85, 92, 84, 85, 93, 84, 85, 
- 	22, 84, 85, 95, 84, 85, 96, 84, 
- 	85, 97, 84, 85, 98, 84, 85, 99, 
- 	84, 85, 100, 84, 85, 101, 84, 85, 
- 	102, 84, 85, 103, 84, 85, 104, 84, 
- 	85, 105, 84, 85, 106, 84, 85, 107, 
- 	84, 85, 23, 84, 85, 22, 84, 85, 
- 	110, 84, 85, 108, 84, 85, 112, 84, 
- 	85, 113, 84, 85, 114, 84, 85, 115, 
- 	84, 85, 116, 84, 85, 117, 84, 85, 
- 	118, 84, 85, 119, 84, 85, 108, 84, 
- 	121, 85, 84, 122, 85, 84, 85, 123, 
- 	84, 85, 117, 84, 85, 125, 84, 85, 
- 	126, 84, 85, 127, 84, 85, 108, 84, 
- 	85, 129, 84, 85, 130, 84, 85, 131, 
- 	84, 85, 132, 84, 85, 133, 84, 85, 
- 	108, 84, 85, 135, 84, 85, 136, 84, 
- 	85, 137, 84, 85, 138, 84, 85, 139, 
- 	84, 85, 140, 84, 85, 141, 22, 84, 
- 	85, 142, 84, 85, 143, 84, 85, 144, 
- 	84, 85, 145, 84, 85, 146, 84, 147, 
- 	85, 84, 148, 85, 84, 149, 85, 84, 
- 	93, 85, 84, 85, 108, 84, 152, 0, 
- 	153, 0, 154, 0, 155, 0, 156, 0, 
- 	50, 0, 158, 0, 159, 0, 160, 0, 
- 	161, 0, 162, 0, 163, 0, 164, 232, 
- 	0, 165, 0, 166, 0, 167, 0, 168, 
- 	0, 169, 0, 170, 0, 171, 0, 172, 
- 	0, 173, 0, 174, 0, 176, 175, 176, 
- 	175, 177, 176, 176, 23, 185, 199, 23, 
- 	200, 202, 211, 215, 219, 225, 231, 176, 
- 	175, 178, 176, 175, 176, 179, 175, 176, 
- 	180, 175, 176, 181, 175, 176, 182, 175, 
- 	176, 183, 175, 176, 184, 175, 176, 22, 
- 	175, 176, 186, 175, 176, 187, 175, 176, 
- 	188, 175, 176, 189, 175, 176, 190, 175, 
- 	176, 191, 175, 176, 192, 175, 176, 193, 
- 	175, 176, 194, 175, 176, 195, 175, 176, 
- 	196, 175, 176, 197, 175, 176, 198, 175, 
- 	176, 23, 175, 176, 22, 175, 176, 201, 
- 	175, 176, 199, 175, 176, 203, 175, 176, 
- 	204, 175, 176, 205, 175, 176, 206, 175, 
- 	176, 207, 175, 176, 208, 175, 176, 209, 
- 	175, 176, 210, 175, 176, 199, 175, 212, 
- 	176, 175, 213, 176, 175, 176, 214, 175, 
- 	176, 208, 175, 176, 216, 175, 176, 217, 
- 	175, 176, 218, 175, 176, 199, 175, 176, 
- 	220, 175, 176, 221, 175, 176, 222, 175, 
- 	176, 223, 175, 176, 224, 175, 176, 199, 
- 	175, 176, 226, 175, 176, 227, 175, 176, 
- 	228, 175, 176, 229, 175, 176, 230, 175, 
- 	176, 184, 175, 176, 199, 175, 234, 233, 
- 	234, 233, 235, 234, 234, 23, 243, 257, 
- 	23, 258, 260, 269, 273, 277, 284, 290, 
- 	306, 234, 233, 236, 234, 233, 234, 237, 
- 	233, 234, 238, 233, 234, 239, 233, 234, 
- 	240, 233, 234, 241, 233, 234, 242, 233, 
- 	234, 22, 233, 234, 244, 233, 234, 245, 
- 	233, 234, 246, 233, 234, 247, 233, 234, 
- 	248, 233, 234, 249, 233, 234, 250, 233, 
- 	234, 251, 233, 234, 252, 233, 234, 253, 
- 	233, 234, 254, 233, 234, 255, 233, 234, 
- 	256, 233, 234, 23, 233, 234, 22, 233, 
- 	234, 259, 233, 234, 257, 233, 234, 261, 
- 	233, 234, 262, 233, 234, 263, 233, 234, 
- 	264, 233, 234, 265, 233, 234, 266, 233, 
- 	234, 267, 233, 234, 268, 233, 234, 257, 
- 	233, 270, 234, 233, 271, 234, 233, 234, 
- 	272, 233, 234, 266, 233, 234, 274, 233, 
- 	234, 275, 233, 234, 276, 233, 234, 257, 
- 	233, 234, 278, 233, 279, 234, 233, 280, 
- 	234, 233, 234, 281, 233, 234, 282, 233, 
- 	283, 234, 233, 242, 234, 233, 234, 285, 
- 	233, 234, 286, 233, 234, 287, 233, 234, 
- 	288, 233, 234, 289, 233, 234, 257, 233, 
- 	234, 291, 233, 234, 292, 233, 234, 293, 
- 	233, 234, 294, 233, 234, 295, 233, 234, 
- 	296, 233, 234, 297, 22, 233, 234, 298, 
- 	233, 234, 299, 233, 234, 300, 233, 234, 
- 	301, 233, 234, 302, 233, 303, 234, 233, 
- 	304, 234, 233, 305, 234, 233, 242, 234, 
- 	233, 234, 257, 233, 50, 0, 308, 309, 
- 	308, 0, 313, 312, 311, 309, 312, 310, 
- 	0, 311, 309, 310, 0, 311, 310, 313, 
- 	312, 311, 309, 312, 310, 2, 313, 313, 
- 	24, 34, 36, 50, 53, 56, 58, 67, 
- 	71, 75, 151, 157, 307, 308, 313, 0, 
- 	315, 0, 316, 0, 317, 0, 318, 0, 
- 	319, 0, 320, 0, 322, 321, 322, 321, 
- 	323, 322, 322, 23, 337, 23, 351, 358, 
- 	322, 321, 324, 322, 321, 322, 325, 332, 
- 	321, 322, 326, 321, 322, 327, 321, 322, 
- 	328, 321, 322, 329, 321, 322, 330, 321, 
- 	322, 331, 321, 322, 22, 321, 322, 333, 
- 	321, 322, 334, 321, 322, 335, 321, 322, 
- 	336, 321, 322, 331, 321, 322, 338, 321, 
- 	322, 339, 321, 322, 340, 321, 322, 341, 
- 	321, 322, 342, 321, 322, 343, 321, 322, 
- 	344, 321, 322, 345, 321, 322, 346, 321, 
- 	322, 347, 321, 322, 348, 321, 322, 349, 
- 	321, 322, 350, 321, 322, 23, 321, 322, 
- 	352, 321, 353, 322, 321, 354, 322, 321, 
- 	322, 355, 321, 322, 356, 321, 357, 322, 
- 	321, 331, 322, 321, 322, 359, 321, 322, 
- 	360, 321, 322, 361, 321, 322, 362, 321, 
- 	322, 363, 321, 322, 364, 321, 322, 365, 
- 	22, 321, 322, 366, 321, 322, 367, 321, 
- 	322, 368, 321, 322, 369, 321, 322, 370, 
- 	321, 371, 322, 321, 372, 322, 321, 373, 
- 	322, 321, 331, 322, 321, 375, 0, 23, 
- 	0, 0, 0
- };
- 
- static const unsigned char _lexer_trans_actions[] = {
- 	29, 0, 54, 0, 5, 1, 0, 29, 
- 	1, 29, 29, 29, 29, 29, 29, 29, 
- 	29, 35, 0, 43, 0, 43, 0, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 144, 
- 	57, 54, 0, 84, 54, 0, 81, 81, 
- 	0, 0, 0, 54, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	21, 0, 63, 130, 31, 60, 57, 31, 
- 	63, 57, 63, 63, 63, 63, 63, 63, 
- 	63, 63, 66, 31, 43, 29, 54, 0, 
- 	5, 1, 0, 29, 1, 29, 29, 29, 
- 	29, 29, 29, 29, 29, 35, 0, 43, 
- 	0, 43, 0, 43, 139, 48, 9, 106, 
- 	11, 0, 134, 45, 45, 45, 3, 122, 
- 	33, 33, 33, 0, 122, 33, 33, 33, 
- 	0, 122, 33, 0, 33, 0, 102, 7, 
- 	7, 43, 54, 0, 0, 43, 114, 25, 
- 	0, 54, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 149, 126, 57, 110, 23, 0, 43, 
- 	43, 43, 43, 0, 27, 118, 27, 27, 
- 	51, 27, 0, 54, 0, 1, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 144, 57, 
- 	54, 0, 84, 54, 0, 72, 33, 84, 
- 	72, 84, 84, 84, 84, 84, 84, 84, 
- 	0, 0, 0, 54, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	15, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 15, 0, 54, 15, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	0, 54, 0, 0, 54, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 15, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 54, 0, 0, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 144, 57, 54, 
- 	0, 84, 54, 0, 78, 33, 84, 78, 
- 	84, 84, 84, 84, 84, 84, 84, 0, 
- 	0, 0, 54, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 19, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 19, 0, 54, 19, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 0, 
- 	54, 0, 0, 54, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 144, 57, 
- 	54, 0, 84, 54, 0, 75, 33, 84, 
- 	75, 84, 84, 84, 84, 84, 84, 84, 
- 	84, 0, 0, 0, 54, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 17, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 17, 0, 54, 17, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 0, 54, 0, 0, 54, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 0, 54, 0, 0, 
- 	54, 0, 54, 0, 0, 54, 0, 0, 
- 	0, 54, 0, 0, 54, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 17, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 54, 0, 0, 0, 43, 0, 0, 
- 	0, 43, 54, 37, 37, 87, 37, 37, 
- 	43, 0, 39, 0, 43, 0, 0, 54, 
- 	0, 0, 39, 0, 0, 96, 54, 0, 
- 	93, 90, 41, 96, 90, 96, 96, 96, 
- 	96, 96, 96, 96, 96, 99, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 144, 57, 54, 0, 
- 	84, 54, 0, 69, 33, 69, 84, 84, 
- 	0, 0, 0, 54, 0, 54, 0, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 13, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 13, 0, 54, 
- 	0, 0, 0, 54, 0, 0, 54, 0, 
- 	54, 0, 0, 54, 0, 0, 0, 54, 
- 	0, 0, 54, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	13, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 43, 0, 
- 	43, 0, 0
- };
- 
- static const unsigned char _lexer_eof_actions[] = {
- 	0, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43
- };
- 
- static const int lexer_start = 1;
- static const int lexer_first_final = 376;
- static const int lexer_error = 0;
- 
- static const int lexer_en_main = 1;
- 
- 
- #line 258 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/tr.c.rl"
- 
- static VALUE 
- unindent(VALUE con, int start_col)
- {
-   VALUE re;
-   // Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters
-   char pat[32]; 
-   snprintf(pat, 32, "^[\t ]{0,%d}", start_col); 
-   re = rb_reg_regcomp(rb_str_new2(pat));
-   rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2(""));
- 
-   return Qnil;
- 
- }
- 
- static void 
- store_kw_con(VALUE listener, const char * event_name, 
-              const char * keyword_at, size_t keyword_length, 
-              const char * at,         size_t length, 
-              int current_line)
- {
-   VALUE con = Qnil, kw = Qnil;
-   kw = ENCODED_STR_NEW(keyword_at, keyword_length);
-   con = ENCODED_STR_NEW(at, length);
-   rb_funcall(con, rb_intern("strip!"), 0);
-   rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); 
- }
- 
- static void
- store_multiline_kw_con(VALUE listener, const char * event_name,
-                       const char * keyword_at, size_t keyword_length,
-                       const char * at,         size_t length,
-                       int current_line, int start_col)
- {
-   VALUE split;
-   VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil;
- 
-   kw = ENCODED_STR_NEW(keyword_at, keyword_length);
-   con = ENCODED_STR_NEW(at, length);
- 
-   unindent(con, start_col);
-   
-   split = rb_str_split(con, "\n");
- 
-   name = rb_funcall(split, rb_intern("shift"), 0);
-   desc = rb_ary_join(split, rb_str_new2( "\n" ));
- 
-   if( name == Qnil ) 
-   {
-     name = rb_str_new2("");
-   }
-   if( rb_funcall(desc, rb_intern("size"), 0) == 0) 
-   {
-     desc = rb_str_new2("");
-   }
-   rb_funcall(name, rb_intern("strip!"), 0);
-   rb_funcall(desc, rb_intern("rstrip!"), 0);
-   rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); 
- }
- 
- static void 
- store_attr(VALUE listener, const char * attr_type,
-            const char * at, size_t length, 
-            int line)
- {
-   VALUE val = ENCODED_STR_NEW(at, length);
-   rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line));
- }
- static void 
- store_docstring_content(VALUE listener, 
-           int start_col, 
-           const char *type_at, size_t type_length,
-           const char *at, size_t length, 
-           int current_line)
- {
-   VALUE re2;
-   VALUE unescape_escaped_quotes;
-   VALUE con = ENCODED_STR_NEW(at, length);
-   VALUE con_type = ENCODED_STR_NEW(type_at, type_length);
- 
-   unindent(con, start_col);
- 
-   re2 = rb_reg_regcomp(rb_str_new2("\r\\Z"));
-   unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\""));
-   rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2(""));
-   rb_funcall(con_type, rb_intern("strip!"), 0);
-   rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\""));
-   rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line));
- }
- static void 
- raise_lexer_error(const char * at, int line)
- { 
-   rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at);
- }
- 
- static void lexer_init(lexer_state *lexer) {
-   lexer->content_start = 0;
-   lexer->content_end = 0;
-   lexer->content_len = 0;
-   lexer->docstring_content_type_start = 0;
-   lexer->docstring_content_type_end = 0;
-   lexer->mark = 0;
-   lexer->keyword_start = 0;
-   lexer->keyword_end = 0;
-   lexer->next_keyword_start = 0;
-   lexer->line_number = 1;
-   lexer->last_newline = 0;
-   lexer->final_newline = 0;
-   lexer->start_col = 0;
- }
- 
- static VALUE CLexer_alloc(VALUE klass)
- {
-   VALUE obj;
-   lexer_state *lxr = ALLOC(lexer_state);
-   lexer_init(lxr);
- 
-   obj = Data_Wrap_Struct(klass, NULL, -1, lxr);
- 
-   return obj;
- }
- 
- static VALUE CLexer_init(VALUE self, VALUE listener)
- {
-   lexer_state *lxr; 
-   rb_iv_set(self, "@listener", listener);
-   
-   lxr = NULL;
-   DATA_GET(self, lexer_state, lxr);
-   lexer_init(lxr);
-   
-   return self;
- }
- 
- static VALUE CLexer_scan(VALUE self, VALUE input)
- {
-   VALUE input_copy;
-   char *data;
-   size_t len;
-   VALUE listener = rb_iv_get(self, "@listener");
- 
-   lexer_state *lexer;
-   lexer = NULL;
-   DATA_GET(self, lexer_state, lexer);
- 
-   input_copy = rb_str_dup(input);
- 
-   rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%"));
-   data = RSTRING_PTR(input_copy);
-   len = RSTRING_LEN(input_copy);
-   
-   if (len == 0) { 
-     rb_raise(rb_eGherkinLexingError, "No content to lex.");
-   } else {
- 
-     const char *p, *pe, *eof;
-     int cs = 0;
-     
-     VALUE current_row = Qnil;
- 
-     p = data;
-     pe = data + len;
-     eof = pe;
-     
-     assert(*pe == '\0' && "pointer does not end on NULL");
-     
-     
- #line 951 "ext/gherkin_lexer_tr/gherkin_lexer_tr.c"
- 	{
- 	cs = lexer_start;
- 	}
- 
- #line 425 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/tr.c.rl"
-     
- #line 958 "ext/gherkin_lexer_tr/gherkin_lexer_tr.c"
- 	{
- 	int _klen;
- 	unsigned int _trans;
- 	const char *_acts;
- 	unsigned int _nacts;
- 	const char *_keys;
- 
- 	if ( p == pe )
- 		goto _test_eof;
- 	if ( cs == 0 )
- 		goto _out;
- _resume:
- 	_keys = _lexer_trans_keys + _lexer_key_offsets[cs];
- 	_trans = _lexer_index_offsets[cs];
- 
- 	_klen = _lexer_single_lengths[cs];
- 	if ( _klen > 0 ) {
- 		const char *_lower = _keys;
- 		const char *_mid;
- 		const char *_upper = _keys + _klen - 1;
- 		while (1) {
- 			if ( _upper < _lower )
- 				break;
- 
- 			_mid = _lower + ((_upper-_lower) >> 1);
- 			if ( (*p) < *_mid )
- 				_upper = _mid - 1;
- 			else if ( (*p) > *_mid )
- 				_lower = _mid + 1;
- 			else {
- 				_trans += (_mid - _keys);
- 				goto _match;
- 			}
- 		}
- 		_keys += _klen;
- 		_trans += _klen;
- 	}
- 
- 	_klen = _lexer_range_lengths[cs];
- 	if ( _klen > 0 ) {
- 		const char *_lower = _keys;
- 		const char *_mid;
- 		const char *_upper = _keys + (_klen<<1) - 2;
- 		while (1) {
- 			if ( _upper < _lower )
- 				break;
- 
- 			_mid = _lower + (((_upper-_lower) >> 1) & ~1);
- 			if ( (*p) < _mid[0] )
- 				_upper = _mid - 2;
- 			else if ( (*p) > _mid[1] )
- 				_lower = _mid + 2;
- 			else {
- 				_trans += ((_mid - _keys)>>1);
- 				goto _match;
- 			}
- 		}
- 		_trans += _klen;
- 	}
- 
- _match:
- 	cs = _lexer_trans_targs[_trans];
- 
- 	if ( _lexer_trans_actions[_trans] == 0 )
- 		goto _again;
- 
- 	_acts = _lexer_actions + _lexer_trans_actions[_trans];
- 	_nacts = (unsigned int) *_acts++;
- 	while ( _nacts-- > 0 )
- 	{
- 		switch ( *_acts++ )
- 		{
- 	case 0:
- #line 83 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/tr.c.rl"
- 	{
- 		MARK(content_start, p);
-     lexer->current_line = lexer->line_number;
-     lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2;
-   }
- 	break;
- 	case 1:
- #line 89 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/tr.c.rl"
- 	{
-     MARK(content_start, p);
-   }
- 	break;
- 	case 2:
- #line 93 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/tr.c.rl"
- 	{
-     lexer->current_line = lexer->line_number;
-     lexer->start_col = p - data - lexer->last_newline;
-   }
- 	break;
- 	case 3:
- #line 98 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/tr.c.rl"
- 	{
-     int len = LEN(content_start, PTR_TO(final_newline));
-     int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end));
- 
-     if (len < 0) len = 0;
-     if (type_len < 0) len = 0;
- 
-     store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line);
-   }
- 	break;
- 	case 4:
- #line 108 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/tr.c.rl"
- 	{ 
-     MARK(docstring_content_type_start, p);
-   }
- 	break;
- 	case 5:
- #line 112 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/tr.c.rl"
- 	{ 
-     MARK(docstring_content_type_end, p);
-   }
- 	break;
- 	case 6:
- #line 116 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/tr.c.rl"
- 	{
-     STORE_KW_END_CON(feature);
-   }
- 	break;
- 	case 7:
- #line 120 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/tr.c.rl"
- 	{
-     STORE_KW_END_CON(background);
-   }
- 	break;
- 	case 8:
- #line 124 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/tr.c.rl"
- 	{
-     STORE_KW_END_CON(scenario);
-   }
- 	break;
- 	case 9:
- #line 128 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/tr.c.rl"
- 	{
-     STORE_KW_END_CON(scenario_outline);
-   }
- 	break;
- 	case 10:
- #line 132 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/tr.c.rl"
- 	{
-     STORE_KW_END_CON(examples);
-   }
- 	break;
- 	case 11:
- #line 136 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/tr.c.rl"
- 	{
-     store_kw_con(listener, "step",
-       PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-       PTR_TO(content_start), LEN(content_start, p), 
-       lexer->current_line);
-   }
- 	break;
- 	case 12:
- #line 143 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/tr.c.rl"
- 	{
-     STORE_ATTR(comment);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 13:
- #line 148 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/tr.c.rl"
- 	{
-     STORE_ATTR(tag);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 14:
- #line 153 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/tr.c.rl"
- 	{
-     lexer->line_number += 1;
-     MARK(final_newline, p);
-   }
- 	break;
- 	case 15:
- #line 158 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/tr.c.rl"
- 	{
-     MARK(last_newline, p + 1);
-   }
- 	break;
- 	case 16:
- #line 162 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/tr.c.rl"
- 	{
-     if (lexer->mark == 0) {
-       MARK(mark, p);
-     }
-   }
- 	break;
- 	case 17:
- #line 168 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/tr.c.rl"
- 	{
-     MARK(keyword_end, p);
-     MARK(keyword_start, PTR_TO(mark));
-     MARK(content_start, p + 1);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 18:
- #line 175 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/tr.c.rl"
- 	{
-     MARK(content_end, p);
-   }
- 	break;
- 	case 19:
- #line 179 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/tr.c.rl"
- 	{
-     p = p - 1;
-     lexer->current_line = lexer->line_number;
-     current_row = rb_ary_new();
-   }
- 	break;
- 	case 20:
- #line 185 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/tr.c.rl"
- 	{
- 		MARK(content_start, p);
-   }
- 	break;
- 	case 21:
- #line 189 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/tr.c.rl"
- 	{
-     VALUE re_pipe, re_newline, re_backslash;
-     VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
-     rb_funcall(con, rb_intern("strip!"), 0);
-     re_pipe      = rb_reg_regcomp(rb_str_new2("\\\\\\|"));
-     re_newline   = rb_reg_regcomp(rb_str_new2("\\\\n"));
-     re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_pipe,      rb_str_new2("|"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_newline,   rb_str_new2("\n"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\"));
- 
-     rb_ary_push(current_row, con);
-   }
- 	break;
- 	case 22:
- #line 203 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/tr.c.rl"
- 	{
-     rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
-   }
- 	break;
- 	case 23:
- #line 207 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/tr.c.rl"
- 	{
-     int line;
-     if (cs < lexer_first_final) {
-       size_t count = 0;
-       VALUE newstr_val;
-       char *newstr;
-       int newstr_count = 0;        
-       size_t len;
-       const char *buff;
-       if (lexer->last_newline != 0) {
-         len = LEN(last_newline, eof);
-         buff = PTR_TO(last_newline);
-       } else {
-         len = strlen(data);
-         buff = data;
-       }
- 
-       // Allocate as a ruby string so that it gets cleaned up by GC
-       newstr_val = rb_str_new(buff, len);
-       newstr = RSTRING_PTR(newstr_val);
- 
- 
-       for (count = 0; count < len; count++) {
-         if(buff[count] == 10) {
-           newstr[newstr_count] = '\0'; // terminate new string at first newline found
-           break;
-         } else {
-           if (buff[count] == '%') {
-             newstr[newstr_count++] = buff[count];
-             newstr[newstr_count] = buff[count];
-           } else {
-             newstr[newstr_count] = buff[count];
-           }
-         }
-         newstr_count++;
-       }
- 
-       line = lexer->line_number;
-       lexer_init(lexer); // Re-initialize so we can scan again with the same lexer
-       raise_lexer_error(newstr, line);
-     } else {
-       rb_funcall(listener, rb_intern("eof"), 0);
-     }
-   }
- 	break;
- #line 1248 "ext/gherkin_lexer_tr/gherkin_lexer_tr.c"
- 		}
- 	}
- 
- _again:
- 	if ( cs == 0 )
- 		goto _out;
- 	if ( ++p != pe )
- 		goto _resume;
- 	_test_eof: {}
- 	if ( p == eof )
- 	{
- 	const char *__acts = _lexer_actions + _lexer_eof_actions[cs];
- 	unsigned int __nacts = (unsigned int) *__acts++;
- 	while ( __nacts-- > 0 ) {
- 		switch ( *__acts++ ) {
- 	case 23:
- #line 207 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/tr.c.rl"
- 	{
-     int line;
-     if (cs < lexer_first_final) {
-       size_t count = 0;
-       VALUE newstr_val;
-       char *newstr;
-       int newstr_count = 0;        
-       size_t len;
-       const char *buff;
-       if (lexer->last_newline != 0) {
-         len = LEN(last_newline, eof);
-         buff = PTR_TO(last_newline);
-       } else {
-         len = strlen(data);
-         buff = data;
-       }
- 
-       // Allocate as a ruby string so that it gets cleaned up by GC
-       newstr_val = rb_str_new(buff, len);
-       newstr = RSTRING_PTR(newstr_val);
- 
- 
-       for (count = 0; count < len; count++) {
-         if(buff[count] == 10) {
-           newstr[newstr_count] = '\0'; // terminate new string at first newline found
-           break;
-         } else {
-           if (buff[count] == '%') {
-             newstr[newstr_count++] = buff[count];
-             newstr[newstr_count] = buff[count];
-           } else {
-             newstr[newstr_count] = buff[count];
-           }
-         }
-         newstr_count++;
-       }
- 
-       line = lexer->line_number;
-       lexer_init(lexer); // Re-initialize so we can scan again with the same lexer
-       raise_lexer_error(newstr, line);
-     } else {
-       rb_funcall(listener, rb_intern("eof"), 0);
-     }
-   }
- 	break;
- #line 1311 "ext/gherkin_lexer_tr/gherkin_lexer_tr.c"
- 		}
- 	}
- 	}
- 
- 	_out: {}
- 	}
- 
- #line 426 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/tr.c.rl"
- 
-     assert(p <= pe && "data overflow after parsing execute");
-     assert(lexer->content_start <= len && "content starts after data end");
-     assert(lexer->mark < len && "mark is after data end");
-     
-     // Reset lexer by re-initializing the whole thing
-     lexer_init(lexer);
- 
-     if (cs == lexer_error) {
-       rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails.");
-     } else {
-       return Qtrue;
-     }
-   }
- }
- 
- void Init_gherkin_lexer_tr()
- {
-   mGherkin = rb_define_module("Gherkin");
-   mGherkinLexer = rb_define_module_under(mGherkin, "Lexer");
-   rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError"));
- 
-   mCLexer = rb_define_module_under(mGherkin, "CLexer");
-   cI18nLexer = rb_define_class_under(mCLexer, "Tr", rb_cObject);
-   rb_define_alloc_func(cI18nLexer, CLexer_alloc);
-   rb_define_method(cI18nLexer, "initialize", CLexer_init, 1);
-   rb_define_method(cI18nLexer, "scan", CLexer_scan, 1);
- }
- 
 -#line 1 "ragel/i18n/tr.c.rl"
 -#include <assert.h>
 -#include <ruby.h>
 -
 -#if defined(_WIN32)
 -#include <stddef.h>
 -#endif
 -
 -#ifdef HAVE_RUBY_RE_H
 -#include <ruby/re.h>
 -#else
 -#include <re.h>
 -#endif
 -
 -#ifdef HAVE_RUBY_ENCODING_H
 -#include <ruby/encoding.h>
 -#define ENCODED_STR_NEW(ptr, len) \
 -    rb_enc_str_new(ptr, len, rb_utf8_encoding())
 -#else
 -#define ENCODED_STR_NEW(ptr, len) \
 -    rb_str_new(ptr, len)
 -#endif
 -
 -#ifndef RSTRING_PTR
 -#define RSTRING_PTR(s) (RSTRING(s)->ptr)
 -#endif
 -
 -#ifndef RSTRING_LEN
 -#define RSTRING_LEN(s) (RSTRING(s)->len)
 -#endif
 -
 -#define DATA_GET(FROM, TYPE, NAME) \
 -  Data_Get_Struct(FROM, TYPE, NAME); \
 -  if (NAME == NULL) { \
 -    rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \
 -  }
 - 
 -typedef struct lexer_state {
 -  int content_len;
 -  int line_number;
 -  int current_line;
 -  int start_col;
 -  size_t mark;
 -  size_t keyword_start;
 -  size_t keyword_end;
 -  size_t next_keyword_start;
 -  size_t content_start;
 -  size_t content_end;
 -  size_t docstring_content_type_start;
 -  size_t docstring_content_type_end;
 -  size_t query_start;
 -  size_t last_newline;
 -  size_t final_newline;
 -} lexer_state;
 -
 -static VALUE mGherkin;
 -static VALUE mGherkinLexer;
 -static VALUE mCLexer;
 -static VALUE cI18nLexer;
 -static VALUE rb_eGherkinLexingError;
 -
 -#define LEN(AT, P) (P - data - lexer->AT)
 -#define MARK(M, P) (lexer->M = (P) - data)
 -#define PTR_TO(P) (data + lexer->P)
 -
 -#define STORE_KW_END_CON(EVENT) \
 -  store_multiline_kw_con(listener, # EVENT, \
 -    PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \
 -    PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \
 -    lexer->current_line, lexer->start_col); \
 -    if (lexer->content_end != 0) { \
 -      p = PTR_TO(content_end - 1); \
 -    } \
 -    lexer->content_end = 0
 -
 -#define STORE_ATTR(ATTR) \
 -    store_attr(listener, # ATTR, \
 -      PTR_TO(content_start), LEN(content_start, p), \
 -      lexer->line_number)
 -
 -
 -#line 254 "ragel/i18n/tr.c.rl"
 -
 -
 -/** Data **/
 -
 -#line 89 "ext/gherkin_lexer_tr/gherkin_lexer_tr.c"
 -static const char _lexer_actions[] = {
 -	0, 1, 0, 1, 1, 1, 2, 1, 
 -	3, 1, 4, 1, 5, 1, 6, 1, 
 -	7, 1, 8, 1, 9, 1, 10, 1, 
 -	11, 1, 12, 1, 13, 1, 16, 1, 
 -	17, 1, 18, 1, 19, 1, 20, 1, 
 -	21, 1, 22, 1, 23, 2, 1, 18, 
 -	2, 4, 5, 2, 13, 0, 2, 14, 
 -	15, 2, 17, 0, 2, 17, 2, 2, 
 -	17, 16, 2, 17, 19, 2, 18, 6, 
 -	2, 18, 7, 2, 18, 8, 2, 18, 
 -	9, 2, 18, 10, 2, 18, 16, 2, 
 -	20, 21, 2, 22, 0, 2, 22, 2, 
 -	2, 22, 16, 2, 22, 19, 3, 3, 
 -	14, 15, 3, 5, 14, 15, 3, 11, 
 -	14, 15, 3, 12, 14, 15, 3, 13, 
 -	14, 15, 3, 14, 15, 18, 3, 17, 
 -	0, 11, 3, 17, 14, 15, 4, 1, 
 -	14, 15, 18, 4, 4, 5, 14, 15, 
 -	4, 17, 0, 14, 15, 5, 17, 0, 
 -	11, 14, 15
 -};
 -
 -static const short _lexer_key_offsets[] = {
 -	0, 0, 20, 21, 23, 24, 25, 26, 
 -	27, 28, 29, 30, 31, 32, 39, 41, 
 -	43, 45, 47, 49, 51, 53, 55, 74, 
 -	93, 94, 95, 97, 99, 104, 109, 114, 
 -	119, 123, 127, 129, 130, 131, 132, 133, 
 -	134, 135, 136, 137, 138, 139, 140, 141, 
 -	142, 143, 144, 145, 147, 149, 154, 161, 
 -	166, 167, 168, 169, 170, 171, 172, 173, 
 -	174, 175, 176, 177, 178, 179, 180, 181, 
 -	182, 183, 184, 185, 186, 187, 188, 189, 
 -	190, 191, 192, 193, 194, 195, 211, 213, 
 -	215, 217, 219, 221, 223, 225, 227, 229, 
 -	231, 233, 235, 237, 239, 241, 243, 245, 
 -	247, 249, 251, 253, 255, 257, 259, 261, 
 -	263, 265, 267, 269, 271, 273, 275, 277, 
 -	279, 281, 283, 285, 287, 289, 291, 293, 
 -	295, 297, 299, 301, 303, 305, 307, 309, 
 -	311, 313, 315, 317, 319, 322, 324, 326, 
 -	328, 330, 332, 334, 336, 338, 340, 342, 
 -	343, 344, 345, 346, 347, 348, 349, 350, 
 -	351, 352, 353, 354, 356, 357, 358, 359, 
 -	360, 361, 362, 363, 364, 365, 366, 367, 
 -	368, 384, 386, 388, 390, 392, 394, 396, 
 -	398, 400, 402, 404, 406, 408, 410, 412, 
 -	414, 416, 418, 420, 422, 424, 426, 428, 
 -	430, 432, 434, 436, 438, 440, 442, 444, 
 -	446, 448, 450, 452, 454, 456, 458, 460, 
 -	462, 464, 466, 468, 470, 472, 474, 476, 
 -	478, 480, 482, 484, 486, 488, 490, 492, 
 -	494, 495, 496, 513, 515, 517, 519, 521, 
 -	523, 525, 527, 529, 531, 533, 535, 537, 
 -	539, 541, 543, 545, 547, 549, 551, 553, 
 -	555, 557, 559, 561, 563, 565, 567, 569, 
 -	571, 573, 575, 577, 579, 581, 583, 585, 
 -	587, 589, 591, 593, 595, 597, 599, 601, 
 -	603, 605, 607, 609, 611, 613, 615, 617, 
 -	619, 621, 623, 625, 627, 629, 631, 633, 
 -	635, 638, 640, 642, 644, 646, 648, 650, 
 -	652, 654, 656, 658, 659, 663, 669, 672, 
 -	674, 680, 699, 700, 701, 702, 703, 704, 
 -	705, 706, 707, 717, 719, 722, 724, 726, 
 -	728, 730, 732, 734, 736, 738, 740, 742, 
 -	744, 746, 748, 750, 752, 754, 756, 758, 
 -	760, 762, 764, 766, 768, 770, 772, 774, 
 -	776, 778, 780, 782, 784, 786, 788, 790, 
 -	792, 794, 796, 798, 800, 803, 805, 807, 
 -	809, 811, 813, 815, 817, 819, 821, 822, 
 -	823
 -};
 -
 -static const char _lexer_trans_keys[] = {
 -	-61, -17, 10, 32, 34, 35, 37, 42, 
 -	64, 65, 68, 69, 70, 71, 79, 83, 
 -	86, 124, 9, 13, -106, 114, 122, 110, 
 -	101, 107, 108, 101, 114, 58, 10, 10, 
 -	-61, 10, 32, 35, 124, 9, 13, -106, 
 -	10, 10, 122, 10, 101, 10, 108, 10, 
 -	108, 10, 105, 10, 107, 10, 58, -61, 
 -	10, 32, 34, 35, 37, 42, 64, 65, 
 -	68, 69, 70, 71, 79, 83, 86, 124, 
 -	9, 13, -61, 10, 32, 34, 35, 37, 
 -	42, 64, 65, 68, 69, 70, 71, 79, 
 -	83, 86, 124, 9, 13, 34, 34, 10, 
 -	13, 10, 13, 10, 32, 34, 9, 13, 
 -	10, 32, 34, 9, 13, 10, 32, 34, 
 -	9, 13, 10, 32, 34, 9, 13, 10, 
 -	32, 9, 13, 10, 32, 9, 13, 10, 
 -	13, 10, 95, 70, 69, 65, 84, 85, 
 -	82, 69, 95, 69, 78, 68, 95, 37, 
 -	32, 10, 13, 10, 13, 13, 32, 64, 
 -	9, 10, 9, 10, 13, 32, 64, 11, 
 -	12, 10, 32, 64, 9, 13, 109, 97, 
 -	105, 121, 101, 108, 105, 109, 32, 107, 
 -	105, -60, -97, 101, 114, 97, 107, 97, 
 -	116, 101, -61, -89, 109, 105, -59, -97, 
 -	58, 10, 10, -61, 10, 32, 35, 37, 
 -	42, 64, 65, 68, 69, 70, 79, 83, 
 -	86, 9, 13, -106, 10, 10, 122, 10, 
 -	101, 10, 108, 10, 108, 10, 105, 10, 
 -	107, 10, 58, 10, 95, 10, 70, 10, 
 -	69, 10, 65, 10, 84, 10, 85, 10, 
 -	82, 10, 69, 10, 95, 10, 69, 10, 
 -	78, 10, 68, 10, 95, 10, 37, 10, 
 -	32, 10, 109, 10, 97, 10, 105, 10, 
 -	121, 10, 101, 10, 108, 10, 105, 10, 
 -	109, 10, 32, 10, 107, 10, 105, -60, 
 -	10, -97, 10, 10, 101, 10, 114, 10, 
 -	97, 10, 107, 10, 97, 10, 116, 10, 
 -	32, 10, 122, 10, 97, 10, 109, 10, 
 -	97, 10, 110, 10, 101, 10, 110, 10, 
 -	97, 10, 114, 10, 121, 10, 111, 10, 
 -	32, 58, 10, 116, 10, 97, 10, 115, 
 -	10, 108, 10, 97, -60, 10, -97, 10, 
 -	-60, 10, -79, 10, 10, 101, 32, 122, 
 -	97, 109, 97, 110, 101, 110, 97, 114, 
 -	121, 111, 32, 58, 116, 97, 115, 108, 
 -	97, -60, -97, -60, -79, 58, 10, 10, 
 -	-61, 10, 32, 35, 37, 42, 64, 65, 
 -	68, 69, 70, 79, 83, 86, 9, 13, 
 -	-106, 10, 10, 122, 10, 101, 10, 108, 
 -	10, 108, 10, 105, 10, 107, 10, 58, 
 -	10, 95, 10, 70, 10, 69, 10, 65, 
 -	10, 84, 10, 85, 10, 82, 10, 69, 
 -	10, 95, 10, 69, 10, 78, 10, 68, 
 -	10, 95, 10, 37, 10, 32, 10, 109, 
 -	10, 97, 10, 105, 10, 121, 10, 101, 
 -	10, 108, 10, 105, 10, 109, 10, 32, 
 -	10, 107, 10, 105, -60, 10, -97, 10, 
 -	10, 101, 10, 114, 10, 97, 10, 107, 
 -	10, 97, 10, 116, 10, 32, 10, 122, 
 -	10, 97, 10, 109, 10, 97, 10, 110, 
 -	10, 101, 10, 110, 10, 97, 10, 114, 
 -	10, 121, 10, 111, 10, 101, 10, 10, 
 -	-61, 10, 32, 35, 37, 42, 64, 65, 
 -	68, 69, 70, 71, 79, 83, 86, 9, 
 -	13, -106, 10, 10, 122, 10, 101, 10, 
 -	108, 10, 108, 10, 105, 10, 107, 10, 
 -	58, 10, 95, 10, 70, 10, 69, 10, 
 -	65, 10, 84, 10, 85, 10, 82, 10, 
 -	69, 10, 95, 10, 69, 10, 78, 10, 
 -	68, 10, 95, 10, 37, 10, 32, 10, 
 -	109, 10, 97, 10, 105, 10, 121, 10, 
 -	101, 10, 108, 10, 105, 10, 109, 10, 
 -	32, 10, 107, 10, 105, -60, 10, -97, 
 -	10, 10, 101, 10, 114, 10, 97, 10, 
 -	107, 10, 97, 10, 116, 10, 101, -61, 
 -	10, -89, 10, 10, 109, 10, 105, -59, 
 -	10, -97, 10, 10, 32, 10, 122, 10, 
 -	97, 10, 109, 10, 97, 10, 110, 10, 
 -	101, 10, 110, 10, 97, 10, 114, 10, 
 -	121, 10, 111, 10, 32, 58, 10, 116, 
 -	10, 97, 10, 115, 10, 108, 10, 97, 
 -	-60, 10, -97, 10, -60, 10, -79, 10, 
 -	10, 101, 101, 32, 124, 9, 13, 10, 
 -	32, 92, 124, 9, 13, 10, 92, 124, 
 -	10, 92, 10, 32, 92, 124, 9, 13, 
 -	-61, 10, 32, 34, 35, 37, 42, 64, 
 -	65, 68, 69, 70, 71, 79, 83, 86, 
 -	124, 9, 13, 101, 108, 108, 105, 107, 
 -	58, 10, 10, -61, 10, 32, 35, 37, 
 -	64, 71, 83, 9, 13, -106, 10, 10, 
 -	114, 122, 10, 110, 10, 101, 10, 107, 
 -	10, 108, 10, 101, 10, 114, 10, 58, 
 -	10, 101, 10, 108, 10, 108, 10, 105, 
 -	10, 107, 10, 95, 10, 70, 10, 69, 
 -	10, 65, 10, 84, 10, 85, 10, 82, 
 -	10, 69, 10, 95, 10, 69, 10, 78, 
 -	10, 68, 10, 95, 10, 37, 10, 101, 
 -	-61, 10, -89, 10, 10, 109, 10, 105, 
 -	-59, 10, -97, 10, 10, 101, 10, 110, 
 -	10, 97, 10, 114, 10, 121, 10, 111, 
 -	10, 32, 58, 10, 116, 10, 97, 10, 
 -	115, 10, 108, 10, 97, -60, 10, -97, 
 -	10, -60, 10, -79, 10, -69, -65, 0
 -};
 -
 -static const char _lexer_single_lengths[] = {
 -	0, 18, 1, 2, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 5, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 17, 17, 
 -	1, 1, 2, 2, 3, 3, 3, 3, 
 -	2, 2, 2, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 2, 2, 3, 5, 3, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 14, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 3, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 2, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	14, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	1, 1, 15, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	3, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 1, 2, 4, 3, 2, 
 -	4, 17, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 8, 2, 3, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 3, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 1, 1, 
 -	0
 -};
 -
 -static const char _lexer_range_lengths[] = {
 -	0, 1, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 1, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 1, 1, 
 -	0, 0, 0, 0, 1, 1, 1, 1, 
 -	1, 1, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 1, 1, 1, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 1, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	1, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 1, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 1, 1, 0, 0, 
 -	1, 1, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 1, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0
 -};
 -
 -static const short _lexer_index_offsets[] = {
 -	0, 0, 20, 22, 25, 27, 29, 31, 
 -	33, 35, 37, 39, 41, 43, 50, 53, 
 -	56, 59, 62, 65, 68, 71, 74, 93, 
 -	112, 114, 116, 119, 122, 127, 132, 137, 
 -	142, 146, 150, 153, 155, 157, 159, 161, 
 -	163, 165, 167, 169, 171, 173, 175, 177, 
 -	179, 181, 183, 185, 188, 191, 196, 203, 
 -	208, 210, 212, 214, 216, 218, 220, 222, 
 -	224, 226, 228, 230, 232, 234, 236, 238, 
 -	240, 242, 244, 246, 248, 250, 252, 254, 
 -	256, 258, 260, 262, 264, 266, 282, 285, 
 -	288, 291, 294, 297, 300, 303, 306, 309, 
 -	312, 315, 318, 321, 324, 327, 330, 333, 
 -	336, 339, 342, 345, 348, 351, 354, 357, 
 -	360, 363, 366, 369, 372, 375, 378, 381, 
 -	384, 387, 390, 393, 396, 399, 402, 405, 
 -	408, 411, 414, 417, 420, 423, 426, 429, 
 -	432, 435, 438, 441, 444, 448, 451, 454, 
 -	457, 460, 463, 466, 469, 472, 475, 478, 
 -	480, 482, 484, 486, 488, 490, 492, 494, 
 -	496, 498, 500, 502, 505, 507, 509, 511, 
 -	513, 515, 517, 519, 521, 523, 525, 527, 
 -	529, 545, 548, 551, 554, 557, 560, 563, 
 -	566, 569, 572, 575, 578, 581, 584, 587, 
 -	590, 593, 596, 599, 602, 605, 608, 611, 
 -	614, 617, 620, 623, 626, 629, 632, 635, 
 -	638, 641, 644, 647, 650, 653, 656, 659, 
 -	662, 665, 668, 671, 674, 677, 680, 683, 
 -	686, 689, 692, 695, 698, 701, 704, 707, 
 -	710, 712, 714, 731, 734, 737, 740, 743, 
 -	746, 749, 752, 755, 758, 761, 764, 767, 
 -	770, 773, 776, 779, 782, 785, 788, 791, 
 -	794, 797, 800, 803, 806, 809, 812, 815, 
 -	818, 821, 824, 827, 830, 833, 836, 839, 
 -	842, 845, 848, 851, 854, 857, 860, 863, 
 -	866, 869, 872, 875, 878, 881, 884, 887, 
 -	890, 893, 896, 899, 902, 905, 908, 911, 
 -	914, 918, 921, 924, 927, 930, 933, 936, 
 -	939, 942, 945, 948, 950, 954, 960, 964, 
 -	967, 973, 992, 994, 996, 998, 1000, 1002, 
 -	1004, 1006, 1008, 1018, 1021, 1025, 1028, 1031, 
 -	1034, 1037, 1040, 1043, 1046, 1049, 1052, 1055, 
 -	1058, 1061, 1064, 1067, 1070, 1073, 1076, 1079, 
 -	1082, 1085, 1088, 1091, 1094, 1097, 1100, 1103, 
 -	1106, 1109, 1112, 1115, 1118, 1121, 1124, 1127, 
 -	1130, 1133, 1136, 1139, 1142, 1146, 1149, 1152, 
 -	1155, 1158, 1161, 1164, 1167, 1170, 1173, 1175, 
 -	1177
 -};
 -
 -static const short _lexer_trans_targs[] = {
 -	2, 374, 23, 23, 24, 34, 36, 50, 
 -	53, 56, 58, 67, 71, 75, 151, 157, 
 -	307, 308, 23, 0, 3, 0, 4, 314, 
 -	0, 5, 0, 6, 0, 7, 0, 8, 
 -	0, 9, 0, 10, 0, 11, 0, 13, 
 -	12, 13, 12, 14, 13, 13, 23, 23, 
 -	13, 12, 15, 13, 12, 13, 16, 12, 
 -	13, 17, 12, 13, 18, 12, 13, 19, 
 -	12, 13, 20, 12, 13, 21, 12, 13, 
 -	22, 12, 2, 23, 23, 24, 34, 36, 
 -	50, 53, 56, 58, 67, 71, 75, 151, 
 -	157, 307, 308, 23, 0, 2, 23, 23, 
 -	24, 34, 36, 50, 53, 56, 58, 67, 
 -	71, 75, 151, 157, 307, 308, 23, 0, 
 -	25, 0, 26, 0, 28, 27, 27, 28, 
 -	27, 27, 29, 29, 30, 29, 29, 29, 
 -	29, 30, 29, 29, 29, 29, 31, 29, 
 -	29, 29, 29, 32, 29, 29, 23, 33, 
 -	33, 0, 23, 33, 33, 0, 23, 35, 
 -	34, 23, 0, 37, 0, 38, 0, 39, 
 -	0, 40, 0, 41, 0, 42, 0, 43, 
 -	0, 44, 0, 45, 0, 46, 0, 47, 
 -	0, 48, 0, 49, 0, 376, 0, 51, 
 -	0, 23, 35, 52, 23, 35, 52, 0, 
 -	0, 0, 0, 54, 55, 23, 55, 55, 
 -	53, 54, 54, 23, 55, 53, 55, 0, 
 -	57, 0, 50, 0, 59, 0, 60, 0, 
 -	61, 0, 62, 0, 63, 0, 64, 0, 
 -	65, 0, 66, 0, 50, 0, 68, 0, 
 -	69, 0, 70, 0, 64, 0, 72, 0, 
 -	73, 0, 74, 0, 50, 0, 76, 0, 
 -	77, 0, 78, 0, 79, 0, 80, 0, 
 -	81, 0, 82, 0, 83, 0, 85, 84, 
 -	85, 84, 86, 85, 85, 23, 94, 108, 
 -	23, 109, 111, 120, 124, 128, 134, 150, 
 -	85, 84, 87, 85, 84, 85, 88, 84, 
 -	85, 89, 84, 85, 90, 84, 85, 91, 
 -	84, 85, 92, 84, 85, 93, 84, 85, 
 -	22, 84, 85, 95, 84, 85, 96, 84, 
 -	85, 97, 84, 85, 98, 84, 85, 99, 
 -	84, 85, 100, 84, 85, 101, 84, 85, 
 -	102, 84, 85, 103, 84, 85, 104, 84, 
 -	85, 105, 84, 85, 106, 84, 85, 107, 
 -	84, 85, 23, 84, 85, 22, 84, 85, 
 -	110, 84, 85, 108, 84, 85, 112, 84, 
 -	85, 113, 84, 85, 114, 84, 85, 115, 
 -	84, 85, 116, 84, 85, 117, 84, 85, 
 -	118, 84, 85, 119, 84, 85, 108, 84, 
 -	121, 85, 84, 122, 85, 84, 85, 123, 
 -	84, 85, 117, 84, 85, 125, 84, 85, 
 -	126, 84, 85, 127, 84, 85, 108, 84, 
 -	85, 129, 84, 85, 130, 84, 85, 131, 
 -	84, 85, 132, 84, 85, 133, 84, 85, 
 -	108, 84, 85, 135, 84, 85, 136, 84, 
 -	85, 137, 84, 85, 138, 84, 85, 139, 
 -	84, 85, 140, 84, 85, 141, 22, 84, 
 -	85, 142, 84, 85, 143, 84, 85, 144, 
 -	84, 85, 145, 84, 85, 146, 84, 147, 
 -	85, 84, 148, 85, 84, 149, 85, 84, 
 -	93, 85, 84, 85, 108, 84, 152, 0, 
 -	153, 0, 154, 0, 155, 0, 156, 0, 
 -	50, 0, 158, 0, 159, 0, 160, 0, 
 -	161, 0, 162, 0, 163, 0, 164, 232, 
 -	0, 165, 0, 166, 0, 167, 0, 168, 
 -	0, 169, 0, 170, 0, 171, 0, 172, 
 -	0, 173, 0, 174, 0, 176, 175, 176, 
 -	175, 177, 176, 176, 23, 185, 199, 23, 
 -	200, 202, 211, 215, 219, 225, 231, 176, 
 -	175, 178, 176, 175, 176, 179, 175, 176, 
 -	180, 175, 176, 181, 175, 176, 182, 175, 
 -	176, 183, 175, 176, 184, 175, 176, 22, 
 -	175, 176, 186, 175, 176, 187, 175, 176, 
 -	188, 175, 176, 189, 175, 176, 190, 175, 
 -	176, 191, 175, 176, 192, 175, 176, 193, 
 -	175, 176, 194, 175, 176, 195, 175, 176, 
 -	196, 175, 176, 197, 175, 176, 198, 175, 
 -	176, 23, 175, 176, 22, 175, 176, 201, 
 -	175, 176, 199, 175, 176, 203, 175, 176, 
 -	204, 175, 176, 205, 175, 176, 206, 175, 
 -	176, 207, 175, 176, 208, 175, 176, 209, 
 -	175, 176, 210, 175, 176, 199, 175, 212, 
 -	176, 175, 213, 176, 175, 176, 214, 175, 
 -	176, 208, 175, 176, 216, 175, 176, 217, 
 -	175, 176, 218, 175, 176, 199, 175, 176, 
 -	220, 175, 176, 221, 175, 176, 222, 175, 
 -	176, 223, 175, 176, 224, 175, 176, 199, 
 -	175, 176, 226, 175, 176, 227, 175, 176, 
 -	228, 175, 176, 229, 175, 176, 230, 175, 
 -	176, 184, 175, 176, 199, 175, 234, 233, 
 -	234, 233, 235, 234, 234, 23, 243, 257, 
 -	23, 258, 260, 269, 273, 277, 284, 290, 
 -	306, 234, 233, 236, 234, 233, 234, 237, 
 -	233, 234, 238, 233, 234, 239, 233, 234, 
 -	240, 233, 234, 241, 233, 234, 242, 233, 
 -	234, 22, 233, 234, 244, 233, 234, 245, 
 -	233, 234, 246, 233, 234, 247, 233, 234, 
 -	248, 233, 234, 249, 233, 234, 250, 233, 
 -	234, 251, 233, 234, 252, 233, 234, 253, 
 -	233, 234, 254, 233, 234, 255, 233, 234, 
 -	256, 233, 234, 23, 233, 234, 22, 233, 
 -	234, 259, 233, 234, 257, 233, 234, 261, 
 -	233, 234, 262, 233, 234, 263, 233, 234, 
 -	264, 233, 234, 265, 233, 234, 266, 233, 
 -	234, 267, 233, 234, 268, 233, 234, 257, 
 -	233, 270, 234, 233, 271, 234, 233, 234, 
 -	272, 233, 234, 266, 233, 234, 274, 233, 
 -	234, 275, 233, 234, 276, 233, 234, 257, 
 -	233, 234, 278, 233, 279, 234, 233, 280, 
 -	234, 233, 234, 281, 233, 234, 282, 233, 
 -	283, 234, 233, 242, 234, 233, 234, 285, 
 -	233, 234, 286, 233, 234, 287, 233, 234, 
 -	288, 233, 234, 289, 233, 234, 257, 233, 
 -	234, 291, 233, 234, 292, 233, 234, 293, 
 -	233, 234, 294, 233, 234, 295, 233, 234, 
 -	296, 233, 234, 297, 22, 233, 234, 298, 
 -	233, 234, 299, 233, 234, 300, 233, 234, 
 -	301, 233, 234, 302, 233, 303, 234, 233, 
 -	304, 234, 233, 305, 234, 233, 242, 234, 
 -	233, 234, 257, 233, 50, 0, 308, 309, 
 -	308, 0, 313, 312, 311, 309, 312, 310, 
 -	0, 311, 309, 310, 0, 311, 310, 313, 
 -	312, 311, 309, 312, 310, 2, 313, 313, 
 -	24, 34, 36, 50, 53, 56, 58, 67, 
 -	71, 75, 151, 157, 307, 308, 313, 0, 
 -	315, 0, 316, 0, 317, 0, 318, 0, 
 -	319, 0, 320, 0, 322, 321, 322, 321, 
 -	323, 322, 322, 23, 337, 23, 351, 358, 
 -	322, 321, 324, 322, 321, 322, 325, 332, 
 -	321, 322, 326, 321, 322, 327, 321, 322, 
 -	328, 321, 322, 329, 321, 322, 330, 321, 
 -	322, 331, 321, 322, 22, 321, 322, 333, 
 -	321, 322, 334, 321, 322, 335, 321, 322, 
 -	336, 321, 322, 331, 321, 322, 338, 321, 
 -	322, 339, 321, 322, 340, 321, 322, 341, 
 -	321, 322, 342, 321, 322, 343, 321, 322, 
 -	344, 321, 322, 345, 321, 322, 346, 321, 
 -	322, 347, 321, 322, 348, 321, 322, 349, 
 -	321, 322, 350, 321, 322, 23, 321, 322, 
 -	352, 321, 353, 322, 321, 354, 322, 321, 
 -	322, 355, 321, 322, 356, 321, 357, 322, 
 -	321, 331, 322, 321, 322, 359, 321, 322, 
 -	360, 321, 322, 361, 321, 322, 362, 321, 
 -	322, 363, 321, 322, 364, 321, 322, 365, 
 -	22, 321, 322, 366, 321, 322, 367, 321, 
 -	322, 368, 321, 322, 369, 321, 322, 370, 
 -	321, 371, 322, 321, 372, 322, 321, 373, 
 -	322, 321, 331, 322, 321, 375, 0, 23, 
 -	0, 0, 0
 -};
 -
 -static const unsigned char _lexer_trans_actions[] = {
 -	29, 0, 54, 0, 5, 1, 0, 29, 
 -	1, 29, 29, 29, 29, 29, 29, 29, 
 -	29, 35, 0, 43, 0, 43, 0, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 144, 
 -	57, 54, 0, 84, 54, 0, 81, 81, 
 -	0, 0, 0, 54, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	21, 0, 63, 130, 31, 60, 57, 31, 
 -	63, 57, 63, 63, 63, 63, 63, 63, 
 -	63, 63, 66, 31, 43, 29, 54, 0, 
 -	5, 1, 0, 29, 1, 29, 29, 29, 
 -	29, 29, 29, 29, 29, 35, 0, 43, 
 -	0, 43, 0, 43, 139, 48, 9, 106, 
 -	11, 0, 134, 45, 45, 45, 3, 122, 
 -	33, 33, 33, 0, 122, 33, 33, 33, 
 -	0, 122, 33, 0, 33, 0, 102, 7, 
 -	7, 43, 54, 0, 0, 43, 114, 25, 
 -	0, 54, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 149, 126, 57, 110, 23, 0, 43, 
 -	43, 43, 43, 0, 27, 118, 27, 27, 
 -	51, 27, 0, 54, 0, 1, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 144, 57, 
 -	54, 0, 84, 54, 0, 72, 33, 84, 
 -	72, 84, 84, 84, 84, 84, 84, 84, 
 -	0, 0, 0, 54, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	15, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 15, 0, 54, 15, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	0, 54, 0, 0, 54, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 15, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 54, 0, 0, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 144, 57, 54, 
 -	0, 84, 54, 0, 78, 33, 84, 78, 
 -	84, 84, 84, 84, 84, 84, 84, 0, 
 -	0, 0, 54, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 19, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 19, 0, 54, 19, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 0, 
 -	54, 0, 0, 54, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 144, 57, 
 -	54, 0, 84, 54, 0, 75, 33, 84, 
 -	75, 84, 84, 84, 84, 84, 84, 84, 
 -	84, 0, 0, 0, 54, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 17, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 17, 0, 54, 17, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 0, 54, 0, 0, 54, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 0, 54, 0, 0, 
 -	54, 0, 54, 0, 0, 54, 0, 0, 
 -	0, 54, 0, 0, 54, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 17, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 54, 0, 0, 0, 43, 0, 0, 
 -	0, 43, 54, 37, 37, 87, 37, 37, 
 -	43, 0, 39, 0, 43, 0, 0, 54, 
 -	0, 0, 39, 0, 0, 96, 54, 0, 
 -	93, 90, 41, 96, 90, 96, 96, 96, 
 -	96, 96, 96, 96, 96, 99, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 144, 57, 54, 0, 
 -	84, 54, 0, 69, 33, 69, 84, 84, 
 -	0, 0, 0, 54, 0, 54, 0, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 13, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 13, 0, 54, 
 -	0, 0, 0, 54, 0, 0, 54, 0, 
 -	54, 0, 0, 54, 0, 0, 0, 54, 
 -	0, 0, 54, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	13, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 43, 0, 
 -	43, 0, 0
 -};
 -
 -static const unsigned char _lexer_eof_actions[] = {
 -	0, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43
 -};
 -
 -static const int lexer_start = 1;
 -static const int lexer_first_final = 376;
 -static const int lexer_error = 0;
 -
 -static const int lexer_en_main = 1;
 -
 -
 -#line 258 "ragel/i18n/tr.c.rl"
 -
 -static VALUE 
 -unindent(VALUE con, int start_col)
 -{
 -  VALUE re;
 -  /* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */
 -  char pat[32]; 
 -  snprintf(pat, 32, "^[\t ]{0,%d}", start_col); 
 -  re = rb_reg_regcomp(rb_str_new2(pat));
 -  rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2(""));
 -
 -  return Qnil;
 -
 -}
 -
 -static void 
 -store_kw_con(VALUE listener, const char * event_name, 
 -             const char * keyword_at, size_t keyword_length, 
 -             const char * at,         size_t length, 
 -             int current_line)
 -{
 -  VALUE con = Qnil, kw = Qnil;
 -  kw = ENCODED_STR_NEW(keyword_at, keyword_length);
 -  con = ENCODED_STR_NEW(at, length);
 -  rb_funcall(con, rb_intern("strip!"), 0);
 -  rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); 
 -}
 -
 -static void
 -store_multiline_kw_con(VALUE listener, const char * event_name,
 -                      const char * keyword_at, size_t keyword_length,
 -                      const char * at,         size_t length,
 -                      int current_line, int start_col)
 -{
 -  VALUE split;
 -  VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil;
 -
 -  kw = ENCODED_STR_NEW(keyword_at, keyword_length);
 -  con = ENCODED_STR_NEW(at, length);
 -
 -  unindent(con, start_col);
 -  
 -  split = rb_str_split(con, "\n");
 -
 -  name = rb_funcall(split, rb_intern("shift"), 0);
 -  desc = rb_ary_join(split, rb_str_new2( "\n" ));
 -
 -  if( name == Qnil ) 
 -  {
 -    name = rb_str_new2("");
 -  }
 -  if( rb_funcall(desc, rb_intern("size"), 0) == 0) 
 -  {
 -    desc = rb_str_new2("");
 -  }
 -  rb_funcall(name, rb_intern("strip!"), 0);
 -  rb_funcall(desc, rb_intern("rstrip!"), 0);
 -  rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); 
 -}
 -
 -static void 
 -store_attr(VALUE listener, const char * attr_type,
 -           const char * at, size_t length, 
 -           int line)
 -{
 -  VALUE val = ENCODED_STR_NEW(at, length);
 -  rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line));
 -}
 -static void 
 -store_docstring_content(VALUE listener, 
 -          int start_col, 
 -          const char *type_at, size_t type_length,
 -          const char *at, size_t length, 
 -          int current_line)
 -{
 -  VALUE re2;
 -  VALUE unescape_escaped_quotes;
 -  VALUE con = ENCODED_STR_NEW(at, length);
 -  VALUE con_type = ENCODED_STR_NEW(type_at, type_length);
 -
 -  unindent(con, start_col);
 -
 -  re2 = rb_reg_regcomp(rb_str_new2("\r\\Z"));
 -  unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\""));
 -  rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2(""));
 -  rb_funcall(con_type, rb_intern("strip!"), 0);
 -  rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\""));
 -  rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line));
 -}
 -static void 
 -raise_lexer_error(const char * at, int line)
 -{ 
 -  rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at);
 -}
 -
 -static void lexer_init(lexer_state *lexer) {
 -  lexer->content_start = 0;
 -  lexer->content_end = 0;
 -  lexer->content_len = 0;
 -  lexer->docstring_content_type_start = 0;
 -  lexer->docstring_content_type_end = 0;
 -  lexer->mark = 0;
 -  lexer->keyword_start = 0;
 -  lexer->keyword_end = 0;
 -  lexer->next_keyword_start = 0;
 -  lexer->line_number = 1;
 -  lexer->last_newline = 0;
 -  lexer->final_newline = 0;
 -  lexer->start_col = 0;
 -}
 -
 -static VALUE CLexer_alloc(VALUE klass)
 -{
 -  VALUE obj;
 -  lexer_state *lxr = ALLOC(lexer_state);
 -  lexer_init(lxr);
 -
 -  obj = Data_Wrap_Struct(klass, NULL, -1, lxr);
 -
 -  return obj;
 -}
 -
 -static VALUE CLexer_init(VALUE self, VALUE listener)
 -{
 -  lexer_state *lxr; 
 -  rb_iv_set(self, "@listener", listener);
 -  
 -  lxr = NULL;
 -  DATA_GET(self, lexer_state, lxr);
 -  lexer_init(lxr);
 -  
 -  return self;
 -}
 -
 -static VALUE CLexer_scan(VALUE self, VALUE input)
 -{
 -  VALUE input_copy;
 -  char *data;
 -  size_t len;
 -  VALUE listener = rb_iv_get(self, "@listener");
 -
 -  lexer_state *lexer;
 -  lexer = NULL;
 -  DATA_GET(self, lexer_state, lexer);
 -
 -  input_copy = rb_str_dup(input);
 -
 -  rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%"));
 -  data = RSTRING_PTR(input_copy);
 -  len = RSTRING_LEN(input_copy);
 -  
 -  if (len == 0) { 
 -    rb_raise(rb_eGherkinLexingError, "No content to lex.");
 -  } else {
 -
 -    const char *p, *pe, *eof;
 -    int cs = 0;
 -    
 -    VALUE current_row = Qnil;
 -
 -    p = data;
 -    pe = data + len;
 -    eof = pe;
 -    
 -    assert(*pe == '\0' && "pointer does not end on NULL");
 -    
 -    
 -#line 951 "ext/gherkin_lexer_tr/gherkin_lexer_tr.c"
 -	{
 -	cs = lexer_start;
 -	}
 -
 -#line 425 "ragel/i18n/tr.c.rl"
 -    
 -#line 958 "ext/gherkin_lexer_tr/gherkin_lexer_tr.c"
 -	{
 -	int _klen;
 -	unsigned int _trans;
 -	const char *_acts;
 -	unsigned int _nacts;
 -	const char *_keys;
 -
 -	if ( p == pe )
 -		goto _test_eof;
 -	if ( cs == 0 )
 -		goto _out;
 -_resume:
 -	_keys = _lexer_trans_keys + _lexer_key_offsets[cs];
 -	_trans = _lexer_index_offsets[cs];
 -
 -	_klen = _lexer_single_lengths[cs];
 -	if ( _klen > 0 ) {
 -		const char *_lower = _keys;
 -		const char *_mid;
 -		const char *_upper = _keys + _klen - 1;
 -		while (1) {
 -			if ( _upper < _lower )
 -				break;
 -
 -			_mid = _lower + ((_upper-_lower) >> 1);
 -			if ( (*p) < *_mid )
 -				_upper = _mid - 1;
 -			else if ( (*p) > *_mid )
 -				_lower = _mid + 1;
 -			else {
 -				_trans += (unsigned int)(_mid - _keys);
 -				goto _match;
 -			}
 -		}
 -		_keys += _klen;
 -		_trans += _klen;
 -	}
 -
 -	_klen = _lexer_range_lengths[cs];
 -	if ( _klen > 0 ) {
 -		const char *_lower = _keys;
 -		const char *_mid;
 -		const char *_upper = _keys + (_klen<<1) - 2;
 -		while (1) {
 -			if ( _upper < _lower )
 -				break;
 -
 -			_mid = _lower + (((_upper-_lower) >> 1) & ~1);
 -			if ( (*p) < _mid[0] )
 -				_upper = _mid - 2;
 -			else if ( (*p) > _mid[1] )
 -				_lower = _mid + 2;
 -			else {
 -				_trans += (unsigned int)((_mid - _keys)>>1);
 -				goto _match;
 -			}
 -		}
 -		_trans += _klen;
 -	}
 -
 -_match:
 -	cs = _lexer_trans_targs[_trans];
 -
 -	if ( _lexer_trans_actions[_trans] == 0 )
 -		goto _again;
 -
 -	_acts = _lexer_actions + _lexer_trans_actions[_trans];
 -	_nacts = (unsigned int) *_acts++;
 -	while ( _nacts-- > 0 )
 -	{
 -		switch ( *_acts++ )
 -		{
 -	case 0:
 -#line 83 "ragel/i18n/tr.c.rl"
 -	{
 -		MARK(content_start, p);
 -    lexer->current_line = lexer->line_number;
 -    lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2;
 -  }
 -	break;
 -	case 1:
 -#line 89 "ragel/i18n/tr.c.rl"
 -	{
 -    MARK(content_start, p);
 -  }
 -	break;
 -	case 2:
 -#line 93 "ragel/i18n/tr.c.rl"
 -	{
 -    lexer->current_line = lexer->line_number;
 -    lexer->start_col = p - data - lexer->last_newline;
 -  }
 -	break;
 -	case 3:
 -#line 98 "ragel/i18n/tr.c.rl"
 -	{
 -    int len = LEN(content_start, PTR_TO(final_newline));
 -    int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end));
 -
 -    if (len < 0) len = 0;
 -    if (type_len < 0) len = 0;
 -
 -    store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line);
 -  }
 -	break;
 -	case 4:
 -#line 108 "ragel/i18n/tr.c.rl"
 -	{ 
 -    MARK(docstring_content_type_start, p);
 -  }
 -	break;
 -	case 5:
 -#line 112 "ragel/i18n/tr.c.rl"
 -	{ 
 -    MARK(docstring_content_type_end, p);
 -  }
 -	break;
 -	case 6:
 -#line 116 "ragel/i18n/tr.c.rl"
 -	{
 -    STORE_KW_END_CON(feature);
 -  }
 -	break;
 -	case 7:
 -#line 120 "ragel/i18n/tr.c.rl"
 -	{
 -    STORE_KW_END_CON(background);
 -  }
 -	break;
 -	case 8:
 -#line 124 "ragel/i18n/tr.c.rl"
 -	{
 -    STORE_KW_END_CON(scenario);
 -  }
 -	break;
 -	case 9:
 -#line 128 "ragel/i18n/tr.c.rl"
 -	{
 -    STORE_KW_END_CON(scenario_outline);
 -  }
 -	break;
 -	case 10:
 -#line 132 "ragel/i18n/tr.c.rl"
 -	{
 -    STORE_KW_END_CON(examples);
 -  }
 -	break;
 -	case 11:
 -#line 136 "ragel/i18n/tr.c.rl"
 -	{
 -    store_kw_con(listener, "step",
 -      PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
 -      PTR_TO(content_start), LEN(content_start, p), 
 -      lexer->current_line);
 -  }
 -	break;
 -	case 12:
 -#line 143 "ragel/i18n/tr.c.rl"
 -	{
 -    STORE_ATTR(comment);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 13:
 -#line 148 "ragel/i18n/tr.c.rl"
 -	{
 -    STORE_ATTR(tag);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 14:
 -#line 153 "ragel/i18n/tr.c.rl"
 -	{
 -    lexer->line_number += 1;
 -    MARK(final_newline, p);
 -  }
 -	break;
 -	case 15:
 -#line 158 "ragel/i18n/tr.c.rl"
 -	{
 -    MARK(last_newline, p + 1);
 -  }
 -	break;
 -	case 16:
 -#line 162 "ragel/i18n/tr.c.rl"
 -	{
 -    if (lexer->mark == 0) {
 -      MARK(mark, p);
 -    }
 -  }
 -	break;
 -	case 17:
 -#line 168 "ragel/i18n/tr.c.rl"
 -	{
 -    MARK(keyword_end, p);
 -    MARK(keyword_start, PTR_TO(mark));
 -    MARK(content_start, p + 1);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 18:
 -#line 175 "ragel/i18n/tr.c.rl"
 -	{
 -    MARK(content_end, p);
 -  }
 -	break;
 -	case 19:
 -#line 179 "ragel/i18n/tr.c.rl"
 -	{
 -    p = p - 1;
 -    lexer->current_line = lexer->line_number;
 -    current_row = rb_ary_new();
 -  }
 -	break;
 -	case 20:
 -#line 185 "ragel/i18n/tr.c.rl"
 -	{
 -		MARK(content_start, p);
 -  }
 -	break;
 -	case 21:
 -#line 189 "ragel/i18n/tr.c.rl"
 -	{
 -    VALUE re_pipe, re_newline, re_backslash;
 -    VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
 -    rb_funcall(con, rb_intern("strip!"), 0);
 -    re_pipe      = rb_reg_regcomp(rb_str_new2("\\\\\\|"));
 -    re_newline   = rb_reg_regcomp(rb_str_new2("\\\\n"));
 -    re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_pipe,      rb_str_new2("|"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_newline,   rb_str_new2("\n"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\"));
 -
 -    rb_ary_push(current_row, con);
 -  }
 -	break;
 -	case 22:
 -#line 203 "ragel/i18n/tr.c.rl"
 -	{
 -    rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
 -  }
 -	break;
 -	case 23:
 -#line 207 "ragel/i18n/tr.c.rl"
 -	{
 -    int line;
 -    if (cs < lexer_first_final) {
 -      size_t count = 0;
 -      VALUE newstr_val;
 -      char *newstr;
 -      int newstr_count = 0;        
 -      size_t len;
 -      const char *buff;
 -      if (lexer->last_newline != 0) {
 -        len = LEN(last_newline, eof);
 -        buff = PTR_TO(last_newline);
 -      } else {
 -        len = strlen(data);
 -        buff = data;
 -      }
 -
 -      /* Allocate as a ruby string so that it gets cleaned up by GC */
 -      newstr_val = rb_str_new(buff, len);
 -      newstr = RSTRING_PTR(newstr_val);
 -
 -
 -      for (count = 0; count < len; count++) {
 -        if(buff[count] == 10) {
 -          newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
 -          break;
 -        } else {
 -          if (buff[count] == '%') {
 -            newstr[newstr_count++] = buff[count];
 -            newstr[newstr_count] = buff[count];
 -          } else {
 -            newstr[newstr_count] = buff[count];
 -          }
 -        }
 -        newstr_count++;
 -      }
 -
 -      line = lexer->line_number;
 -      lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
 -      raise_lexer_error(newstr, line);
 -    } else {
 -      rb_funcall(listener, rb_intern("eof"), 0);
 -    }
 -  }
 -	break;
 -#line 1248 "ext/gherkin_lexer_tr/gherkin_lexer_tr.c"
 -		}
 -	}
 -
 -_again:
 -	if ( cs == 0 )
 -		goto _out;
 -	if ( ++p != pe )
 -		goto _resume;
 -	_test_eof: {}
 -	if ( p == eof )
 -	{
 -	const char *__acts = _lexer_actions + _lexer_eof_actions[cs];
 -	unsigned int __nacts = (unsigned int) *__acts++;
 -	while ( __nacts-- > 0 ) {
 -		switch ( *__acts++ ) {
 -	case 23:
 -#line 207 "ragel/i18n/tr.c.rl"
 -	{
 -    int line;
 -    if (cs < lexer_first_final) {
 -      size_t count = 0;
 -      VALUE newstr_val;
 -      char *newstr;
 -      int newstr_count = 0;        
 -      size_t len;
 -      const char *buff;
 -      if (lexer->last_newline != 0) {
 -        len = LEN(last_newline, eof);
 -        buff = PTR_TO(last_newline);
 -      } else {
 -        len = strlen(data);
 -        buff = data;
 -      }
 -
 -      /* Allocate as a ruby string so that it gets cleaned up by GC */
 -      newstr_val = rb_str_new(buff, len);
 -      newstr = RSTRING_PTR(newstr_val);
 -
 -
 -      for (count = 0; count < len; count++) {
 -        if(buff[count] == 10) {
 -          newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
 -          break;
 -        } else {
 -          if (buff[count] == '%') {
 -            newstr[newstr_count++] = buff[count];
 -            newstr[newstr_count] = buff[count];
 -          } else {
 -            newstr[newstr_count] = buff[count];
 -          }
 -        }
 -        newstr_count++;
 -      }
 -
 -      line = lexer->line_number;
 -      lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
 -      raise_lexer_error(newstr, line);
 -    } else {
 -      rb_funcall(listener, rb_intern("eof"), 0);
 -    }
 -  }
 -	break;
 -#line 1311 "ext/gherkin_lexer_tr/gherkin_lexer_tr.c"
 -		}
 -	}
 -	}
 -
 -	_out: {}
 -	}
 -
 -#line 426 "ragel/i18n/tr.c.rl"
 -
 -    assert(p <= pe && "data overflow after parsing execute");
 -    assert(lexer->content_start <= len && "content starts after data end");
 -    assert(lexer->mark < len && "mark is after data end");
 -    
 -    /* Reset lexer by re-initializing the whole thing */
 -    lexer_init(lexer);
 -
 -    if (cs == lexer_error) {
 -      rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails.");
 -    } else {
 -      return Qtrue;
 -    }
 -  }
 -}
 -
 -void Init_gherkin_lexer_tr()
 -{
 -  mGherkin = rb_define_module("Gherkin");
 -  mGherkinLexer = rb_define_module_under(mGherkin, "Lexer");
 -  rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError"));
 -
 -  mCLexer = rb_define_module_under(mGherkin, "CLexer");
 -  cI18nLexer = rb_define_class_under(mCLexer, "Tr", rb_cObject);
 -  rb_define_alloc_func(cI18nLexer, CLexer_alloc);
 -  rb_define_method(cI18nLexer, "initialize", CLexer_init, 1);
 -  rb_define_method(cI18nLexer, "scan", CLexer_scan, 1);
 -}
 -
diff --cc ext/gherkin_lexer_uk/extconf.rb
index 4b48a7e,4b48a7e..0000000
deleted file mode 100644,100644
--- a/ext/gherkin_lexer_uk/extconf.rb
+++ /dev/null
@@@ -1,6 -1,6 +1,0 @@@
--require 'mkmf'
--CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags']
--$CFLAGS << ' -O0 -Wall' if CONFIG['CC'] =~ /gcc|clang/
--dir_config("gherkin_lexer_uk")
--have_library("c", "main")
--create_makefile("gherkin_lexer_uk")
diff --cc ext/gherkin_lexer_uk/gherkin_lexer_uk.c
index 111fc5b,810fadc..0000000
deleted file mode 100644,100644
--- a/ext/gherkin_lexer_uk/gherkin_lexer_uk.c
+++ /dev/null
@@@ -1,1941 -1,1941 +1,0 @@@
--
- #line 1 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/uk.c.rl"
- #include <assert.h>
- #include <ruby.h>
- 
- #if defined(_WIN32)
- #include <stddef.h>
- #endif
- 
- #ifdef HAVE_RUBY_RE_H
- #include <ruby/re.h>
- #else
- #include <re.h>
- #endif
- 
- #ifdef HAVE_RUBY_ENCODING_H
- #include <ruby/encoding.h>
- #define ENCODED_STR_NEW(ptr, len) \
-     rb_enc_str_new(ptr, len, rb_utf8_encoding())
- #else
- #define ENCODED_STR_NEW(ptr, len) \
-     rb_str_new(ptr, len)
- #endif
- 
- #ifndef RSTRING_PTR
- #define RSTRING_PTR(s) (RSTRING(s)->ptr)
- #endif
- 
- #ifndef RSTRING_LEN
- #define RSTRING_LEN(s) (RSTRING(s)->len)
- #endif
- 
- #define DATA_GET(FROM, TYPE, NAME) \
-   Data_Get_Struct(FROM, TYPE, NAME); \
-   if (NAME == NULL) { \
-     rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \
-   }
-  
- typedef struct lexer_state {
-   int content_len;
-   int line_number;
-   int current_line;
-   int start_col;
-   size_t mark;
-   size_t keyword_start;
-   size_t keyword_end;
-   size_t next_keyword_start;
-   size_t content_start;
-   size_t content_end;
-   size_t docstring_content_type_start;
-   size_t docstring_content_type_end;
-   size_t query_start;
-   size_t last_newline;
-   size_t final_newline;
- } lexer_state;
- 
- static VALUE mGherkin;
- static VALUE mGherkinLexer;
- static VALUE mCLexer;
- static VALUE cI18nLexer;
- static VALUE rb_eGherkinLexingError;
- 
- #define LEN(AT, P) (P - data - lexer->AT)
- #define MARK(M, P) (lexer->M = (P) - data)
- #define PTR_TO(P) (data + lexer->P)
- 
- #define STORE_KW_END_CON(EVENT) \
-   store_multiline_kw_con(listener, # EVENT, \
-     PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \
-     PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \
-     lexer->current_line, lexer->start_col); \
-     if (lexer->content_end != 0) { \
-       p = PTR_TO(content_end - 1); \
-     } \
-     lexer->content_end = 0
- 
- #define STORE_ATTR(ATTR) \
-     store_attr(listener, # ATTR, \
-       PTR_TO(content_start), LEN(content_start, p), \
-       lexer->line_number)
- 
- 
- #line 254 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/uk.c.rl"
- 
- 
- /** Data **/
- 
- #line 89 "ext/gherkin_lexer_uk/gherkin_lexer_uk.c"
- static const char _lexer_actions[] = {
- 	0, 1, 0, 1, 1, 1, 2, 1, 
- 	3, 1, 4, 1, 5, 1, 6, 1, 
- 	7, 1, 8, 1, 9, 1, 10, 1, 
- 	11, 1, 12, 1, 13, 1, 16, 1, 
- 	17, 1, 18, 1, 19, 1, 20, 1, 
- 	21, 1, 22, 1, 23, 2, 1, 18, 
- 	2, 4, 5, 2, 13, 0, 2, 14, 
- 	15, 2, 17, 0, 2, 17, 2, 2, 
- 	17, 16, 2, 17, 19, 2, 18, 6, 
- 	2, 18, 7, 2, 18, 8, 2, 18, 
- 	9, 2, 18, 10, 2, 18, 16, 2, 
- 	20, 21, 2, 22, 0, 2, 22, 2, 
- 	2, 22, 16, 2, 22, 19, 3, 3, 
- 	14, 15, 3, 5, 14, 15, 3, 11, 
- 	14, 15, 3, 12, 14, 15, 3, 13, 
- 	14, 15, 3, 14, 15, 18, 3, 17, 
- 	0, 11, 3, 17, 14, 15, 4, 1, 
- 	14, 15, 18, 4, 4, 5, 14, 15, 
- 	4, 17, 0, 14, 15, 5, 17, 0, 
- 	11, 14, 15
- };
- 
- static const short _lexer_key_offsets[] = {
- 	0, 0, 12, 22, 23, 25, 27, 38, 
- 	39, 40, 42, 44, 49, 54, 59, 64, 
- 	68, 72, 74, 75, 76, 77, 78, 79, 
- 	80, 81, 82, 83, 84, 85, 86, 87, 
- 	88, 89, 94, 101, 106, 110, 116, 119, 
- 	121, 127, 138, 140, 141, 142, 143, 144, 
- 	145, 146, 147, 148, 149, 150, 151, 152, 
- 	153, 154, 155, 156, 157, 158, 159, 160, 
- 	161, 162, 163, 164, 165, 166, 167, 168, 
- 	169, 170, 171, 172, 173, 175, 176, 177, 
- 	178, 179, 180, 181, 182, 183, 184, 185, 
- 	186, 187, 188, 189, 190, 191, 192, 193, 
- 	194, 195, 204, 215, 217, 228, 231, 233, 
- 	235, 237, 239, 241, 243, 245, 247, 249, 
- 	251, 253, 255, 257, 259, 261, 263, 265, 
- 	267, 269, 271, 273, 275, 277, 279, 281, 
- 	283, 285, 287, 289, 291, 293, 295, 297, 
- 	299, 301, 303, 305, 307, 309, 311, 313, 
- 	315, 317, 319, 321, 323, 325, 327, 329, 
- 	331, 333, 336, 338, 340, 342, 344, 347, 
- 	349, 351, 353, 355, 357, 359, 361, 363, 
- 	365, 367, 369, 371, 373, 375, 377, 379, 
- 	381, 383, 385, 387, 389, 391, 393, 395, 
- 	397, 399, 401, 403, 405, 407, 409, 411, 
- 	413, 415, 417, 419, 421, 423, 425, 427, 
- 	429, 431, 433, 435, 437, 440, 443, 445, 
- 	447, 449, 451, 453, 455, 457, 459, 461, 
- 	463, 465, 467, 469, 471, 473, 475, 477, 
- 	479, 481, 483, 485, 487, 489, 491, 493, 
- 	495, 497, 499, 501, 503, 505, 507, 509, 
- 	511, 513, 515, 517, 518, 519, 520, 521, 
- 	523, 524, 525, 526, 527, 528, 529, 530, 
- 	531, 532, 533, 534, 541, 543, 545, 547, 
- 	549, 551, 553, 555, 557, 559, 561, 563, 
- 	565, 567, 569, 571, 573, 575, 577, 579, 
- 	581, 582, 583, 584, 585, 586, 587, 588, 
- 	589, 590, 591, 592, 593, 595, 596, 597, 
- 	598, 599, 601, 602, 603, 604, 605, 606, 
- 	607, 608, 609, 610, 611, 612, 613, 614, 
- 	615, 616, 617, 618, 619, 620, 621, 622, 
- 	623, 624, 625, 626, 627, 628, 629, 630, 
- 	631, 632, 633, 634, 635, 644, 655, 657, 
- 	660, 662, 664, 666, 668, 670, 672, 674, 
- 	676, 678, 680, 682, 684, 686, 688, 690, 
- 	692, 694, 696, 698, 700, 702, 704, 706, 
- 	708, 710, 712, 714, 716, 718, 720, 722, 
- 	724, 726, 728, 730, 732, 734, 736, 738, 
- 	740, 742, 744, 746, 748, 750, 752, 754, 
- 	756, 758, 760, 762, 765, 767, 769, 771, 
- 	773, 775, 777, 779, 781, 783, 785, 787, 
- 	789, 791, 793, 795, 797, 799, 801, 803, 
- 	806, 809, 811, 813, 815, 817, 819, 821, 
- 	823, 825, 827, 829, 831, 833, 835, 837, 
- 	839, 841, 843, 845, 847, 849, 851, 853, 
- 	855, 857, 859, 861, 863, 865, 867, 869, 
- 	871, 873, 875, 877, 879, 881, 883, 884, 
- 	885, 886, 887, 888, 889, 890, 891, 892, 
- 	893, 894, 895, 896, 897, 898, 907, 918, 
- 	920, 923, 925, 927, 929, 931, 933, 935, 
- 	937, 939, 941, 943, 945, 947, 949, 951, 
- 	953, 955, 957, 959, 961, 963, 965, 967, 
- 	969, 971, 973, 975, 977, 979, 981, 983, 
- 	985, 987, 989, 992, 994, 996, 998, 1000, 
- 	1002, 1004, 1006, 1008, 1010, 1012, 1014, 1016, 
- 	1018, 1020, 1022, 1024, 1026, 1028, 1030, 1032, 
- 	1034, 1036, 1038, 1040, 1042, 1044, 1046, 1048, 
- 	1050, 1052, 1054, 1056, 1058, 1060, 1062, 1065, 
- 	1067, 1069, 1071, 1073, 1076, 1078, 1080, 1082, 
- 	1084, 1086, 1088, 1090, 1092, 1094, 1096, 1098, 
- 	1100, 1102, 1104, 1106, 1108, 1110, 1112, 1114, 
- 	1116, 1118, 1120, 1122, 1124, 1126, 1128, 1130, 
- 	1132, 1134, 1136, 1138, 1140, 1142, 1144, 1146, 
- 	1148, 1150, 1152, 1154, 1156, 1158, 1160, 1162, 
- 	1164, 1167, 1170, 1172, 1174, 1176, 1178, 1180, 
- 	1182, 1184, 1186, 1188, 1190, 1192, 1194, 1196, 
- 	1198, 1200, 1202, 1204, 1206, 1208, 1210, 1212, 
- 	1214, 1216, 1218, 1220, 1222, 1224, 1226, 1228, 
- 	1230, 1232, 1234, 1236, 1238, 1240, 1242, 1244, 
- 	1245, 1247, 1249, 1250, 1251, 1252, 1253, 1254, 
- 	1255, 1256, 1257, 1258, 1259, 1260, 1261, 1262, 
- 	1263, 1264, 1265, 1266, 1267, 1268, 1269, 1270, 
- 	1271, 1272, 1273, 1281, 1285, 1288, 1290, 1292, 
- 	1294, 1296, 1298, 1300, 1302, 1304, 1306, 1308, 
- 	1310, 1312, 1314, 1316, 1318, 1320, 1322, 1324, 
- 	1326, 1328, 1330, 1332, 1334, 1336, 1338, 1340, 
- 	1342, 1344, 1346, 1348, 1350, 1352, 1355, 1357, 
- 	1359, 1361, 1363, 1365, 1367, 1369, 1371, 1373, 
- 	1375, 1377, 1379, 1381, 1383, 1385, 1387, 1389, 
- 	1391, 1393, 1395, 1397, 1399, 1401, 1403, 1405, 
- 	1407, 1409, 1411, 1413, 1415, 1417, 1419, 1421, 
- 	1423, 1425, 1427, 1429, 1431, 1433, 1435, 1437, 
- 	1439, 1441, 1443, 1445, 1447, 1449, 1451, 1453, 
- 	1455, 1457, 1459, 1461, 1463, 1465, 1467, 1469, 
- 	1471, 1473, 1475, 1477, 1479, 1481, 1483, 1485, 
- 	1487, 1489, 1491, 1493, 1495, 1497, 1499, 1501, 
- 	1503, 1505, 1506, 1507, 1508, 1509
- };
- 
- static const char _lexer_trans_keys[] = {
- 	-48, -17, 10, 32, 34, 35, 37, 42, 
- 	64, 124, 9, 13, -122, -112, -108, -102, 
- 	-99, -97, -95, -94, -92, -81, 32, 10, 
- 	13, 10, 13, -48, 10, 32, 34, 35, 
- 	37, 42, 64, 124, 9, 13, 34, 34, 
- 	10, 13, 10, 13, 10, 32, 34, 9, 
- 	13, 10, 32, 34, 9, 13, 10, 32, 
- 	34, 9, 13, 10, 32, 34, 9, 13, 
- 	10, 32, 9, 13, 10, 32, 9, 13, 
- 	10, 13, 10, 95, 70, 69, 65, 84, 
- 	85, 82, 69, 95, 69, 78, 68, 95, 
- 	37, 13, 32, 64, 9, 10, 9, 10, 
- 	13, 32, 64, 11, 12, 10, 32, 64, 
- 	9, 13, 32, 124, 9, 13, 10, 32, 
- 	92, 124, 9, 13, 10, 92, 124, 10, 
- 	92, 10, 32, 92, 124, 9, 13, -48, 
- 	10, 32, 34, 35, 37, 42, 64, 124, 
- 	9, 13, -48, 32, -69, -48, -75, -47, 
- 	-126, -48, -80, -48, -70, -48, -66, -48, 
- 	-74, -48, -80, -48, -67, -48, -66, -48, 
- 	-66, -48, -69, -48, -72, -48, -75, -47, 
- 	-123, -48, -80, -48, -71, -48, -47, -75, 
- 	-47, -128, -48, -75, -48, -76, -47, -125, 
- 	-48, -68, -48, -66, -48, -78, -48, -80, 
- 	58, 10, 10, -48, 10, 32, 35, 37, 
- 	42, 64, 9, 13, -122, -112, -108, -102, 
- 	-99, -97, -95, -94, -92, -81, 10, 10, 
- 	32, -48, 10, 32, 34, 35, 37, 42, 
- 	64, 124, 9, 13, -48, 10, 32, -69, 
- 	10, -48, 10, -75, 10, -47, 10, -126, 
- 	10, -48, 10, -80, 10, -48, 10, -70, 
- 	10, -48, 10, -66, 10, -48, 10, -74, 
- 	10, -48, 10, -80, 10, -48, 10, -67, 
- 	10, -48, 10, -66, 10, -48, 10, -66, 
- 	10, -48, 10, -69, 10, -48, 10, -72, 
- 	10, -48, 10, -75, 10, -47, 10, -123, 
- 	10, -48, 10, -80, 10, -48, 10, -71, 
- 	10, -47, 10, -128, 10, -48, 10, -72, 
- 	10, -48, 10, -65, 10, -47, 10, -125, 
- 	10, -47, 10, -127, 10, -47, 10, -126, 
- 	10, -48, 10, -72, 10, -48, 10, -68, 
- 	10, -48, 10, -66, 10, 10, 32, 44, 
- 	10, 32, -47, 10, -119, 10, -47, 10, 
- 	-126, -122, 10, -47, 10, -128, 10, -47, 
- 	10, -125, 10, -48, 10, -70, 10, -47, 
- 	10, -126, 10, -47, 10, -125, 10, -47, 
- 	10, -128, 10, -48, 10, -80, 10, 10, 
- 	32, -47, 10, -127, 10, -47, 10, -122, 
- 	10, -48, 10, -75, 10, -48, 10, -67, 
- 	10, -48, 10, -80, 10, -47, 10, -128, 
- 	10, -47, 10, -106, 10, -47, 10, -114, 
- 	10, 10, 58, -48, 10, -75, 10, -48, 
- 	10, -67, 10, -48, 10, -80, 10, -47, 
- 	10, -128, 10, -47, 10, -106, 10, -48, 
- 	10, -71, 10, -48, 10, -80, -66, 10, 
- 	-48, 10, 32, -76, 10, -47, 10, -106, 
- 	10, -47, 10, -125, 10, -48, 10, -67, 
- 	10, -48, 10, -70, 10, -47, 10, -122, 
- 	10, -47, 10, -106, 10, -48, 10, -66, 
- 	10, -48, 10, -67, 10, -48, 10, -80, 
- 	10, -48, 10, -69, 10, -48, 10, -70, 
- 	10, 10, 95, 10, 70, 10, 69, 10, 
- 	65, 10, 84, 10, 85, 10, 82, 10, 
- 	69, 10, 95, 10, 69, 10, 78, 10, 
- 	68, 10, 95, 10, 37, -128, -48, -72, 
- 	-48, -70, -65, -48, -69, -48, -80, -48, 
- 	-76, -48, -72, 58, 10, 10, -48, 10, 
- 	32, 35, 124, 9, 13, -92, 10, -47, 
- 	10, -125, 10, -48, 10, -67, 10, -48, 
- 	10, -70, 10, -47, 10, -122, 10, -47, 
- 	10, -106, 10, -48, 10, -66, 10, -48, 
- 	10, -67, 10, -48, 10, -80, 10, -48, 
- 	10, -69, 10, 10, 58, -47, -125, -47, 
- 	-127, -47, -126, -48, -72, -48, -68, -48, 
- 	-66, 32, 44, 32, -47, -119, -47, -126, 
- 	-122, -47, -128, -47, -125, -48, -70, -47, 
- 	-126, -47, -125, -47, -128, -48, -80, 32, 
- 	-47, -127, -47, -122, -48, -75, -48, -67, 
- 	-48, -80, -47, -128, -47, -106, -47, -114, 
- 	58, 10, 10, -48, 10, 32, 35, 37, 
- 	42, 64, 9, 13, -122, -112, -108, -102, 
- 	-99, -97, -95, -94, -92, -81, 10, 10, 
- 	32, -48, 10, 32, -69, 10, -48, 10, 
- 	-75, 10, -47, 10, -126, 10, -48, 10, 
- 	-80, 10, -48, 10, -70, 10, -48, 10, 
- 	-66, 10, -48, 10, -74, 10, -48, 10, 
- 	-80, 10, -48, 10, -67, 10, -48, 10, 
- 	-66, 10, -48, 10, -66, 10, -48, 10, 
- 	-69, 10, -48, 10, -72, 10, -48, 10, 
- 	-75, 10, -47, 10, -123, 10, -48, 10, 
- 	-80, 10, -48, 10, -71, 10, -47, 10, 
- 	-128, 10, -48, 10, -72, 10, -48, 10, 
- 	-65, 10, -47, 10, -125, 10, -47, 10, 
- 	-127, 10, -47, 10, -126, 10, -48, 10, 
- 	-72, 10, -48, 10, -68, 10, -48, 10, 
- 	-66, 10, 10, 32, 44, 10, 32, -47, 
- 	10, -119, 10, -47, 10, -122, 10, -48, 
- 	10, -75, 10, -48, 10, -67, 10, -48, 
- 	10, -80, 10, -47, 10, -128, 10, -47, 
- 	10, -106, 10, -48, 10, -71, 10, 10, 
- 	58, -48, 10, -80, -66, 10, -48, 10, 
- 	32, -76, 10, -47, 10, -106, 10, -47, 
- 	10, -125, 10, -48, 10, -67, 10, -48, 
- 	10, -70, 10, -47, 10, -122, 10, -47, 
- 	10, -106, 10, -48, 10, -66, 10, -48, 
- 	10, -67, 10, -48, 10, -80, 10, -48, 
- 	10, -69, 10, -48, 10, -70, 10, 10, 
- 	95, 10, 70, 10, 69, 10, 65, 10, 
- 	84, 10, 85, 10, 82, 10, 69, 10, 
- 	95, 10, 69, 10, 78, 10, 68, 10, 
- 	95, 10, 37, -48, -75, -48, -67, -48, 
- 	-80, -47, -128, -47, -106, -48, -71, 58, 
- 	10, 10, -48, 10, 32, 35, 37, 42, 
- 	64, 9, 13, -122, -112, -108, -102, -99, 
- 	-97, -95, -94, -92, -81, 10, 10, 32, 
- 	-48, 10, 32, -69, 10, -48, 10, -75, 
- 	10, -47, 10, -126, 10, -48, 10, -80, 
- 	10, -48, 10, -70, 10, -48, 10, -66, 
- 	10, -48, 10, -74, 10, -48, 10, -80, 
- 	10, -48, 10, -67, 10, -48, 10, -66, 
- 	10, -48, 10, -66, 10, -48, 10, -69, 
- 	10, -48, 10, -72, 10, -48, 10, -75, 
- 	10, -47, 10, -123, 10, -48, 10, -80, 
- 	10, -48, 10, -71, 10, -48, -47, 10, 
- 	-75, 10, -47, 10, -128, 10, -48, 10, 
- 	-75, 10, -48, 10, -76, 10, -47, 10, 
- 	-125, 10, -48, 10, -68, 10, -48, 10, 
- 	-66, 10, -48, 10, -78, 10, -48, 10, 
- 	-80, 10, 10, 58, -128, 10, -48, 10, 
- 	-72, 10, -48, 10, -65, 10, -47, 10, 
- 	-125, 10, -47, 10, -127, 10, -47, 10, 
- 	-126, 10, -48, 10, -72, 10, -48, 10, 
- 	-68, 10, -48, 10, -66, 10, 10, 32, 
- 	44, 10, 32, -47, 10, -119, 10, -47, 
- 	10, -126, -122, 10, -47, 10, -128, 10, 
- 	-47, 10, -125, 10, -48, 10, -70, 10, 
- 	-47, 10, -126, 10, -47, 10, -125, 10, 
- 	-47, 10, -128, 10, -48, 10, -80, 10, 
- 	10, 32, -47, 10, -127, 10, -47, 10, 
- 	-122, 10, -48, 10, -75, 10, -48, 10, 
- 	-67, 10, -48, 10, -80, 10, -47, 10, 
- 	-128, 10, -47, 10, -106, 10, -47, 10, 
- 	-114, 10, -48, 10, -75, 10, -48, 10, 
- 	-67, 10, -48, 10, -80, 10, -47, 10, 
- 	-128, 10, -47, 10, -106, 10, -48, 10, 
- 	-71, 10, -48, 10, -80, -66, 10, -48, 
- 	10, 32, -76, 10, -47, 10, -106, 10, 
- 	-47, 10, -125, 10, -48, 10, -67, 10, 
- 	-48, 10, -70, 10, -47, 10, -122, 10, 
- 	-47, 10, -106, 10, -48, 10, -66, 10, 
- 	-48, 10, -67, 10, -48, 10, -80, 10, 
- 	-48, 10, -69, 10, -48, 10, -70, 10, 
- 	10, 95, 10, 70, 10, 69, 10, 65, 
- 	10, 84, 10, 85, 10, 82, 10, 69, 
- 	10, 95, 10, 69, 10, 78, 10, 68, 
- 	10, 95, 10, 37, -48, -80, -66, -48, 
- 	32, -76, -47, -106, -47, -125, -48, -67, 
- 	-48, -70, -47, -122, -47, -106, -48, -66, 
- 	-48, -67, -48, -80, -48, -69, 58, 10, 
- 	10, -48, 10, 32, 35, 37, 64, 9, 
- 	13, -97, -95, -92, 10, -48, -47, 10, 
- 	-75, 10, -47, 10, -128, 10, -48, 10, 
- 	-75, 10, -48, 10, -76, 10, -47, 10, 
- 	-125, 10, -48, 10, -68, 10, -48, 10, 
- 	-66, 10, -48, 10, -78, 10, -48, 10, 
- 	-80, 10, 10, 58, -128, 10, -48, 10, 
- 	-72, 10, -48, 10, -70, 10, -48, 10, 
- 	-69, 10, -48, 10, -80, 10, -48, 10, 
- 	-76, 10, -48, 10, -72, 10, -47, 10, 
- 	-126, -122, 10, -47, 10, -128, 10, -47, 
- 	10, -125, 10, -48, 10, -70, 10, -47, 
- 	10, -126, 10, -47, 10, -125, 10, -47, 
- 	10, -128, 10, -48, 10, -80, 10, 10, 
- 	32, -47, 10, -127, 10, -47, 10, -122, 
- 	10, -48, 10, -75, 10, -48, 10, -67, 
- 	10, -48, 10, -80, 10, -47, 10, -128, 
- 	10, -47, 10, -106, 10, -47, 10, -114, 
- 	10, -48, 10, -75, 10, -48, 10, -67, 
- 	10, -48, 10, -80, 10, -47, 10, -128, 
- 	10, -47, 10, -106, 10, -48, 10, -71, 
- 	10, -47, 10, -125, 10, -48, 10, -67, 
- 	10, -48, 10, -70, 10, -47, 10, -122, 
- 	10, -47, 10, -106, 10, -48, 10, -66, 
- 	10, -48, 10, -67, 10, -48, 10, -80, 
- 	10, -48, 10, -69, 10, 10, 95, 10, 
- 	70, 10, 69, 10, 65, 10, 84, 10, 
- 	85, 10, 82, 10, 69, 10, 95, 10, 
- 	69, 10, 78, 10, 68, 10, 95, 10, 
- 	37, -48, -70, -69, -65, 0
- };
- 
- static const char _lexer_single_lengths[] = {
- 	0, 10, 10, 1, 2, 2, 9, 1, 
- 	1, 2, 2, 3, 3, 3, 3, 2, 
- 	2, 2, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 3, 5, 3, 2, 4, 3, 2, 
- 	4, 9, 2, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 2, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 7, 11, 2, 9, 3, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 3, 2, 2, 2, 2, 3, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 3, 3, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 1, 1, 1, 1, 2, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 5, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 2, 1, 1, 1, 
- 	1, 2, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 7, 11, 2, 3, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 3, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 3, 
- 	3, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 7, 11, 2, 
- 	3, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 3, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 3, 2, 
- 	2, 2, 2, 3, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	3, 3, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 1, 
- 	2, 2, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 6, 4, 3, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 3, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 1, 1, 1, 1, 0
- };
- 
- static const char _lexer_range_lengths[] = {
- 	0, 1, 0, 0, 0, 0, 1, 0, 
- 	0, 0, 0, 1, 1, 1, 1, 1, 
- 	1, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 1, 1, 1, 1, 1, 0, 0, 
- 	1, 1, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 1, 0, 0, 1, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 1, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 1, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 1, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 1, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0
- };
- 
- static const short _lexer_index_offsets[] = {
- 	0, 0, 12, 23, 25, 28, 31, 42, 
- 	44, 46, 49, 52, 57, 62, 67, 72, 
- 	76, 80, 83, 85, 87, 89, 91, 93, 
- 	95, 97, 99, 101, 103, 105, 107, 109, 
- 	111, 113, 118, 125, 130, 134, 140, 144, 
- 	147, 153, 164, 167, 169, 171, 173, 175, 
- 	177, 179, 181, 183, 185, 187, 189, 191, 
- 	193, 195, 197, 199, 201, 203, 205, 207, 
- 	209, 211, 213, 215, 217, 219, 221, 223, 
- 	225, 227, 229, 231, 233, 236, 238, 240, 
- 	242, 244, 246, 248, 250, 252, 254, 256, 
- 	258, 260, 262, 264, 266, 268, 270, 272, 
- 	274, 276, 285, 297, 300, 311, 315, 318, 
- 	321, 324, 327, 330, 333, 336, 339, 342, 
- 	345, 348, 351, 354, 357, 360, 363, 366, 
- 	369, 372, 375, 378, 381, 384, 387, 390, 
- 	393, 396, 399, 402, 405, 408, 411, 414, 
- 	417, 420, 423, 426, 429, 432, 435, 438, 
- 	441, 444, 447, 450, 453, 456, 459, 462, 
- 	465, 468, 472, 475, 478, 481, 484, 488, 
- 	491, 494, 497, 500, 503, 506, 509, 512, 
- 	515, 518, 521, 524, 527, 530, 533, 536, 
- 	539, 542, 545, 548, 551, 554, 557, 560, 
- 	563, 566, 569, 572, 575, 578, 581, 584, 
- 	587, 590, 593, 596, 599, 602, 605, 608, 
- 	611, 614, 617, 620, 623, 627, 631, 634, 
- 	637, 640, 643, 646, 649, 652, 655, 658, 
- 	661, 664, 667, 670, 673, 676, 679, 682, 
- 	685, 688, 691, 694, 697, 700, 703, 706, 
- 	709, 712, 715, 718, 721, 724, 727, 730, 
- 	733, 736, 739, 742, 744, 746, 748, 750, 
- 	753, 755, 757, 759, 761, 763, 765, 767, 
- 	769, 771, 773, 775, 782, 785, 788, 791, 
- 	794, 797, 800, 803, 806, 809, 812, 815, 
- 	818, 821, 824, 827, 830, 833, 836, 839, 
- 	842, 844, 846, 848, 850, 852, 854, 856, 
- 	858, 860, 862, 864, 866, 869, 871, 873, 
- 	875, 877, 880, 882, 884, 886, 888, 890, 
- 	892, 894, 896, 898, 900, 902, 904, 906, 
- 	908, 910, 912, 914, 916, 918, 920, 922, 
- 	924, 926, 928, 930, 932, 934, 936, 938, 
- 	940, 942, 944, 946, 948, 957, 969, 972, 
- 	976, 979, 982, 985, 988, 991, 994, 997, 
- 	1000, 1003, 1006, 1009, 1012, 1015, 1018, 1021, 
- 	1024, 1027, 1030, 1033, 1036, 1039, 1042, 1045, 
- 	1048, 1051, 1054, 1057, 1060, 1063, 1066, 1069, 
- 	1072, 1075, 1078, 1081, 1084, 1087, 1090, 1093, 
- 	1096, 1099, 1102, 1105, 1108, 1111, 1114, 1117, 
- 	1120, 1123, 1126, 1129, 1133, 1136, 1139, 1142, 
- 	1145, 1148, 1151, 1154, 1157, 1160, 1163, 1166, 
- 	1169, 1172, 1175, 1178, 1181, 1184, 1187, 1190, 
- 	1194, 1198, 1201, 1204, 1207, 1210, 1213, 1216, 
- 	1219, 1222, 1225, 1228, 1231, 1234, 1237, 1240, 
- 	1243, 1246, 1249, 1252, 1255, 1258, 1261, 1264, 
- 	1267, 1270, 1273, 1276, 1279, 1282, 1285, 1288, 
- 	1291, 1294, 1297, 1300, 1303, 1306, 1309, 1311, 
- 	1313, 1315, 1317, 1319, 1321, 1323, 1325, 1327, 
- 	1329, 1331, 1333, 1335, 1337, 1339, 1348, 1360, 
- 	1363, 1367, 1370, 1373, 1376, 1379, 1382, 1385, 
- 	1388, 1391, 1394, 1397, 1400, 1403, 1406, 1409, 
- 	1412, 1415, 1418, 1421, 1424, 1427, 1430, 1433, 
- 	1436, 1439, 1442, 1445, 1448, 1451, 1454, 1457, 
- 	1460, 1463, 1466, 1470, 1473, 1476, 1479, 1482, 
- 	1485, 1488, 1491, 1494, 1497, 1500, 1503, 1506, 
- 	1509, 1512, 1515, 1518, 1521, 1524, 1527, 1530, 
- 	1533, 1536, 1539, 1542, 1545, 1548, 1551, 1554, 
- 	1557, 1560, 1563, 1566, 1569, 1572, 1575, 1579, 
- 	1582, 1585, 1588, 1591, 1595, 1598, 1601, 1604, 
- 	1607, 1610, 1613, 1616, 1619, 1622, 1625, 1628, 
- 	1631, 1634, 1637, 1640, 1643, 1646, 1649, 1652, 
- 	1655, 1658, 1661, 1664, 1667, 1670, 1673, 1676, 
- 	1679, 1682, 1685, 1688, 1691, 1694, 1697, 1700, 
- 	1703, 1706, 1709, 1712, 1715, 1718, 1721, 1724, 
- 	1727, 1731, 1735, 1738, 1741, 1744, 1747, 1750, 
- 	1753, 1756, 1759, 1762, 1765, 1768, 1771, 1774, 
- 	1777, 1780, 1783, 1786, 1789, 1792, 1795, 1798, 
- 	1801, 1804, 1807, 1810, 1813, 1816, 1819, 1822, 
- 	1825, 1828, 1831, 1834, 1837, 1840, 1843, 1846, 
- 	1848, 1851, 1854, 1856, 1858, 1860, 1862, 1864, 
- 	1866, 1868, 1870, 1872, 1874, 1876, 1878, 1880, 
- 	1882, 1884, 1886, 1888, 1890, 1892, 1894, 1896, 
- 	1898, 1900, 1902, 1910, 1915, 1919, 1922, 1925, 
- 	1928, 1931, 1934, 1937, 1940, 1943, 1946, 1949, 
- 	1952, 1955, 1958, 1961, 1964, 1967, 1970, 1973, 
- 	1976, 1979, 1982, 1985, 1988, 1991, 1994, 1997, 
- 	2000, 2003, 2006, 2009, 2012, 2015, 2019, 2022, 
- 	2025, 2028, 2031, 2034, 2037, 2040, 2043, 2046, 
- 	2049, 2052, 2055, 2058, 2061, 2064, 2067, 2070, 
- 	2073, 2076, 2079, 2082, 2085, 2088, 2091, 2094, 
- 	2097, 2100, 2103, 2106, 2109, 2112, 2115, 2118, 
- 	2121, 2124, 2127, 2130, 2133, 2136, 2139, 2142, 
- 	2145, 2148, 2151, 2154, 2157, 2160, 2163, 2166, 
- 	2169, 2172, 2175, 2178, 2181, 2184, 2187, 2190, 
- 	2193, 2196, 2199, 2202, 2205, 2208, 2211, 2214, 
- 	2217, 2220, 2223, 2226, 2229, 2232, 2235, 2238, 
- 	2241, 2244, 2246, 2248, 2250, 2252
- };
- 
- static const short _lexer_trans_targs[] = {
- 	2, 763, 6, 6, 7, 17, 19, 3, 
- 	33, 36, 6, 0, 3, 42, 56, 62, 
- 	68, 76, 296, 623, 629, 761, 0, 4, 
- 	0, 6, 18, 5, 6, 18, 5, 2, 
- 	6, 6, 7, 17, 19, 3, 33, 36, 
- 	6, 0, 8, 0, 9, 0, 11, 10, 
- 	10, 11, 10, 10, 12, 12, 13, 12, 
- 	12, 12, 12, 13, 12, 12, 12, 12, 
- 	14, 12, 12, 12, 12, 15, 12, 12, 
- 	6, 16, 16, 0, 6, 16, 16, 0, 
- 	6, 18, 17, 6, 0, 20, 0, 21, 
- 	0, 22, 0, 23, 0, 24, 0, 25, 
- 	0, 26, 0, 27, 0, 28, 0, 29, 
- 	0, 30, 0, 31, 0, 32, 0, 765, 
- 	0, 0, 0, 0, 0, 34, 35, 6, 
- 	35, 35, 33, 34, 34, 6, 35, 33, 
- 	35, 0, 36, 37, 36, 0, 41, 40, 
- 	39, 37, 40, 38, 0, 39, 37, 38, 
- 	0, 39, 38, 41, 40, 39, 37, 40, 
- 	38, 2, 41, 41, 7, 17, 19, 3, 
- 	33, 36, 41, 0, 43, 46, 0, 44, 
- 	0, 45, 0, 3, 0, 47, 0, 48, 
- 	0, 49, 0, 50, 0, 51, 0, 52, 
- 	0, 53, 0, 54, 0, 55, 0, 3, 
- 	0, 57, 0, 58, 0, 59, 0, 60, 
- 	0, 61, 0, 3, 0, 63, 0, 64, 
- 	0, 65, 0, 66, 0, 67, 0, 3, 
- 	0, 69, 0, 70, 0, 71, 0, 72, 
- 	0, 73, 0, 74, 0, 75, 0, 3, 
- 	0, 77, 243, 0, 78, 0, 79, 0, 
- 	80, 0, 81, 0, 82, 0, 83, 0, 
- 	84, 0, 85, 0, 86, 0, 87, 0, 
- 	88, 0, 89, 0, 90, 0, 91, 0, 
- 	92, 0, 93, 0, 94, 0, 95, 0, 
- 	97, 96, 97, 96, 98, 97, 97, 6, 
- 	229, 99, 6, 97, 96, 99, 101, 115, 
- 	121, 127, 135, 157, 203, 209, 227, 97, 
- 	96, 97, 100, 96, 2, 6, 6, 7, 
- 	17, 19, 3, 33, 36, 6, 0, 102, 
- 	97, 105, 96, 103, 97, 96, 104, 97, 
- 	96, 99, 97, 96, 106, 97, 96, 107, 
- 	97, 96, 108, 97, 96, 109, 97, 96, 
- 	110, 97, 96, 111, 97, 96, 112, 97, 
- 	96, 113, 97, 96, 114, 97, 96, 99, 
- 	97, 96, 116, 97, 96, 117, 97, 96, 
- 	118, 97, 96, 119, 97, 96, 120, 97, 
- 	96, 99, 97, 96, 122, 97, 96, 123, 
- 	97, 96, 124, 97, 96, 125, 97, 96, 
- 	126, 97, 96, 99, 97, 96, 128, 97, 
- 	96, 129, 97, 96, 130, 97, 96, 131, 
- 	97, 96, 132, 97, 96, 133, 97, 96, 
- 	134, 97, 96, 99, 97, 96, 136, 97, 
- 	96, 137, 97, 96, 138, 97, 96, 139, 
- 	97, 96, 140, 97, 96, 141, 97, 96, 
- 	142, 97, 96, 143, 97, 96, 144, 97, 
- 	96, 145, 97, 96, 146, 97, 96, 147, 
- 	97, 96, 148, 97, 96, 149, 97, 96, 
- 	150, 97, 96, 151, 97, 96, 152, 97, 
- 	96, 153, 97, 96, 97, 100, 154, 96, 
- 	97, 155, 96, 156, 97, 96, 119, 97, 
- 	96, 158, 97, 96, 159, 191, 97, 96, 
- 	160, 97, 96, 161, 97, 96, 162, 97, 
- 	96, 163, 97, 96, 164, 97, 96, 165, 
- 	97, 96, 166, 97, 96, 167, 97, 96, 
- 	168, 97, 96, 169, 97, 96, 170, 97, 
- 	96, 171, 97, 96, 172, 97, 96, 173, 
- 	97, 96, 97, 174, 96, 175, 97, 96, 
- 	176, 97, 96, 177, 97, 96, 178, 97, 
- 	96, 179, 97, 96, 180, 97, 96, 181, 
- 	97, 96, 182, 97, 96, 183, 97, 96, 
- 	184, 97, 96, 185, 97, 96, 186, 97, 
- 	96, 187, 97, 96, 188, 97, 96, 189, 
- 	97, 96, 190, 97, 96, 97, 100, 96, 
- 	192, 97, 96, 193, 97, 96, 194, 97, 
- 	96, 195, 97, 96, 196, 97, 96, 197, 
- 	97, 96, 198, 97, 96, 199, 97, 96, 
- 	200, 97, 96, 201, 97, 96, 202, 97, 
- 	96, 190, 97, 96, 204, 97, 96, 99, 
- 	205, 97, 96, 206, 97, 100, 96, 207, 
- 	97, 96, 208, 97, 96, 99, 97, 96, 
- 	210, 97, 96, 211, 97, 96, 212, 97, 
- 	96, 213, 97, 96, 214, 97, 96, 215, 
- 	97, 96, 216, 97, 96, 217, 97, 96, 
- 	218, 97, 96, 219, 97, 96, 220, 97, 
- 	96, 221, 97, 96, 222, 97, 96, 223, 
- 	97, 96, 224, 97, 96, 225, 97, 96, 
- 	226, 97, 96, 190, 97, 96, 228, 97, 
- 	96, 155, 97, 96, 97, 230, 96, 97, 
- 	231, 96, 97, 232, 96, 97, 233, 96, 
- 	97, 234, 96, 97, 235, 96, 97, 236, 
- 	96, 97, 237, 96, 97, 238, 96, 97, 
- 	239, 96, 97, 240, 96, 97, 241, 96, 
- 	97, 242, 96, 97, 6, 96, 244, 0, 
- 	245, 0, 246, 0, 247, 0, 248, 280, 
- 	0, 249, 0, 250, 0, 251, 0, 252, 
- 	0, 253, 0, 254, 0, 255, 0, 256, 
- 	0, 257, 0, 259, 258, 259, 258, 260, 
- 	259, 259, 6, 6, 259, 258, 261, 259, 
- 	258, 262, 259, 258, 263, 259, 258, 264, 
- 	259, 258, 265, 259, 258, 266, 259, 258, 
- 	267, 259, 258, 268, 259, 258, 269, 259, 
- 	258, 270, 259, 258, 271, 259, 258, 272, 
- 	259, 258, 273, 259, 258, 274, 259, 258, 
- 	275, 259, 258, 276, 259, 258, 277, 259, 
- 	258, 278, 259, 258, 279, 259, 258, 259, 
- 	100, 258, 281, 0, 282, 0, 283, 0, 
- 	284, 0, 285, 0, 286, 0, 287, 0, 
- 	288, 0, 289, 0, 290, 0, 291, 0, 
- 	292, 0, 4, 293, 0, 294, 0, 295, 
- 	0, 60, 0, 297, 0, 298, 446, 0, 
- 	299, 0, 300, 0, 301, 0, 302, 0, 
- 	303, 0, 304, 0, 305, 0, 306, 0, 
- 	307, 0, 308, 0, 309, 0, 310, 0, 
- 	311, 0, 312, 0, 313, 0, 314, 0, 
- 	315, 0, 316, 0, 317, 0, 318, 0, 
- 	319, 0, 320, 0, 321, 0, 322, 0, 
- 	323, 0, 324, 0, 325, 0, 326, 0, 
- 	327, 0, 328, 0, 329, 0, 330, 0, 
- 	332, 331, 332, 331, 333, 332, 332, 6, 
- 	432, 334, 6, 332, 331, 334, 335, 349, 
- 	355, 361, 369, 391, 406, 412, 430, 332, 
- 	331, 332, 100, 331, 336, 332, 339, 331, 
- 	337, 332, 331, 338, 332, 331, 334, 332, 
- 	331, 340, 332, 331, 341, 332, 331, 342, 
- 	332, 331, 343, 332, 331, 344, 332, 331, 
- 	345, 332, 331, 346, 332, 331, 347, 332, 
- 	331, 348, 332, 331, 334, 332, 331, 350, 
- 	332, 331, 351, 332, 331, 352, 332, 331, 
- 	353, 332, 331, 354, 332, 331, 334, 332, 
- 	331, 356, 332, 331, 357, 332, 331, 358, 
- 	332, 331, 359, 332, 331, 360, 332, 331, 
- 	334, 332, 331, 362, 332, 331, 363, 332, 
- 	331, 364, 332, 331, 365, 332, 331, 366, 
- 	332, 331, 367, 332, 331, 368, 332, 331, 
- 	334, 332, 331, 370, 332, 331, 371, 332, 
- 	331, 372, 332, 331, 373, 332, 331, 374, 
- 	332, 331, 375, 332, 331, 376, 332, 331, 
- 	377, 332, 331, 378, 332, 331, 379, 332, 
- 	331, 380, 332, 331, 381, 332, 331, 382, 
- 	332, 331, 383, 332, 331, 384, 332, 331, 
- 	385, 332, 331, 386, 332, 331, 387, 332, 
- 	331, 332, 100, 388, 331, 332, 389, 331, 
- 	390, 332, 331, 353, 332, 331, 392, 332, 
- 	331, 393, 332, 331, 394, 332, 331, 395, 
- 	332, 331, 396, 332, 331, 397, 332, 331, 
- 	398, 332, 331, 399, 332, 331, 400, 332, 
- 	331, 401, 332, 331, 402, 332, 331, 403, 
- 	332, 331, 404, 332, 331, 405, 332, 331, 
- 	332, 100, 331, 407, 332, 331, 334, 408, 
- 	332, 331, 409, 332, 100, 331, 410, 332, 
- 	331, 411, 332, 331, 334, 332, 331, 413, 
- 	332, 331, 414, 332, 331, 415, 332, 331, 
- 	416, 332, 331, 417, 332, 331, 418, 332, 
- 	331, 419, 332, 331, 420, 332, 331, 421, 
- 	332, 331, 422, 332, 331, 423, 332, 331, 
- 	424, 332, 331, 425, 332, 331, 426, 332, 
- 	331, 427, 332, 331, 428, 332, 331, 429, 
- 	332, 331, 405, 332, 331, 431, 332, 331, 
- 	389, 332, 331, 332, 433, 331, 332, 434, 
- 	331, 332, 435, 331, 332, 436, 331, 332, 
- 	437, 331, 332, 438, 331, 332, 439, 331, 
- 	332, 440, 331, 332, 441, 331, 332, 442, 
- 	331, 332, 443, 331, 332, 444, 331, 332, 
- 	445, 331, 332, 6, 331, 447, 0, 448, 
- 	0, 449, 0, 450, 0, 451, 0, 452, 
- 	0, 453, 0, 454, 0, 455, 0, 456, 
- 	0, 457, 0, 458, 0, 459, 0, 461, 
- 	460, 461, 460, 462, 461, 461, 6, 609, 
- 	463, 6, 461, 460, 463, 464, 478, 484, 
- 	490, 498, 538, 583, 589, 607, 461, 460, 
- 	461, 100, 460, 465, 461, 468, 460, 466, 
- 	461, 460, 467, 461, 460, 463, 461, 460, 
- 	469, 461, 460, 470, 461, 460, 471, 461, 
- 	460, 472, 461, 460, 473, 461, 460, 474, 
- 	461, 460, 475, 461, 460, 476, 461, 460, 
- 	477, 461, 460, 463, 461, 460, 479, 461, 
- 	460, 480, 461, 460, 481, 461, 460, 482, 
- 	461, 460, 483, 461, 460, 463, 461, 460, 
- 	485, 461, 460, 486, 461, 460, 487, 461, 
- 	460, 488, 461, 460, 489, 461, 460, 463, 
- 	461, 460, 491, 461, 460, 492, 461, 460, 
- 	493, 461, 460, 494, 461, 460, 495, 461, 
- 	460, 496, 461, 460, 497, 461, 460, 463, 
- 	461, 460, 499, 517, 461, 460, 500, 461, 
- 	460, 501, 461, 460, 502, 461, 460, 503, 
- 	461, 460, 504, 461, 460, 505, 461, 460, 
- 	506, 461, 460, 507, 461, 460, 508, 461, 
- 	460, 509, 461, 460, 510, 461, 460, 511, 
- 	461, 460, 512, 461, 460, 513, 461, 460, 
- 	514, 461, 460, 515, 461, 460, 516, 461, 
- 	460, 461, 100, 460, 518, 461, 460, 519, 
- 	461, 460, 520, 461, 460, 521, 461, 460, 
- 	522, 461, 460, 523, 461, 460, 524, 461, 
- 	460, 525, 461, 460, 526, 461, 460, 527, 
- 	461, 460, 528, 461, 460, 529, 461, 460, 
- 	530, 461, 460, 531, 461, 460, 532, 461, 
- 	460, 533, 461, 460, 534, 461, 460, 461, 
- 	100, 535, 460, 461, 536, 460, 537, 461, 
- 	460, 482, 461, 460, 539, 461, 460, 540, 
- 	571, 461, 460, 541, 461, 460, 542, 461, 
- 	460, 543, 461, 460, 544, 461, 460, 545, 
- 	461, 460, 546, 461, 460, 547, 461, 460, 
- 	548, 461, 460, 549, 461, 460, 550, 461, 
- 	460, 551, 461, 460, 552, 461, 460, 553, 
- 	461, 460, 554, 461, 460, 461, 555, 460, 
- 	556, 461, 460, 557, 461, 460, 558, 461, 
- 	460, 559, 461, 460, 560, 461, 460, 561, 
- 	461, 460, 562, 461, 460, 563, 461, 460, 
- 	564, 461, 460, 565, 461, 460, 566, 461, 
- 	460, 567, 461, 460, 568, 461, 460, 569, 
- 	461, 460, 570, 461, 460, 516, 461, 460, 
- 	572, 461, 460, 573, 461, 460, 574, 461, 
- 	460, 575, 461, 460, 576, 461, 460, 577, 
- 	461, 460, 578, 461, 460, 579, 461, 460, 
- 	580, 461, 460, 581, 461, 460, 582, 461, 
- 	460, 516, 461, 460, 584, 461, 460, 463, 
- 	585, 461, 460, 586, 461, 100, 460, 587, 
- 	461, 460, 588, 461, 460, 463, 461, 460, 
- 	590, 461, 460, 591, 461, 460, 592, 461, 
- 	460, 593, 461, 460, 594, 461, 460, 595, 
- 	461, 460, 596, 461, 460, 597, 461, 460, 
- 	598, 461, 460, 599, 461, 460, 600, 461, 
- 	460, 601, 461, 460, 602, 461, 460, 603, 
- 	461, 460, 604, 461, 460, 605, 461, 460, 
- 	606, 461, 460, 516, 461, 460, 608, 461, 
- 	460, 536, 461, 460, 461, 610, 460, 461, 
- 	611, 460, 461, 612, 460, 461, 613, 460, 
- 	461, 614, 460, 461, 615, 460, 461, 616, 
- 	460, 461, 617, 460, 461, 618, 460, 461, 
- 	619, 460, 461, 620, 460, 461, 621, 460, 
- 	461, 622, 460, 461, 6, 460, 624, 0, 
- 	3, 625, 0, 626, 4, 0, 627, 0, 
- 	628, 0, 3, 0, 630, 0, 631, 0, 
- 	632, 0, 633, 0, 634, 0, 635, 0, 
- 	636, 0, 637, 0, 638, 0, 639, 0, 
- 	640, 0, 641, 0, 642, 0, 643, 0, 
- 	644, 0, 645, 0, 646, 0, 647, 0, 
- 	648, 0, 650, 649, 650, 649, 651, 650, 
- 	650, 6, 747, 6, 650, 649, 652, 684, 
- 	729, 650, 649, 653, 671, 650, 649, 654, 
- 	650, 649, 655, 650, 649, 656, 650, 649, 
- 	657, 650, 649, 658, 650, 649, 659, 650, 
- 	649, 660, 650, 649, 661, 650, 649, 662, 
- 	650, 649, 663, 650, 649, 664, 650, 649, 
- 	665, 650, 649, 666, 650, 649, 667, 650, 
- 	649, 668, 650, 649, 669, 650, 649, 670, 
- 	650, 649, 650, 100, 649, 672, 650, 649, 
- 	673, 650, 649, 674, 650, 649, 675, 650, 
- 	649, 676, 650, 649, 677, 650, 649, 678, 
- 	650, 649, 679, 650, 649, 680, 650, 649, 
- 	681, 650, 649, 682, 650, 649, 683, 650, 
- 	649, 670, 650, 649, 685, 650, 649, 686, 
- 	717, 650, 649, 687, 650, 649, 688, 650, 
- 	649, 689, 650, 649, 690, 650, 649, 691, 
- 	650, 649, 692, 650, 649, 693, 650, 649, 
- 	694, 650, 649, 695, 650, 649, 696, 650, 
- 	649, 697, 650, 649, 698, 650, 649, 699, 
- 	650, 649, 700, 650, 649, 650, 701, 649, 
- 	702, 650, 649, 703, 650, 649, 704, 650, 
- 	649, 705, 650, 649, 706, 650, 649, 707, 
- 	650, 649, 708, 650, 649, 709, 650, 649, 
- 	710, 650, 649, 711, 650, 649, 712, 650, 
- 	649, 713, 650, 649, 714, 650, 649, 715, 
- 	650, 649, 716, 650, 649, 670, 650, 649, 
- 	718, 650, 649, 719, 650, 649, 720, 650, 
- 	649, 721, 650, 649, 722, 650, 649, 723, 
- 	650, 649, 724, 650, 649, 725, 650, 649, 
- 	726, 650, 649, 727, 650, 649, 728, 650, 
- 	649, 670, 650, 649, 730, 650, 649, 731, 
- 	650, 649, 732, 650, 649, 733, 650, 649, 
- 	734, 650, 649, 735, 650, 649, 736, 650, 
- 	649, 737, 650, 649, 738, 650, 649, 739, 
- 	650, 649, 740, 650, 649, 741, 650, 649, 
- 	742, 650, 649, 743, 650, 649, 744, 650, 
- 	649, 745, 650, 649, 746, 650, 649, 670, 
- 	650, 649, 650, 748, 649, 650, 749, 649, 
- 	650, 750, 649, 650, 751, 649, 650, 752, 
- 	649, 650, 753, 649, 650, 754, 649, 650, 
- 	755, 649, 650, 756, 649, 650, 757, 649, 
- 	650, 758, 649, 650, 759, 649, 650, 760, 
- 	649, 650, 6, 649, 762, 0, 294, 0, 
- 	764, 0, 6, 0, 0, 0
- };
- 
- static const unsigned char _lexer_trans_actions[] = {
- 	29, 0, 54, 0, 5, 1, 0, 29, 
- 	1, 35, 0, 43, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 43, 0, 
- 	43, 149, 126, 57, 110, 23, 0, 29, 
- 	54, 0, 5, 1, 0, 29, 1, 35, 
- 	0, 43, 0, 43, 0, 43, 139, 48, 
- 	9, 106, 11, 0, 134, 45, 45, 45, 
- 	3, 122, 33, 33, 33, 0, 122, 33, 
- 	33, 33, 0, 122, 33, 0, 33, 0, 
- 	102, 7, 7, 43, 54, 0, 0, 43, 
- 	114, 25, 0, 54, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 43, 43, 43, 43, 0, 27, 118, 
- 	27, 27, 51, 27, 0, 54, 0, 1, 
- 	0, 43, 0, 0, 0, 43, 54, 37, 
- 	37, 87, 37, 37, 43, 0, 39, 0, 
- 	43, 0, 0, 54, 0, 0, 39, 0, 
- 	0, 96, 54, 0, 93, 90, 41, 96, 
- 	90, 99, 0, 43, 0, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	144, 57, 54, 0, 84, 54, 0, 72, 
- 	33, 84, 72, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 54, 
- 	0, 54, 15, 0, 63, 130, 31, 60, 
- 	57, 31, 63, 57, 66, 31, 43, 0, 
- 	54, 0, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 54, 15, 0, 0, 
- 	54, 0, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 54, 0, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 54, 15, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	0, 54, 0, 0, 54, 15, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 15, 0, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 144, 57, 54, 0, 84, 
- 	54, 0, 81, 81, 0, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 54, 
- 	21, 0, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	144, 57, 54, 0, 84, 54, 0, 78, 
- 	33, 84, 78, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 54, 
- 	0, 54, 19, 0, 0, 54, 0, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 54, 19, 0, 0, 54, 0, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	54, 19, 0, 0, 54, 0, 0, 0, 
- 	54, 0, 0, 54, 19, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 19, 0, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 144, 
- 	57, 54, 0, 84, 54, 0, 75, 33, 
- 	84, 75, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 54, 0, 
- 	54, 17, 0, 0, 54, 0, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 54, 17, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 54, 
- 	17, 0, 0, 54, 0, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 54, 0, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	0, 54, 0, 0, 54, 17, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 17, 0, 0, 43, 
- 	0, 0, 43, 0, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 144, 57, 54, 0, 84, 54, 
- 	0, 69, 33, 69, 0, 0, 0, 0, 
- 	0, 54, 0, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 54, 13, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 54, 0, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 13, 0, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 0
- };
- 
- static const unsigned char _lexer_eof_actions[] = {
- 	0, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43
- };
- 
- static const int lexer_start = 1;
- static const int lexer_first_final = 765;
- static const int lexer_error = 0;
- 
- static const int lexer_en_main = 1;
- 
- 
- #line 258 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/uk.c.rl"
- 
- static VALUE 
- unindent(VALUE con, int start_col)
- {
-   VALUE re;
-   // Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters
-   char pat[32]; 
-   snprintf(pat, 32, "^[\t ]{0,%d}", start_col); 
-   re = rb_reg_regcomp(rb_str_new2(pat));
-   rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2(""));
- 
-   return Qnil;
- 
- }
- 
- static void 
- store_kw_con(VALUE listener, const char * event_name, 
-              const char * keyword_at, size_t keyword_length, 
-              const char * at,         size_t length, 
-              int current_line)
- {
-   VALUE con = Qnil, kw = Qnil;
-   kw = ENCODED_STR_NEW(keyword_at, keyword_length);
-   con = ENCODED_STR_NEW(at, length);
-   rb_funcall(con, rb_intern("strip!"), 0);
-   rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); 
- }
- 
- static void
- store_multiline_kw_con(VALUE listener, const char * event_name,
-                       const char * keyword_at, size_t keyword_length,
-                       const char * at,         size_t length,
-                       int current_line, int start_col)
- {
-   VALUE split;
-   VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil;
- 
-   kw = ENCODED_STR_NEW(keyword_at, keyword_length);
-   con = ENCODED_STR_NEW(at, length);
- 
-   unindent(con, start_col);
-   
-   split = rb_str_split(con, "\n");
- 
-   name = rb_funcall(split, rb_intern("shift"), 0);
-   desc = rb_ary_join(split, rb_str_new2( "\n" ));
- 
-   if( name == Qnil ) 
-   {
-     name = rb_str_new2("");
-   }
-   if( rb_funcall(desc, rb_intern("size"), 0) == 0) 
-   {
-     desc = rb_str_new2("");
-   }
-   rb_funcall(name, rb_intern("strip!"), 0);
-   rb_funcall(desc, rb_intern("rstrip!"), 0);
-   rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); 
- }
- 
- static void 
- store_attr(VALUE listener, const char * attr_type,
-            const char * at, size_t length, 
-            int line)
- {
-   VALUE val = ENCODED_STR_NEW(at, length);
-   rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line));
- }
- static void 
- store_docstring_content(VALUE listener, 
-           int start_col, 
-           const char *type_at, size_t type_length,
-           const char *at, size_t length, 
-           int current_line)
- {
-   VALUE re2;
-   VALUE unescape_escaped_quotes;
-   VALUE con = ENCODED_STR_NEW(at, length);
-   VALUE con_type = ENCODED_STR_NEW(type_at, type_length);
- 
-   unindent(con, start_col);
- 
-   re2 = rb_reg_regcomp(rb_str_new2("\r\\Z"));
-   unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\""));
-   rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2(""));
-   rb_funcall(con_type, rb_intern("strip!"), 0);
-   rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\""));
-   rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line));
- }
- static void 
- raise_lexer_error(const char * at, int line)
- { 
-   rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at);
- }
- 
- static void lexer_init(lexer_state *lexer) {
-   lexer->content_start = 0;
-   lexer->content_end = 0;
-   lexer->content_len = 0;
-   lexer->docstring_content_type_start = 0;
-   lexer->docstring_content_type_end = 0;
-   lexer->mark = 0;
-   lexer->keyword_start = 0;
-   lexer->keyword_end = 0;
-   lexer->next_keyword_start = 0;
-   lexer->line_number = 1;
-   lexer->last_newline = 0;
-   lexer->final_newline = 0;
-   lexer->start_col = 0;
- }
- 
- static VALUE CLexer_alloc(VALUE klass)
- {
-   VALUE obj;
-   lexer_state *lxr = ALLOC(lexer_state);
-   lexer_init(lxr);
- 
-   obj = Data_Wrap_Struct(klass, NULL, -1, lxr);
- 
-   return obj;
- }
- 
- static VALUE CLexer_init(VALUE self, VALUE listener)
- {
-   lexer_state *lxr; 
-   rb_iv_set(self, "@listener", listener);
-   
-   lxr = NULL;
-   DATA_GET(self, lexer_state, lxr);
-   lexer_init(lxr);
-   
-   return self;
- }
- 
- static VALUE CLexer_scan(VALUE self, VALUE input)
- {
-   VALUE input_copy;
-   char *data;
-   size_t len;
-   VALUE listener = rb_iv_get(self, "@listener");
- 
-   lexer_state *lexer;
-   lexer = NULL;
-   DATA_GET(self, lexer_state, lexer);
- 
-   input_copy = rb_str_dup(input);
- 
-   rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%"));
-   data = RSTRING_PTR(input_copy);
-   len = RSTRING_LEN(input_copy);
-   
-   if (len == 0) { 
-     rb_raise(rb_eGherkinLexingError, "No content to lex.");
-   } else {
- 
-     const char *p, *pe, *eof;
-     int cs = 0;
-     
-     VALUE current_row = Qnil;
- 
-     p = data;
-     pe = data + len;
-     eof = pe;
-     
-     assert(*pe == '\0' && "pointer does not end on NULL");
-     
-     
- #line 1545 "ext/gherkin_lexer_uk/gherkin_lexer_uk.c"
- 	{
- 	cs = lexer_start;
- 	}
- 
- #line 425 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/uk.c.rl"
-     
- #line 1552 "ext/gherkin_lexer_uk/gherkin_lexer_uk.c"
- 	{
- 	int _klen;
- 	unsigned int _trans;
- 	const char *_acts;
- 	unsigned int _nacts;
- 	const char *_keys;
- 
- 	if ( p == pe )
- 		goto _test_eof;
- 	if ( cs == 0 )
- 		goto _out;
- _resume:
- 	_keys = _lexer_trans_keys + _lexer_key_offsets[cs];
- 	_trans = _lexer_index_offsets[cs];
- 
- 	_klen = _lexer_single_lengths[cs];
- 	if ( _klen > 0 ) {
- 		const char *_lower = _keys;
- 		const char *_mid;
- 		const char *_upper = _keys + _klen - 1;
- 		while (1) {
- 			if ( _upper < _lower )
- 				break;
- 
- 			_mid = _lower + ((_upper-_lower) >> 1);
- 			if ( (*p) < *_mid )
- 				_upper = _mid - 1;
- 			else if ( (*p) > *_mid )
- 				_lower = _mid + 1;
- 			else {
- 				_trans += (_mid - _keys);
- 				goto _match;
- 			}
- 		}
- 		_keys += _klen;
- 		_trans += _klen;
- 	}
- 
- 	_klen = _lexer_range_lengths[cs];
- 	if ( _klen > 0 ) {
- 		const char *_lower = _keys;
- 		const char *_mid;
- 		const char *_upper = _keys + (_klen<<1) - 2;
- 		while (1) {
- 			if ( _upper < _lower )
- 				break;
- 
- 			_mid = _lower + (((_upper-_lower) >> 1) & ~1);
- 			if ( (*p) < _mid[0] )
- 				_upper = _mid - 2;
- 			else if ( (*p) > _mid[1] )
- 				_lower = _mid + 2;
- 			else {
- 				_trans += ((_mid - _keys)>>1);
- 				goto _match;
- 			}
- 		}
- 		_trans += _klen;
- 	}
- 
- _match:
- 	cs = _lexer_trans_targs[_trans];
- 
- 	if ( _lexer_trans_actions[_trans] == 0 )
- 		goto _again;
- 
- 	_acts = _lexer_actions + _lexer_trans_actions[_trans];
- 	_nacts = (unsigned int) *_acts++;
- 	while ( _nacts-- > 0 )
- 	{
- 		switch ( *_acts++ )
- 		{
- 	case 0:
- #line 83 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/uk.c.rl"
- 	{
- 		MARK(content_start, p);
-     lexer->current_line = lexer->line_number;
-     lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2;
-   }
- 	break;
- 	case 1:
- #line 89 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/uk.c.rl"
- 	{
-     MARK(content_start, p);
-   }
- 	break;
- 	case 2:
- #line 93 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/uk.c.rl"
- 	{
-     lexer->current_line = lexer->line_number;
-     lexer->start_col = p - data - lexer->last_newline;
-   }
- 	break;
- 	case 3:
- #line 98 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/uk.c.rl"
- 	{
-     int len = LEN(content_start, PTR_TO(final_newline));
-     int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end));
- 
-     if (len < 0) len = 0;
-     if (type_len < 0) len = 0;
- 
-     store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line);
-   }
- 	break;
- 	case 4:
- #line 108 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/uk.c.rl"
- 	{ 
-     MARK(docstring_content_type_start, p);
-   }
- 	break;
- 	case 5:
- #line 112 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/uk.c.rl"
- 	{ 
-     MARK(docstring_content_type_end, p);
-   }
- 	break;
- 	case 6:
- #line 116 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/uk.c.rl"
- 	{
-     STORE_KW_END_CON(feature);
-   }
- 	break;
- 	case 7:
- #line 120 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/uk.c.rl"
- 	{
-     STORE_KW_END_CON(background);
-   }
- 	break;
- 	case 8:
- #line 124 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/uk.c.rl"
- 	{
-     STORE_KW_END_CON(scenario);
-   }
- 	break;
- 	case 9:
- #line 128 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/uk.c.rl"
- 	{
-     STORE_KW_END_CON(scenario_outline);
-   }
- 	break;
- 	case 10:
- #line 132 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/uk.c.rl"
- 	{
-     STORE_KW_END_CON(examples);
-   }
- 	break;
- 	case 11:
- #line 136 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/uk.c.rl"
- 	{
-     store_kw_con(listener, "step",
-       PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-       PTR_TO(content_start), LEN(content_start, p), 
-       lexer->current_line);
-   }
- 	break;
- 	case 12:
- #line 143 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/uk.c.rl"
- 	{
-     STORE_ATTR(comment);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 13:
- #line 148 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/uk.c.rl"
- 	{
-     STORE_ATTR(tag);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 14:
- #line 153 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/uk.c.rl"
- 	{
-     lexer->line_number += 1;
-     MARK(final_newline, p);
-   }
- 	break;
- 	case 15:
- #line 158 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/uk.c.rl"
- 	{
-     MARK(last_newline, p + 1);
-   }
- 	break;
- 	case 16:
- #line 162 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/uk.c.rl"
- 	{
-     if (lexer->mark == 0) {
-       MARK(mark, p);
-     }
-   }
- 	break;
- 	case 17:
- #line 168 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/uk.c.rl"
- 	{
-     MARK(keyword_end, p);
-     MARK(keyword_start, PTR_TO(mark));
-     MARK(content_start, p + 1);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 18:
- #line 175 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/uk.c.rl"
- 	{
-     MARK(content_end, p);
-   }
- 	break;
- 	case 19:
- #line 179 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/uk.c.rl"
- 	{
-     p = p - 1;
-     lexer->current_line = lexer->line_number;
-     current_row = rb_ary_new();
-   }
- 	break;
- 	case 20:
- #line 185 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/uk.c.rl"
- 	{
- 		MARK(content_start, p);
-   }
- 	break;
- 	case 21:
- #line 189 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/uk.c.rl"
- 	{
-     VALUE re_pipe, re_newline, re_backslash;
-     VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
-     rb_funcall(con, rb_intern("strip!"), 0);
-     re_pipe      = rb_reg_regcomp(rb_str_new2("\\\\\\|"));
-     re_newline   = rb_reg_regcomp(rb_str_new2("\\\\n"));
-     re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_pipe,      rb_str_new2("|"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_newline,   rb_str_new2("\n"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\"));
- 
-     rb_ary_push(current_row, con);
-   }
- 	break;
- 	case 22:
- #line 203 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/uk.c.rl"
- 	{
-     rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
-   }
- 	break;
- 	case 23:
- #line 207 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/uk.c.rl"
- 	{
-     int line;
-     if (cs < lexer_first_final) {
-       size_t count = 0;
-       VALUE newstr_val;
-       char *newstr;
-       int newstr_count = 0;        
-       size_t len;
-       const char *buff;
-       if (lexer->last_newline != 0) {
-         len = LEN(last_newline, eof);
-         buff = PTR_TO(last_newline);
-       } else {
-         len = strlen(data);
-         buff = data;
-       }
- 
-       // Allocate as a ruby string so that it gets cleaned up by GC
-       newstr_val = rb_str_new(buff, len);
-       newstr = RSTRING_PTR(newstr_val);
- 
- 
-       for (count = 0; count < len; count++) {
-         if(buff[count] == 10) {
-           newstr[newstr_count] = '\0'; // terminate new string at first newline found
-           break;
-         } else {
-           if (buff[count] == '%') {
-             newstr[newstr_count++] = buff[count];
-             newstr[newstr_count] = buff[count];
-           } else {
-             newstr[newstr_count] = buff[count];
-           }
-         }
-         newstr_count++;
-       }
- 
-       line = lexer->line_number;
-       lexer_init(lexer); // Re-initialize so we can scan again with the same lexer
-       raise_lexer_error(newstr, line);
-     } else {
-       rb_funcall(listener, rb_intern("eof"), 0);
-     }
-   }
- 	break;
- #line 1842 "ext/gherkin_lexer_uk/gherkin_lexer_uk.c"
- 		}
- 	}
- 
- _again:
- 	if ( cs == 0 )
- 		goto _out;
- 	if ( ++p != pe )
- 		goto _resume;
- 	_test_eof: {}
- 	if ( p == eof )
- 	{
- 	const char *__acts = _lexer_actions + _lexer_eof_actions[cs];
- 	unsigned int __nacts = (unsigned int) *__acts++;
- 	while ( __nacts-- > 0 ) {
- 		switch ( *__acts++ ) {
- 	case 23:
- #line 207 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/uk.c.rl"
- 	{
-     int line;
-     if (cs < lexer_first_final) {
-       size_t count = 0;
-       VALUE newstr_val;
-       char *newstr;
-       int newstr_count = 0;        
-       size_t len;
-       const char *buff;
-       if (lexer->last_newline != 0) {
-         len = LEN(last_newline, eof);
-         buff = PTR_TO(last_newline);
-       } else {
-         len = strlen(data);
-         buff = data;
-       }
- 
-       // Allocate as a ruby string so that it gets cleaned up by GC
-       newstr_val = rb_str_new(buff, len);
-       newstr = RSTRING_PTR(newstr_val);
- 
- 
-       for (count = 0; count < len; count++) {
-         if(buff[count] == 10) {
-           newstr[newstr_count] = '\0'; // terminate new string at first newline found
-           break;
-         } else {
-           if (buff[count] == '%') {
-             newstr[newstr_count++] = buff[count];
-             newstr[newstr_count] = buff[count];
-           } else {
-             newstr[newstr_count] = buff[count];
-           }
-         }
-         newstr_count++;
-       }
- 
-       line = lexer->line_number;
-       lexer_init(lexer); // Re-initialize so we can scan again with the same lexer
-       raise_lexer_error(newstr, line);
-     } else {
-       rb_funcall(listener, rb_intern("eof"), 0);
-     }
-   }
- 	break;
- #line 1905 "ext/gherkin_lexer_uk/gherkin_lexer_uk.c"
- 		}
- 	}
- 	}
- 
- 	_out: {}
- 	}
- 
- #line 426 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/uk.c.rl"
- 
-     assert(p <= pe && "data overflow after parsing execute");
-     assert(lexer->content_start <= len && "content starts after data end");
-     assert(lexer->mark < len && "mark is after data end");
-     
-     // Reset lexer by re-initializing the whole thing
-     lexer_init(lexer);
- 
-     if (cs == lexer_error) {
-       rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails.");
-     } else {
-       return Qtrue;
-     }
-   }
- }
- 
- void Init_gherkin_lexer_uk()
- {
-   mGherkin = rb_define_module("Gherkin");
-   mGherkinLexer = rb_define_module_under(mGherkin, "Lexer");
-   rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError"));
- 
-   mCLexer = rb_define_module_under(mGherkin, "CLexer");
-   cI18nLexer = rb_define_class_under(mCLexer, "Uk", rb_cObject);
-   rb_define_alloc_func(cI18nLexer, CLexer_alloc);
-   rb_define_method(cI18nLexer, "initialize", CLexer_init, 1);
-   rb_define_method(cI18nLexer, "scan", CLexer_scan, 1);
- }
- 
 -#line 1 "ragel/i18n/uk.c.rl"
 -#include <assert.h>
 -#include <ruby.h>
 -
 -#if defined(_WIN32)
 -#include <stddef.h>
 -#endif
 -
 -#ifdef HAVE_RUBY_RE_H
 -#include <ruby/re.h>
 -#else
 -#include <re.h>
 -#endif
 -
 -#ifdef HAVE_RUBY_ENCODING_H
 -#include <ruby/encoding.h>
 -#define ENCODED_STR_NEW(ptr, len) \
 -    rb_enc_str_new(ptr, len, rb_utf8_encoding())
 -#else
 -#define ENCODED_STR_NEW(ptr, len) \
 -    rb_str_new(ptr, len)
 -#endif
 -
 -#ifndef RSTRING_PTR
 -#define RSTRING_PTR(s) (RSTRING(s)->ptr)
 -#endif
 -
 -#ifndef RSTRING_LEN
 -#define RSTRING_LEN(s) (RSTRING(s)->len)
 -#endif
 -
 -#define DATA_GET(FROM, TYPE, NAME) \
 -  Data_Get_Struct(FROM, TYPE, NAME); \
 -  if (NAME == NULL) { \
 -    rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \
 -  }
 - 
 -typedef struct lexer_state {
 -  int content_len;
 -  int line_number;
 -  int current_line;
 -  int start_col;
 -  size_t mark;
 -  size_t keyword_start;
 -  size_t keyword_end;
 -  size_t next_keyword_start;
 -  size_t content_start;
 -  size_t content_end;
 -  size_t docstring_content_type_start;
 -  size_t docstring_content_type_end;
 -  size_t query_start;
 -  size_t last_newline;
 -  size_t final_newline;
 -} lexer_state;
 -
 -static VALUE mGherkin;
 -static VALUE mGherkinLexer;
 -static VALUE mCLexer;
 -static VALUE cI18nLexer;
 -static VALUE rb_eGherkinLexingError;
 -
 -#define LEN(AT, P) (P - data - lexer->AT)
 -#define MARK(M, P) (lexer->M = (P) - data)
 -#define PTR_TO(P) (data + lexer->P)
 -
 -#define STORE_KW_END_CON(EVENT) \
 -  store_multiline_kw_con(listener, # EVENT, \
 -    PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \
 -    PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \
 -    lexer->current_line, lexer->start_col); \
 -    if (lexer->content_end != 0) { \
 -      p = PTR_TO(content_end - 1); \
 -    } \
 -    lexer->content_end = 0
 -
 -#define STORE_ATTR(ATTR) \
 -    store_attr(listener, # ATTR, \
 -      PTR_TO(content_start), LEN(content_start, p), \
 -      lexer->line_number)
 -
 -
 -#line 254 "ragel/i18n/uk.c.rl"
 -
 -
 -/** Data **/
 -
 -#line 89 "ext/gherkin_lexer_uk/gherkin_lexer_uk.c"
 -static const char _lexer_actions[] = {
 -	0, 1, 0, 1, 1, 1, 2, 1, 
 -	3, 1, 4, 1, 5, 1, 6, 1, 
 -	7, 1, 8, 1, 9, 1, 10, 1, 
 -	11, 1, 12, 1, 13, 1, 16, 1, 
 -	17, 1, 18, 1, 19, 1, 20, 1, 
 -	21, 1, 22, 1, 23, 2, 1, 18, 
 -	2, 4, 5, 2, 13, 0, 2, 14, 
 -	15, 2, 17, 0, 2, 17, 2, 2, 
 -	17, 16, 2, 17, 19, 2, 18, 6, 
 -	2, 18, 7, 2, 18, 8, 2, 18, 
 -	9, 2, 18, 10, 2, 18, 16, 2, 
 -	20, 21, 2, 22, 0, 2, 22, 2, 
 -	2, 22, 16, 2, 22, 19, 3, 3, 
 -	14, 15, 3, 5, 14, 15, 3, 11, 
 -	14, 15, 3, 12, 14, 15, 3, 13, 
 -	14, 15, 3, 14, 15, 18, 3, 17, 
 -	0, 11, 3, 17, 14, 15, 4, 1, 
 -	14, 15, 18, 4, 4, 5, 14, 15, 
 -	4, 17, 0, 14, 15, 5, 17, 0, 
 -	11, 14, 15
 -};
 -
 -static const short _lexer_key_offsets[] = {
 -	0, 0, 12, 22, 23, 25, 27, 38, 
 -	39, 40, 42, 44, 49, 54, 59, 64, 
 -	68, 72, 74, 75, 76, 77, 78, 79, 
 -	80, 81, 82, 83, 84, 85, 86, 87, 
 -	88, 89, 94, 101, 106, 110, 116, 119, 
 -	121, 127, 138, 140, 141, 142, 143, 144, 
 -	145, 146, 147, 148, 149, 150, 151, 152, 
 -	153, 154, 155, 156, 157, 158, 159, 160, 
 -	161, 162, 163, 164, 165, 166, 167, 168, 
 -	169, 170, 171, 172, 173, 175, 176, 177, 
 -	178, 179, 180, 181, 182, 183, 184, 185, 
 -	186, 187, 188, 189, 190, 191, 192, 193, 
 -	194, 195, 204, 215, 217, 228, 231, 233, 
 -	235, 237, 239, 241, 243, 245, 247, 249, 
 -	251, 253, 255, 257, 259, 261, 263, 265, 
 -	267, 269, 271, 273, 275, 277, 279, 281, 
 -	283, 285, 287, 289, 291, 293, 295, 297, 
 -	299, 301, 303, 305, 307, 309, 311, 313, 
 -	315, 317, 319, 321, 323, 325, 327, 329, 
 -	331, 333, 336, 338, 340, 342, 344, 347, 
 -	349, 351, 353, 355, 357, 359, 361, 363, 
 -	365, 367, 369, 371, 373, 375, 377, 379, 
 -	381, 383, 385, 387, 389, 391, 393, 395, 
 -	397, 399, 401, 403, 405, 407, 409, 411, 
 -	413, 415, 417, 419, 421, 423, 425, 427, 
 -	429, 431, 433, 435, 437, 440, 443, 445, 
 -	447, 449, 451, 453, 455, 457, 459, 461, 
 -	463, 465, 467, 469, 471, 473, 475, 477, 
 -	479, 481, 483, 485, 487, 489, 491, 493, 
 -	495, 497, 499, 501, 503, 505, 507, 509, 
 -	511, 513, 515, 517, 518, 519, 520, 521, 
 -	523, 524, 525, 526, 527, 528, 529, 530, 
 -	531, 532, 533, 534, 541, 543, 545, 547, 
 -	549, 551, 553, 555, 557, 559, 561, 563, 
 -	565, 567, 569, 571, 573, 575, 577, 579, 
 -	581, 582, 583, 584, 585, 586, 587, 588, 
 -	589, 590, 591, 592, 593, 595, 596, 597, 
 -	598, 599, 601, 602, 603, 604, 605, 606, 
 -	607, 608, 609, 610, 611, 612, 613, 614, 
 -	615, 616, 617, 618, 619, 620, 621, 622, 
 -	623, 624, 625, 626, 627, 628, 629, 630, 
 -	631, 632, 633, 634, 635, 644, 655, 657, 
 -	660, 662, 664, 666, 668, 670, 672, 674, 
 -	676, 678, 680, 682, 684, 686, 688, 690, 
 -	692, 694, 696, 698, 700, 702, 704, 706, 
 -	708, 710, 712, 714, 716, 718, 720, 722, 
 -	724, 726, 728, 730, 732, 734, 736, 738, 
 -	740, 742, 744, 746, 748, 750, 752, 754, 
 -	756, 758, 760, 762, 765, 767, 769, 771, 
 -	773, 775, 777, 779, 781, 783, 785, 787, 
 -	789, 791, 793, 795, 797, 799, 801, 803, 
 -	806, 809, 811, 813, 815, 817, 819, 821, 
 -	823, 825, 827, 829, 831, 833, 835, 837, 
 -	839, 841, 843, 845, 847, 849, 851, 853, 
 -	855, 857, 859, 861, 863, 865, 867, 869, 
 -	871, 873, 875, 877, 879, 881, 883, 884, 
 -	885, 886, 887, 888, 889, 890, 891, 892, 
 -	893, 894, 895, 896, 897, 898, 907, 918, 
 -	920, 923, 925, 927, 929, 931, 933, 935, 
 -	937, 939, 941, 943, 945, 947, 949, 951, 
 -	953, 955, 957, 959, 961, 963, 965, 967, 
 -	969, 971, 973, 975, 977, 979, 981, 983, 
 -	985, 987, 989, 992, 994, 996, 998, 1000, 
 -	1002, 1004, 1006, 1008, 1010, 1012, 1014, 1016, 
 -	1018, 1020, 1022, 1024, 1026, 1028, 1030, 1032, 
 -	1034, 1036, 1038, 1040, 1042, 1044, 1046, 1048, 
 -	1050, 1052, 1054, 1056, 1058, 1060, 1062, 1065, 
 -	1067, 1069, 1071, 1073, 1076, 1078, 1080, 1082, 
 -	1084, 1086, 1088, 1090, 1092, 1094, 1096, 1098, 
 -	1100, 1102, 1104, 1106, 1108, 1110, 1112, 1114, 
 -	1116, 1118, 1120, 1122, 1124, 1126, 1128, 1130, 
 -	1132, 1134, 1136, 1138, 1140, 1142, 1144, 1146, 
 -	1148, 1150, 1152, 1154, 1156, 1158, 1160, 1162, 
 -	1164, 1167, 1170, 1172, 1174, 1176, 1178, 1180, 
 -	1182, 1184, 1186, 1188, 1190, 1192, 1194, 1196, 
 -	1198, 1200, 1202, 1204, 1206, 1208, 1210, 1212, 
 -	1214, 1216, 1218, 1220, 1222, 1224, 1226, 1228, 
 -	1230, 1232, 1234, 1236, 1238, 1240, 1242, 1244, 
 -	1245, 1247, 1249, 1250, 1251, 1252, 1253, 1254, 
 -	1255, 1256, 1257, 1258, 1259, 1260, 1261, 1262, 
 -	1263, 1264, 1265, 1266, 1267, 1268, 1269, 1270, 
 -	1271, 1272, 1273, 1281, 1285, 1288, 1290, 1292, 
 -	1294, 1296, 1298, 1300, 1302, 1304, 1306, 1308, 
 -	1310, 1312, 1314, 1316, 1318, 1320, 1322, 1324, 
 -	1326, 1328, 1330, 1332, 1334, 1336, 1338, 1340, 
 -	1342, 1344, 1346, 1348, 1350, 1352, 1355, 1357, 
 -	1359, 1361, 1363, 1365, 1367, 1369, 1371, 1373, 
 -	1375, 1377, 1379, 1381, 1383, 1385, 1387, 1389, 
 -	1391, 1393, 1395, 1397, 1399, 1401, 1403, 1405, 
 -	1407, 1409, 1411, 1413, 1415, 1417, 1419, 1421, 
 -	1423, 1425, 1427, 1429, 1431, 1433, 1435, 1437, 
 -	1439, 1441, 1443, 1445, 1447, 1449, 1451, 1453, 
 -	1455, 1457, 1459, 1461, 1463, 1465, 1467, 1469, 
 -	1471, 1473, 1475, 1477, 1479, 1481, 1483, 1485, 
 -	1487, 1489, 1491, 1493, 1495, 1497, 1499, 1501, 
 -	1503, 1505, 1506, 1507, 1508, 1509
 -};
 -
 -static const char _lexer_trans_keys[] = {
 -	-48, -17, 10, 32, 34, 35, 37, 42, 
 -	64, 124, 9, 13, -122, -112, -108, -102, 
 -	-99, -97, -95, -94, -92, -81, 32, 10, 
 -	13, 10, 13, -48, 10, 32, 34, 35, 
 -	37, 42, 64, 124, 9, 13, 34, 34, 
 -	10, 13, 10, 13, 10, 32, 34, 9, 
 -	13, 10, 32, 34, 9, 13, 10, 32, 
 -	34, 9, 13, 10, 32, 34, 9, 13, 
 -	10, 32, 9, 13, 10, 32, 9, 13, 
 -	10, 13, 10, 95, 70, 69, 65, 84, 
 -	85, 82, 69, 95, 69, 78, 68, 95, 
 -	37, 13, 32, 64, 9, 10, 9, 10, 
 -	13, 32, 64, 11, 12, 10, 32, 64, 
 -	9, 13, 32, 124, 9, 13, 10, 32, 
 -	92, 124, 9, 13, 10, 92, 124, 10, 
 -	92, 10, 32, 92, 124, 9, 13, -48, 
 -	10, 32, 34, 35, 37, 42, 64, 124, 
 -	9, 13, -48, 32, -69, -48, -75, -47, 
 -	-126, -48, -80, -48, -70, -48, -66, -48, 
 -	-74, -48, -80, -48, -67, -48, -66, -48, 
 -	-66, -48, -69, -48, -72, -48, -75, -47, 
 -	-123, -48, -80, -48, -71, -48, -47, -75, 
 -	-47, -128, -48, -75, -48, -76, -47, -125, 
 -	-48, -68, -48, -66, -48, -78, -48, -80, 
 -	58, 10, 10, -48, 10, 32, 35, 37, 
 -	42, 64, 9, 13, -122, -112, -108, -102, 
 -	-99, -97, -95, -94, -92, -81, 10, 10, 
 -	32, -48, 10, 32, 34, 35, 37, 42, 
 -	64, 124, 9, 13, -48, 10, 32, -69, 
 -	10, -48, 10, -75, 10, -47, 10, -126, 
 -	10, -48, 10, -80, 10, -48, 10, -70, 
 -	10, -48, 10, -66, 10, -48, 10, -74, 
 -	10, -48, 10, -80, 10, -48, 10, -67, 
 -	10, -48, 10, -66, 10, -48, 10, -66, 
 -	10, -48, 10, -69, 10, -48, 10, -72, 
 -	10, -48, 10, -75, 10, -47, 10, -123, 
 -	10, -48, 10, -80, 10, -48, 10, -71, 
 -	10, -47, 10, -128, 10, -48, 10, -72, 
 -	10, -48, 10, -65, 10, -47, 10, -125, 
 -	10, -47, 10, -127, 10, -47, 10, -126, 
 -	10, -48, 10, -72, 10, -48, 10, -68, 
 -	10, -48, 10, -66, 10, 10, 32, 44, 
 -	10, 32, -47, 10, -119, 10, -47, 10, 
 -	-126, -122, 10, -47, 10, -128, 10, -47, 
 -	10, -125, 10, -48, 10, -70, 10, -47, 
 -	10, -126, 10, -47, 10, -125, 10, -47, 
 -	10, -128, 10, -48, 10, -80, 10, 10, 
 -	32, -47, 10, -127, 10, -47, 10, -122, 
 -	10, -48, 10, -75, 10, -48, 10, -67, 
 -	10, -48, 10, -80, 10, -47, 10, -128, 
 -	10, -47, 10, -106, 10, -47, 10, -114, 
 -	10, 10, 58, -48, 10, -75, 10, -48, 
 -	10, -67, 10, -48, 10, -80, 10, -47, 
 -	10, -128, 10, -47, 10, -106, 10, -48, 
 -	10, -71, 10, -48, 10, -80, -66, 10, 
 -	-48, 10, 32, -76, 10, -47, 10, -106, 
 -	10, -47, 10, -125, 10, -48, 10, -67, 
 -	10, -48, 10, -70, 10, -47, 10, -122, 
 -	10, -47, 10, -106, 10, -48, 10, -66, 
 -	10, -48, 10, -67, 10, -48, 10, -80, 
 -	10, -48, 10, -69, 10, -48, 10, -70, 
 -	10, 10, 95, 10, 70, 10, 69, 10, 
 -	65, 10, 84, 10, 85, 10, 82, 10, 
 -	69, 10, 95, 10, 69, 10, 78, 10, 
 -	68, 10, 95, 10, 37, -128, -48, -72, 
 -	-48, -70, -65, -48, -69, -48, -80, -48, 
 -	-76, -48, -72, 58, 10, 10, -48, 10, 
 -	32, 35, 124, 9, 13, -92, 10, -47, 
 -	10, -125, 10, -48, 10, -67, 10, -48, 
 -	10, -70, 10, -47, 10, -122, 10, -47, 
 -	10, -106, 10, -48, 10, -66, 10, -48, 
 -	10, -67, 10, -48, 10, -80, 10, -48, 
 -	10, -69, 10, 10, 58, -47, -125, -47, 
 -	-127, -47, -126, -48, -72, -48, -68, -48, 
 -	-66, 32, 44, 32, -47, -119, -47, -126, 
 -	-122, -47, -128, -47, -125, -48, -70, -47, 
 -	-126, -47, -125, -47, -128, -48, -80, 32, 
 -	-47, -127, -47, -122, -48, -75, -48, -67, 
 -	-48, -80, -47, -128, -47, -106, -47, -114, 
 -	58, 10, 10, -48, 10, 32, 35, 37, 
 -	42, 64, 9, 13, -122, -112, -108, -102, 
 -	-99, -97, -95, -94, -92, -81, 10, 10, 
 -	32, -48, 10, 32, -69, 10, -48, 10, 
 -	-75, 10, -47, 10, -126, 10, -48, 10, 
 -	-80, 10, -48, 10, -70, 10, -48, 10, 
 -	-66, 10, -48, 10, -74, 10, -48, 10, 
 -	-80, 10, -48, 10, -67, 10, -48, 10, 
 -	-66, 10, -48, 10, -66, 10, -48, 10, 
 -	-69, 10, -48, 10, -72, 10, -48, 10, 
 -	-75, 10, -47, 10, -123, 10, -48, 10, 
 -	-80, 10, -48, 10, -71, 10, -47, 10, 
 -	-128, 10, -48, 10, -72, 10, -48, 10, 
 -	-65, 10, -47, 10, -125, 10, -47, 10, 
 -	-127, 10, -47, 10, -126, 10, -48, 10, 
 -	-72, 10, -48, 10, -68, 10, -48, 10, 
 -	-66, 10, 10, 32, 44, 10, 32, -47, 
 -	10, -119, 10, -47, 10, -122, 10, -48, 
 -	10, -75, 10, -48, 10, -67, 10, -48, 
 -	10, -80, 10, -47, 10, -128, 10, -47, 
 -	10, -106, 10, -48, 10, -71, 10, 10, 
 -	58, -48, 10, -80, -66, 10, -48, 10, 
 -	32, -76, 10, -47, 10, -106, 10, -47, 
 -	10, -125, 10, -48, 10, -67, 10, -48, 
 -	10, -70, 10, -47, 10, -122, 10, -47, 
 -	10, -106, 10, -48, 10, -66, 10, -48, 
 -	10, -67, 10, -48, 10, -80, 10, -48, 
 -	10, -69, 10, -48, 10, -70, 10, 10, 
 -	95, 10, 70, 10, 69, 10, 65, 10, 
 -	84, 10, 85, 10, 82, 10, 69, 10, 
 -	95, 10, 69, 10, 78, 10, 68, 10, 
 -	95, 10, 37, -48, -75, -48, -67, -48, 
 -	-80, -47, -128, -47, -106, -48, -71, 58, 
 -	10, 10, -48, 10, 32, 35, 37, 42, 
 -	64, 9, 13, -122, -112, -108, -102, -99, 
 -	-97, -95, -94, -92, -81, 10, 10, 32, 
 -	-48, 10, 32, -69, 10, -48, 10, -75, 
 -	10, -47, 10, -126, 10, -48, 10, -80, 
 -	10, -48, 10, -70, 10, -48, 10, -66, 
 -	10, -48, 10, -74, 10, -48, 10, -80, 
 -	10, -48, 10, -67, 10, -48, 10, -66, 
 -	10, -48, 10, -66, 10, -48, 10, -69, 
 -	10, -48, 10, -72, 10, -48, 10, -75, 
 -	10, -47, 10, -123, 10, -48, 10, -80, 
 -	10, -48, 10, -71, 10, -48, -47, 10, 
 -	-75, 10, -47, 10, -128, 10, -48, 10, 
 -	-75, 10, -48, 10, -76, 10, -47, 10, 
 -	-125, 10, -48, 10, -68, 10, -48, 10, 
 -	-66, 10, -48, 10, -78, 10, -48, 10, 
 -	-80, 10, 10, 58, -128, 10, -48, 10, 
 -	-72, 10, -48, 10, -65, 10, -47, 10, 
 -	-125, 10, -47, 10, -127, 10, -47, 10, 
 -	-126, 10, -48, 10, -72, 10, -48, 10, 
 -	-68, 10, -48, 10, -66, 10, 10, 32, 
 -	44, 10, 32, -47, 10, -119, 10, -47, 
 -	10, -126, -122, 10, -47, 10, -128, 10, 
 -	-47, 10, -125, 10, -48, 10, -70, 10, 
 -	-47, 10, -126, 10, -47, 10, -125, 10, 
 -	-47, 10, -128, 10, -48, 10, -80, 10, 
 -	10, 32, -47, 10, -127, 10, -47, 10, 
 -	-122, 10, -48, 10, -75, 10, -48, 10, 
 -	-67, 10, -48, 10, -80, 10, -47, 10, 
 -	-128, 10, -47, 10, -106, 10, -47, 10, 
 -	-114, 10, -48, 10, -75, 10, -48, 10, 
 -	-67, 10, -48, 10, -80, 10, -47, 10, 
 -	-128, 10, -47, 10, -106, 10, -48, 10, 
 -	-71, 10, -48, 10, -80, -66, 10, -48, 
 -	10, 32, -76, 10, -47, 10, -106, 10, 
 -	-47, 10, -125, 10, -48, 10, -67, 10, 
 -	-48, 10, -70, 10, -47, 10, -122, 10, 
 -	-47, 10, -106, 10, -48, 10, -66, 10, 
 -	-48, 10, -67, 10, -48, 10, -80, 10, 
 -	-48, 10, -69, 10, -48, 10, -70, 10, 
 -	10, 95, 10, 70, 10, 69, 10, 65, 
 -	10, 84, 10, 85, 10, 82, 10, 69, 
 -	10, 95, 10, 69, 10, 78, 10, 68, 
 -	10, 95, 10, 37, -48, -80, -66, -48, 
 -	32, -76, -47, -106, -47, -125, -48, -67, 
 -	-48, -70, -47, -122, -47, -106, -48, -66, 
 -	-48, -67, -48, -80, -48, -69, 58, 10, 
 -	10, -48, 10, 32, 35, 37, 64, 9, 
 -	13, -97, -95, -92, 10, -48, -47, 10, 
 -	-75, 10, -47, 10, -128, 10, -48, 10, 
 -	-75, 10, -48, 10, -76, 10, -47, 10, 
 -	-125, 10, -48, 10, -68, 10, -48, 10, 
 -	-66, 10, -48, 10, -78, 10, -48, 10, 
 -	-80, 10, 10, 58, -128, 10, -48, 10, 
 -	-72, 10, -48, 10, -70, 10, -48, 10, 
 -	-69, 10, -48, 10, -80, 10, -48, 10, 
 -	-76, 10, -48, 10, -72, 10, -47, 10, 
 -	-126, -122, 10, -47, 10, -128, 10, -47, 
 -	10, -125, 10, -48, 10, -70, 10, -47, 
 -	10, -126, 10, -47, 10, -125, 10, -47, 
 -	10, -128, 10, -48, 10, -80, 10, 10, 
 -	32, -47, 10, -127, 10, -47, 10, -122, 
 -	10, -48, 10, -75, 10, -48, 10, -67, 
 -	10, -48, 10, -80, 10, -47, 10, -128, 
 -	10, -47, 10, -106, 10, -47, 10, -114, 
 -	10, -48, 10, -75, 10, -48, 10, -67, 
 -	10, -48, 10, -80, 10, -47, 10, -128, 
 -	10, -47, 10, -106, 10, -48, 10, -71, 
 -	10, -47, 10, -125, 10, -48, 10, -67, 
 -	10, -48, 10, -70, 10, -47, 10, -122, 
 -	10, -47, 10, -106, 10, -48, 10, -66, 
 -	10, -48, 10, -67, 10, -48, 10, -80, 
 -	10, -48, 10, -69, 10, 10, 95, 10, 
 -	70, 10, 69, 10, 65, 10, 84, 10, 
 -	85, 10, 82, 10, 69, 10, 95, 10, 
 -	69, 10, 78, 10, 68, 10, 95, 10, 
 -	37, -48, -70, -69, -65, 0
 -};
 -
 -static const char _lexer_single_lengths[] = {
 -	0, 10, 10, 1, 2, 2, 9, 1, 
 -	1, 2, 2, 3, 3, 3, 3, 2, 
 -	2, 2, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 3, 5, 3, 2, 4, 3, 2, 
 -	4, 9, 2, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 2, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 7, 11, 2, 9, 3, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 3, 2, 2, 2, 2, 3, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 3, 3, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 1, 1, 1, 1, 2, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 5, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 2, 1, 1, 1, 
 -	1, 2, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 7, 11, 2, 3, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 3, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 3, 
 -	3, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 7, 11, 2, 
 -	3, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 3, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 3, 2, 
 -	2, 2, 2, 3, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	3, 3, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 1, 
 -	2, 2, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 6, 4, 3, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 3, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 1, 1, 1, 1, 0
 -};
 -
 -static const char _lexer_range_lengths[] = {
 -	0, 1, 0, 0, 0, 0, 1, 0, 
 -	0, 0, 0, 1, 1, 1, 1, 1, 
 -	1, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 1, 1, 1, 1, 1, 0, 0, 
 -	1, 1, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 1, 0, 0, 1, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 1, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 1, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 1, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 1, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0
 -};
 -
 -static const short _lexer_index_offsets[] = {
 -	0, 0, 12, 23, 25, 28, 31, 42, 
 -	44, 46, 49, 52, 57, 62, 67, 72, 
 -	76, 80, 83, 85, 87, 89, 91, 93, 
 -	95, 97, 99, 101, 103, 105, 107, 109, 
 -	111, 113, 118, 125, 130, 134, 140, 144, 
 -	147, 153, 164, 167, 169, 171, 173, 175, 
 -	177, 179, 181, 183, 185, 187, 189, 191, 
 -	193, 195, 197, 199, 201, 203, 205, 207, 
 -	209, 211, 213, 215, 217, 219, 221, 223, 
 -	225, 227, 229, 231, 233, 236, 238, 240, 
 -	242, 244, 246, 248, 250, 252, 254, 256, 
 -	258, 260, 262, 264, 266, 268, 270, 272, 
 -	274, 276, 285, 297, 300, 311, 315, 318, 
 -	321, 324, 327, 330, 333, 336, 339, 342, 
 -	345, 348, 351, 354, 357, 360, 363, 366, 
 -	369, 372, 375, 378, 381, 384, 387, 390, 
 -	393, 396, 399, 402, 405, 408, 411, 414, 
 -	417, 420, 423, 426, 429, 432, 435, 438, 
 -	441, 444, 447, 450, 453, 456, 459, 462, 
 -	465, 468, 472, 475, 478, 481, 484, 488, 
 -	491, 494, 497, 500, 503, 506, 509, 512, 
 -	515, 518, 521, 524, 527, 530, 533, 536, 
 -	539, 542, 545, 548, 551, 554, 557, 560, 
 -	563, 566, 569, 572, 575, 578, 581, 584, 
 -	587, 590, 593, 596, 599, 602, 605, 608, 
 -	611, 614, 617, 620, 623, 627, 631, 634, 
 -	637, 640, 643, 646, 649, 652, 655, 658, 
 -	661, 664, 667, 670, 673, 676, 679, 682, 
 -	685, 688, 691, 694, 697, 700, 703, 706, 
 -	709, 712, 715, 718, 721, 724, 727, 730, 
 -	733, 736, 739, 742, 744, 746, 748, 750, 
 -	753, 755, 757, 759, 761, 763, 765, 767, 
 -	769, 771, 773, 775, 782, 785, 788, 791, 
 -	794, 797, 800, 803, 806, 809, 812, 815, 
 -	818, 821, 824, 827, 830, 833, 836, 839, 
 -	842, 844, 846, 848, 850, 852, 854, 856, 
 -	858, 860, 862, 864, 866, 869, 871, 873, 
 -	875, 877, 880, 882, 884, 886, 888, 890, 
 -	892, 894, 896, 898, 900, 902, 904, 906, 
 -	908, 910, 912, 914, 916, 918, 920, 922, 
 -	924, 926, 928, 930, 932, 934, 936, 938, 
 -	940, 942, 944, 946, 948, 957, 969, 972, 
 -	976, 979, 982, 985, 988, 991, 994, 997, 
 -	1000, 1003, 1006, 1009, 1012, 1015, 1018, 1021, 
 -	1024, 1027, 1030, 1033, 1036, 1039, 1042, 1045, 
 -	1048, 1051, 1054, 1057, 1060, 1063, 1066, 1069, 
 -	1072, 1075, 1078, 1081, 1084, 1087, 1090, 1093, 
 -	1096, 1099, 1102, 1105, 1108, 1111, 1114, 1117, 
 -	1120, 1123, 1126, 1129, 1133, 1136, 1139, 1142, 
 -	1145, 1148, 1151, 1154, 1157, 1160, 1163, 1166, 
 -	1169, 1172, 1175, 1178, 1181, 1184, 1187, 1190, 
 -	1194, 1198, 1201, 1204, 1207, 1210, 1213, 1216, 
 -	1219, 1222, 1225, 1228, 1231, 1234, 1237, 1240, 
 -	1243, 1246, 1249, 1252, 1255, 1258, 1261, 1264, 
 -	1267, 1270, 1273, 1276, 1279, 1282, 1285, 1288, 
 -	1291, 1294, 1297, 1300, 1303, 1306, 1309, 1311, 
 -	1313, 1315, 1317, 1319, 1321, 1323, 1325, 1327, 
 -	1329, 1331, 1333, 1335, 1337, 1339, 1348, 1360, 
 -	1363, 1367, 1370, 1373, 1376, 1379, 1382, 1385, 
 -	1388, 1391, 1394, 1397, 1400, 1403, 1406, 1409, 
 -	1412, 1415, 1418, 1421, 1424, 1427, 1430, 1433, 
 -	1436, 1439, 1442, 1445, 1448, 1451, 1454, 1457, 
 -	1460, 1463, 1466, 1470, 1473, 1476, 1479, 1482, 
 -	1485, 1488, 1491, 1494, 1497, 1500, 1503, 1506, 
 -	1509, 1512, 1515, 1518, 1521, 1524, 1527, 1530, 
 -	1533, 1536, 1539, 1542, 1545, 1548, 1551, 1554, 
 -	1557, 1560, 1563, 1566, 1569, 1572, 1575, 1579, 
 -	1582, 1585, 1588, 1591, 1595, 1598, 1601, 1604, 
 -	1607, 1610, 1613, 1616, 1619, 1622, 1625, 1628, 
 -	1631, 1634, 1637, 1640, 1643, 1646, 1649, 1652, 
 -	1655, 1658, 1661, 1664, 1667, 1670, 1673, 1676, 
 -	1679, 1682, 1685, 1688, 1691, 1694, 1697, 1700, 
 -	1703, 1706, 1709, 1712, 1715, 1718, 1721, 1724, 
 -	1727, 1731, 1735, 1738, 1741, 1744, 1747, 1750, 
 -	1753, 1756, 1759, 1762, 1765, 1768, 1771, 1774, 
 -	1777, 1780, 1783, 1786, 1789, 1792, 1795, 1798, 
 -	1801, 1804, 1807, 1810, 1813, 1816, 1819, 1822, 
 -	1825, 1828, 1831, 1834, 1837, 1840, 1843, 1846, 
 -	1848, 1851, 1854, 1856, 1858, 1860, 1862, 1864, 
 -	1866, 1868, 1870, 1872, 1874, 1876, 1878, 1880, 
 -	1882, 1884, 1886, 1888, 1890, 1892, 1894, 1896, 
 -	1898, 1900, 1902, 1910, 1915, 1919, 1922, 1925, 
 -	1928, 1931, 1934, 1937, 1940, 1943, 1946, 1949, 
 -	1952, 1955, 1958, 1961, 1964, 1967, 1970, 1973, 
 -	1976, 1979, 1982, 1985, 1988, 1991, 1994, 1997, 
 -	2000, 2003, 2006, 2009, 2012, 2015, 2019, 2022, 
 -	2025, 2028, 2031, 2034, 2037, 2040, 2043, 2046, 
 -	2049, 2052, 2055, 2058, 2061, 2064, 2067, 2070, 
 -	2073, 2076, 2079, 2082, 2085, 2088, 2091, 2094, 
 -	2097, 2100, 2103, 2106, 2109, 2112, 2115, 2118, 
 -	2121, 2124, 2127, 2130, 2133, 2136, 2139, 2142, 
 -	2145, 2148, 2151, 2154, 2157, 2160, 2163, 2166, 
 -	2169, 2172, 2175, 2178, 2181, 2184, 2187, 2190, 
 -	2193, 2196, 2199, 2202, 2205, 2208, 2211, 2214, 
 -	2217, 2220, 2223, 2226, 2229, 2232, 2235, 2238, 
 -	2241, 2244, 2246, 2248, 2250, 2252
 -};
 -
 -static const short _lexer_trans_targs[] = {
 -	2, 763, 6, 6, 7, 17, 19, 3, 
 -	33, 36, 6, 0, 3, 42, 56, 62, 
 -	68, 76, 296, 623, 629, 761, 0, 4, 
 -	0, 6, 18, 5, 6, 18, 5, 2, 
 -	6, 6, 7, 17, 19, 3, 33, 36, 
 -	6, 0, 8, 0, 9, 0, 11, 10, 
 -	10, 11, 10, 10, 12, 12, 13, 12, 
 -	12, 12, 12, 13, 12, 12, 12, 12, 
 -	14, 12, 12, 12, 12, 15, 12, 12, 
 -	6, 16, 16, 0, 6, 16, 16, 0, 
 -	6, 18, 17, 6, 0, 20, 0, 21, 
 -	0, 22, 0, 23, 0, 24, 0, 25, 
 -	0, 26, 0, 27, 0, 28, 0, 29, 
 -	0, 30, 0, 31, 0, 32, 0, 765, 
 -	0, 0, 0, 0, 0, 34, 35, 6, 
 -	35, 35, 33, 34, 34, 6, 35, 33, 
 -	35, 0, 36, 37, 36, 0, 41, 40, 
 -	39, 37, 40, 38, 0, 39, 37, 38, 
 -	0, 39, 38, 41, 40, 39, 37, 40, 
 -	38, 2, 41, 41, 7, 17, 19, 3, 
 -	33, 36, 41, 0, 43, 46, 0, 44, 
 -	0, 45, 0, 3, 0, 47, 0, 48, 
 -	0, 49, 0, 50, 0, 51, 0, 52, 
 -	0, 53, 0, 54, 0, 55, 0, 3, 
 -	0, 57, 0, 58, 0, 59, 0, 60, 
 -	0, 61, 0, 3, 0, 63, 0, 64, 
 -	0, 65, 0, 66, 0, 67, 0, 3, 
 -	0, 69, 0, 70, 0, 71, 0, 72, 
 -	0, 73, 0, 74, 0, 75, 0, 3, 
 -	0, 77, 243, 0, 78, 0, 79, 0, 
 -	80, 0, 81, 0, 82, 0, 83, 0, 
 -	84, 0, 85, 0, 86, 0, 87, 0, 
 -	88, 0, 89, 0, 90, 0, 91, 0, 
 -	92, 0, 93, 0, 94, 0, 95, 0, 
 -	97, 96, 97, 96, 98, 97, 97, 6, 
 -	229, 99, 6, 97, 96, 99, 101, 115, 
 -	121, 127, 135, 157, 203, 209, 227, 97, 
 -	96, 97, 100, 96, 2, 6, 6, 7, 
 -	17, 19, 3, 33, 36, 6, 0, 102, 
 -	97, 105, 96, 103, 97, 96, 104, 97, 
 -	96, 99, 97, 96, 106, 97, 96, 107, 
 -	97, 96, 108, 97, 96, 109, 97, 96, 
 -	110, 97, 96, 111, 97, 96, 112, 97, 
 -	96, 113, 97, 96, 114, 97, 96, 99, 
 -	97, 96, 116, 97, 96, 117, 97, 96, 
 -	118, 97, 96, 119, 97, 96, 120, 97, 
 -	96, 99, 97, 96, 122, 97, 96, 123, 
 -	97, 96, 124, 97, 96, 125, 97, 96, 
 -	126, 97, 96, 99, 97, 96, 128, 97, 
 -	96, 129, 97, 96, 130, 97, 96, 131, 
 -	97, 96, 132, 97, 96, 133, 97, 96, 
 -	134, 97, 96, 99, 97, 96, 136, 97, 
 -	96, 137, 97, 96, 138, 97, 96, 139, 
 -	97, 96, 140, 97, 96, 141, 97, 96, 
 -	142, 97, 96, 143, 97, 96, 144, 97, 
 -	96, 145, 97, 96, 146, 97, 96, 147, 
 -	97, 96, 148, 97, 96, 149, 97, 96, 
 -	150, 97, 96, 151, 97, 96, 152, 97, 
 -	96, 153, 97, 96, 97, 100, 154, 96, 
 -	97, 155, 96, 156, 97, 96, 119, 97, 
 -	96, 158, 97, 96, 159, 191, 97, 96, 
 -	160, 97, 96, 161, 97, 96, 162, 97, 
 -	96, 163, 97, 96, 164, 97, 96, 165, 
 -	97, 96, 166, 97, 96, 167, 97, 96, 
 -	168, 97, 96, 169, 97, 96, 170, 97, 
 -	96, 171, 97, 96, 172, 97, 96, 173, 
 -	97, 96, 97, 174, 96, 175, 97, 96, 
 -	176, 97, 96, 177, 97, 96, 178, 97, 
 -	96, 179, 97, 96, 180, 97, 96, 181, 
 -	97, 96, 182, 97, 96, 183, 97, 96, 
 -	184, 97, 96, 185, 97, 96, 186, 97, 
 -	96, 187, 97, 96, 188, 97, 96, 189, 
 -	97, 96, 190, 97, 96, 97, 100, 96, 
 -	192, 97, 96, 193, 97, 96, 194, 97, 
 -	96, 195, 97, 96, 196, 97, 96, 197, 
 -	97, 96, 198, 97, 96, 199, 97, 96, 
 -	200, 97, 96, 201, 97, 96, 202, 97, 
 -	96, 190, 97, 96, 204, 97, 96, 99, 
 -	205, 97, 96, 206, 97, 100, 96, 207, 
 -	97, 96, 208, 97, 96, 99, 97, 96, 
 -	210, 97, 96, 211, 97, 96, 212, 97, 
 -	96, 213, 97, 96, 214, 97, 96, 215, 
 -	97, 96, 216, 97, 96, 217, 97, 96, 
 -	218, 97, 96, 219, 97, 96, 220, 97, 
 -	96, 221, 97, 96, 222, 97, 96, 223, 
 -	97, 96, 224, 97, 96, 225, 97, 96, 
 -	226, 97, 96, 190, 97, 96, 228, 97, 
 -	96, 155, 97, 96, 97, 230, 96, 97, 
 -	231, 96, 97, 232, 96, 97, 233, 96, 
 -	97, 234, 96, 97, 235, 96, 97, 236, 
 -	96, 97, 237, 96, 97, 238, 96, 97, 
 -	239, 96, 97, 240, 96, 97, 241, 96, 
 -	97, 242, 96, 97, 6, 96, 244, 0, 
 -	245, 0, 246, 0, 247, 0, 248, 280, 
 -	0, 249, 0, 250, 0, 251, 0, 252, 
 -	0, 253, 0, 254, 0, 255, 0, 256, 
 -	0, 257, 0, 259, 258, 259, 258, 260, 
 -	259, 259, 6, 6, 259, 258, 261, 259, 
 -	258, 262, 259, 258, 263, 259, 258, 264, 
 -	259, 258, 265, 259, 258, 266, 259, 258, 
 -	267, 259, 258, 268, 259, 258, 269, 259, 
 -	258, 270, 259, 258, 271, 259, 258, 272, 
 -	259, 258, 273, 259, 258, 274, 259, 258, 
 -	275, 259, 258, 276, 259, 258, 277, 259, 
 -	258, 278, 259, 258, 279, 259, 258, 259, 
 -	100, 258, 281, 0, 282, 0, 283, 0, 
 -	284, 0, 285, 0, 286, 0, 287, 0, 
 -	288, 0, 289, 0, 290, 0, 291, 0, 
 -	292, 0, 4, 293, 0, 294, 0, 295, 
 -	0, 60, 0, 297, 0, 298, 446, 0, 
 -	299, 0, 300, 0, 301, 0, 302, 0, 
 -	303, 0, 304, 0, 305, 0, 306, 0, 
 -	307, 0, 308, 0, 309, 0, 310, 0, 
 -	311, 0, 312, 0, 313, 0, 314, 0, 
 -	315, 0, 316, 0, 317, 0, 318, 0, 
 -	319, 0, 320, 0, 321, 0, 322, 0, 
 -	323, 0, 324, 0, 325, 0, 326, 0, 
 -	327, 0, 328, 0, 329, 0, 330, 0, 
 -	332, 331, 332, 331, 333, 332, 332, 6, 
 -	432, 334, 6, 332, 331, 334, 335, 349, 
 -	355, 361, 369, 391, 406, 412, 430, 332, 
 -	331, 332, 100, 331, 336, 332, 339, 331, 
 -	337, 332, 331, 338, 332, 331, 334, 332, 
 -	331, 340, 332, 331, 341, 332, 331, 342, 
 -	332, 331, 343, 332, 331, 344, 332, 331, 
 -	345, 332, 331, 346, 332, 331, 347, 332, 
 -	331, 348, 332, 331, 334, 332, 331, 350, 
 -	332, 331, 351, 332, 331, 352, 332, 331, 
 -	353, 332, 331, 354, 332, 331, 334, 332, 
 -	331, 356, 332, 331, 357, 332, 331, 358, 
 -	332, 331, 359, 332, 331, 360, 332, 331, 
 -	334, 332, 331, 362, 332, 331, 363, 332, 
 -	331, 364, 332, 331, 365, 332, 331, 366, 
 -	332, 331, 367, 332, 331, 368, 332, 331, 
 -	334, 332, 331, 370, 332, 331, 371, 332, 
 -	331, 372, 332, 331, 373, 332, 331, 374, 
 -	332, 331, 375, 332, 331, 376, 332, 331, 
 -	377, 332, 331, 378, 332, 331, 379, 332, 
 -	331, 380, 332, 331, 381, 332, 331, 382, 
 -	332, 331, 383, 332, 331, 384, 332, 331, 
 -	385, 332, 331, 386, 332, 331, 387, 332, 
 -	331, 332, 100, 388, 331, 332, 389, 331, 
 -	390, 332, 331, 353, 332, 331, 392, 332, 
 -	331, 393, 332, 331, 394, 332, 331, 395, 
 -	332, 331, 396, 332, 331, 397, 332, 331, 
 -	398, 332, 331, 399, 332, 331, 400, 332, 
 -	331, 401, 332, 331, 402, 332, 331, 403, 
 -	332, 331, 404, 332, 331, 405, 332, 331, 
 -	332, 100, 331, 407, 332, 331, 334, 408, 
 -	332, 331, 409, 332, 100, 331, 410, 332, 
 -	331, 411, 332, 331, 334, 332, 331, 413, 
 -	332, 331, 414, 332, 331, 415, 332, 331, 
 -	416, 332, 331, 417, 332, 331, 418, 332, 
 -	331, 419, 332, 331, 420, 332, 331, 421, 
 -	332, 331, 422, 332, 331, 423, 332, 331, 
 -	424, 332, 331, 425, 332, 331, 426, 332, 
 -	331, 427, 332, 331, 428, 332, 331, 429, 
 -	332, 331, 405, 332, 331, 431, 332, 331, 
 -	389, 332, 331, 332, 433, 331, 332, 434, 
 -	331, 332, 435, 331, 332, 436, 331, 332, 
 -	437, 331, 332, 438, 331, 332, 439, 331, 
 -	332, 440, 331, 332, 441, 331, 332, 442, 
 -	331, 332, 443, 331, 332, 444, 331, 332, 
 -	445, 331, 332, 6, 331, 447, 0, 448, 
 -	0, 449, 0, 450, 0, 451, 0, 452, 
 -	0, 453, 0, 454, 0, 455, 0, 456, 
 -	0, 457, 0, 458, 0, 459, 0, 461, 
 -	460, 461, 460, 462, 461, 461, 6, 609, 
 -	463, 6, 461, 460, 463, 464, 478, 484, 
 -	490, 498, 538, 583, 589, 607, 461, 460, 
 -	461, 100, 460, 465, 461, 468, 460, 466, 
 -	461, 460, 467, 461, 460, 463, 461, 460, 
 -	469, 461, 460, 470, 461, 460, 471, 461, 
 -	460, 472, 461, 460, 473, 461, 460, 474, 
 -	461, 460, 475, 461, 460, 476, 461, 460, 
 -	477, 461, 460, 463, 461, 460, 479, 461, 
 -	460, 480, 461, 460, 481, 461, 460, 482, 
 -	461, 460, 483, 461, 460, 463, 461, 460, 
 -	485, 461, 460, 486, 461, 460, 487, 461, 
 -	460, 488, 461, 460, 489, 461, 460, 463, 
 -	461, 460, 491, 461, 460, 492, 461, 460, 
 -	493, 461, 460, 494, 461, 460, 495, 461, 
 -	460, 496, 461, 460, 497, 461, 460, 463, 
 -	461, 460, 499, 517, 461, 460, 500, 461, 
 -	460, 501, 461, 460, 502, 461, 460, 503, 
 -	461, 460, 504, 461, 460, 505, 461, 460, 
 -	506, 461, 460, 507, 461, 460, 508, 461, 
 -	460, 509, 461, 460, 510, 461, 460, 511, 
 -	461, 460, 512, 461, 460, 513, 461, 460, 
 -	514, 461, 460, 515, 461, 460, 516, 461, 
 -	460, 461, 100, 460, 518, 461, 460, 519, 
 -	461, 460, 520, 461, 460, 521, 461, 460, 
 -	522, 461, 460, 523, 461, 460, 524, 461, 
 -	460, 525, 461, 460, 526, 461, 460, 527, 
 -	461, 460, 528, 461, 460, 529, 461, 460, 
 -	530, 461, 460, 531, 461, 460, 532, 461, 
 -	460, 533, 461, 460, 534, 461, 460, 461, 
 -	100, 535, 460, 461, 536, 460, 537, 461, 
 -	460, 482, 461, 460, 539, 461, 460, 540, 
 -	571, 461, 460, 541, 461, 460, 542, 461, 
 -	460, 543, 461, 460, 544, 461, 460, 545, 
 -	461, 460, 546, 461, 460, 547, 461, 460, 
 -	548, 461, 460, 549, 461, 460, 550, 461, 
 -	460, 551, 461, 460, 552, 461, 460, 553, 
 -	461, 460, 554, 461, 460, 461, 555, 460, 
 -	556, 461, 460, 557, 461, 460, 558, 461, 
 -	460, 559, 461, 460, 560, 461, 460, 561, 
 -	461, 460, 562, 461, 460, 563, 461, 460, 
 -	564, 461, 460, 565, 461, 460, 566, 461, 
 -	460, 567, 461, 460, 568, 461, 460, 569, 
 -	461, 460, 570, 461, 460, 516, 461, 460, 
 -	572, 461, 460, 573, 461, 460, 574, 461, 
 -	460, 575, 461, 460, 576, 461, 460, 577, 
 -	461, 460, 578, 461, 460, 579, 461, 460, 
 -	580, 461, 460, 581, 461, 460, 582, 461, 
 -	460, 516, 461, 460, 584, 461, 460, 463, 
 -	585, 461, 460, 586, 461, 100, 460, 587, 
 -	461, 460, 588, 461, 460, 463, 461, 460, 
 -	590, 461, 460, 591, 461, 460, 592, 461, 
 -	460, 593, 461, 460, 594, 461, 460, 595, 
 -	461, 460, 596, 461, 460, 597, 461, 460, 
 -	598, 461, 460, 599, 461, 460, 600, 461, 
 -	460, 601, 461, 460, 602, 461, 460, 603, 
 -	461, 460, 604, 461, 460, 605, 461, 460, 
 -	606, 461, 460, 516, 461, 460, 608, 461, 
 -	460, 536, 461, 460, 461, 610, 460, 461, 
 -	611, 460, 461, 612, 460, 461, 613, 460, 
 -	461, 614, 460, 461, 615, 460, 461, 616, 
 -	460, 461, 617, 460, 461, 618, 460, 461, 
 -	619, 460, 461, 620, 460, 461, 621, 460, 
 -	461, 622, 460, 461, 6, 460, 624, 0, 
 -	3, 625, 0, 626, 4, 0, 627, 0, 
 -	628, 0, 3, 0, 630, 0, 631, 0, 
 -	632, 0, 633, 0, 634, 0, 635, 0, 
 -	636, 0, 637, 0, 638, 0, 639, 0, 
 -	640, 0, 641, 0, 642, 0, 643, 0, 
 -	644, 0, 645, 0, 646, 0, 647, 0, 
 -	648, 0, 650, 649, 650, 649, 651, 650, 
 -	650, 6, 747, 6, 650, 649, 652, 684, 
 -	729, 650, 649, 653, 671, 650, 649, 654, 
 -	650, 649, 655, 650, 649, 656, 650, 649, 
 -	657, 650, 649, 658, 650, 649, 659, 650, 
 -	649, 660, 650, 649, 661, 650, 649, 662, 
 -	650, 649, 663, 650, 649, 664, 650, 649, 
 -	665, 650, 649, 666, 650, 649, 667, 650, 
 -	649, 668, 650, 649, 669, 650, 649, 670, 
 -	650, 649, 650, 100, 649, 672, 650, 649, 
 -	673, 650, 649, 674, 650, 649, 675, 650, 
 -	649, 676, 650, 649, 677, 650, 649, 678, 
 -	650, 649, 679, 650, 649, 680, 650, 649, 
 -	681, 650, 649, 682, 650, 649, 683, 650, 
 -	649, 670, 650, 649, 685, 650, 649, 686, 
 -	717, 650, 649, 687, 650, 649, 688, 650, 
 -	649, 689, 650, 649, 690, 650, 649, 691, 
 -	650, 649, 692, 650, 649, 693, 650, 649, 
 -	694, 650, 649, 695, 650, 649, 696, 650, 
 -	649, 697, 650, 649, 698, 650, 649, 699, 
 -	650, 649, 700, 650, 649, 650, 701, 649, 
 -	702, 650, 649, 703, 650, 649, 704, 650, 
 -	649, 705, 650, 649, 706, 650, 649, 707, 
 -	650, 649, 708, 650, 649, 709, 650, 649, 
 -	710, 650, 649, 711, 650, 649, 712, 650, 
 -	649, 713, 650, 649, 714, 650, 649, 715, 
 -	650, 649, 716, 650, 649, 670, 650, 649, 
 -	718, 650, 649, 719, 650, 649, 720, 650, 
 -	649, 721, 650, 649, 722, 650, 649, 723, 
 -	650, 649, 724, 650, 649, 725, 650, 649, 
 -	726, 650, 649, 727, 650, 649, 728, 650, 
 -	649, 670, 650, 649, 730, 650, 649, 731, 
 -	650, 649, 732, 650, 649, 733, 650, 649, 
 -	734, 650, 649, 735, 650, 649, 736, 650, 
 -	649, 737, 650, 649, 738, 650, 649, 739, 
 -	650, 649, 740, 650, 649, 741, 650, 649, 
 -	742, 650, 649, 743, 650, 649, 744, 650, 
 -	649, 745, 650, 649, 746, 650, 649, 670, 
 -	650, 649, 650, 748, 649, 650, 749, 649, 
 -	650, 750, 649, 650, 751, 649, 650, 752, 
 -	649, 650, 753, 649, 650, 754, 649, 650, 
 -	755, 649, 650, 756, 649, 650, 757, 649, 
 -	650, 758, 649, 650, 759, 649, 650, 760, 
 -	649, 650, 6, 649, 762, 0, 294, 0, 
 -	764, 0, 6, 0, 0, 0
 -};
 -
 -static const unsigned char _lexer_trans_actions[] = {
 -	29, 0, 54, 0, 5, 1, 0, 29, 
 -	1, 35, 0, 43, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 43, 0, 
 -	43, 149, 126, 57, 110, 23, 0, 29, 
 -	54, 0, 5, 1, 0, 29, 1, 35, 
 -	0, 43, 0, 43, 0, 43, 139, 48, 
 -	9, 106, 11, 0, 134, 45, 45, 45, 
 -	3, 122, 33, 33, 33, 0, 122, 33, 
 -	33, 33, 0, 122, 33, 0, 33, 0, 
 -	102, 7, 7, 43, 54, 0, 0, 43, 
 -	114, 25, 0, 54, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 43, 43, 43, 43, 0, 27, 118, 
 -	27, 27, 51, 27, 0, 54, 0, 1, 
 -	0, 43, 0, 0, 0, 43, 54, 37, 
 -	37, 87, 37, 37, 43, 0, 39, 0, 
 -	43, 0, 0, 54, 0, 0, 39, 0, 
 -	0, 96, 54, 0, 93, 90, 41, 96, 
 -	90, 99, 0, 43, 0, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	144, 57, 54, 0, 84, 54, 0, 72, 
 -	33, 84, 72, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 54, 
 -	0, 54, 15, 0, 63, 130, 31, 60, 
 -	57, 31, 63, 57, 66, 31, 43, 0, 
 -	54, 0, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 54, 15, 0, 0, 
 -	54, 0, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 54, 0, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 54, 15, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	0, 54, 0, 0, 54, 15, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 15, 0, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 144, 57, 54, 0, 84, 
 -	54, 0, 81, 81, 0, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 54, 
 -	21, 0, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	144, 57, 54, 0, 84, 54, 0, 78, 
 -	33, 84, 78, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 54, 
 -	0, 54, 19, 0, 0, 54, 0, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 54, 19, 0, 0, 54, 0, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	54, 19, 0, 0, 54, 0, 0, 0, 
 -	54, 0, 0, 54, 19, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 19, 0, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 144, 
 -	57, 54, 0, 84, 54, 0, 75, 33, 
 -	84, 75, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 54, 0, 
 -	54, 17, 0, 0, 54, 0, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 54, 17, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 54, 
 -	17, 0, 0, 54, 0, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 54, 0, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	0, 54, 0, 0, 54, 17, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 17, 0, 0, 43, 
 -	0, 0, 43, 0, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 144, 57, 54, 0, 84, 54, 
 -	0, 69, 33, 69, 0, 0, 0, 0, 
 -	0, 54, 0, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 54, 13, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 54, 0, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 13, 0, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 0
 -};
 -
 -static const unsigned char _lexer_eof_actions[] = {
 -	0, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43
 -};
 -
 -static const int lexer_start = 1;
 -static const int lexer_first_final = 765;
 -static const int lexer_error = 0;
 -
 -static const int lexer_en_main = 1;
 -
 -
 -#line 258 "ragel/i18n/uk.c.rl"
 -
 -static VALUE 
 -unindent(VALUE con, int start_col)
 -{
 -  VALUE re;
 -  /* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */
 -  char pat[32]; 
 -  snprintf(pat, 32, "^[\t ]{0,%d}", start_col); 
 -  re = rb_reg_regcomp(rb_str_new2(pat));
 -  rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2(""));
 -
 -  return Qnil;
 -
 -}
 -
 -static void 
 -store_kw_con(VALUE listener, const char * event_name, 
 -             const char * keyword_at, size_t keyword_length, 
 -             const char * at,         size_t length, 
 -             int current_line)
 -{
 -  VALUE con = Qnil, kw = Qnil;
 -  kw = ENCODED_STR_NEW(keyword_at, keyword_length);
 -  con = ENCODED_STR_NEW(at, length);
 -  rb_funcall(con, rb_intern("strip!"), 0);
 -  rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); 
 -}
 -
 -static void
 -store_multiline_kw_con(VALUE listener, const char * event_name,
 -                      const char * keyword_at, size_t keyword_length,
 -                      const char * at,         size_t length,
 -                      int current_line, int start_col)
 -{
 -  VALUE split;
 -  VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil;
 -
 -  kw = ENCODED_STR_NEW(keyword_at, keyword_length);
 -  con = ENCODED_STR_NEW(at, length);
 -
 -  unindent(con, start_col);
 -  
 -  split = rb_str_split(con, "\n");
 -
 -  name = rb_funcall(split, rb_intern("shift"), 0);
 -  desc = rb_ary_join(split, rb_str_new2( "\n" ));
 -
 -  if( name == Qnil ) 
 -  {
 -    name = rb_str_new2("");
 -  }
 -  if( rb_funcall(desc, rb_intern("size"), 0) == 0) 
 -  {
 -    desc = rb_str_new2("");
 -  }
 -  rb_funcall(name, rb_intern("strip!"), 0);
 -  rb_funcall(desc, rb_intern("rstrip!"), 0);
 -  rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); 
 -}
 -
 -static void 
 -store_attr(VALUE listener, const char * attr_type,
 -           const char * at, size_t length, 
 -           int line)
 -{
 -  VALUE val = ENCODED_STR_NEW(at, length);
 -  rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line));
 -}
 -static void 
 -store_docstring_content(VALUE listener, 
 -          int start_col, 
 -          const char *type_at, size_t type_length,
 -          const char *at, size_t length, 
 -          int current_line)
 -{
 -  VALUE re2;
 -  VALUE unescape_escaped_quotes;
 -  VALUE con = ENCODED_STR_NEW(at, length);
 -  VALUE con_type = ENCODED_STR_NEW(type_at, type_length);
 -
 -  unindent(con, start_col);
 -
 -  re2 = rb_reg_regcomp(rb_str_new2("\r\\Z"));
 -  unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\""));
 -  rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2(""));
 -  rb_funcall(con_type, rb_intern("strip!"), 0);
 -  rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\""));
 -  rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line));
 -}
 -static void 
 -raise_lexer_error(const char * at, int line)
 -{ 
 -  rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at);
 -}
 -
 -static void lexer_init(lexer_state *lexer) {
 -  lexer->content_start = 0;
 -  lexer->content_end = 0;
 -  lexer->content_len = 0;
 -  lexer->docstring_content_type_start = 0;
 -  lexer->docstring_content_type_end = 0;
 -  lexer->mark = 0;
 -  lexer->keyword_start = 0;
 -  lexer->keyword_end = 0;
 -  lexer->next_keyword_start = 0;
 -  lexer->line_number = 1;
 -  lexer->last_newline = 0;
 -  lexer->final_newline = 0;
 -  lexer->start_col = 0;
 -}
 -
 -static VALUE CLexer_alloc(VALUE klass)
 -{
 -  VALUE obj;
 -  lexer_state *lxr = ALLOC(lexer_state);
 -  lexer_init(lxr);
 -
 -  obj = Data_Wrap_Struct(klass, NULL, -1, lxr);
 -
 -  return obj;
 -}
 -
 -static VALUE CLexer_init(VALUE self, VALUE listener)
 -{
 -  lexer_state *lxr; 
 -  rb_iv_set(self, "@listener", listener);
 -  
 -  lxr = NULL;
 -  DATA_GET(self, lexer_state, lxr);
 -  lexer_init(lxr);
 -  
 -  return self;
 -}
 -
 -static VALUE CLexer_scan(VALUE self, VALUE input)
 -{
 -  VALUE input_copy;
 -  char *data;
 -  size_t len;
 -  VALUE listener = rb_iv_get(self, "@listener");
 -
 -  lexer_state *lexer;
 -  lexer = NULL;
 -  DATA_GET(self, lexer_state, lexer);
 -
 -  input_copy = rb_str_dup(input);
 -
 -  rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%"));
 -  data = RSTRING_PTR(input_copy);
 -  len = RSTRING_LEN(input_copy);
 -  
 -  if (len == 0) { 
 -    rb_raise(rb_eGherkinLexingError, "No content to lex.");
 -  } else {
 -
 -    const char *p, *pe, *eof;
 -    int cs = 0;
 -    
 -    VALUE current_row = Qnil;
 -
 -    p = data;
 -    pe = data + len;
 -    eof = pe;
 -    
 -    assert(*pe == '\0' && "pointer does not end on NULL");
 -    
 -    
 -#line 1545 "ext/gherkin_lexer_uk/gherkin_lexer_uk.c"
 -	{
 -	cs = lexer_start;
 -	}
 -
 -#line 425 "ragel/i18n/uk.c.rl"
 -    
 -#line 1552 "ext/gherkin_lexer_uk/gherkin_lexer_uk.c"
 -	{
 -	int _klen;
 -	unsigned int _trans;
 -	const char *_acts;
 -	unsigned int _nacts;
 -	const char *_keys;
 -
 -	if ( p == pe )
 -		goto _test_eof;
 -	if ( cs == 0 )
 -		goto _out;
 -_resume:
 -	_keys = _lexer_trans_keys + _lexer_key_offsets[cs];
 -	_trans = _lexer_index_offsets[cs];
 -
 -	_klen = _lexer_single_lengths[cs];
 -	if ( _klen > 0 ) {
 -		const char *_lower = _keys;
 -		const char *_mid;
 -		const char *_upper = _keys + _klen - 1;
 -		while (1) {
 -			if ( _upper < _lower )
 -				break;
 -
 -			_mid = _lower + ((_upper-_lower) >> 1);
 -			if ( (*p) < *_mid )
 -				_upper = _mid - 1;
 -			else if ( (*p) > *_mid )
 -				_lower = _mid + 1;
 -			else {
 -				_trans += (unsigned int)(_mid - _keys);
 -				goto _match;
 -			}
 -		}
 -		_keys += _klen;
 -		_trans += _klen;
 -	}
 -
 -	_klen = _lexer_range_lengths[cs];
 -	if ( _klen > 0 ) {
 -		const char *_lower = _keys;
 -		const char *_mid;
 -		const char *_upper = _keys + (_klen<<1) - 2;
 -		while (1) {
 -			if ( _upper < _lower )
 -				break;
 -
 -			_mid = _lower + (((_upper-_lower) >> 1) & ~1);
 -			if ( (*p) < _mid[0] )
 -				_upper = _mid - 2;
 -			else if ( (*p) > _mid[1] )
 -				_lower = _mid + 2;
 -			else {
 -				_trans += (unsigned int)((_mid - _keys)>>1);
 -				goto _match;
 -			}
 -		}
 -		_trans += _klen;
 -	}
 -
 -_match:
 -	cs = _lexer_trans_targs[_trans];
 -
 -	if ( _lexer_trans_actions[_trans] == 0 )
 -		goto _again;
 -
 -	_acts = _lexer_actions + _lexer_trans_actions[_trans];
 -	_nacts = (unsigned int) *_acts++;
 -	while ( _nacts-- > 0 )
 -	{
 -		switch ( *_acts++ )
 -		{
 -	case 0:
 -#line 83 "ragel/i18n/uk.c.rl"
 -	{
 -		MARK(content_start, p);
 -    lexer->current_line = lexer->line_number;
 -    lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2;
 -  }
 -	break;
 -	case 1:
 -#line 89 "ragel/i18n/uk.c.rl"
 -	{
 -    MARK(content_start, p);
 -  }
 -	break;
 -	case 2:
 -#line 93 "ragel/i18n/uk.c.rl"
 -	{
 -    lexer->current_line = lexer->line_number;
 -    lexer->start_col = p - data - lexer->last_newline;
 -  }
 -	break;
 -	case 3:
 -#line 98 "ragel/i18n/uk.c.rl"
 -	{
 -    int len = LEN(content_start, PTR_TO(final_newline));
 -    int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end));
 -
 -    if (len < 0) len = 0;
 -    if (type_len < 0) len = 0;
 -
 -    store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line);
 -  }
 -	break;
 -	case 4:
 -#line 108 "ragel/i18n/uk.c.rl"
 -	{ 
 -    MARK(docstring_content_type_start, p);
 -  }
 -	break;
 -	case 5:
 -#line 112 "ragel/i18n/uk.c.rl"
 -	{ 
 -    MARK(docstring_content_type_end, p);
 -  }
 -	break;
 -	case 6:
 -#line 116 "ragel/i18n/uk.c.rl"
 -	{
 -    STORE_KW_END_CON(feature);
 -  }
 -	break;
 -	case 7:
 -#line 120 "ragel/i18n/uk.c.rl"
 -	{
 -    STORE_KW_END_CON(background);
 -  }
 -	break;
 -	case 8:
 -#line 124 "ragel/i18n/uk.c.rl"
 -	{
 -    STORE_KW_END_CON(scenario);
 -  }
 -	break;
 -	case 9:
 -#line 128 "ragel/i18n/uk.c.rl"
 -	{
 -    STORE_KW_END_CON(scenario_outline);
 -  }
 -	break;
 -	case 10:
 -#line 132 "ragel/i18n/uk.c.rl"
 -	{
 -    STORE_KW_END_CON(examples);
 -  }
 -	break;
 -	case 11:
 -#line 136 "ragel/i18n/uk.c.rl"
 -	{
 -    store_kw_con(listener, "step",
 -      PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
 -      PTR_TO(content_start), LEN(content_start, p), 
 -      lexer->current_line);
 -  }
 -	break;
 -	case 12:
 -#line 143 "ragel/i18n/uk.c.rl"
 -	{
 -    STORE_ATTR(comment);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 13:
 -#line 148 "ragel/i18n/uk.c.rl"
 -	{
 -    STORE_ATTR(tag);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 14:
 -#line 153 "ragel/i18n/uk.c.rl"
 -	{
 -    lexer->line_number += 1;
 -    MARK(final_newline, p);
 -  }
 -	break;
 -	case 15:
 -#line 158 "ragel/i18n/uk.c.rl"
 -	{
 -    MARK(last_newline, p + 1);
 -  }
 -	break;
 -	case 16:
 -#line 162 "ragel/i18n/uk.c.rl"
 -	{
 -    if (lexer->mark == 0) {
 -      MARK(mark, p);
 -    }
 -  }
 -	break;
 -	case 17:
 -#line 168 "ragel/i18n/uk.c.rl"
 -	{
 -    MARK(keyword_end, p);
 -    MARK(keyword_start, PTR_TO(mark));
 -    MARK(content_start, p + 1);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 18:
 -#line 175 "ragel/i18n/uk.c.rl"
 -	{
 -    MARK(content_end, p);
 -  }
 -	break;
 -	case 19:
 -#line 179 "ragel/i18n/uk.c.rl"
 -	{
 -    p = p - 1;
 -    lexer->current_line = lexer->line_number;
 -    current_row = rb_ary_new();
 -  }
 -	break;
 -	case 20:
 -#line 185 "ragel/i18n/uk.c.rl"
 -	{
 -		MARK(content_start, p);
 -  }
 -	break;
 -	case 21:
 -#line 189 "ragel/i18n/uk.c.rl"
 -	{
 -    VALUE re_pipe, re_newline, re_backslash;
 -    VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
 -    rb_funcall(con, rb_intern("strip!"), 0);
 -    re_pipe      = rb_reg_regcomp(rb_str_new2("\\\\\\|"));
 -    re_newline   = rb_reg_regcomp(rb_str_new2("\\\\n"));
 -    re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_pipe,      rb_str_new2("|"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_newline,   rb_str_new2("\n"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\"));
 -
 -    rb_ary_push(current_row, con);
 -  }
 -	break;
 -	case 22:
 -#line 203 "ragel/i18n/uk.c.rl"
 -	{
 -    rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
 -  }
 -	break;
 -	case 23:
 -#line 207 "ragel/i18n/uk.c.rl"
 -	{
 -    int line;
 -    if (cs < lexer_first_final) {
 -      size_t count = 0;
 -      VALUE newstr_val;
 -      char *newstr;
 -      int newstr_count = 0;        
 -      size_t len;
 -      const char *buff;
 -      if (lexer->last_newline != 0) {
 -        len = LEN(last_newline, eof);
 -        buff = PTR_TO(last_newline);
 -      } else {
 -        len = strlen(data);
 -        buff = data;
 -      }
 -
 -      /* Allocate as a ruby string so that it gets cleaned up by GC */
 -      newstr_val = rb_str_new(buff, len);
 -      newstr = RSTRING_PTR(newstr_val);
 -
 -
 -      for (count = 0; count < len; count++) {
 -        if(buff[count] == 10) {
 -          newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
 -          break;
 -        } else {
 -          if (buff[count] == '%') {
 -            newstr[newstr_count++] = buff[count];
 -            newstr[newstr_count] = buff[count];
 -          } else {
 -            newstr[newstr_count] = buff[count];
 -          }
 -        }
 -        newstr_count++;
 -      }
 -
 -      line = lexer->line_number;
 -      lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
 -      raise_lexer_error(newstr, line);
 -    } else {
 -      rb_funcall(listener, rb_intern("eof"), 0);
 -    }
 -  }
 -	break;
 -#line 1842 "ext/gherkin_lexer_uk/gherkin_lexer_uk.c"
 -		}
 -	}
 -
 -_again:
 -	if ( cs == 0 )
 -		goto _out;
 -	if ( ++p != pe )
 -		goto _resume;
 -	_test_eof: {}
 -	if ( p == eof )
 -	{
 -	const char *__acts = _lexer_actions + _lexer_eof_actions[cs];
 -	unsigned int __nacts = (unsigned int) *__acts++;
 -	while ( __nacts-- > 0 ) {
 -		switch ( *__acts++ ) {
 -	case 23:
 -#line 207 "ragel/i18n/uk.c.rl"
 -	{
 -    int line;
 -    if (cs < lexer_first_final) {
 -      size_t count = 0;
 -      VALUE newstr_val;
 -      char *newstr;
 -      int newstr_count = 0;        
 -      size_t len;
 -      const char *buff;
 -      if (lexer->last_newline != 0) {
 -        len = LEN(last_newline, eof);
 -        buff = PTR_TO(last_newline);
 -      } else {
 -        len = strlen(data);
 -        buff = data;
 -      }
 -
 -      /* Allocate as a ruby string so that it gets cleaned up by GC */
 -      newstr_val = rb_str_new(buff, len);
 -      newstr = RSTRING_PTR(newstr_val);
 -
 -
 -      for (count = 0; count < len; count++) {
 -        if(buff[count] == 10) {
 -          newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
 -          break;
 -        } else {
 -          if (buff[count] == '%') {
 -            newstr[newstr_count++] = buff[count];
 -            newstr[newstr_count] = buff[count];
 -          } else {
 -            newstr[newstr_count] = buff[count];
 -          }
 -        }
 -        newstr_count++;
 -      }
 -
 -      line = lexer->line_number;
 -      lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
 -      raise_lexer_error(newstr, line);
 -    } else {
 -      rb_funcall(listener, rb_intern("eof"), 0);
 -    }
 -  }
 -	break;
 -#line 1905 "ext/gherkin_lexer_uk/gherkin_lexer_uk.c"
 -		}
 -	}
 -	}
 -
 -	_out: {}
 -	}
 -
 -#line 426 "ragel/i18n/uk.c.rl"
 -
 -    assert(p <= pe && "data overflow after parsing execute");
 -    assert(lexer->content_start <= len && "content starts after data end");
 -    assert(lexer->mark < len && "mark is after data end");
 -    
 -    /* Reset lexer by re-initializing the whole thing */
 -    lexer_init(lexer);
 -
 -    if (cs == lexer_error) {
 -      rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails.");
 -    } else {
 -      return Qtrue;
 -    }
 -  }
 -}
 -
 -void Init_gherkin_lexer_uk()
 -{
 -  mGherkin = rb_define_module("Gherkin");
 -  mGherkinLexer = rb_define_module_under(mGherkin, "Lexer");
 -  rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError"));
 -
 -  mCLexer = rb_define_module_under(mGherkin, "CLexer");
 -  cI18nLexer = rb_define_class_under(mCLexer, "Uk", rb_cObject);
 -  rb_define_alloc_func(cI18nLexer, CLexer_alloc);
 -  rb_define_method(cI18nLexer, "initialize", CLexer_init, 1);
 -  rb_define_method(cI18nLexer, "scan", CLexer_scan, 1);
 -}
 -
diff --cc ext/gherkin_lexer_uz/extconf.rb
index 5f82eae,5f82eae..0000000
deleted file mode 100644,100644
--- a/ext/gherkin_lexer_uz/extconf.rb
+++ /dev/null
@@@ -1,6 -1,6 +1,0 @@@
--require 'mkmf'
--CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags']
--$CFLAGS << ' -O0 -Wall' if CONFIG['CC'] =~ /gcc|clang/
--dir_config("gherkin_lexer_uz")
--have_library("c", "main")
--create_makefile("gherkin_lexer_uz")
diff --cc ext/gherkin_lexer_uz/gherkin_lexer_uz.c
index 7aad438,ac2d0ea..0000000
deleted file mode 100644,100644
--- a/ext/gherkin_lexer_uz/gherkin_lexer_uz.c
+++ /dev/null
@@@ -1,1651 -1,1651 +1,0 @@@
--
- #line 1 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/uz.c.rl"
- #include <assert.h>
- #include <ruby.h>
- 
- #if defined(_WIN32)
- #include <stddef.h>
- #endif
- 
- #ifdef HAVE_RUBY_RE_H
- #include <ruby/re.h>
- #else
- #include <re.h>
- #endif
- 
- #ifdef HAVE_RUBY_ENCODING_H
- #include <ruby/encoding.h>
- #define ENCODED_STR_NEW(ptr, len) \
-     rb_enc_str_new(ptr, len, rb_utf8_encoding())
- #else
- #define ENCODED_STR_NEW(ptr, len) \
-     rb_str_new(ptr, len)
- #endif
- 
- #ifndef RSTRING_PTR
- #define RSTRING_PTR(s) (RSTRING(s)->ptr)
- #endif
- 
- #ifndef RSTRING_LEN
- #define RSTRING_LEN(s) (RSTRING(s)->len)
- #endif
- 
- #define DATA_GET(FROM, TYPE, NAME) \
-   Data_Get_Struct(FROM, TYPE, NAME); \
-   if (NAME == NULL) { \
-     rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \
-   }
-  
- typedef struct lexer_state {
-   int content_len;
-   int line_number;
-   int current_line;
-   int start_col;
-   size_t mark;
-   size_t keyword_start;
-   size_t keyword_end;
-   size_t next_keyword_start;
-   size_t content_start;
-   size_t content_end;
-   size_t docstring_content_type_start;
-   size_t docstring_content_type_end;
-   size_t query_start;
-   size_t last_newline;
-   size_t final_newline;
- } lexer_state;
- 
- static VALUE mGherkin;
- static VALUE mGherkinLexer;
- static VALUE mCLexer;
- static VALUE cI18nLexer;
- static VALUE rb_eGherkinLexingError;
- 
- #define LEN(AT, P) (P - data - lexer->AT)
- #define MARK(M, P) (lexer->M = (P) - data)
- #define PTR_TO(P) (data + lexer->P)
- 
- #define STORE_KW_END_CON(EVENT) \
-   store_multiline_kw_con(listener, # EVENT, \
-     PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \
-     PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \
-     lexer->current_line, lexer->start_col); \
-     if (lexer->content_end != 0) { \
-       p = PTR_TO(content_end - 1); \
-     } \
-     lexer->content_end = 0
- 
- #define STORE_ATTR(ATTR) \
-     store_attr(listener, # ATTR, \
-       PTR_TO(content_start), LEN(content_start, p), \
-       lexer->line_number)
- 
- 
- #line 254 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/uz.c.rl"
- 
- 
- /** Data **/
- 
- #line 89 "ext/gherkin_lexer_uz/gherkin_lexer_uz.c"
- static const char _lexer_actions[] = {
- 	0, 1, 0, 1, 1, 1, 2, 1, 
- 	3, 1, 4, 1, 5, 1, 6, 1, 
- 	7, 1, 8, 1, 9, 1, 10, 1, 
- 	11, 1, 12, 1, 13, 1, 16, 1, 
- 	17, 1, 18, 1, 19, 1, 20, 1, 
- 	21, 1, 22, 1, 23, 2, 1, 18, 
- 	2, 4, 5, 2, 13, 0, 2, 14, 
- 	15, 2, 17, 0, 2, 17, 2, 2, 
- 	17, 16, 2, 17, 19, 2, 18, 6, 
- 	2, 18, 7, 2, 18, 8, 2, 18, 
- 	9, 2, 18, 10, 2, 18, 16, 2, 
- 	20, 21, 2, 22, 0, 2, 22, 2, 
- 	2, 22, 16, 2, 22, 19, 3, 3, 
- 	14, 15, 3, 5, 14, 15, 3, 11, 
- 	14, 15, 3, 12, 14, 15, 3, 13, 
- 	14, 15, 3, 14, 15, 18, 3, 17, 
- 	0, 11, 3, 17, 14, 15, 4, 1, 
- 	14, 15, 18, 4, 4, 5, 14, 15, 
- 	4, 17, 0, 14, 15, 5, 17, 0, 
- 	11, 14, 15
- };
- 
- static const short _lexer_key_offsets[] = {
- 	0, 0, 12, 21, 22, 24, 25, 26, 
- 	27, 28, 29, 31, 33, 44, 45, 46, 
- 	48, 50, 55, 60, 65, 70, 74, 78, 
- 	80, 81, 82, 83, 84, 85, 86, 87, 
- 	88, 89, 90, 91, 92, 93, 94, 95, 
- 	100, 107, 112, 116, 122, 125, 127, 133, 
- 	144, 145, 146, 147, 148, 149, 150, 151, 
- 	152, 153, 154, 155, 156, 157, 158, 159, 
- 	160, 161, 162, 163, 164, 165, 166, 167, 
- 	168, 169, 170, 171, 172, 173, 174, 175, 
- 	176, 177, 178, 179, 180, 181, 182, 183, 
- 	190, 192, 194, 196, 198, 200, 202, 204, 
- 	206, 208, 210, 212, 214, 216, 218, 220, 
- 	222, 224, 226, 228, 230, 241, 242, 243, 
- 	244, 245, 246, 247, 248, 249, 250, 251, 
- 	252, 253, 254, 255, 257, 258, 259, 260, 
- 	261, 262, 263, 264, 265, 266, 267, 268, 
- 	269, 270, 271, 272, 273, 274, 275, 276, 
- 	277, 278, 279, 280, 281, 282, 291, 299, 
- 	301, 304, 306, 308, 310, 312, 314, 316, 
- 	318, 320, 322, 324, 326, 328, 330, 332, 
- 	334, 336, 338, 340, 342, 344, 346, 348, 
- 	350, 352, 354, 356, 358, 360, 362, 364, 
- 	366, 368, 370, 372, 374, 376, 378, 380, 
- 	382, 384, 386, 388, 390, 392, 394, 396, 
- 	398, 400, 402, 404, 406, 408, 410, 412, 
- 	414, 416, 418, 420, 422, 424, 426, 428, 
- 	430, 432, 434, 436, 438, 440, 442, 444, 
- 	446, 448, 450, 452, 454, 456, 458, 460, 
- 	461, 462, 471, 480, 482, 485, 487, 489, 
- 	491, 493, 495, 497, 499, 501, 503, 505, 
- 	507, 509, 511, 513, 515, 517, 519, 521, 
- 	523, 525, 527, 529, 531, 533, 535, 537, 
- 	539, 541, 543, 545, 547, 549, 551, 553, 
- 	555, 557, 559, 561, 563, 565, 567, 570, 
- 	572, 574, 576, 578, 580, 582, 584, 586, 
- 	588, 590, 592, 594, 596, 598, 600, 602, 
- 	604, 606, 608, 610, 612, 614, 616, 618, 
- 	620, 622, 624, 626, 628, 630, 632, 634, 
- 	636, 638, 640, 642, 644, 646, 648, 650, 
- 	652, 654, 656, 658, 660, 662, 664, 666, 
- 	668, 670, 672, 674, 676, 678, 680, 682, 
- 	684, 686, 688, 690, 692, 694, 696, 698, 
- 	700, 702, 704, 705, 706, 707, 708, 709, 
- 	710, 711, 712, 713, 714, 715, 724, 732, 
- 	734, 737, 739, 741, 743, 745, 747, 749, 
- 	751, 753, 755, 757, 759, 761, 763, 765, 
- 	767, 769, 771, 773, 775, 777, 779, 781, 
- 	783, 785, 787, 789, 791, 793, 795, 797, 
- 	799, 801, 803, 805, 807, 809, 811, 813, 
- 	815, 817, 819, 822, 824, 826, 828, 830, 
- 	832, 834, 836, 838, 840, 842, 844, 846, 
- 	848, 850, 852, 854, 856, 858, 860, 862, 
- 	864, 866, 868, 870, 872, 874, 876, 878, 
- 	880, 882, 884, 886, 888, 890, 892, 894, 
- 	896, 898, 900, 902, 904, 906, 908, 910, 
- 	912, 914, 916, 918, 920, 922, 924, 926, 
- 	928, 930, 932, 934, 936, 938, 940, 941, 
- 	942, 943, 944, 945, 946, 947, 948, 949, 
- 	950, 951, 952, 953, 954, 955, 956, 957, 
- 	958, 959, 960, 961, 962, 963, 964, 965, 
- 	973, 978, 980, 982, 984, 986, 988, 990, 
- 	992, 994, 996, 998, 1000, 1002, 1004, 1006, 
- 	1008, 1010, 1012, 1014, 1016, 1018, 1020, 1022, 
- 	1024, 1026, 1028, 1030, 1032, 1034, 1036, 1039, 
- 	1041, 1043, 1045, 1047, 1049, 1051, 1053, 1055, 
- 	1057, 1059, 1061, 1063, 1065, 1067, 1069, 1071, 
- 	1073, 1075, 1077, 1079, 1081, 1083, 1085, 1087, 
- 	1089, 1091, 1093, 1095, 1097, 1099, 1101, 1103, 
- 	1105, 1107, 1109, 1111, 1113, 1115, 1117, 1119, 
- 	1121, 1123, 1125, 1127, 1129, 1131, 1133, 1135, 
- 	1137, 1139, 1141, 1143, 1145, 1147, 1149, 1151, 
- 	1153, 1155, 1157, 1159, 1161, 1163, 1164, 1165
- };
- 
- static const char _lexer_trans_keys[] = {
- 	-48, -17, 10, 32, 34, 35, 37, 42, 
- 	64, 124, 9, 13, -112, -111, -110, -101, 
- 	-100, -95, -94, -93, -92, -48, -77, -68, 
- 	-48, -80, -47, -128, 32, 10, 13, 10, 
- 	13, -48, 10, 32, 34, 35, 37, 42, 
- 	64, 124, 9, 13, 34, 34, 10, 13, 
- 	10, 13, 10, 32, 34, 9, 13, 10, 
- 	32, 34, 9, 13, 10, 32, 34, 9, 
- 	13, 10, 32, 34, 9, 13, 10, 32, 
- 	9, 13, 10, 32, 9, 13, 10, 13, 
- 	10, 95, 70, 69, 65, 84, 85, 82, 
- 	69, 95, 69, 78, 68, 95, 37, 13, 
- 	32, 64, 9, 10, 9, 10, 13, 32, 
- 	64, 11, 12, 10, 32, 64, 9, 13, 
- 	32, 124, 9, 13, 10, 32, 92, 124, 
- 	9, 13, 10, 92, 124, 10, 92, 10, 
- 	32, 92, 124, 9, 13, -48, 10, 32, 
- 	34, 35, 37, 42, 64, 124, 9, 13, 
- 	-48, -68, -48, -66, -48, -72, -47, -128, 
- 	-48, -66, -48, -70, -48, -80, -48, -75, 
- 	-48, -70, -48, -72, -48, -67, -48, -72, 
- 	-47, -127, -48, -66, -48, -69, -48, -69, 
- 	-48, -80, -47, -128, 58, 10, 10, -48, 
- 	10, 32, 35, 124, 9, 13, -92, 10, 
- 	-47, 10, -125, 10, -48, 10, -67, 10, 
- 	-48, 10, -70, 10, -47, 10, -122, 10, 
- 	-48, 10, -72, 10, -48, 10, -66, 10, 
- 	-48, 10, -67, 10, -48, 10, -80, 10, 
- 	-48, 10, -69, 10, 10, 58, -48, 10, 
- 	32, 34, 35, 37, 42, 64, 124, 9, 
- 	13, -47, -122, -48, -75, -48, -67, -48, 
- 	-80, -47, -128, -48, -72, -48, -71, 32, 
- 	58, -47, -127, -47, -126, -47, -128, -47, 
- 	-125, -48, -70, -47, -126, -47, -125, -47, 
- 	-128, -48, -80, -47, -127, -48, -72, 58, 
- 	10, 10, -48, 10, 32, 35, 37, 42, 
- 	64, 9, 13, -112, -111, -110, -101, -95, 
- 	-93, -92, 10, -48, 10, -77, -68, 10, 
- 	-48, 10, -80, 10, -47, 10, -128, 10, 
- 	10, 32, -48, 10, -68, 10, -48, 10, 
- 	-66, 10, -48, 10, -72, 10, -47, 10, 
- 	-128, 10, -48, 10, -66, 10, -48, 10, 
- 	-70, 10, -48, 10, -80, 10, -48, 10, 
- 	-75, 10, -48, 10, -70, 10, -48, 10, 
- 	-72, 10, -48, 10, -67, 10, -47, 10, 
- 	-122, 10, -48, 10, -75, 10, -48, 10, 
- 	-67, 10, -48, 10, -80, 10, -47, 10, 
- 	-128, 10, -48, 10, -72, 10, -48, 10, 
- 	-71, 10, 10, 58, -48, 10, -67, 10, 
- 	-48, 10, -76, 10, -47, 10, -125, 10, 
- 	-48, 10, -67, 10, -48, 10, -70, 10, 
- 	-47, 10, -122, 10, -48, 10, -72, 10, 
- 	-48, 10, -66, 10, -48, 10, -67, 10, 
- 	-48, 10, -80, 10, -48, 10, -69, 10, 
- 	10, 95, 10, 70, 10, 69, 10, 65, 
- 	10, 84, 10, 85, 10, 82, 10, 69, 
- 	10, 95, 10, 69, 10, 78, 10, 68, 
- 	10, 95, 10, 37, 10, 10, -48, 10, 
- 	32, 35, 37, 42, 64, 9, 13, -112, 
- 	-111, -110, -101, -95, -94, -93, -92, 10, 
- 	-48, 10, -77, -68, 10, -48, 10, -80, 
- 	10, -47, 10, -128, 10, 10, 32, -48, 
- 	10, -68, 10, -48, 10, -66, 10, -48, 
- 	10, -72, 10, -47, 10, -128, 10, -48, 
- 	10, -66, 10, -48, 10, -70, 10, -48, 
- 	10, -80, 10, -48, 10, -75, 10, -48, 
- 	10, -70, 10, -48, 10, -72, 10, -48, 
- 	10, -67, 10, -47, 10, -122, 10, -48, 
- 	10, -75, 10, -48, 10, -67, 10, -48, 
- 	10, -80, 10, -47, 10, -128, 10, -48, 
- 	10, -72, 10, -48, 10, -71, 10, 10, 
- 	32, 58, -47, 10, -127, 10, -47, 10, 
- 	-126, 10, -47, 10, -128, 10, -47, 10, 
- 	-125, 10, -48, 10, -70, 10, -47, 10, 
- 	-126, 10, -47, 10, -125, 10, -47, 10, 
- 	-128, 10, -48, 10, -80, 10, -47, 10, 
- 	-127, 10, -48, 10, -72, 10, 10, 58, 
- 	-48, 10, -80, 10, -47, 10, -128, 10, 
- 	-48, 10, -72, 10, -47, 10, -123, 10, 
- 	-48, 10, -67, 10, -48, 10, -76, 10, 
- 	-47, 10, -125, 10, -48, 10, -67, 10, 
- 	-48, 10, -70, 10, -47, 10, -122, 10, 
- 	-48, 10, -72, 10, -48, 10, -66, 10, 
- 	-48, 10, -67, 10, -48, 10, -80, 10, 
- 	-48, 10, -69, 10, 10, 95, 10, 70, 
- 	10, 69, 10, 65, 10, 84, 10, 85, 
- 	10, 82, 10, 69, 10, 95, 10, 69, 
- 	10, 78, 10, 68, 10, 95, 10, 37, 
- 	-48, -80, -47, -128, -48, -72, -47, -123, 
- 	58, 10, 10, -48, 10, 32, 35, 37, 
- 	42, 64, 9, 13, -112, -111, -110, -101, 
- 	-95, -93, -92, 10, -48, 10, -77, -68, 
- 	10, -48, 10, -80, 10, -47, 10, -128, 
- 	10, 10, 32, -48, 10, -68, 10, -48, 
- 	10, -66, 10, -48, 10, -72, 10, -47, 
- 	10, -128, 10, -48, 10, -66, 10, -48, 
- 	10, -70, 10, -48, 10, -80, 10, -48, 
- 	10, -75, 10, -48, 10, -70, 10, -48, 
- 	10, -72, 10, -48, 10, -67, 10, -47, 
- 	10, -122, 10, -48, 10, -75, 10, -48, 
- 	10, -67, 10, -48, 10, -80, 10, -47, 
- 	10, -128, 10, -48, 10, -72, 10, -48, 
- 	10, -71, 10, 10, 32, 58, -47, 10, 
- 	-127, 10, -47, 10, -126, 10, -47, 10, 
- 	-128, 10, -47, 10, -125, 10, -48, 10, 
- 	-70, 10, -47, 10, -126, 10, -47, 10, 
- 	-125, 10, -47, 10, -128, 10, -48, 10, 
- 	-80, 10, -47, 10, -127, 10, -48, 10, 
- 	-72, 10, 10, 58, -48, 10, -67, 10, 
- 	-48, 10, -76, 10, -47, 10, -125, 10, 
- 	-48, 10, -67, 10, -48, 10, -70, 10, 
- 	-47, 10, -122, 10, -48, 10, -72, 10, 
- 	-48, 10, -66, 10, -48, 10, -67, 10, 
- 	-48, 10, -80, 10, -48, 10, -69, 10, 
- 	10, 95, 10, 70, 10, 69, 10, 65, 
- 	10, 84, 10, 85, 10, 82, 10, 69, 
- 	10, 95, 10, 69, 10, 78, 10, 68, 
- 	10, 95, 10, 37, -48, -67, -48, -76, 
- 	-47, -125, -48, -67, -48, -70, -47, -122, 
- 	-48, -72, -48, -66, -48, -67, -48, -80, 
- 	-48, -69, 58, 10, 10, -48, 10, 32, 
- 	35, 37, 64, 9, 13, -100, -95, -94, 
- 	-92, 10, -48, 10, -72, 10, -47, 10, 
- 	-127, 10, -48, 10, -66, 10, -48, 10, 
- 	-69, 10, -48, 10, -69, 10, -48, 10, 
- 	-80, 10, -47, 10, -128, 10, 10, 58, 
- 	-47, 10, -122, 10, -48, 10, -75, 10, 
- 	-48, 10, -67, 10, -48, 10, -80, 10, 
- 	-47, 10, -128, 10, -48, 10, -72, 10, 
- 	-48, 10, -71, 10, 10, 32, 58, -47, 
- 	10, -127, 10, -47, 10, -126, 10, -47, 
- 	10, -128, 10, -47, 10, -125, 10, -48, 
- 	10, -70, 10, -47, 10, -126, 10, -47, 
- 	10, -125, 10, -47, 10, -128, 10, -48, 
- 	10, -80, 10, -47, 10, -127, 10, -48, 
- 	10, -72, 10, -48, 10, -80, 10, -47, 
- 	10, -128, 10, -48, 10, -72, 10, -47, 
- 	10, -123, 10, -47, 10, -125, 10, -48, 
- 	10, -67, 10, -48, 10, -70, 10, -47, 
- 	10, -122, 10, -48, 10, -72, 10, -48, 
- 	10, -66, 10, -48, 10, -67, 10, -48, 
- 	10, -80, 10, -48, 10, -69, 10, 10, 
- 	95, 10, 70, 10, 69, 10, 65, 10, 
- 	84, 10, 85, 10, 82, 10, 69, 10, 
- 	95, 10, 69, 10, 78, 10, 68, 10, 
- 	95, 10, 37, -69, -65, 0
- };
- 
- static const char _lexer_single_lengths[] = {
- 	0, 10, 9, 1, 2, 1, 1, 1, 
- 	1, 1, 2, 2, 9, 1, 1, 2, 
- 	2, 3, 3, 3, 3, 2, 2, 2, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 3, 
- 	5, 3, 2, 4, 3, 2, 4, 9, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 5, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 9, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 2, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 7, 8, 2, 
- 	3, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 1, 
- 	1, 7, 9, 2, 3, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 3, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 7, 8, 2, 
- 	3, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 3, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 6, 
- 	5, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 3, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 1, 1, 0
- };
- 
- static const char _lexer_range_lengths[] = {
- 	0, 1, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 1, 0, 0, 0, 
- 	0, 1, 1, 1, 1, 1, 1, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 1, 
- 	1, 1, 1, 1, 0, 0, 1, 1, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 1, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 1, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 1, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 1, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 1, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 1, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0
- };
- 
- static const short _lexer_index_offsets[] = {
- 	0, 0, 12, 22, 24, 27, 29, 31, 
- 	33, 35, 37, 40, 43, 54, 56, 58, 
- 	61, 64, 69, 74, 79, 84, 88, 92, 
- 	95, 97, 99, 101, 103, 105, 107, 109, 
- 	111, 113, 115, 117, 119, 121, 123, 125, 
- 	130, 137, 142, 146, 152, 156, 159, 165, 
- 	176, 178, 180, 182, 184, 186, 188, 190, 
- 	192, 194, 196, 198, 200, 202, 204, 206, 
- 	208, 210, 212, 214, 216, 218, 220, 222, 
- 	224, 226, 228, 230, 232, 234, 236, 238, 
- 	240, 242, 244, 246, 248, 250, 252, 254, 
- 	261, 264, 267, 270, 273, 276, 279, 282, 
- 	285, 288, 291, 294, 297, 300, 303, 306, 
- 	309, 312, 315, 318, 321, 332, 334, 336, 
- 	338, 340, 342, 344, 346, 348, 350, 352, 
- 	354, 356, 358, 360, 363, 365, 367, 369, 
- 	371, 373, 375, 377, 379, 381, 383, 385, 
- 	387, 389, 391, 393, 395, 397, 399, 401, 
- 	403, 405, 407, 409, 411, 413, 422, 431, 
- 	434, 438, 441, 444, 447, 450, 453, 456, 
- 	459, 462, 465, 468, 471, 474, 477, 480, 
- 	483, 486, 489, 492, 495, 498, 501, 504, 
- 	507, 510, 513, 516, 519, 522, 525, 528, 
- 	531, 534, 537, 540, 543, 546, 549, 552, 
- 	555, 558, 561, 564, 567, 570, 573, 576, 
- 	579, 582, 585, 588, 591, 594, 597, 600, 
- 	603, 606, 609, 612, 615, 618, 621, 624, 
- 	627, 630, 633, 636, 639, 642, 645, 648, 
- 	651, 654, 657, 660, 663, 666, 669, 672, 
- 	674, 676, 685, 695, 698, 702, 705, 708, 
- 	711, 714, 717, 720, 723, 726, 729, 732, 
- 	735, 738, 741, 744, 747, 750, 753, 756, 
- 	759, 762, 765, 768, 771, 774, 777, 780, 
- 	783, 786, 789, 792, 795, 798, 801, 804, 
- 	807, 810, 813, 816, 819, 822, 825, 829, 
- 	832, 835, 838, 841, 844, 847, 850, 853, 
- 	856, 859, 862, 865, 868, 871, 874, 877, 
- 	880, 883, 886, 889, 892, 895, 898, 901, 
- 	904, 907, 910, 913, 916, 919, 922, 925, 
- 	928, 931, 934, 937, 940, 943, 946, 949, 
- 	952, 955, 958, 961, 964, 967, 970, 973, 
- 	976, 979, 982, 985, 988, 991, 994, 997, 
- 	1000, 1003, 1006, 1009, 1012, 1015, 1018, 1021, 
- 	1024, 1027, 1030, 1032, 1034, 1036, 1038, 1040, 
- 	1042, 1044, 1046, 1048, 1050, 1052, 1061, 1070, 
- 	1073, 1077, 1080, 1083, 1086, 1089, 1092, 1095, 
- 	1098, 1101, 1104, 1107, 1110, 1113, 1116, 1119, 
- 	1122, 1125, 1128, 1131, 1134, 1137, 1140, 1143, 
- 	1146, 1149, 1152, 1155, 1158, 1161, 1164, 1167, 
- 	1170, 1173, 1176, 1179, 1182, 1185, 1188, 1191, 
- 	1194, 1197, 1200, 1204, 1207, 1210, 1213, 1216, 
- 	1219, 1222, 1225, 1228, 1231, 1234, 1237, 1240, 
- 	1243, 1246, 1249, 1252, 1255, 1258, 1261, 1264, 
- 	1267, 1270, 1273, 1276, 1279, 1282, 1285, 1288, 
- 	1291, 1294, 1297, 1300, 1303, 1306, 1309, 1312, 
- 	1315, 1318, 1321, 1324, 1327, 1330, 1333, 1336, 
- 	1339, 1342, 1345, 1348, 1351, 1354, 1357, 1360, 
- 	1363, 1366, 1369, 1372, 1375, 1378, 1381, 1383, 
- 	1385, 1387, 1389, 1391, 1393, 1395, 1397, 1399, 
- 	1401, 1403, 1405, 1407, 1409, 1411, 1413, 1415, 
- 	1417, 1419, 1421, 1423, 1425, 1427, 1429, 1431, 
- 	1439, 1445, 1448, 1451, 1454, 1457, 1460, 1463, 
- 	1466, 1469, 1472, 1475, 1478, 1481, 1484, 1487, 
- 	1490, 1493, 1496, 1499, 1502, 1505, 1508, 1511, 
- 	1514, 1517, 1520, 1523, 1526, 1529, 1532, 1536, 
- 	1539, 1542, 1545, 1548, 1551, 1554, 1557, 1560, 
- 	1563, 1566, 1569, 1572, 1575, 1578, 1581, 1584, 
- 	1587, 1590, 1593, 1596, 1599, 1602, 1605, 1608, 
- 	1611, 1614, 1617, 1620, 1623, 1626, 1629, 1632, 
- 	1635, 1638, 1641, 1644, 1647, 1650, 1653, 1656, 
- 	1659, 1662, 1665, 1668, 1671, 1674, 1677, 1680, 
- 	1683, 1686, 1689, 1692, 1695, 1698, 1701, 1704, 
- 	1707, 1710, 1713, 1716, 1719, 1722, 1724, 1726
- };
- 
- static const short _lexer_trans_targs[] = {
- 	2, 581, 12, 12, 13, 23, 25, 9, 
- 	39, 42, 12, 0, 3, 52, 60, 62, 
- 	70, 109, 346, 462, 466, 0, 4, 0, 
- 	5, 48, 0, 6, 0, 7, 0, 8, 
- 	0, 9, 0, 10, 0, 12, 24, 11, 
- 	12, 24, 11, 2, 12, 12, 13, 23, 
- 	25, 9, 39, 42, 12, 0, 14, 0, 
- 	15, 0, 17, 16, 16, 17, 16, 16, 
- 	18, 18, 19, 18, 18, 18, 18, 19, 
- 	18, 18, 18, 18, 20, 18, 18, 18, 
- 	18, 21, 18, 18, 12, 22, 22, 0, 
- 	12, 22, 22, 0, 12, 24, 23, 12, 
- 	0, 26, 0, 27, 0, 28, 0, 29, 
- 	0, 30, 0, 31, 0, 32, 0, 33, 
- 	0, 34, 0, 35, 0, 36, 0, 37, 
- 	0, 38, 0, 583, 0, 0, 0, 0, 
- 	0, 40, 41, 12, 41, 41, 39, 40, 
- 	40, 12, 41, 39, 41, 0, 42, 43, 
- 	42, 0, 47, 46, 45, 43, 46, 44, 
- 	0, 45, 43, 44, 0, 45, 44, 47, 
- 	46, 45, 43, 46, 44, 2, 47, 47, 
- 	13, 23, 25, 9, 39, 42, 47, 0, 
- 	49, 0, 50, 0, 51, 0, 9, 0, 
- 	53, 0, 54, 0, 55, 0, 56, 0, 
- 	57, 0, 58, 0, 59, 0, 9, 0, 
- 	61, 0, 9, 0, 63, 0, 64, 0, 
- 	65, 0, 66, 0, 67, 0, 68, 0, 
- 	69, 0, 9, 0, 71, 0, 72, 0, 
- 	73, 0, 74, 0, 75, 0, 76, 0, 
- 	77, 0, 78, 0, 79, 0, 80, 0, 
- 	81, 0, 82, 0, 83, 0, 84, 0, 
- 	85, 0, 87, 86, 87, 86, 88, 87, 
- 	87, 12, 12, 87, 86, 89, 87, 86, 
- 	90, 87, 86, 91, 87, 86, 92, 87, 
- 	86, 93, 87, 86, 94, 87, 86, 95, 
- 	87, 86, 96, 87, 86, 97, 87, 86, 
- 	98, 87, 86, 99, 87, 86, 100, 87, 
- 	86, 101, 87, 86, 102, 87, 86, 103, 
- 	87, 86, 104, 87, 86, 105, 87, 86, 
- 	106, 87, 86, 107, 87, 86, 87, 108, 
- 	86, 2, 12, 12, 13, 23, 25, 9, 
- 	39, 42, 12, 0, 110, 0, 111, 0, 
- 	112, 0, 113, 0, 114, 0, 115, 0, 
- 	116, 0, 117, 0, 118, 0, 119, 0, 
- 	120, 0, 121, 0, 122, 0, 123, 0, 
- 	124, 231, 0, 125, 0, 126, 0, 127, 
- 	0, 128, 0, 129, 0, 130, 0, 131, 
- 	0, 132, 0, 133, 0, 134, 0, 135, 
- 	0, 136, 0, 137, 0, 138, 0, 139, 
- 	0, 140, 0, 141, 0, 142, 0, 143, 
- 	0, 144, 0, 145, 0, 146, 0, 147, 
- 	0, 149, 148, 149, 148, 150, 149, 149, 
- 	12, 217, 157, 12, 149, 148, 151, 162, 
- 	170, 172, 180, 195, 199, 149, 148, 152, 
- 	149, 148, 153, 158, 149, 148, 154, 149, 
- 	148, 155, 149, 148, 156, 149, 148, 157, 
- 	149, 148, 149, 108, 148, 159, 149, 148, 
- 	160, 149, 148, 161, 149, 148, 157, 149, 
- 	148, 163, 149, 148, 164, 149, 148, 165, 
- 	149, 148, 166, 149, 148, 167, 149, 148, 
- 	168, 149, 148, 169, 149, 148, 157, 149, 
- 	148, 171, 149, 148, 157, 149, 148, 173, 
- 	149, 148, 174, 149, 148, 175, 149, 148, 
- 	176, 149, 148, 177, 149, 148, 178, 149, 
- 	148, 179, 149, 148, 157, 149, 148, 181, 
- 	149, 148, 182, 149, 148, 183, 149, 148, 
- 	184, 149, 148, 185, 149, 148, 186, 149, 
- 	148, 187, 149, 148, 188, 149, 148, 189, 
- 	149, 148, 190, 149, 148, 191, 149, 148, 
- 	192, 149, 148, 193, 149, 148, 194, 149, 
- 	148, 149, 108, 148, 196, 149, 148, 197, 
- 	149, 148, 198, 149, 148, 170, 149, 148, 
- 	200, 149, 148, 201, 149, 148, 202, 149, 
- 	148, 203, 149, 148, 204, 149, 148, 205, 
- 	149, 148, 206, 149, 148, 207, 149, 148, 
- 	208, 149, 148, 209, 149, 148, 210, 149, 
- 	148, 211, 149, 148, 212, 149, 148, 213, 
- 	149, 148, 214, 149, 148, 215, 149, 148, 
- 	216, 149, 148, 194, 149, 148, 149, 218, 
- 	148, 149, 219, 148, 149, 220, 148, 149, 
- 	221, 148, 149, 222, 148, 149, 223, 148, 
- 	149, 224, 148, 149, 225, 148, 149, 226, 
- 	148, 149, 227, 148, 149, 228, 148, 149, 
- 	229, 148, 149, 230, 148, 149, 12, 148, 
- 	233, 232, 233, 232, 234, 233, 233, 12, 
- 	332, 241, 12, 233, 232, 235, 246, 254, 
- 	256, 264, 302, 310, 314, 233, 232, 236, 
- 	233, 232, 237, 242, 233, 232, 238, 233, 
- 	232, 239, 233, 232, 240, 233, 232, 241, 
- 	233, 232, 233, 108, 232, 243, 233, 232, 
- 	244, 233, 232, 245, 233, 232, 241, 233, 
- 	232, 247, 233, 232, 248, 233, 232, 249, 
- 	233, 232, 250, 233, 232, 251, 233, 232, 
- 	252, 233, 232, 253, 233, 232, 241, 233, 
- 	232, 255, 233, 232, 241, 233, 232, 257, 
- 	233, 232, 258, 233, 232, 259, 233, 232, 
- 	260, 233, 232, 261, 233, 232, 262, 233, 
- 	232, 263, 233, 232, 241, 233, 232, 265, 
- 	233, 232, 266, 233, 232, 267, 233, 232, 
- 	268, 233, 232, 269, 233, 232, 270, 233, 
- 	232, 271, 233, 232, 272, 233, 232, 273, 
- 	233, 232, 274, 233, 232, 275, 233, 232, 
- 	276, 233, 232, 277, 233, 232, 278, 233, 
- 	232, 233, 279, 108, 232, 280, 233, 232, 
- 	281, 233, 232, 282, 233, 232, 283, 233, 
- 	232, 284, 233, 232, 285, 233, 232, 286, 
- 	233, 232, 287, 233, 232, 288, 233, 232, 
- 	289, 233, 232, 290, 233, 232, 291, 233, 
- 	232, 292, 233, 232, 293, 233, 232, 294, 
- 	233, 232, 295, 233, 232, 296, 233, 232, 
- 	297, 233, 232, 298, 233, 232, 299, 233, 
- 	232, 300, 233, 232, 301, 233, 232, 233, 
- 	108, 232, 303, 233, 232, 304, 233, 232, 
- 	305, 233, 232, 306, 233, 232, 307, 233, 
- 	232, 308, 233, 232, 309, 233, 232, 301, 
- 	233, 232, 311, 233, 232, 312, 233, 232, 
- 	313, 233, 232, 254, 233, 232, 315, 233, 
- 	232, 316, 233, 232, 317, 233, 232, 318, 
- 	233, 232, 319, 233, 232, 320, 233, 232, 
- 	321, 233, 232, 322, 233, 232, 323, 233, 
- 	232, 324, 233, 232, 325, 233, 232, 326, 
- 	233, 232, 327, 233, 232, 328, 233, 232, 
- 	329, 233, 232, 330, 233, 232, 331, 233, 
- 	232, 301, 233, 232, 233, 333, 232, 233, 
- 	334, 232, 233, 335, 232, 233, 336, 232, 
- 	233, 337, 232, 233, 338, 232, 233, 339, 
- 	232, 233, 340, 232, 233, 341, 232, 233, 
- 	342, 232, 233, 343, 232, 233, 344, 232, 
- 	233, 345, 232, 233, 12, 232, 347, 0, 
- 	348, 0, 349, 0, 350, 0, 351, 0, 
- 	352, 0, 353, 0, 354, 0, 355, 0, 
- 	357, 356, 357, 356, 358, 357, 357, 12, 
- 	448, 365, 12, 357, 356, 359, 370, 378, 
- 	380, 388, 426, 430, 357, 356, 360, 357, 
- 	356, 361, 366, 357, 356, 362, 357, 356, 
- 	363, 357, 356, 364, 357, 356, 365, 357, 
- 	356, 357, 108, 356, 367, 357, 356, 368, 
- 	357, 356, 369, 357, 356, 365, 357, 356, 
- 	371, 357, 356, 372, 357, 356, 373, 357, 
- 	356, 374, 357, 356, 375, 357, 356, 376, 
- 	357, 356, 377, 357, 356, 365, 357, 356, 
- 	379, 357, 356, 365, 357, 356, 381, 357, 
- 	356, 382, 357, 356, 383, 357, 356, 384, 
- 	357, 356, 385, 357, 356, 386, 357, 356, 
- 	387, 357, 356, 365, 357, 356, 389, 357, 
- 	356, 390, 357, 356, 391, 357, 356, 392, 
- 	357, 356, 393, 357, 356, 394, 357, 356, 
- 	395, 357, 356, 396, 357, 356, 397, 357, 
- 	356, 398, 357, 356, 399, 357, 356, 400, 
- 	357, 356, 401, 357, 356, 402, 357, 356, 
- 	357, 403, 108, 356, 404, 357, 356, 405, 
- 	357, 356, 406, 357, 356, 407, 357, 356, 
- 	408, 357, 356, 409, 357, 356, 410, 357, 
- 	356, 411, 357, 356, 412, 357, 356, 413, 
- 	357, 356, 414, 357, 356, 415, 357, 356, 
- 	416, 357, 356, 417, 357, 356, 418, 357, 
- 	356, 419, 357, 356, 420, 357, 356, 421, 
- 	357, 356, 422, 357, 356, 423, 357, 356, 
- 	424, 357, 356, 425, 357, 356, 357, 108, 
- 	356, 427, 357, 356, 428, 357, 356, 429, 
- 	357, 356, 378, 357, 356, 431, 357, 356, 
- 	432, 357, 356, 433, 357, 356, 434, 357, 
- 	356, 435, 357, 356, 436, 357, 356, 437, 
- 	357, 356, 438, 357, 356, 439, 357, 356, 
- 	440, 357, 356, 441, 357, 356, 442, 357, 
- 	356, 443, 357, 356, 444, 357, 356, 445, 
- 	357, 356, 446, 357, 356, 447, 357, 356, 
- 	425, 357, 356, 357, 449, 356, 357, 450, 
- 	356, 357, 451, 356, 357, 452, 356, 357, 
- 	453, 356, 357, 454, 356, 357, 455, 356, 
- 	357, 456, 356, 357, 457, 356, 357, 458, 
- 	356, 357, 459, 356, 357, 460, 356, 357, 
- 	461, 356, 357, 12, 356, 463, 0, 464, 
- 	0, 465, 0, 60, 0, 467, 0, 468, 
- 	0, 469, 0, 470, 0, 471, 0, 472, 
- 	0, 473, 0, 474, 0, 475, 0, 476, 
- 	0, 477, 0, 478, 0, 479, 0, 480, 
- 	0, 481, 0, 482, 0, 483, 0, 484, 
- 	0, 485, 0, 487, 486, 487, 486, 488, 
- 	487, 487, 12, 567, 12, 487, 486, 489, 
- 	504, 541, 549, 487, 486, 490, 487, 486, 
- 	491, 487, 486, 492, 487, 486, 493, 487, 
- 	486, 494, 487, 486, 495, 487, 486, 496, 
- 	487, 486, 497, 487, 486, 498, 487, 486, 
- 	499, 487, 486, 500, 487, 486, 501, 487, 
- 	486, 502, 487, 486, 503, 487, 486, 487, 
- 	108, 486, 505, 487, 486, 506, 487, 486, 
- 	507, 487, 486, 508, 487, 486, 509, 487, 
- 	486, 510, 487, 486, 511, 487, 486, 512, 
- 	487, 486, 513, 487, 486, 514, 487, 486, 
- 	515, 487, 486, 516, 487, 486, 517, 487, 
- 	486, 518, 487, 486, 487, 519, 108, 486, 
- 	520, 487, 486, 521, 487, 486, 522, 487, 
- 	486, 523, 487, 486, 524, 487, 486, 525, 
- 	487, 486, 526, 487, 486, 527, 487, 486, 
- 	528, 487, 486, 529, 487, 486, 530, 487, 
- 	486, 531, 487, 486, 532, 487, 486, 533, 
- 	487, 486, 534, 487, 486, 535, 487, 486, 
- 	536, 487, 486, 537, 487, 486, 538, 487, 
- 	486, 539, 487, 486, 540, 487, 486, 503, 
- 	487, 486, 542, 487, 486, 543, 487, 486, 
- 	544, 487, 486, 545, 487, 486, 546, 487, 
- 	486, 547, 487, 486, 548, 487, 486, 503, 
- 	487, 486, 550, 487, 486, 551, 487, 486, 
- 	552, 487, 486, 553, 487, 486, 554, 487, 
- 	486, 555, 487, 486, 556, 487, 486, 557, 
- 	487, 486, 558, 487, 486, 559, 487, 486, 
- 	560, 487, 486, 561, 487, 486, 562, 487, 
- 	486, 563, 487, 486, 564, 487, 486, 565, 
- 	487, 486, 566, 487, 486, 503, 487, 486, 
- 	487, 568, 486, 487, 569, 486, 487, 570, 
- 	486, 487, 571, 486, 487, 572, 486, 487, 
- 	573, 486, 487, 574, 486, 487, 575, 486, 
- 	487, 576, 486, 487, 577, 486, 487, 578, 
- 	486, 487, 579, 486, 487, 580, 486, 487, 
- 	12, 486, 582, 0, 12, 0, 0, 0
- };
- 
- static const unsigned char _lexer_trans_actions[] = {
- 	29, 0, 54, 0, 5, 1, 0, 29, 
- 	1, 35, 0, 43, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 43, 0, 43, 
- 	0, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 149, 126, 57, 
- 	110, 23, 0, 29, 54, 0, 5, 1, 
- 	0, 29, 1, 35, 0, 43, 0, 43, 
- 	0, 43, 139, 48, 9, 106, 11, 0, 
- 	134, 45, 45, 45, 3, 122, 33, 33, 
- 	33, 0, 122, 33, 33, 33, 0, 122, 
- 	33, 0, 33, 0, 102, 7, 7, 43, 
- 	54, 0, 0, 43, 114, 25, 0, 54, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 43, 43, 43, 
- 	43, 0, 27, 118, 27, 27, 51, 27, 
- 	0, 54, 0, 1, 0, 43, 0, 0, 
- 	0, 43, 54, 37, 37, 87, 37, 37, 
- 	43, 0, 39, 0, 43, 0, 0, 54, 
- 	0, 0, 39, 0, 0, 96, 54, 0, 
- 	93, 90, 41, 96, 90, 99, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 144, 57, 54, 0, 84, 54, 
- 	0, 81, 81, 0, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 54, 21, 
- 	0, 63, 130, 31, 60, 57, 31, 63, 
- 	57, 66, 31, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 144, 57, 54, 0, 84, 54, 0, 
- 	78, 33, 84, 78, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 54, 19, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 54, 19, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 19, 0, 
- 	144, 57, 54, 0, 84, 54, 0, 75, 
- 	33, 84, 75, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 54, 17, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 54, 0, 17, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 54, 
- 	17, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 17, 0, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	144, 57, 54, 0, 84, 54, 0, 72, 
- 	33, 84, 72, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 54, 15, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	54, 0, 15, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 54, 15, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 15, 0, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 144, 57, 54, 0, 84, 
- 	54, 0, 69, 33, 69, 0, 0, 0, 
- 	0, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 54, 
- 	13, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 54, 0, 13, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	13, 0, 0, 43, 0, 43, 0, 0
- };
- 
- static const unsigned char _lexer_eof_actions[] = {
- 	0, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43
- };
- 
- static const int lexer_start = 1;
- static const int lexer_first_final = 583;
- static const int lexer_error = 0;
- 
- static const int lexer_en_main = 1;
- 
- 
- #line 258 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/uz.c.rl"
- 
- static VALUE 
- unindent(VALUE con, int start_col)
- {
-   VALUE re;
-   // Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters
-   char pat[32]; 
-   snprintf(pat, 32, "^[\t ]{0,%d}", start_col); 
-   re = rb_reg_regcomp(rb_str_new2(pat));
-   rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2(""));
- 
-   return Qnil;
- 
- }
- 
- static void 
- store_kw_con(VALUE listener, const char * event_name, 
-              const char * keyword_at, size_t keyword_length, 
-              const char * at,         size_t length, 
-              int current_line)
- {
-   VALUE con = Qnil, kw = Qnil;
-   kw = ENCODED_STR_NEW(keyword_at, keyword_length);
-   con = ENCODED_STR_NEW(at, length);
-   rb_funcall(con, rb_intern("strip!"), 0);
-   rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); 
- }
- 
- static void
- store_multiline_kw_con(VALUE listener, const char * event_name,
-                       const char * keyword_at, size_t keyword_length,
-                       const char * at,         size_t length,
-                       int current_line, int start_col)
- {
-   VALUE split;
-   VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil;
- 
-   kw = ENCODED_STR_NEW(keyword_at, keyword_length);
-   con = ENCODED_STR_NEW(at, length);
- 
-   unindent(con, start_col);
-   
-   split = rb_str_split(con, "\n");
- 
-   name = rb_funcall(split, rb_intern("shift"), 0);
-   desc = rb_ary_join(split, rb_str_new2( "\n" ));
- 
-   if( name == Qnil ) 
-   {
-     name = rb_str_new2("");
-   }
-   if( rb_funcall(desc, rb_intern("size"), 0) == 0) 
-   {
-     desc = rb_str_new2("");
-   }
-   rb_funcall(name, rb_intern("strip!"), 0);
-   rb_funcall(desc, rb_intern("rstrip!"), 0);
-   rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); 
- }
- 
- static void 
- store_attr(VALUE listener, const char * attr_type,
-            const char * at, size_t length, 
-            int line)
- {
-   VALUE val = ENCODED_STR_NEW(at, length);
-   rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line));
- }
- static void 
- store_docstring_content(VALUE listener, 
-           int start_col, 
-           const char *type_at, size_t type_length,
-           const char *at, size_t length, 
-           int current_line)
- {
-   VALUE re2;
-   VALUE unescape_escaped_quotes;
-   VALUE con = ENCODED_STR_NEW(at, length);
-   VALUE con_type = ENCODED_STR_NEW(type_at, type_length);
- 
-   unindent(con, start_col);
- 
-   re2 = rb_reg_regcomp(rb_str_new2("\r\\Z"));
-   unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\""));
-   rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2(""));
-   rb_funcall(con_type, rb_intern("strip!"), 0);
-   rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\""));
-   rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line));
- }
- static void 
- raise_lexer_error(const char * at, int line)
- { 
-   rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at);
- }
- 
- static void lexer_init(lexer_state *lexer) {
-   lexer->content_start = 0;
-   lexer->content_end = 0;
-   lexer->content_len = 0;
-   lexer->docstring_content_type_start = 0;
-   lexer->docstring_content_type_end = 0;
-   lexer->mark = 0;
-   lexer->keyword_start = 0;
-   lexer->keyword_end = 0;
-   lexer->next_keyword_start = 0;
-   lexer->line_number = 1;
-   lexer->last_newline = 0;
-   lexer->final_newline = 0;
-   lexer->start_col = 0;
- }
- 
- static VALUE CLexer_alloc(VALUE klass)
- {
-   VALUE obj;
-   lexer_state *lxr = ALLOC(lexer_state);
-   lexer_init(lxr);
- 
-   obj = Data_Wrap_Struct(klass, NULL, -1, lxr);
- 
-   return obj;
- }
- 
- static VALUE CLexer_init(VALUE self, VALUE listener)
- {
-   lexer_state *lxr; 
-   rb_iv_set(self, "@listener", listener);
-   
-   lxr = NULL;
-   DATA_GET(self, lexer_state, lxr);
-   lexer_init(lxr);
-   
-   return self;
- }
- 
- static VALUE CLexer_scan(VALUE self, VALUE input)
- {
-   VALUE input_copy;
-   char *data;
-   size_t len;
-   VALUE listener = rb_iv_get(self, "@listener");
- 
-   lexer_state *lexer;
-   lexer = NULL;
-   DATA_GET(self, lexer_state, lexer);
- 
-   input_copy = rb_str_dup(input);
- 
-   rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%"));
-   data = RSTRING_PTR(input_copy);
-   len = RSTRING_LEN(input_copy);
-   
-   if (len == 0) { 
-     rb_raise(rb_eGherkinLexingError, "No content to lex.");
-   } else {
- 
-     const char *p, *pe, *eof;
-     int cs = 0;
-     
-     VALUE current_row = Qnil;
- 
-     p = data;
-     pe = data + len;
-     eof = pe;
-     
-     assert(*pe == '\0' && "pointer does not end on NULL");
-     
-     
- #line 1255 "ext/gherkin_lexer_uz/gherkin_lexer_uz.c"
- 	{
- 	cs = lexer_start;
- 	}
- 
- #line 425 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/uz.c.rl"
-     
- #line 1262 "ext/gherkin_lexer_uz/gherkin_lexer_uz.c"
- 	{
- 	int _klen;
- 	unsigned int _trans;
- 	const char *_acts;
- 	unsigned int _nacts;
- 	const char *_keys;
- 
- 	if ( p == pe )
- 		goto _test_eof;
- 	if ( cs == 0 )
- 		goto _out;
- _resume:
- 	_keys = _lexer_trans_keys + _lexer_key_offsets[cs];
- 	_trans = _lexer_index_offsets[cs];
- 
- 	_klen = _lexer_single_lengths[cs];
- 	if ( _klen > 0 ) {
- 		const char *_lower = _keys;
- 		const char *_mid;
- 		const char *_upper = _keys + _klen - 1;
- 		while (1) {
- 			if ( _upper < _lower )
- 				break;
- 
- 			_mid = _lower + ((_upper-_lower) >> 1);
- 			if ( (*p) < *_mid )
- 				_upper = _mid - 1;
- 			else if ( (*p) > *_mid )
- 				_lower = _mid + 1;
- 			else {
- 				_trans += (_mid - _keys);
- 				goto _match;
- 			}
- 		}
- 		_keys += _klen;
- 		_trans += _klen;
- 	}
- 
- 	_klen = _lexer_range_lengths[cs];
- 	if ( _klen > 0 ) {
- 		const char *_lower = _keys;
- 		const char *_mid;
- 		const char *_upper = _keys + (_klen<<1) - 2;
- 		while (1) {
- 			if ( _upper < _lower )
- 				break;
- 
- 			_mid = _lower + (((_upper-_lower) >> 1) & ~1);
- 			if ( (*p) < _mid[0] )
- 				_upper = _mid - 2;
- 			else if ( (*p) > _mid[1] )
- 				_lower = _mid + 2;
- 			else {
- 				_trans += ((_mid - _keys)>>1);
- 				goto _match;
- 			}
- 		}
- 		_trans += _klen;
- 	}
- 
- _match:
- 	cs = _lexer_trans_targs[_trans];
- 
- 	if ( _lexer_trans_actions[_trans] == 0 )
- 		goto _again;
- 
- 	_acts = _lexer_actions + _lexer_trans_actions[_trans];
- 	_nacts = (unsigned int) *_acts++;
- 	while ( _nacts-- > 0 )
- 	{
- 		switch ( *_acts++ )
- 		{
- 	case 0:
- #line 83 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/uz.c.rl"
- 	{
- 		MARK(content_start, p);
-     lexer->current_line = lexer->line_number;
-     lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2;
-   }
- 	break;
- 	case 1:
- #line 89 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/uz.c.rl"
- 	{
-     MARK(content_start, p);
-   }
- 	break;
- 	case 2:
- #line 93 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/uz.c.rl"
- 	{
-     lexer->current_line = lexer->line_number;
-     lexer->start_col = p - data - lexer->last_newline;
-   }
- 	break;
- 	case 3:
- #line 98 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/uz.c.rl"
- 	{
-     int len = LEN(content_start, PTR_TO(final_newline));
-     int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end));
- 
-     if (len < 0) len = 0;
-     if (type_len < 0) len = 0;
- 
-     store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line);
-   }
- 	break;
- 	case 4:
- #line 108 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/uz.c.rl"
- 	{ 
-     MARK(docstring_content_type_start, p);
-   }
- 	break;
- 	case 5:
- #line 112 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/uz.c.rl"
- 	{ 
-     MARK(docstring_content_type_end, p);
-   }
- 	break;
- 	case 6:
- #line 116 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/uz.c.rl"
- 	{
-     STORE_KW_END_CON(feature);
-   }
- 	break;
- 	case 7:
- #line 120 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/uz.c.rl"
- 	{
-     STORE_KW_END_CON(background);
-   }
- 	break;
- 	case 8:
- #line 124 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/uz.c.rl"
- 	{
-     STORE_KW_END_CON(scenario);
-   }
- 	break;
- 	case 9:
- #line 128 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/uz.c.rl"
- 	{
-     STORE_KW_END_CON(scenario_outline);
-   }
- 	break;
- 	case 10:
- #line 132 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/uz.c.rl"
- 	{
-     STORE_KW_END_CON(examples);
-   }
- 	break;
- 	case 11:
- #line 136 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/uz.c.rl"
- 	{
-     store_kw_con(listener, "step",
-       PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-       PTR_TO(content_start), LEN(content_start, p), 
-       lexer->current_line);
-   }
- 	break;
- 	case 12:
- #line 143 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/uz.c.rl"
- 	{
-     STORE_ATTR(comment);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 13:
- #line 148 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/uz.c.rl"
- 	{
-     STORE_ATTR(tag);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 14:
- #line 153 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/uz.c.rl"
- 	{
-     lexer->line_number += 1;
-     MARK(final_newline, p);
-   }
- 	break;
- 	case 15:
- #line 158 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/uz.c.rl"
- 	{
-     MARK(last_newline, p + 1);
-   }
- 	break;
- 	case 16:
- #line 162 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/uz.c.rl"
- 	{
-     if (lexer->mark == 0) {
-       MARK(mark, p);
-     }
-   }
- 	break;
- 	case 17:
- #line 168 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/uz.c.rl"
- 	{
-     MARK(keyword_end, p);
-     MARK(keyword_start, PTR_TO(mark));
-     MARK(content_start, p + 1);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 18:
- #line 175 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/uz.c.rl"
- 	{
-     MARK(content_end, p);
-   }
- 	break;
- 	case 19:
- #line 179 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/uz.c.rl"
- 	{
-     p = p - 1;
-     lexer->current_line = lexer->line_number;
-     current_row = rb_ary_new();
-   }
- 	break;
- 	case 20:
- #line 185 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/uz.c.rl"
- 	{
- 		MARK(content_start, p);
-   }
- 	break;
- 	case 21:
- #line 189 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/uz.c.rl"
- 	{
-     VALUE re_pipe, re_newline, re_backslash;
-     VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
-     rb_funcall(con, rb_intern("strip!"), 0);
-     re_pipe      = rb_reg_regcomp(rb_str_new2("\\\\\\|"));
-     re_newline   = rb_reg_regcomp(rb_str_new2("\\\\n"));
-     re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_pipe,      rb_str_new2("|"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_newline,   rb_str_new2("\n"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\"));
- 
-     rb_ary_push(current_row, con);
-   }
- 	break;
- 	case 22:
- #line 203 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/uz.c.rl"
- 	{
-     rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
-   }
- 	break;
- 	case 23:
- #line 207 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/uz.c.rl"
- 	{
-     int line;
-     if (cs < lexer_first_final) {
-       size_t count = 0;
-       VALUE newstr_val;
-       char *newstr;
-       int newstr_count = 0;        
-       size_t len;
-       const char *buff;
-       if (lexer->last_newline != 0) {
-         len = LEN(last_newline, eof);
-         buff = PTR_TO(last_newline);
-       } else {
-         len = strlen(data);
-         buff = data;
-       }
- 
-       // Allocate as a ruby string so that it gets cleaned up by GC
-       newstr_val = rb_str_new(buff, len);
-       newstr = RSTRING_PTR(newstr_val);
- 
- 
-       for (count = 0; count < len; count++) {
-         if(buff[count] == 10) {
-           newstr[newstr_count] = '\0'; // terminate new string at first newline found
-           break;
-         } else {
-           if (buff[count] == '%') {
-             newstr[newstr_count++] = buff[count];
-             newstr[newstr_count] = buff[count];
-           } else {
-             newstr[newstr_count] = buff[count];
-           }
-         }
-         newstr_count++;
-       }
- 
-       line = lexer->line_number;
-       lexer_init(lexer); // Re-initialize so we can scan again with the same lexer
-       raise_lexer_error(newstr, line);
-     } else {
-       rb_funcall(listener, rb_intern("eof"), 0);
-     }
-   }
- 	break;
- #line 1552 "ext/gherkin_lexer_uz/gherkin_lexer_uz.c"
- 		}
- 	}
- 
- _again:
- 	if ( cs == 0 )
- 		goto _out;
- 	if ( ++p != pe )
- 		goto _resume;
- 	_test_eof: {}
- 	if ( p == eof )
- 	{
- 	const char *__acts = _lexer_actions + _lexer_eof_actions[cs];
- 	unsigned int __nacts = (unsigned int) *__acts++;
- 	while ( __nacts-- > 0 ) {
- 		switch ( *__acts++ ) {
- 	case 23:
- #line 207 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/uz.c.rl"
- 	{
-     int line;
-     if (cs < lexer_first_final) {
-       size_t count = 0;
-       VALUE newstr_val;
-       char *newstr;
-       int newstr_count = 0;        
-       size_t len;
-       const char *buff;
-       if (lexer->last_newline != 0) {
-         len = LEN(last_newline, eof);
-         buff = PTR_TO(last_newline);
-       } else {
-         len = strlen(data);
-         buff = data;
-       }
- 
-       // Allocate as a ruby string so that it gets cleaned up by GC
-       newstr_val = rb_str_new(buff, len);
-       newstr = RSTRING_PTR(newstr_val);
- 
- 
-       for (count = 0; count < len; count++) {
-         if(buff[count] == 10) {
-           newstr[newstr_count] = '\0'; // terminate new string at first newline found
-           break;
-         } else {
-           if (buff[count] == '%') {
-             newstr[newstr_count++] = buff[count];
-             newstr[newstr_count] = buff[count];
-           } else {
-             newstr[newstr_count] = buff[count];
-           }
-         }
-         newstr_count++;
-       }
- 
-       line = lexer->line_number;
-       lexer_init(lexer); // Re-initialize so we can scan again with the same lexer
-       raise_lexer_error(newstr, line);
-     } else {
-       rb_funcall(listener, rb_intern("eof"), 0);
-     }
-   }
- 	break;
- #line 1615 "ext/gherkin_lexer_uz/gherkin_lexer_uz.c"
- 		}
- 	}
- 	}
- 
- 	_out: {}
- 	}
- 
- #line 426 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/uz.c.rl"
- 
-     assert(p <= pe && "data overflow after parsing execute");
-     assert(lexer->content_start <= len && "content starts after data end");
-     assert(lexer->mark < len && "mark is after data end");
-     
-     // Reset lexer by re-initializing the whole thing
-     lexer_init(lexer);
- 
-     if (cs == lexer_error) {
-       rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails.");
-     } else {
-       return Qtrue;
-     }
-   }
- }
- 
- void Init_gherkin_lexer_uz()
- {
-   mGherkin = rb_define_module("Gherkin");
-   mGherkinLexer = rb_define_module_under(mGherkin, "Lexer");
-   rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError"));
- 
-   mCLexer = rb_define_module_under(mGherkin, "CLexer");
-   cI18nLexer = rb_define_class_under(mCLexer, "Uz", rb_cObject);
-   rb_define_alloc_func(cI18nLexer, CLexer_alloc);
-   rb_define_method(cI18nLexer, "initialize", CLexer_init, 1);
-   rb_define_method(cI18nLexer, "scan", CLexer_scan, 1);
- }
- 
 -#line 1 "ragel/i18n/uz.c.rl"
 -#include <assert.h>
 -#include <ruby.h>
 -
 -#if defined(_WIN32)
 -#include <stddef.h>
 -#endif
 -
 -#ifdef HAVE_RUBY_RE_H
 -#include <ruby/re.h>
 -#else
 -#include <re.h>
 -#endif
 -
 -#ifdef HAVE_RUBY_ENCODING_H
 -#include <ruby/encoding.h>
 -#define ENCODED_STR_NEW(ptr, len) \
 -    rb_enc_str_new(ptr, len, rb_utf8_encoding())
 -#else
 -#define ENCODED_STR_NEW(ptr, len) \
 -    rb_str_new(ptr, len)
 -#endif
 -
 -#ifndef RSTRING_PTR
 -#define RSTRING_PTR(s) (RSTRING(s)->ptr)
 -#endif
 -
 -#ifndef RSTRING_LEN
 -#define RSTRING_LEN(s) (RSTRING(s)->len)
 -#endif
 -
 -#define DATA_GET(FROM, TYPE, NAME) \
 -  Data_Get_Struct(FROM, TYPE, NAME); \
 -  if (NAME == NULL) { \
 -    rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \
 -  }
 - 
 -typedef struct lexer_state {
 -  int content_len;
 -  int line_number;
 -  int current_line;
 -  int start_col;
 -  size_t mark;
 -  size_t keyword_start;
 -  size_t keyword_end;
 -  size_t next_keyword_start;
 -  size_t content_start;
 -  size_t content_end;
 -  size_t docstring_content_type_start;
 -  size_t docstring_content_type_end;
 -  size_t query_start;
 -  size_t last_newline;
 -  size_t final_newline;
 -} lexer_state;
 -
 -static VALUE mGherkin;
 -static VALUE mGherkinLexer;
 -static VALUE mCLexer;
 -static VALUE cI18nLexer;
 -static VALUE rb_eGherkinLexingError;
 -
 -#define LEN(AT, P) (P - data - lexer->AT)
 -#define MARK(M, P) (lexer->M = (P) - data)
 -#define PTR_TO(P) (data + lexer->P)
 -
 -#define STORE_KW_END_CON(EVENT) \
 -  store_multiline_kw_con(listener, # EVENT, \
 -    PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \
 -    PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \
 -    lexer->current_line, lexer->start_col); \
 -    if (lexer->content_end != 0) { \
 -      p = PTR_TO(content_end - 1); \
 -    } \
 -    lexer->content_end = 0
 -
 -#define STORE_ATTR(ATTR) \
 -    store_attr(listener, # ATTR, \
 -      PTR_TO(content_start), LEN(content_start, p), \
 -      lexer->line_number)
 -
 -
 -#line 254 "ragel/i18n/uz.c.rl"
 -
 -
 -/** Data **/
 -
 -#line 89 "ext/gherkin_lexer_uz/gherkin_lexer_uz.c"
 -static const char _lexer_actions[] = {
 -	0, 1, 0, 1, 1, 1, 2, 1, 
 -	3, 1, 4, 1, 5, 1, 6, 1, 
 -	7, 1, 8, 1, 9, 1, 10, 1, 
 -	11, 1, 12, 1, 13, 1, 16, 1, 
 -	17, 1, 18, 1, 19, 1, 20, 1, 
 -	21, 1, 22, 1, 23, 2, 1, 18, 
 -	2, 4, 5, 2, 13, 0, 2, 14, 
 -	15, 2, 17, 0, 2, 17, 2, 2, 
 -	17, 16, 2, 17, 19, 2, 18, 6, 
 -	2, 18, 7, 2, 18, 8, 2, 18, 
 -	9, 2, 18, 10, 2, 18, 16, 2, 
 -	20, 21, 2, 22, 0, 2, 22, 2, 
 -	2, 22, 16, 2, 22, 19, 3, 3, 
 -	14, 15, 3, 5, 14, 15, 3, 11, 
 -	14, 15, 3, 12, 14, 15, 3, 13, 
 -	14, 15, 3, 14, 15, 18, 3, 17, 
 -	0, 11, 3, 17, 14, 15, 4, 1, 
 -	14, 15, 18, 4, 4, 5, 14, 15, 
 -	4, 17, 0, 14, 15, 5, 17, 0, 
 -	11, 14, 15
 -};
 -
 -static const short _lexer_key_offsets[] = {
 -	0, 0, 12, 21, 22, 24, 25, 26, 
 -	27, 28, 29, 31, 33, 44, 45, 46, 
 -	48, 50, 55, 60, 65, 70, 74, 78, 
 -	80, 81, 82, 83, 84, 85, 86, 87, 
 -	88, 89, 90, 91, 92, 93, 94, 95, 
 -	100, 107, 112, 116, 122, 125, 127, 133, 
 -	144, 145, 146, 147, 148, 149, 150, 151, 
 -	152, 153, 154, 155, 156, 157, 158, 159, 
 -	160, 161, 162, 163, 164, 165, 166, 167, 
 -	168, 169, 170, 171, 172, 173, 174, 175, 
 -	176, 177, 178, 179, 180, 181, 182, 183, 
 -	190, 192, 194, 196, 198, 200, 202, 204, 
 -	206, 208, 210, 212, 214, 216, 218, 220, 
 -	222, 224, 226, 228, 230, 241, 242, 243, 
 -	244, 245, 246, 247, 248, 249, 250, 251, 
 -	252, 253, 254, 255, 257, 258, 259, 260, 
 -	261, 262, 263, 264, 265, 266, 267, 268, 
 -	269, 270, 271, 272, 273, 274, 275, 276, 
 -	277, 278, 279, 280, 281, 282, 291, 299, 
 -	301, 304, 306, 308, 310, 312, 314, 316, 
 -	318, 320, 322, 324, 326, 328, 330, 332, 
 -	334, 336, 338, 340, 342, 344, 346, 348, 
 -	350, 352, 354, 356, 358, 360, 362, 364, 
 -	366, 368, 370, 372, 374, 376, 378, 380, 
 -	382, 384, 386, 388, 390, 392, 394, 396, 
 -	398, 400, 402, 404, 406, 408, 410, 412, 
 -	414, 416, 418, 420, 422, 424, 426, 428, 
 -	430, 432, 434, 436, 438, 440, 442, 444, 
 -	446, 448, 450, 452, 454, 456, 458, 460, 
 -	461, 462, 471, 480, 482, 485, 487, 489, 
 -	491, 493, 495, 497, 499, 501, 503, 505, 
 -	507, 509, 511, 513, 515, 517, 519, 521, 
 -	523, 525, 527, 529, 531, 533, 535, 537, 
 -	539, 541, 543, 545, 547, 549, 551, 553, 
 -	555, 557, 559, 561, 563, 565, 567, 570, 
 -	572, 574, 576, 578, 580, 582, 584, 586, 
 -	588, 590, 592, 594, 596, 598, 600, 602, 
 -	604, 606, 608, 610, 612, 614, 616, 618, 
 -	620, 622, 624, 626, 628, 630, 632, 634, 
 -	636, 638, 640, 642, 644, 646, 648, 650, 
 -	652, 654, 656, 658, 660, 662, 664, 666, 
 -	668, 670, 672, 674, 676, 678, 680, 682, 
 -	684, 686, 688, 690, 692, 694, 696, 698, 
 -	700, 702, 704, 705, 706, 707, 708, 709, 
 -	710, 711, 712, 713, 714, 715, 724, 732, 
 -	734, 737, 739, 741, 743, 745, 747, 749, 
 -	751, 753, 755, 757, 759, 761, 763, 765, 
 -	767, 769, 771, 773, 775, 777, 779, 781, 
 -	783, 785, 787, 789, 791, 793, 795, 797, 
 -	799, 801, 803, 805, 807, 809, 811, 813, 
 -	815, 817, 819, 822, 824, 826, 828, 830, 
 -	832, 834, 836, 838, 840, 842, 844, 846, 
 -	848, 850, 852, 854, 856, 858, 860, 862, 
 -	864, 866, 868, 870, 872, 874, 876, 878, 
 -	880, 882, 884, 886, 888, 890, 892, 894, 
 -	896, 898, 900, 902, 904, 906, 908, 910, 
 -	912, 914, 916, 918, 920, 922, 924, 926, 
 -	928, 930, 932, 934, 936, 938, 940, 941, 
 -	942, 943, 944, 945, 946, 947, 948, 949, 
 -	950, 951, 952, 953, 954, 955, 956, 957, 
 -	958, 959, 960, 961, 962, 963, 964, 965, 
 -	973, 978, 980, 982, 984, 986, 988, 990, 
 -	992, 994, 996, 998, 1000, 1002, 1004, 1006, 
 -	1008, 1010, 1012, 1014, 1016, 1018, 1020, 1022, 
 -	1024, 1026, 1028, 1030, 1032, 1034, 1036, 1039, 
 -	1041, 1043, 1045, 1047, 1049, 1051, 1053, 1055, 
 -	1057, 1059, 1061, 1063, 1065, 1067, 1069, 1071, 
 -	1073, 1075, 1077, 1079, 1081, 1083, 1085, 1087, 
 -	1089, 1091, 1093, 1095, 1097, 1099, 1101, 1103, 
 -	1105, 1107, 1109, 1111, 1113, 1115, 1117, 1119, 
 -	1121, 1123, 1125, 1127, 1129, 1131, 1133, 1135, 
 -	1137, 1139, 1141, 1143, 1145, 1147, 1149, 1151, 
 -	1153, 1155, 1157, 1159, 1161, 1163, 1164, 1165
 -};
 -
 -static const char _lexer_trans_keys[] = {
 -	-48, -17, 10, 32, 34, 35, 37, 42, 
 -	64, 124, 9, 13, -112, -111, -110, -101, 
 -	-100, -95, -94, -93, -92, -48, -77, -68, 
 -	-48, -80, -47, -128, 32, 10, 13, 10, 
 -	13, -48, 10, 32, 34, 35, 37, 42, 
 -	64, 124, 9, 13, 34, 34, 10, 13, 
 -	10, 13, 10, 32, 34, 9, 13, 10, 
 -	32, 34, 9, 13, 10, 32, 34, 9, 
 -	13, 10, 32, 34, 9, 13, 10, 32, 
 -	9, 13, 10, 32, 9, 13, 10, 13, 
 -	10, 95, 70, 69, 65, 84, 85, 82, 
 -	69, 95, 69, 78, 68, 95, 37, 13, 
 -	32, 64, 9, 10, 9, 10, 13, 32, 
 -	64, 11, 12, 10, 32, 64, 9, 13, 
 -	32, 124, 9, 13, 10, 32, 92, 124, 
 -	9, 13, 10, 92, 124, 10, 92, 10, 
 -	32, 92, 124, 9, 13, -48, 10, 32, 
 -	34, 35, 37, 42, 64, 124, 9, 13, 
 -	-48, -68, -48, -66, -48, -72, -47, -128, 
 -	-48, -66, -48, -70, -48, -80, -48, -75, 
 -	-48, -70, -48, -72, -48, -67, -48, -72, 
 -	-47, -127, -48, -66, -48, -69, -48, -69, 
 -	-48, -80, -47, -128, 58, 10, 10, -48, 
 -	10, 32, 35, 124, 9, 13, -92, 10, 
 -	-47, 10, -125, 10, -48, 10, -67, 10, 
 -	-48, 10, -70, 10, -47, 10, -122, 10, 
 -	-48, 10, -72, 10, -48, 10, -66, 10, 
 -	-48, 10, -67, 10, -48, 10, -80, 10, 
 -	-48, 10, -69, 10, 10, 58, -48, 10, 
 -	32, 34, 35, 37, 42, 64, 124, 9, 
 -	13, -47, -122, -48, -75, -48, -67, -48, 
 -	-80, -47, -128, -48, -72, -48, -71, 32, 
 -	58, -47, -127, -47, -126, -47, -128, -47, 
 -	-125, -48, -70, -47, -126, -47, -125, -47, 
 -	-128, -48, -80, -47, -127, -48, -72, 58, 
 -	10, 10, -48, 10, 32, 35, 37, 42, 
 -	64, 9, 13, -112, -111, -110, -101, -95, 
 -	-93, -92, 10, -48, 10, -77, -68, 10, 
 -	-48, 10, -80, 10, -47, 10, -128, 10, 
 -	10, 32, -48, 10, -68, 10, -48, 10, 
 -	-66, 10, -48, 10, -72, 10, -47, 10, 
 -	-128, 10, -48, 10, -66, 10, -48, 10, 
 -	-70, 10, -48, 10, -80, 10, -48, 10, 
 -	-75, 10, -48, 10, -70, 10, -48, 10, 
 -	-72, 10, -48, 10, -67, 10, -47, 10, 
 -	-122, 10, -48, 10, -75, 10, -48, 10, 
 -	-67, 10, -48, 10, -80, 10, -47, 10, 
 -	-128, 10, -48, 10, -72, 10, -48, 10, 
 -	-71, 10, 10, 58, -48, 10, -67, 10, 
 -	-48, 10, -76, 10, -47, 10, -125, 10, 
 -	-48, 10, -67, 10, -48, 10, -70, 10, 
 -	-47, 10, -122, 10, -48, 10, -72, 10, 
 -	-48, 10, -66, 10, -48, 10, -67, 10, 
 -	-48, 10, -80, 10, -48, 10, -69, 10, 
 -	10, 95, 10, 70, 10, 69, 10, 65, 
 -	10, 84, 10, 85, 10, 82, 10, 69, 
 -	10, 95, 10, 69, 10, 78, 10, 68, 
 -	10, 95, 10, 37, 10, 10, -48, 10, 
 -	32, 35, 37, 42, 64, 9, 13, -112, 
 -	-111, -110, -101, -95, -94, -93, -92, 10, 
 -	-48, 10, -77, -68, 10, -48, 10, -80, 
 -	10, -47, 10, -128, 10, 10, 32, -48, 
 -	10, -68, 10, -48, 10, -66, 10, -48, 
 -	10, -72, 10, -47, 10, -128, 10, -48, 
 -	10, -66, 10, -48, 10, -70, 10, -48, 
 -	10, -80, 10, -48, 10, -75, 10, -48, 
 -	10, -70, 10, -48, 10, -72, 10, -48, 
 -	10, -67, 10, -47, 10, -122, 10, -48, 
 -	10, -75, 10, -48, 10, -67, 10, -48, 
 -	10, -80, 10, -47, 10, -128, 10, -48, 
 -	10, -72, 10, -48, 10, -71, 10, 10, 
 -	32, 58, -47, 10, -127, 10, -47, 10, 
 -	-126, 10, -47, 10, -128, 10, -47, 10, 
 -	-125, 10, -48, 10, -70, 10, -47, 10, 
 -	-126, 10, -47, 10, -125, 10, -47, 10, 
 -	-128, 10, -48, 10, -80, 10, -47, 10, 
 -	-127, 10, -48, 10, -72, 10, 10, 58, 
 -	-48, 10, -80, 10, -47, 10, -128, 10, 
 -	-48, 10, -72, 10, -47, 10, -123, 10, 
 -	-48, 10, -67, 10, -48, 10, -76, 10, 
 -	-47, 10, -125, 10, -48, 10, -67, 10, 
 -	-48, 10, -70, 10, -47, 10, -122, 10, 
 -	-48, 10, -72, 10, -48, 10, -66, 10, 
 -	-48, 10, -67, 10, -48, 10, -80, 10, 
 -	-48, 10, -69, 10, 10, 95, 10, 70, 
 -	10, 69, 10, 65, 10, 84, 10, 85, 
 -	10, 82, 10, 69, 10, 95, 10, 69, 
 -	10, 78, 10, 68, 10, 95, 10, 37, 
 -	-48, -80, -47, -128, -48, -72, -47, -123, 
 -	58, 10, 10, -48, 10, 32, 35, 37, 
 -	42, 64, 9, 13, -112, -111, -110, -101, 
 -	-95, -93, -92, 10, -48, 10, -77, -68, 
 -	10, -48, 10, -80, 10, -47, 10, -128, 
 -	10, 10, 32, -48, 10, -68, 10, -48, 
 -	10, -66, 10, -48, 10, -72, 10, -47, 
 -	10, -128, 10, -48, 10, -66, 10, -48, 
 -	10, -70, 10, -48, 10, -80, 10, -48, 
 -	10, -75, 10, -48, 10, -70, 10, -48, 
 -	10, -72, 10, -48, 10, -67, 10, -47, 
 -	10, -122, 10, -48, 10, -75, 10, -48, 
 -	10, -67, 10, -48, 10, -80, 10, -47, 
 -	10, -128, 10, -48, 10, -72, 10, -48, 
 -	10, -71, 10, 10, 32, 58, -47, 10, 
 -	-127, 10, -47, 10, -126, 10, -47, 10, 
 -	-128, 10, -47, 10, -125, 10, -48, 10, 
 -	-70, 10, -47, 10, -126, 10, -47, 10, 
 -	-125, 10, -47, 10, -128, 10, -48, 10, 
 -	-80, 10, -47, 10, -127, 10, -48, 10, 
 -	-72, 10, 10, 58, -48, 10, -67, 10, 
 -	-48, 10, -76, 10, -47, 10, -125, 10, 
 -	-48, 10, -67, 10, -48, 10, -70, 10, 
 -	-47, 10, -122, 10, -48, 10, -72, 10, 
 -	-48, 10, -66, 10, -48, 10, -67, 10, 
 -	-48, 10, -80, 10, -48, 10, -69, 10, 
 -	10, 95, 10, 70, 10, 69, 10, 65, 
 -	10, 84, 10, 85, 10, 82, 10, 69, 
 -	10, 95, 10, 69, 10, 78, 10, 68, 
 -	10, 95, 10, 37, -48, -67, -48, -76, 
 -	-47, -125, -48, -67, -48, -70, -47, -122, 
 -	-48, -72, -48, -66, -48, -67, -48, -80, 
 -	-48, -69, 58, 10, 10, -48, 10, 32, 
 -	35, 37, 64, 9, 13, -100, -95, -94, 
 -	-92, 10, -48, 10, -72, 10, -47, 10, 
 -	-127, 10, -48, 10, -66, 10, -48, 10, 
 -	-69, 10, -48, 10, -69, 10, -48, 10, 
 -	-80, 10, -47, 10, -128, 10, 10, 58, 
 -	-47, 10, -122, 10, -48, 10, -75, 10, 
 -	-48, 10, -67, 10, -48, 10, -80, 10, 
 -	-47, 10, -128, 10, -48, 10, -72, 10, 
 -	-48, 10, -71, 10, 10, 32, 58, -47, 
 -	10, -127, 10, -47, 10, -126, 10, -47, 
 -	10, -128, 10, -47, 10, -125, 10, -48, 
 -	10, -70, 10, -47, 10, -126, 10, -47, 
 -	10, -125, 10, -47, 10, -128, 10, -48, 
 -	10, -80, 10, -47, 10, -127, 10, -48, 
 -	10, -72, 10, -48, 10, -80, 10, -47, 
 -	10, -128, 10, -48, 10, -72, 10, -47, 
 -	10, -123, 10, -47, 10, -125, 10, -48, 
 -	10, -67, 10, -48, 10, -70, 10, -47, 
 -	10, -122, 10, -48, 10, -72, 10, -48, 
 -	10, -66, 10, -48, 10, -67, 10, -48, 
 -	10, -80, 10, -48, 10, -69, 10, 10, 
 -	95, 10, 70, 10, 69, 10, 65, 10, 
 -	84, 10, 85, 10, 82, 10, 69, 10, 
 -	95, 10, 69, 10, 78, 10, 68, 10, 
 -	95, 10, 37, -69, -65, 0
 -};
 -
 -static const char _lexer_single_lengths[] = {
 -	0, 10, 9, 1, 2, 1, 1, 1, 
 -	1, 1, 2, 2, 9, 1, 1, 2, 
 -	2, 3, 3, 3, 3, 2, 2, 2, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 3, 
 -	5, 3, 2, 4, 3, 2, 4, 9, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 5, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 9, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 2, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 7, 8, 2, 
 -	3, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 1, 
 -	1, 7, 9, 2, 3, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 3, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 7, 8, 2, 
 -	3, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 3, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 6, 
 -	5, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 3, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 1, 1, 0
 -};
 -
 -static const char _lexer_range_lengths[] = {
 -	0, 1, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 1, 0, 0, 0, 
 -	0, 1, 1, 1, 1, 1, 1, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 1, 
 -	1, 1, 1, 1, 0, 0, 1, 1, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 1, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 1, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 1, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 1, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 1, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 1, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0
 -};
 -
 -static const short _lexer_index_offsets[] = {
 -	0, 0, 12, 22, 24, 27, 29, 31, 
 -	33, 35, 37, 40, 43, 54, 56, 58, 
 -	61, 64, 69, 74, 79, 84, 88, 92, 
 -	95, 97, 99, 101, 103, 105, 107, 109, 
 -	111, 113, 115, 117, 119, 121, 123, 125, 
 -	130, 137, 142, 146, 152, 156, 159, 165, 
 -	176, 178, 180, 182, 184, 186, 188, 190, 
 -	192, 194, 196, 198, 200, 202, 204, 206, 
 -	208, 210, 212, 214, 216, 218, 220, 222, 
 -	224, 226, 228, 230, 232, 234, 236, 238, 
 -	240, 242, 244, 246, 248, 250, 252, 254, 
 -	261, 264, 267, 270, 273, 276, 279, 282, 
 -	285, 288, 291, 294, 297, 300, 303, 306, 
 -	309, 312, 315, 318, 321, 332, 334, 336, 
 -	338, 340, 342, 344, 346, 348, 350, 352, 
 -	354, 356, 358, 360, 363, 365, 367, 369, 
 -	371, 373, 375, 377, 379, 381, 383, 385, 
 -	387, 389, 391, 393, 395, 397, 399, 401, 
 -	403, 405, 407, 409, 411, 413, 422, 431, 
 -	434, 438, 441, 444, 447, 450, 453, 456, 
 -	459, 462, 465, 468, 471, 474, 477, 480, 
 -	483, 486, 489, 492, 495, 498, 501, 504, 
 -	507, 510, 513, 516, 519, 522, 525, 528, 
 -	531, 534, 537, 540, 543, 546, 549, 552, 
 -	555, 558, 561, 564, 567, 570, 573, 576, 
 -	579, 582, 585, 588, 591, 594, 597, 600, 
 -	603, 606, 609, 612, 615, 618, 621, 624, 
 -	627, 630, 633, 636, 639, 642, 645, 648, 
 -	651, 654, 657, 660, 663, 666, 669, 672, 
 -	674, 676, 685, 695, 698, 702, 705, 708, 
 -	711, 714, 717, 720, 723, 726, 729, 732, 
 -	735, 738, 741, 744, 747, 750, 753, 756, 
 -	759, 762, 765, 768, 771, 774, 777, 780, 
 -	783, 786, 789, 792, 795, 798, 801, 804, 
 -	807, 810, 813, 816, 819, 822, 825, 829, 
 -	832, 835, 838, 841, 844, 847, 850, 853, 
 -	856, 859, 862, 865, 868, 871, 874, 877, 
 -	880, 883, 886, 889, 892, 895, 898, 901, 
 -	904, 907, 910, 913, 916, 919, 922, 925, 
 -	928, 931, 934, 937, 940, 943, 946, 949, 
 -	952, 955, 958, 961, 964, 967, 970, 973, 
 -	976, 979, 982, 985, 988, 991, 994, 997, 
 -	1000, 1003, 1006, 1009, 1012, 1015, 1018, 1021, 
 -	1024, 1027, 1030, 1032, 1034, 1036, 1038, 1040, 
 -	1042, 1044, 1046, 1048, 1050, 1052, 1061, 1070, 
 -	1073, 1077, 1080, 1083, 1086, 1089, 1092, 1095, 
 -	1098, 1101, 1104, 1107, 1110, 1113, 1116, 1119, 
 -	1122, 1125, 1128, 1131, 1134, 1137, 1140, 1143, 
 -	1146, 1149, 1152, 1155, 1158, 1161, 1164, 1167, 
 -	1170, 1173, 1176, 1179, 1182, 1185, 1188, 1191, 
 -	1194, 1197, 1200, 1204, 1207, 1210, 1213, 1216, 
 -	1219, 1222, 1225, 1228, 1231, 1234, 1237, 1240, 
 -	1243, 1246, 1249, 1252, 1255, 1258, 1261, 1264, 
 -	1267, 1270, 1273, 1276, 1279, 1282, 1285, 1288, 
 -	1291, 1294, 1297, 1300, 1303, 1306, 1309, 1312, 
 -	1315, 1318, 1321, 1324, 1327, 1330, 1333, 1336, 
 -	1339, 1342, 1345, 1348, 1351, 1354, 1357, 1360, 
 -	1363, 1366, 1369, 1372, 1375, 1378, 1381, 1383, 
 -	1385, 1387, 1389, 1391, 1393, 1395, 1397, 1399, 
 -	1401, 1403, 1405, 1407, 1409, 1411, 1413, 1415, 
 -	1417, 1419, 1421, 1423, 1425, 1427, 1429, 1431, 
 -	1439, 1445, 1448, 1451, 1454, 1457, 1460, 1463, 
 -	1466, 1469, 1472, 1475, 1478, 1481, 1484, 1487, 
 -	1490, 1493, 1496, 1499, 1502, 1505, 1508, 1511, 
 -	1514, 1517, 1520, 1523, 1526, 1529, 1532, 1536, 
 -	1539, 1542, 1545, 1548, 1551, 1554, 1557, 1560, 
 -	1563, 1566, 1569, 1572, 1575, 1578, 1581, 1584, 
 -	1587, 1590, 1593, 1596, 1599, 1602, 1605, 1608, 
 -	1611, 1614, 1617, 1620, 1623, 1626, 1629, 1632, 
 -	1635, 1638, 1641, 1644, 1647, 1650, 1653, 1656, 
 -	1659, 1662, 1665, 1668, 1671, 1674, 1677, 1680, 
 -	1683, 1686, 1689, 1692, 1695, 1698, 1701, 1704, 
 -	1707, 1710, 1713, 1716, 1719, 1722, 1724, 1726
 -};
 -
 -static const short _lexer_trans_targs[] = {
 -	2, 581, 12, 12, 13, 23, 25, 9, 
 -	39, 42, 12, 0, 3, 52, 60, 62, 
 -	70, 109, 346, 462, 466, 0, 4, 0, 
 -	5, 48, 0, 6, 0, 7, 0, 8, 
 -	0, 9, 0, 10, 0, 12, 24, 11, 
 -	12, 24, 11, 2, 12, 12, 13, 23, 
 -	25, 9, 39, 42, 12, 0, 14, 0, 
 -	15, 0, 17, 16, 16, 17, 16, 16, 
 -	18, 18, 19, 18, 18, 18, 18, 19, 
 -	18, 18, 18, 18, 20, 18, 18, 18, 
 -	18, 21, 18, 18, 12, 22, 22, 0, 
 -	12, 22, 22, 0, 12, 24, 23, 12, 
 -	0, 26, 0, 27, 0, 28, 0, 29, 
 -	0, 30, 0, 31, 0, 32, 0, 33, 
 -	0, 34, 0, 35, 0, 36, 0, 37, 
 -	0, 38, 0, 583, 0, 0, 0, 0, 
 -	0, 40, 41, 12, 41, 41, 39, 40, 
 -	40, 12, 41, 39, 41, 0, 42, 43, 
 -	42, 0, 47, 46, 45, 43, 46, 44, 
 -	0, 45, 43, 44, 0, 45, 44, 47, 
 -	46, 45, 43, 46, 44, 2, 47, 47, 
 -	13, 23, 25, 9, 39, 42, 47, 0, 
 -	49, 0, 50, 0, 51, 0, 9, 0, 
 -	53, 0, 54, 0, 55, 0, 56, 0, 
 -	57, 0, 58, 0, 59, 0, 9, 0, 
 -	61, 0, 9, 0, 63, 0, 64, 0, 
 -	65, 0, 66, 0, 67, 0, 68, 0, 
 -	69, 0, 9, 0, 71, 0, 72, 0, 
 -	73, 0, 74, 0, 75, 0, 76, 0, 
 -	77, 0, 78, 0, 79, 0, 80, 0, 
 -	81, 0, 82, 0, 83, 0, 84, 0, 
 -	85, 0, 87, 86, 87, 86, 88, 87, 
 -	87, 12, 12, 87, 86, 89, 87, 86, 
 -	90, 87, 86, 91, 87, 86, 92, 87, 
 -	86, 93, 87, 86, 94, 87, 86, 95, 
 -	87, 86, 96, 87, 86, 97, 87, 86, 
 -	98, 87, 86, 99, 87, 86, 100, 87, 
 -	86, 101, 87, 86, 102, 87, 86, 103, 
 -	87, 86, 104, 87, 86, 105, 87, 86, 
 -	106, 87, 86, 107, 87, 86, 87, 108, 
 -	86, 2, 12, 12, 13, 23, 25, 9, 
 -	39, 42, 12, 0, 110, 0, 111, 0, 
 -	112, 0, 113, 0, 114, 0, 115, 0, 
 -	116, 0, 117, 0, 118, 0, 119, 0, 
 -	120, 0, 121, 0, 122, 0, 123, 0, 
 -	124, 231, 0, 125, 0, 126, 0, 127, 
 -	0, 128, 0, 129, 0, 130, 0, 131, 
 -	0, 132, 0, 133, 0, 134, 0, 135, 
 -	0, 136, 0, 137, 0, 138, 0, 139, 
 -	0, 140, 0, 141, 0, 142, 0, 143, 
 -	0, 144, 0, 145, 0, 146, 0, 147, 
 -	0, 149, 148, 149, 148, 150, 149, 149, 
 -	12, 217, 157, 12, 149, 148, 151, 162, 
 -	170, 172, 180, 195, 199, 149, 148, 152, 
 -	149, 148, 153, 158, 149, 148, 154, 149, 
 -	148, 155, 149, 148, 156, 149, 148, 157, 
 -	149, 148, 149, 108, 148, 159, 149, 148, 
 -	160, 149, 148, 161, 149, 148, 157, 149, 
 -	148, 163, 149, 148, 164, 149, 148, 165, 
 -	149, 148, 166, 149, 148, 167, 149, 148, 
 -	168, 149, 148, 169, 149, 148, 157, 149, 
 -	148, 171, 149, 148, 157, 149, 148, 173, 
 -	149, 148, 174, 149, 148, 175, 149, 148, 
 -	176, 149, 148, 177, 149, 148, 178, 149, 
 -	148, 179, 149, 148, 157, 149, 148, 181, 
 -	149, 148, 182, 149, 148, 183, 149, 148, 
 -	184, 149, 148, 185, 149, 148, 186, 149, 
 -	148, 187, 149, 148, 188, 149, 148, 189, 
 -	149, 148, 190, 149, 148, 191, 149, 148, 
 -	192, 149, 148, 193, 149, 148, 194, 149, 
 -	148, 149, 108, 148, 196, 149, 148, 197, 
 -	149, 148, 198, 149, 148, 170, 149, 148, 
 -	200, 149, 148, 201, 149, 148, 202, 149, 
 -	148, 203, 149, 148, 204, 149, 148, 205, 
 -	149, 148, 206, 149, 148, 207, 149, 148, 
 -	208, 149, 148, 209, 149, 148, 210, 149, 
 -	148, 211, 149, 148, 212, 149, 148, 213, 
 -	149, 148, 214, 149, 148, 215, 149, 148, 
 -	216, 149, 148, 194, 149, 148, 149, 218, 
 -	148, 149, 219, 148, 149, 220, 148, 149, 
 -	221, 148, 149, 222, 148, 149, 223, 148, 
 -	149, 224, 148, 149, 225, 148, 149, 226, 
 -	148, 149, 227, 148, 149, 228, 148, 149, 
 -	229, 148, 149, 230, 148, 149, 12, 148, 
 -	233, 232, 233, 232, 234, 233, 233, 12, 
 -	332, 241, 12, 233, 232, 235, 246, 254, 
 -	256, 264, 302, 310, 314, 233, 232, 236, 
 -	233, 232, 237, 242, 233, 232, 238, 233, 
 -	232, 239, 233, 232, 240, 233, 232, 241, 
 -	233, 232, 233, 108, 232, 243, 233, 232, 
 -	244, 233, 232, 245, 233, 232, 241, 233, 
 -	232, 247, 233, 232, 248, 233, 232, 249, 
 -	233, 232, 250, 233, 232, 251, 233, 232, 
 -	252, 233, 232, 253, 233, 232, 241, 233, 
 -	232, 255, 233, 232, 241, 233, 232, 257, 
 -	233, 232, 258, 233, 232, 259, 233, 232, 
 -	260, 233, 232, 261, 233, 232, 262, 233, 
 -	232, 263, 233, 232, 241, 233, 232, 265, 
 -	233, 232, 266, 233, 232, 267, 233, 232, 
 -	268, 233, 232, 269, 233, 232, 270, 233, 
 -	232, 271, 233, 232, 272, 233, 232, 273, 
 -	233, 232, 274, 233, 232, 275, 233, 232, 
 -	276, 233, 232, 277, 233, 232, 278, 233, 
 -	232, 233, 279, 108, 232, 280, 233, 232, 
 -	281, 233, 232, 282, 233, 232, 283, 233, 
 -	232, 284, 233, 232, 285, 233, 232, 286, 
 -	233, 232, 287, 233, 232, 288, 233, 232, 
 -	289, 233, 232, 290, 233, 232, 291, 233, 
 -	232, 292, 233, 232, 293, 233, 232, 294, 
 -	233, 232, 295, 233, 232, 296, 233, 232, 
 -	297, 233, 232, 298, 233, 232, 299, 233, 
 -	232, 300, 233, 232, 301, 233, 232, 233, 
 -	108, 232, 303, 233, 232, 304, 233, 232, 
 -	305, 233, 232, 306, 233, 232, 307, 233, 
 -	232, 308, 233, 232, 309, 233, 232, 301, 
 -	233, 232, 311, 233, 232, 312, 233, 232, 
 -	313, 233, 232, 254, 233, 232, 315, 233, 
 -	232, 316, 233, 232, 317, 233, 232, 318, 
 -	233, 232, 319, 233, 232, 320, 233, 232, 
 -	321, 233, 232, 322, 233, 232, 323, 233, 
 -	232, 324, 233, 232, 325, 233, 232, 326, 
 -	233, 232, 327, 233, 232, 328, 233, 232, 
 -	329, 233, 232, 330, 233, 232, 331, 233, 
 -	232, 301, 233, 232, 233, 333, 232, 233, 
 -	334, 232, 233, 335, 232, 233, 336, 232, 
 -	233, 337, 232, 233, 338, 232, 233, 339, 
 -	232, 233, 340, 232, 233, 341, 232, 233, 
 -	342, 232, 233, 343, 232, 233, 344, 232, 
 -	233, 345, 232, 233, 12, 232, 347, 0, 
 -	348, 0, 349, 0, 350, 0, 351, 0, 
 -	352, 0, 353, 0, 354, 0, 355, 0, 
 -	357, 356, 357, 356, 358, 357, 357, 12, 
 -	448, 365, 12, 357, 356, 359, 370, 378, 
 -	380, 388, 426, 430, 357, 356, 360, 357, 
 -	356, 361, 366, 357, 356, 362, 357, 356, 
 -	363, 357, 356, 364, 357, 356, 365, 357, 
 -	356, 357, 108, 356, 367, 357, 356, 368, 
 -	357, 356, 369, 357, 356, 365, 357, 356, 
 -	371, 357, 356, 372, 357, 356, 373, 357, 
 -	356, 374, 357, 356, 375, 357, 356, 376, 
 -	357, 356, 377, 357, 356, 365, 357, 356, 
 -	379, 357, 356, 365, 357, 356, 381, 357, 
 -	356, 382, 357, 356, 383, 357, 356, 384, 
 -	357, 356, 385, 357, 356, 386, 357, 356, 
 -	387, 357, 356, 365, 357, 356, 389, 357, 
 -	356, 390, 357, 356, 391, 357, 356, 392, 
 -	357, 356, 393, 357, 356, 394, 357, 356, 
 -	395, 357, 356, 396, 357, 356, 397, 357, 
 -	356, 398, 357, 356, 399, 357, 356, 400, 
 -	357, 356, 401, 357, 356, 402, 357, 356, 
 -	357, 403, 108, 356, 404, 357, 356, 405, 
 -	357, 356, 406, 357, 356, 407, 357, 356, 
 -	408, 357, 356, 409, 357, 356, 410, 357, 
 -	356, 411, 357, 356, 412, 357, 356, 413, 
 -	357, 356, 414, 357, 356, 415, 357, 356, 
 -	416, 357, 356, 417, 357, 356, 418, 357, 
 -	356, 419, 357, 356, 420, 357, 356, 421, 
 -	357, 356, 422, 357, 356, 423, 357, 356, 
 -	424, 357, 356, 425, 357, 356, 357, 108, 
 -	356, 427, 357, 356, 428, 357, 356, 429, 
 -	357, 356, 378, 357, 356, 431, 357, 356, 
 -	432, 357, 356, 433, 357, 356, 434, 357, 
 -	356, 435, 357, 356, 436, 357, 356, 437, 
 -	357, 356, 438, 357, 356, 439, 357, 356, 
 -	440, 357, 356, 441, 357, 356, 442, 357, 
 -	356, 443, 357, 356, 444, 357, 356, 445, 
 -	357, 356, 446, 357, 356, 447, 357, 356, 
 -	425, 357, 356, 357, 449, 356, 357, 450, 
 -	356, 357, 451, 356, 357, 452, 356, 357, 
 -	453, 356, 357, 454, 356, 357, 455, 356, 
 -	357, 456, 356, 357, 457, 356, 357, 458, 
 -	356, 357, 459, 356, 357, 460, 356, 357, 
 -	461, 356, 357, 12, 356, 463, 0, 464, 
 -	0, 465, 0, 60, 0, 467, 0, 468, 
 -	0, 469, 0, 470, 0, 471, 0, 472, 
 -	0, 473, 0, 474, 0, 475, 0, 476, 
 -	0, 477, 0, 478, 0, 479, 0, 480, 
 -	0, 481, 0, 482, 0, 483, 0, 484, 
 -	0, 485, 0, 487, 486, 487, 486, 488, 
 -	487, 487, 12, 567, 12, 487, 486, 489, 
 -	504, 541, 549, 487, 486, 490, 487, 486, 
 -	491, 487, 486, 492, 487, 486, 493, 487, 
 -	486, 494, 487, 486, 495, 487, 486, 496, 
 -	487, 486, 497, 487, 486, 498, 487, 486, 
 -	499, 487, 486, 500, 487, 486, 501, 487, 
 -	486, 502, 487, 486, 503, 487, 486, 487, 
 -	108, 486, 505, 487, 486, 506, 487, 486, 
 -	507, 487, 486, 508, 487, 486, 509, 487, 
 -	486, 510, 487, 486, 511, 487, 486, 512, 
 -	487, 486, 513, 487, 486, 514, 487, 486, 
 -	515, 487, 486, 516, 487, 486, 517, 487, 
 -	486, 518, 487, 486, 487, 519, 108, 486, 
 -	520, 487, 486, 521, 487, 486, 522, 487, 
 -	486, 523, 487, 486, 524, 487, 486, 525, 
 -	487, 486, 526, 487, 486, 527, 487, 486, 
 -	528, 487, 486, 529, 487, 486, 530, 487, 
 -	486, 531, 487, 486, 532, 487, 486, 533, 
 -	487, 486, 534, 487, 486, 535, 487, 486, 
 -	536, 487, 486, 537, 487, 486, 538, 487, 
 -	486, 539, 487, 486, 540, 487, 486, 503, 
 -	487, 486, 542, 487, 486, 543, 487, 486, 
 -	544, 487, 486, 545, 487, 486, 546, 487, 
 -	486, 547, 487, 486, 548, 487, 486, 503, 
 -	487, 486, 550, 487, 486, 551, 487, 486, 
 -	552, 487, 486, 553, 487, 486, 554, 487, 
 -	486, 555, 487, 486, 556, 487, 486, 557, 
 -	487, 486, 558, 487, 486, 559, 487, 486, 
 -	560, 487, 486, 561, 487, 486, 562, 487, 
 -	486, 563, 487, 486, 564, 487, 486, 565, 
 -	487, 486, 566, 487, 486, 503, 487, 486, 
 -	487, 568, 486, 487, 569, 486, 487, 570, 
 -	486, 487, 571, 486, 487, 572, 486, 487, 
 -	573, 486, 487, 574, 486, 487, 575, 486, 
 -	487, 576, 486, 487, 577, 486, 487, 578, 
 -	486, 487, 579, 486, 487, 580, 486, 487, 
 -	12, 486, 582, 0, 12, 0, 0, 0
 -};
 -
 -static const unsigned char _lexer_trans_actions[] = {
 -	29, 0, 54, 0, 5, 1, 0, 29, 
 -	1, 35, 0, 43, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 43, 0, 43, 
 -	0, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 149, 126, 57, 
 -	110, 23, 0, 29, 54, 0, 5, 1, 
 -	0, 29, 1, 35, 0, 43, 0, 43, 
 -	0, 43, 139, 48, 9, 106, 11, 0, 
 -	134, 45, 45, 45, 3, 122, 33, 33, 
 -	33, 0, 122, 33, 33, 33, 0, 122, 
 -	33, 0, 33, 0, 102, 7, 7, 43, 
 -	54, 0, 0, 43, 114, 25, 0, 54, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 43, 43, 43, 
 -	43, 0, 27, 118, 27, 27, 51, 27, 
 -	0, 54, 0, 1, 0, 43, 0, 0, 
 -	0, 43, 54, 37, 37, 87, 37, 37, 
 -	43, 0, 39, 0, 43, 0, 0, 54, 
 -	0, 0, 39, 0, 0, 96, 54, 0, 
 -	93, 90, 41, 96, 90, 99, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 144, 57, 54, 0, 84, 54, 
 -	0, 81, 81, 0, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 54, 21, 
 -	0, 63, 130, 31, 60, 57, 31, 63, 
 -	57, 66, 31, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 144, 57, 54, 0, 84, 54, 0, 
 -	78, 33, 84, 78, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 54, 19, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 54, 19, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 19, 0, 
 -	144, 57, 54, 0, 84, 54, 0, 75, 
 -	33, 84, 75, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 54, 17, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 54, 0, 17, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 54, 
 -	17, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 17, 0, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	144, 57, 54, 0, 84, 54, 0, 72, 
 -	33, 84, 72, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 54, 15, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	54, 0, 15, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 54, 15, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 15, 0, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 144, 57, 54, 0, 84, 
 -	54, 0, 69, 33, 69, 0, 0, 0, 
 -	0, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 54, 
 -	13, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 54, 0, 13, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	13, 0, 0, 43, 0, 43, 0, 0
 -};
 -
 -static const unsigned char _lexer_eof_actions[] = {
 -	0, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43
 -};
 -
 -static const int lexer_start = 1;
 -static const int lexer_first_final = 583;
 -static const int lexer_error = 0;
 -
 -static const int lexer_en_main = 1;
 -
 -
 -#line 258 "ragel/i18n/uz.c.rl"
 -
 -static VALUE 
 -unindent(VALUE con, int start_col)
 -{
 -  VALUE re;
 -  /* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */
 -  char pat[32]; 
 -  snprintf(pat, 32, "^[\t ]{0,%d}", start_col); 
 -  re = rb_reg_regcomp(rb_str_new2(pat));
 -  rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2(""));
 -
 -  return Qnil;
 -
 -}
 -
 -static void 
 -store_kw_con(VALUE listener, const char * event_name, 
 -             const char * keyword_at, size_t keyword_length, 
 -             const char * at,         size_t length, 
 -             int current_line)
 -{
 -  VALUE con = Qnil, kw = Qnil;
 -  kw = ENCODED_STR_NEW(keyword_at, keyword_length);
 -  con = ENCODED_STR_NEW(at, length);
 -  rb_funcall(con, rb_intern("strip!"), 0);
 -  rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); 
 -}
 -
 -static void
 -store_multiline_kw_con(VALUE listener, const char * event_name,
 -                      const char * keyword_at, size_t keyword_length,
 -                      const char * at,         size_t length,
 -                      int current_line, int start_col)
 -{
 -  VALUE split;
 -  VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil;
 -
 -  kw = ENCODED_STR_NEW(keyword_at, keyword_length);
 -  con = ENCODED_STR_NEW(at, length);
 -
 -  unindent(con, start_col);
 -  
 -  split = rb_str_split(con, "\n");
 -
 -  name = rb_funcall(split, rb_intern("shift"), 0);
 -  desc = rb_ary_join(split, rb_str_new2( "\n" ));
 -
 -  if( name == Qnil ) 
 -  {
 -    name = rb_str_new2("");
 -  }
 -  if( rb_funcall(desc, rb_intern("size"), 0) == 0) 
 -  {
 -    desc = rb_str_new2("");
 -  }
 -  rb_funcall(name, rb_intern("strip!"), 0);
 -  rb_funcall(desc, rb_intern("rstrip!"), 0);
 -  rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); 
 -}
 -
 -static void 
 -store_attr(VALUE listener, const char * attr_type,
 -           const char * at, size_t length, 
 -           int line)
 -{
 -  VALUE val = ENCODED_STR_NEW(at, length);
 -  rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line));
 -}
 -static void 
 -store_docstring_content(VALUE listener, 
 -          int start_col, 
 -          const char *type_at, size_t type_length,
 -          const char *at, size_t length, 
 -          int current_line)
 -{
 -  VALUE re2;
 -  VALUE unescape_escaped_quotes;
 -  VALUE con = ENCODED_STR_NEW(at, length);
 -  VALUE con_type = ENCODED_STR_NEW(type_at, type_length);
 -
 -  unindent(con, start_col);
 -
 -  re2 = rb_reg_regcomp(rb_str_new2("\r\\Z"));
 -  unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\""));
 -  rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2(""));
 -  rb_funcall(con_type, rb_intern("strip!"), 0);
 -  rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\""));
 -  rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line));
 -}
 -static void 
 -raise_lexer_error(const char * at, int line)
 -{ 
 -  rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at);
 -}
 -
 -static void lexer_init(lexer_state *lexer) {
 -  lexer->content_start = 0;
 -  lexer->content_end = 0;
 -  lexer->content_len = 0;
 -  lexer->docstring_content_type_start = 0;
 -  lexer->docstring_content_type_end = 0;
 -  lexer->mark = 0;
 -  lexer->keyword_start = 0;
 -  lexer->keyword_end = 0;
 -  lexer->next_keyword_start = 0;
 -  lexer->line_number = 1;
 -  lexer->last_newline = 0;
 -  lexer->final_newline = 0;
 -  lexer->start_col = 0;
 -}
 -
 -static VALUE CLexer_alloc(VALUE klass)
 -{
 -  VALUE obj;
 -  lexer_state *lxr = ALLOC(lexer_state);
 -  lexer_init(lxr);
 -
 -  obj = Data_Wrap_Struct(klass, NULL, -1, lxr);
 -
 -  return obj;
 -}
 -
 -static VALUE CLexer_init(VALUE self, VALUE listener)
 -{
 -  lexer_state *lxr; 
 -  rb_iv_set(self, "@listener", listener);
 -  
 -  lxr = NULL;
 -  DATA_GET(self, lexer_state, lxr);
 -  lexer_init(lxr);
 -  
 -  return self;
 -}
 -
 -static VALUE CLexer_scan(VALUE self, VALUE input)
 -{
 -  VALUE input_copy;
 -  char *data;
 -  size_t len;
 -  VALUE listener = rb_iv_get(self, "@listener");
 -
 -  lexer_state *lexer;
 -  lexer = NULL;
 -  DATA_GET(self, lexer_state, lexer);
 -
 -  input_copy = rb_str_dup(input);
 -
 -  rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%"));
 -  data = RSTRING_PTR(input_copy);
 -  len = RSTRING_LEN(input_copy);
 -  
 -  if (len == 0) { 
 -    rb_raise(rb_eGherkinLexingError, "No content to lex.");
 -  } else {
 -
 -    const char *p, *pe, *eof;
 -    int cs = 0;
 -    
 -    VALUE current_row = Qnil;
 -
 -    p = data;
 -    pe = data + len;
 -    eof = pe;
 -    
 -    assert(*pe == '\0' && "pointer does not end on NULL");
 -    
 -    
 -#line 1255 "ext/gherkin_lexer_uz/gherkin_lexer_uz.c"
 -	{
 -	cs = lexer_start;
 -	}
 -
 -#line 425 "ragel/i18n/uz.c.rl"
 -    
 -#line 1262 "ext/gherkin_lexer_uz/gherkin_lexer_uz.c"
 -	{
 -	int _klen;
 -	unsigned int _trans;
 -	const char *_acts;
 -	unsigned int _nacts;
 -	const char *_keys;
 -
 -	if ( p == pe )
 -		goto _test_eof;
 -	if ( cs == 0 )
 -		goto _out;
 -_resume:
 -	_keys = _lexer_trans_keys + _lexer_key_offsets[cs];
 -	_trans = _lexer_index_offsets[cs];
 -
 -	_klen = _lexer_single_lengths[cs];
 -	if ( _klen > 0 ) {
 -		const char *_lower = _keys;
 -		const char *_mid;
 -		const char *_upper = _keys + _klen - 1;
 -		while (1) {
 -			if ( _upper < _lower )
 -				break;
 -
 -			_mid = _lower + ((_upper-_lower) >> 1);
 -			if ( (*p) < *_mid )
 -				_upper = _mid - 1;
 -			else if ( (*p) > *_mid )
 -				_lower = _mid + 1;
 -			else {
 -				_trans += (unsigned int)(_mid - _keys);
 -				goto _match;
 -			}
 -		}
 -		_keys += _klen;
 -		_trans += _klen;
 -	}
 -
 -	_klen = _lexer_range_lengths[cs];
 -	if ( _klen > 0 ) {
 -		const char *_lower = _keys;
 -		const char *_mid;
 -		const char *_upper = _keys + (_klen<<1) - 2;
 -		while (1) {
 -			if ( _upper < _lower )
 -				break;
 -
 -			_mid = _lower + (((_upper-_lower) >> 1) & ~1);
 -			if ( (*p) < _mid[0] )
 -				_upper = _mid - 2;
 -			else if ( (*p) > _mid[1] )
 -				_lower = _mid + 2;
 -			else {
 -				_trans += (unsigned int)((_mid - _keys)>>1);
 -				goto _match;
 -			}
 -		}
 -		_trans += _klen;
 -	}
 -
 -_match:
 -	cs = _lexer_trans_targs[_trans];
 -
 -	if ( _lexer_trans_actions[_trans] == 0 )
 -		goto _again;
 -
 -	_acts = _lexer_actions + _lexer_trans_actions[_trans];
 -	_nacts = (unsigned int) *_acts++;
 -	while ( _nacts-- > 0 )
 -	{
 -		switch ( *_acts++ )
 -		{
 -	case 0:
 -#line 83 "ragel/i18n/uz.c.rl"
 -	{
 -		MARK(content_start, p);
 -    lexer->current_line = lexer->line_number;
 -    lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2;
 -  }
 -	break;
 -	case 1:
 -#line 89 "ragel/i18n/uz.c.rl"
 -	{
 -    MARK(content_start, p);
 -  }
 -	break;
 -	case 2:
 -#line 93 "ragel/i18n/uz.c.rl"
 -	{
 -    lexer->current_line = lexer->line_number;
 -    lexer->start_col = p - data - lexer->last_newline;
 -  }
 -	break;
 -	case 3:
 -#line 98 "ragel/i18n/uz.c.rl"
 -	{
 -    int len = LEN(content_start, PTR_TO(final_newline));
 -    int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end));
 -
 -    if (len < 0) len = 0;
 -    if (type_len < 0) len = 0;
 -
 -    store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line);
 -  }
 -	break;
 -	case 4:
 -#line 108 "ragel/i18n/uz.c.rl"
 -	{ 
 -    MARK(docstring_content_type_start, p);
 -  }
 -	break;
 -	case 5:
 -#line 112 "ragel/i18n/uz.c.rl"
 -	{ 
 -    MARK(docstring_content_type_end, p);
 -  }
 -	break;
 -	case 6:
 -#line 116 "ragel/i18n/uz.c.rl"
 -	{
 -    STORE_KW_END_CON(feature);
 -  }
 -	break;
 -	case 7:
 -#line 120 "ragel/i18n/uz.c.rl"
 -	{
 -    STORE_KW_END_CON(background);
 -  }
 -	break;
 -	case 8:
 -#line 124 "ragel/i18n/uz.c.rl"
 -	{
 -    STORE_KW_END_CON(scenario);
 -  }
 -	break;
 -	case 9:
 -#line 128 "ragel/i18n/uz.c.rl"
 -	{
 -    STORE_KW_END_CON(scenario_outline);
 -  }
 -	break;
 -	case 10:
 -#line 132 "ragel/i18n/uz.c.rl"
 -	{
 -    STORE_KW_END_CON(examples);
 -  }
 -	break;
 -	case 11:
 -#line 136 "ragel/i18n/uz.c.rl"
 -	{
 -    store_kw_con(listener, "step",
 -      PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
 -      PTR_TO(content_start), LEN(content_start, p), 
 -      lexer->current_line);
 -  }
 -	break;
 -	case 12:
 -#line 143 "ragel/i18n/uz.c.rl"
 -	{
 -    STORE_ATTR(comment);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 13:
 -#line 148 "ragel/i18n/uz.c.rl"
 -	{
 -    STORE_ATTR(tag);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 14:
 -#line 153 "ragel/i18n/uz.c.rl"
 -	{
 -    lexer->line_number += 1;
 -    MARK(final_newline, p);
 -  }
 -	break;
 -	case 15:
 -#line 158 "ragel/i18n/uz.c.rl"
 -	{
 -    MARK(last_newline, p + 1);
 -  }
 -	break;
 -	case 16:
 -#line 162 "ragel/i18n/uz.c.rl"
 -	{
 -    if (lexer->mark == 0) {
 -      MARK(mark, p);
 -    }
 -  }
 -	break;
 -	case 17:
 -#line 168 "ragel/i18n/uz.c.rl"
 -	{
 -    MARK(keyword_end, p);
 -    MARK(keyword_start, PTR_TO(mark));
 -    MARK(content_start, p + 1);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 18:
 -#line 175 "ragel/i18n/uz.c.rl"
 -	{
 -    MARK(content_end, p);
 -  }
 -	break;
 -	case 19:
 -#line 179 "ragel/i18n/uz.c.rl"
 -	{
 -    p = p - 1;
 -    lexer->current_line = lexer->line_number;
 -    current_row = rb_ary_new();
 -  }
 -	break;
 -	case 20:
 -#line 185 "ragel/i18n/uz.c.rl"
 -	{
 -		MARK(content_start, p);
 -  }
 -	break;
 -	case 21:
 -#line 189 "ragel/i18n/uz.c.rl"
 -	{
 -    VALUE re_pipe, re_newline, re_backslash;
 -    VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
 -    rb_funcall(con, rb_intern("strip!"), 0);
 -    re_pipe      = rb_reg_regcomp(rb_str_new2("\\\\\\|"));
 -    re_newline   = rb_reg_regcomp(rb_str_new2("\\\\n"));
 -    re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_pipe,      rb_str_new2("|"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_newline,   rb_str_new2("\n"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\"));
 -
 -    rb_ary_push(current_row, con);
 -  }
 -	break;
 -	case 22:
 -#line 203 "ragel/i18n/uz.c.rl"
 -	{
 -    rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
 -  }
 -	break;
 -	case 23:
 -#line 207 "ragel/i18n/uz.c.rl"
 -	{
 -    int line;
 -    if (cs < lexer_first_final) {
 -      size_t count = 0;
 -      VALUE newstr_val;
 -      char *newstr;
 -      int newstr_count = 0;        
 -      size_t len;
 -      const char *buff;
 -      if (lexer->last_newline != 0) {
 -        len = LEN(last_newline, eof);
 -        buff = PTR_TO(last_newline);
 -      } else {
 -        len = strlen(data);
 -        buff = data;
 -      }
 -
 -      /* Allocate as a ruby string so that it gets cleaned up by GC */
 -      newstr_val = rb_str_new(buff, len);
 -      newstr = RSTRING_PTR(newstr_val);
 -
 -
 -      for (count = 0; count < len; count++) {
 -        if(buff[count] == 10) {
 -          newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
 -          break;
 -        } else {
 -          if (buff[count] == '%') {
 -            newstr[newstr_count++] = buff[count];
 -            newstr[newstr_count] = buff[count];
 -          } else {
 -            newstr[newstr_count] = buff[count];
 -          }
 -        }
 -        newstr_count++;
 -      }
 -
 -      line = lexer->line_number;
 -      lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
 -      raise_lexer_error(newstr, line);
 -    } else {
 -      rb_funcall(listener, rb_intern("eof"), 0);
 -    }
 -  }
 -	break;
 -#line 1552 "ext/gherkin_lexer_uz/gherkin_lexer_uz.c"
 -		}
 -	}
 -
 -_again:
 -	if ( cs == 0 )
 -		goto _out;
 -	if ( ++p != pe )
 -		goto _resume;
 -	_test_eof: {}
 -	if ( p == eof )
 -	{
 -	const char *__acts = _lexer_actions + _lexer_eof_actions[cs];
 -	unsigned int __nacts = (unsigned int) *__acts++;
 -	while ( __nacts-- > 0 ) {
 -		switch ( *__acts++ ) {
 -	case 23:
 -#line 207 "ragel/i18n/uz.c.rl"
 -	{
 -    int line;
 -    if (cs < lexer_first_final) {
 -      size_t count = 0;
 -      VALUE newstr_val;
 -      char *newstr;
 -      int newstr_count = 0;        
 -      size_t len;
 -      const char *buff;
 -      if (lexer->last_newline != 0) {
 -        len = LEN(last_newline, eof);
 -        buff = PTR_TO(last_newline);
 -      } else {
 -        len = strlen(data);
 -        buff = data;
 -      }
 -
 -      /* Allocate as a ruby string so that it gets cleaned up by GC */
 -      newstr_val = rb_str_new(buff, len);
 -      newstr = RSTRING_PTR(newstr_val);
 -
 -
 -      for (count = 0; count < len; count++) {
 -        if(buff[count] == 10) {
 -          newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
 -          break;
 -        } else {
 -          if (buff[count] == '%') {
 -            newstr[newstr_count++] = buff[count];
 -            newstr[newstr_count] = buff[count];
 -          } else {
 -            newstr[newstr_count] = buff[count];
 -          }
 -        }
 -        newstr_count++;
 -      }
 -
 -      line = lexer->line_number;
 -      lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
 -      raise_lexer_error(newstr, line);
 -    } else {
 -      rb_funcall(listener, rb_intern("eof"), 0);
 -    }
 -  }
 -	break;
 -#line 1615 "ext/gherkin_lexer_uz/gherkin_lexer_uz.c"
 -		}
 -	}
 -	}
 -
 -	_out: {}
 -	}
 -
 -#line 426 "ragel/i18n/uz.c.rl"
 -
 -    assert(p <= pe && "data overflow after parsing execute");
 -    assert(lexer->content_start <= len && "content starts after data end");
 -    assert(lexer->mark < len && "mark is after data end");
 -    
 -    /* Reset lexer by re-initializing the whole thing */
 -    lexer_init(lexer);
 -
 -    if (cs == lexer_error) {
 -      rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails.");
 -    } else {
 -      return Qtrue;
 -    }
 -  }
 -}
 -
 -void Init_gherkin_lexer_uz()
 -{
 -  mGherkin = rb_define_module("Gherkin");
 -  mGherkinLexer = rb_define_module_under(mGherkin, "Lexer");
 -  rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError"));
 -
 -  mCLexer = rb_define_module_under(mGherkin, "CLexer");
 -  cI18nLexer = rb_define_class_under(mCLexer, "Uz", rb_cObject);
 -  rb_define_alloc_func(cI18nLexer, CLexer_alloc);
 -  rb_define_method(cI18nLexer, "initialize", CLexer_init, 1);
 -  rb_define_method(cI18nLexer, "scan", CLexer_scan, 1);
 -}
 -
diff --cc ext/gherkin_lexer_vi/extconf.rb
index dd8ff16,dd8ff16..0000000
deleted file mode 100644,100644
--- a/ext/gherkin_lexer_vi/extconf.rb
+++ /dev/null
@@@ -1,6 -1,6 +1,0 @@@
--require 'mkmf'
--CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags']
--$CFLAGS << ' -O0 -Wall' if CONFIG['CC'] =~ /gcc|clang/
--dir_config("gherkin_lexer_vi")
--have_library("c", "main")
--create_makefile("gherkin_lexer_vi")
diff --cc ext/gherkin_lexer_vi/gherkin_lexer_vi.c
index 92c7a59,7bf32af..0000000
deleted file mode 100644,100644
--- a/ext/gherkin_lexer_vi/gherkin_lexer_vi.c
+++ /dev/null
@@@ -1,1458 -1,1458 +1,0 @@@
--
- #line 1 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/vi.c.rl"
- #include <assert.h>
- #include <ruby.h>
- 
- #if defined(_WIN32)
- #include <stddef.h>
- #endif
- 
- #ifdef HAVE_RUBY_RE_H
- #include <ruby/re.h>
- #else
- #include <re.h>
- #endif
- 
- #ifdef HAVE_RUBY_ENCODING_H
- #include <ruby/encoding.h>
- #define ENCODED_STR_NEW(ptr, len) \
-     rb_enc_str_new(ptr, len, rb_utf8_encoding())
- #else
- #define ENCODED_STR_NEW(ptr, len) \
-     rb_str_new(ptr, len)
- #endif
- 
- #ifndef RSTRING_PTR
- #define RSTRING_PTR(s) (RSTRING(s)->ptr)
- #endif
- 
- #ifndef RSTRING_LEN
- #define RSTRING_LEN(s) (RSTRING(s)->len)
- #endif
- 
- #define DATA_GET(FROM, TYPE, NAME) \
-   Data_Get_Struct(FROM, TYPE, NAME); \
-   if (NAME == NULL) { \
-     rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \
-   }
-  
- typedef struct lexer_state {
-   int content_len;
-   int line_number;
-   int current_line;
-   int start_col;
-   size_t mark;
-   size_t keyword_start;
-   size_t keyword_end;
-   size_t next_keyword_start;
-   size_t content_start;
-   size_t content_end;
-   size_t docstring_content_type_start;
-   size_t docstring_content_type_end;
-   size_t query_start;
-   size_t last_newline;
-   size_t final_newline;
- } lexer_state;
- 
- static VALUE mGherkin;
- static VALUE mGherkinLexer;
- static VALUE mCLexer;
- static VALUE cI18nLexer;
- static VALUE rb_eGherkinLexingError;
- 
- #define LEN(AT, P) (P - data - lexer->AT)
- #define MARK(M, P) (lexer->M = (P) - data)
- #define PTR_TO(P) (data + lexer->P)
- 
- #define STORE_KW_END_CON(EVENT) \
-   store_multiline_kw_con(listener, # EVENT, \
-     PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \
-     PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \
-     lexer->current_line, lexer->start_col); \
-     if (lexer->content_end != 0) { \
-       p = PTR_TO(content_end - 1); \
-     } \
-     lexer->content_end = 0
- 
- #define STORE_ATTR(ATTR) \
-     store_attr(listener, # ATTR, \
-       PTR_TO(content_start), LEN(content_start, p), \
-       lexer->line_number)
- 
- 
- #line 254 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/vi.c.rl"
- 
- 
- /** Data **/
- 
- #line 89 "ext/gherkin_lexer_vi/gherkin_lexer_vi.c"
- static const char _lexer_actions[] = {
- 	0, 1, 0, 1, 1, 1, 2, 1, 
- 	3, 1, 4, 1, 5, 1, 6, 1, 
- 	7, 1, 8, 1, 9, 1, 10, 1, 
- 	11, 1, 12, 1, 13, 1, 16, 1, 
- 	17, 1, 18, 1, 19, 1, 20, 1, 
- 	21, 1, 22, 1, 23, 2, 1, 18, 
- 	2, 4, 5, 2, 13, 0, 2, 14, 
- 	15, 2, 17, 0, 2, 17, 2, 2, 
- 	17, 16, 2, 17, 19, 2, 18, 6, 
- 	2, 18, 7, 2, 18, 8, 2, 18, 
- 	9, 2, 18, 10, 2, 18, 16, 2, 
- 	20, 21, 2, 22, 0, 2, 22, 2, 
- 	2, 22, 16, 2, 22, 19, 3, 3, 
- 	14, 15, 3, 5, 14, 15, 3, 11, 
- 	14, 15, 3, 12, 14, 15, 3, 13, 
- 	14, 15, 3, 14, 15, 18, 3, 17, 
- 	0, 11, 3, 17, 14, 15, 4, 1, 
- 	14, 15, 18, 4, 4, 5, 14, 15, 
- 	4, 17, 0, 14, 15, 5, 17, 0, 
- 	11, 14, 15
- };
- 
- static const short _lexer_key_offsets[] = {
- 	0, 0, 18, 19, 20, 37, 38, 39, 
- 	41, 43, 48, 53, 58, 63, 67, 71, 
- 	73, 74, 75, 76, 77, 78, 79, 80, 
- 	81, 82, 83, 84, 85, 86, 87, 88, 
- 	89, 91, 93, 98, 105, 110, 112, 113, 
- 	114, 115, 116, 117, 118, 119, 120, 121, 
- 	122, 123, 124, 125, 139, 141, 143, 145, 
- 	147, 149, 151, 153, 155, 157, 159, 161, 
- 	163, 165, 167, 169, 186, 187, 188, 189, 
- 	190, 191, 192, 193, 194, 195, 196, 197, 
- 	198, 199, 200, 201, 208, 210, 212, 214, 
- 	216, 218, 220, 222, 224, 226, 228, 230, 
- 	232, 233, 234, 235, 236, 237, 238, 239, 
- 	240, 241, 242, 243, 244, 245, 259, 261, 
- 	263, 265, 267, 269, 271, 273, 275, 277, 
- 	279, 281, 283, 285, 287, 289, 292, 294, 
- 	296, 298, 300, 302, 304, 306, 308, 310, 
- 	312, 314, 316, 318, 320, 322, 324, 326, 
- 	329, 331, 333, 335, 337, 339, 341, 343, 
- 	345, 347, 349, 352, 354, 356, 358, 361, 
- 	363, 365, 367, 369, 371, 373, 375, 377, 
- 	379, 381, 383, 385, 387, 389, 391, 393, 
- 	395, 397, 400, 403, 405, 407, 409, 411, 
- 	413, 415, 417, 419, 421, 423, 425, 426, 
- 	427, 428, 430, 431, 432, 433, 434, 435, 
- 	436, 437, 438, 439, 440, 441, 442, 443, 
- 	444, 458, 460, 462, 464, 466, 468, 470, 
- 	472, 474, 476, 478, 480, 482, 484, 486, 
- 	488, 490, 492, 494, 496, 498, 500, 502, 
- 	505, 507, 509, 511, 513, 515, 517, 519, 
- 	521, 523, 525, 527, 529, 531, 533, 535, 
- 	537, 539, 542, 545, 547, 549, 551, 553, 
- 	555, 557, 559, 561, 563, 565, 567, 569, 
- 	571, 573, 575, 577, 579, 581, 583, 585, 
- 	586, 587, 588, 589, 590, 591, 592, 593, 
- 	594, 595, 596, 597, 598, 599, 600, 601, 
- 	602, 604, 606, 607, 608, 609, 610, 611, 
- 	612, 613, 614, 615, 616, 617, 618, 619, 
- 	620, 621, 622, 623, 624, 625, 626, 627, 
- 	638, 640, 642, 644, 646, 648, 650, 652, 
- 	654, 656, 658, 660, 662, 664, 666, 668, 
- 	670, 672, 674, 676, 678, 680, 682, 684, 
- 	686, 688, 690, 692, 694, 696, 698, 700, 
- 	702, 704, 706, 708, 710, 713, 715, 717, 
- 	719, 721, 723, 725, 727, 729, 731, 733, 
- 	735, 737, 739, 741, 744, 746, 748, 750, 
- 	752, 754, 756, 758, 760, 762, 764, 766, 
- 	768, 770, 772, 775, 777, 779, 781, 783, 
- 	785, 787, 788, 789, 790, 791, 795, 801, 
- 	804, 806, 812, 829, 831, 833, 835, 837, 
- 	839, 841, 843, 846, 848, 850, 852, 854, 
- 	856, 858, 860, 862, 864, 866, 868, 871, 
- 	873, 875, 877, 880, 882, 884, 886, 888, 
- 	890, 892, 894, 896, 898, 900, 902, 904, 
- 	906, 908, 910, 912, 914, 916, 919, 922, 
- 	924, 926, 928, 930, 932, 934, 936, 938, 
- 	940, 942, 943, 944, 945, 946
- };
- 
- static const char _lexer_trans_keys[] = {
- 	-17, 10, 32, 34, 35, 37, 42, 64, 
- 	66, 67, 68, 75, 78, 84, 86, 124, 
- 	9, 13, -69, -65, 10, 32, 34, 35, 
- 	37, 42, 64, 66, 67, 68, 75, 78, 
- 	84, 86, 124, 9, 13, 34, 34, 10, 
- 	13, 10, 13, 10, 32, 34, 9, 13, 
- 	10, 32, 34, 9, 13, 10, 32, 34, 
- 	9, 13, 10, 32, 34, 9, 13, 10, 
- 	32, 9, 13, 10, 32, 9, 13, 10, 
- 	13, 10, 95, 70, 69, 65, 84, 85, 
- 	82, 69, 95, 69, 78, 68, 95, 37, 
- 	32, 10, 13, 10, 13, 13, 32, 64, 
- 	9, 10, 9, 10, 13, 32, 64, 11, 
- 	12, 10, 32, 64, 9, 13, -31, 105, 
- 	-69, -111, 105, 32, 99, -31, -70, -93, 
- 	110, 104, 58, 10, 10, 10, 32, 35, 
- 	37, 42, 64, 66, 67, 75, 78, 84, 
- 	86, 9, 13, 10, 95, 10, 70, 10, 
- 	69, 10, 65, 10, 84, 10, 85, 10, 
- 	82, 10, 69, 10, 95, 10, 69, 10, 
- 	78, 10, 68, 10, 95, 10, 37, 10, 
- 	32, 10, 32, 34, 35, 37, 42, 64, 
- 	66, 67, 68, 75, 78, 84, 86, 124, 
- 	9, 13, 104, 111, -31, -69, -81, 32, 
- 	108, 105, -31, -69, -121, 117, 58, 10, 
- 	10, 10, 32, 35, 84, 124, 9, 13, 
- 	-61, 10, -83, 10, 10, 110, 10, 104, 
- 	10, 32, 10, 110, -60, 10, -125, 10, 
- 	10, 110, 10, 103, 10, 58, -31, 104, 
- 	-69, -117, 99, 104, 32, 98, -31, -70, 
- 	-93, 110, 58, 10, 10, 10, 32, 35, 
- 	37, 42, 64, 66, 67, 75, 78, 84, 
- 	86, 9, 13, 10, 95, 10, 70, 10, 
- 	69, 10, 65, 10, 84, 10, 85, 10, 
- 	82, 10, 69, 10, 95, 10, 69, 10, 
- 	78, 10, 68, 10, 95, 10, 37, 10, 
- 	32, -31, 10, 105, -69, 10, -111, 10, 
- 	10, 105, 10, 32, 10, 99, -31, 10, 
- 	-70, 10, -93, 10, 10, 110, 10, 104, 
- 	10, 58, -31, 10, -70, 10, -65, 10, 
- 	10, 116, 10, 104, 10, 111, -31, 10, 
- 	104, -69, 10, -117, 10, 10, 99, 10, 
- 	104, 10, 32, 10, 98, -31, 10, -70, 
- 	10, -93, 10, 10, 110, 10, 105, 117, 
- 	10, 110, 10, 103, 10, 32, 10, 107, 
- 	116, -31, 10, -61, 10, -84, 10, 10, 
- 	110, 10, 104, 10, 32, 10, 104, 10, 
- 	117, -31, 10, -69, 10, -111, 10, 10, 
- 	110, 10, 103, 10, 104, -58, 10, -80, 
- 	10, 10, 110, 10, 103, -61, 10, 104, 
- 	-84, -83, 10, 10, 110, 10, 104, 10, 
- 	32, 10, 110, -60, 10, -125, 10, -61, 
- 	10, -84, 10, -61, 10, -96, 10, 105, 
- 	117, 110, 103, 32, 107, 116, -31, -69, 
- 	-117, 99, 104, 32, 98, -31, -70, -93, 
- 	110, 58, 10, 10, 10, 32, 35, 37, 
- 	42, 64, 66, 67, 75, 78, 84, 86, 
- 	9, 13, 10, 95, 10, 70, 10, 69, 
- 	10, 65, 10, 84, 10, 85, 10, 82, 
- 	10, 69, 10, 95, 10, 69, 10, 78, 
- 	10, 68, 10, 95, 10, 37, 10, 32, 
- 	10, 105, -31, 10, -70, 10, -65, 10, 
- 	10, 116, 10, 104, 10, 111, -31, 10, 
- 	104, -69, 10, -117, 10, 10, 99, 10, 
- 	104, 10, 32, 10, 98, -31, 10, -70, 
- 	10, -93, 10, 10, 110, 10, 58, 10, 
- 	105, 10, 104, -58, 10, -80, 10, 10, 
- 	110, 10, 103, -61, 10, 104, -84, -83, 
- 	10, 10, 110, 10, 104, 10, 32, 10, 
- 	104, 10, 117, -31, 10, -69, 10, -111, 
- 	10, 10, 110, 10, 103, 10, 110, 10, 
- 	104, 10, 32, 10, 110, -60, 10, -125, 
- 	10, -61, 10, -84, 10, -61, 10, -96, 
- 	10, -61, -84, 110, 104, 32, 104, 117, 
- 	-31, -69, -111, 110, 103, 104, -58, -80, 
- 	110, 103, -61, 104, -84, -83, 110, 104, 
- 	32, 104, 117, -31, -69, -111, 110, 103, 
- 	110, 104, 32, 110, -60, -125, 110, 103, 
- 	58, 10, 10, 10, 32, 35, 37, 64, 
- 	66, 68, 75, 84, 9, 13, 10, 95, 
- 	10, 70, 10, 69, 10, 65, 10, 84, 
- 	10, 85, 10, 82, 10, 69, 10, 95, 
- 	10, 69, 10, 78, 10, 68, 10, 95, 
- 	10, 37, -31, 10, -69, 10, -111, 10, 
- 	10, 105, 10, 32, 10, 99, -31, 10, 
- 	-70, 10, -93, 10, 10, 110, 10, 104, 
- 	10, 58, -31, 10, -69, 10, -81, 10, 
- 	10, 32, 10, 108, 10, 105, -31, 10, 
- 	-69, 10, -121, 10, 10, 117, -31, 10, 
- 	104, -69, 10, -117, 10, 10, 99, 10, 
- 	104, 10, 32, 10, 98, -31, 10, -70, 
- 	10, -93, 10, 10, 110, 10, 117, 10, 
- 	110, 10, 103, 10, 32, 10, 107, 116, 
- 	-31, 10, -61, 10, -84, 10, 10, 110, 
- 	10, 104, 10, 32, 10, 104, 10, 117, 
- 	-31, 10, -69, 10, -111, 10, 10, 110, 
- 	10, 103, -61, 10, -84, -83, 10, 10, 
- 	110, 10, 104, 10, 32, 10, 110, -60, 
- 	10, -125, 10, -61, -84, -61, -96, 32, 
- 	124, 9, 13, 10, 32, 92, 124, 9, 
- 	13, 10, 92, 124, 10, 92, 10, 32, 
- 	92, 124, 9, 13, 10, 32, 34, 35, 
- 	37, 42, 64, 66, 67, 68, 75, 78, 
- 	84, 86, 124, 9, 13, 10, 105, -31, 
- 	10, -70, 10, -65, 10, 10, 116, 10, 
- 	104, 10, 111, -31, 10, 104, -69, 10, 
- 	-117, 10, 10, 99, 10, 104, 10, 32, 
- 	10, 98, -31, 10, -70, 10, -93, 10, 
- 	10, 110, 10, 58, 10, 105, 117, 10, 
- 	110, 10, 103, 10, 32, 10, 107, 116, 
- 	-31, 10, -61, 10, -84, 10, 10, 110, 
- 	10, 104, 10, 32, 10, 104, 10, 117, 
- 	-31, 10, -69, 10, -111, 10, 10, 110, 
- 	10, 103, 10, 104, -58, 10, -80, 10, 
- 	10, 110, 10, 103, -61, 10, 104, -84, 
- 	-83, 10, 10, 110, 10, 104, 10, 32, 
- 	10, 110, -60, 10, -125, 10, -61, 10, 
- 	-84, 10, -61, 10, -96, 10, -31, -70, 
- 	-65, 116, 0
- };
- 
- static const char _lexer_single_lengths[] = {
- 	0, 16, 1, 1, 15, 1, 1, 2, 
- 	2, 3, 3, 3, 3, 2, 2, 2, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	2, 2, 3, 5, 3, 2, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 12, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 15, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 5, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 12, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 3, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 3, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 3, 2, 2, 2, 3, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 3, 3, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 1, 1, 
- 	1, 2, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	12, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 3, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 3, 3, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	2, 2, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 9, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 3, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 3, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 3, 2, 2, 2, 2, 2, 
- 	2, 1, 1, 1, 1, 2, 4, 3, 
- 	2, 4, 15, 2, 2, 2, 2, 2, 
- 	2, 2, 3, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 3, 2, 
- 	2, 2, 3, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 3, 3, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 1, 1, 1, 1, 0
- };
- 
- static const char _lexer_range_lengths[] = {
- 	0, 1, 0, 0, 1, 0, 0, 0, 
- 	0, 1, 1, 1, 1, 1, 1, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 1, 1, 1, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 1, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 1, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 1, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 1, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	1, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 1, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 1, 1, 0, 
- 	0, 1, 1, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0
- };
- 
- static const short _lexer_index_offsets[] = {
- 	0, 0, 18, 20, 22, 39, 41, 43, 
- 	46, 49, 54, 59, 64, 69, 73, 77, 
- 	80, 82, 84, 86, 88, 90, 92, 94, 
- 	96, 98, 100, 102, 104, 106, 108, 110, 
- 	112, 115, 118, 123, 130, 135, 138, 140, 
- 	142, 144, 146, 148, 150, 152, 154, 156, 
- 	158, 160, 162, 164, 178, 181, 184, 187, 
- 	190, 193, 196, 199, 202, 205, 208, 211, 
- 	214, 217, 220, 223, 240, 242, 244, 246, 
- 	248, 250, 252, 254, 256, 258, 260, 262, 
- 	264, 266, 268, 270, 277, 280, 283, 286, 
- 	289, 292, 295, 298, 301, 304, 307, 310, 
- 	313, 315, 317, 319, 321, 323, 325, 327, 
- 	329, 331, 333, 335, 337, 339, 353, 356, 
- 	359, 362, 365, 368, 371, 374, 377, 380, 
- 	383, 386, 389, 392, 395, 398, 402, 405, 
- 	408, 411, 414, 417, 420, 423, 426, 429, 
- 	432, 435, 438, 441, 444, 447, 450, 453, 
- 	457, 460, 463, 466, 469, 472, 475, 478, 
- 	481, 484, 487, 491, 494, 497, 500, 504, 
- 	507, 510, 513, 516, 519, 522, 525, 528, 
- 	531, 534, 537, 540, 543, 546, 549, 552, 
- 	555, 558, 562, 566, 569, 572, 575, 578, 
- 	581, 584, 587, 590, 593, 596, 599, 601, 
- 	603, 605, 608, 610, 612, 614, 616, 618, 
- 	620, 622, 624, 626, 628, 630, 632, 634, 
- 	636, 650, 653, 656, 659, 662, 665, 668, 
- 	671, 674, 677, 680, 683, 686, 689, 692, 
- 	695, 698, 701, 704, 707, 710, 713, 716, 
- 	720, 723, 726, 729, 732, 735, 738, 741, 
- 	744, 747, 750, 753, 756, 759, 762, 765, 
- 	768, 771, 775, 779, 782, 785, 788, 791, 
- 	794, 797, 800, 803, 806, 809, 812, 815, 
- 	818, 821, 824, 827, 830, 833, 836, 839, 
- 	841, 843, 845, 847, 849, 851, 853, 855, 
- 	857, 859, 861, 863, 865, 867, 869, 871, 
- 	873, 876, 879, 881, 883, 885, 887, 889, 
- 	891, 893, 895, 897, 899, 901, 903, 905, 
- 	907, 909, 911, 913, 915, 917, 919, 921, 
- 	932, 935, 938, 941, 944, 947, 950, 953, 
- 	956, 959, 962, 965, 968, 971, 974, 977, 
- 	980, 983, 986, 989, 992, 995, 998, 1001, 
- 	1004, 1007, 1010, 1013, 1016, 1019, 1022, 1025, 
- 	1028, 1031, 1034, 1037, 1040, 1044, 1047, 1050, 
- 	1053, 1056, 1059, 1062, 1065, 1068, 1071, 1074, 
- 	1077, 1080, 1083, 1086, 1090, 1093, 1096, 1099, 
- 	1102, 1105, 1108, 1111, 1114, 1117, 1120, 1123, 
- 	1126, 1129, 1132, 1136, 1139, 1142, 1145, 1148, 
- 	1151, 1154, 1156, 1158, 1160, 1162, 1166, 1172, 
- 	1176, 1179, 1185, 1202, 1205, 1208, 1211, 1214, 
- 	1217, 1220, 1223, 1227, 1230, 1233, 1236, 1239, 
- 	1242, 1245, 1248, 1251, 1254, 1257, 1260, 1264, 
- 	1267, 1270, 1273, 1277, 1280, 1283, 1286, 1289, 
- 	1292, 1295, 1298, 1301, 1304, 1307, 1310, 1313, 
- 	1316, 1319, 1322, 1325, 1328, 1331, 1335, 1339, 
- 	1342, 1345, 1348, 1351, 1354, 1357, 1360, 1363, 
- 	1366, 1369, 1371, 1373, 1375, 1377
- };
- 
- static const short _lexer_trans_targs[] = {
- 	2, 4, 4, 5, 15, 17, 31, 34, 
- 	37, 68, 70, 95, 283, 288, 387, 389, 
- 	4, 0, 3, 0, 4, 0, 4, 4, 
- 	5, 15, 17, 31, 34, 37, 68, 70, 
- 	95, 283, 288, 387, 389, 4, 0, 6, 
- 	0, 7, 0, 9, 8, 8, 9, 8, 
- 	8, 10, 10, 11, 10, 10, 10, 10, 
- 	11, 10, 10, 10, 10, 12, 10, 10, 
- 	10, 10, 13, 10, 10, 4, 14, 14, 
- 	0, 4, 14, 14, 0, 4, 16, 15, 
- 	4, 0, 18, 0, 19, 0, 20, 0, 
- 	21, 0, 22, 0, 23, 0, 24, 0, 
- 	25, 0, 26, 0, 27, 0, 28, 0, 
- 	29, 0, 30, 0, 453, 0, 32, 0, 
- 	4, 16, 33, 4, 16, 33, 0, 0, 
- 	0, 0, 35, 36, 4, 36, 36, 34, 
- 	35, 35, 4, 36, 34, 36, 0, 38, 
- 	449, 0, 39, 0, 40, 0, 41, 0, 
- 	42, 0, 43, 0, 44, 0, 45, 0, 
- 	46, 0, 47, 0, 48, 0, 49, 0, 
- 	51, 50, 51, 50, 51, 51, 4, 52, 
- 	66, 4, 395, 400, 402, 432, 437, 447, 
- 	51, 50, 51, 53, 50, 51, 54, 50, 
- 	51, 55, 50, 51, 56, 50, 51, 57, 
- 	50, 51, 58, 50, 51, 59, 50, 51, 
- 	60, 50, 51, 61, 50, 51, 62, 50, 
- 	51, 63, 50, 51, 64, 50, 51, 65, 
- 	50, 51, 4, 50, 51, 67, 50, 4, 
- 	4, 5, 15, 17, 31, 34, 37, 68, 
- 	70, 95, 283, 288, 387, 389, 4, 0, 
- 	69, 0, 31, 0, 71, 0, 72, 0, 
- 	73, 0, 74, 0, 75, 0, 76, 0, 
- 	77, 0, 78, 0, 79, 0, 80, 0, 
- 	81, 0, 83, 82, 83, 82, 83, 83, 
- 	4, 84, 4, 83, 82, 85, 83, 82, 
- 	86, 83, 82, 83, 87, 82, 83, 88, 
- 	82, 83, 89, 82, 83, 90, 82, 91, 
- 	83, 82, 92, 83, 82, 83, 93, 82, 
- 	83, 94, 82, 83, 67, 82, 96, 189, 
- 	0, 97, 0, 98, 0, 99, 0, 100, 
- 	0, 101, 0, 102, 0, 103, 0, 104, 
- 	0, 105, 0, 106, 0, 107, 0, 109, 
- 	108, 109, 108, 109, 109, 4, 110, 124, 
- 	4, 125, 141, 143, 172, 177, 187, 109, 
- 	108, 109, 111, 108, 109, 112, 108, 109, 
- 	113, 108, 109, 114, 108, 109, 115, 108, 
- 	109, 116, 108, 109, 117, 108, 109, 118, 
- 	108, 109, 119, 108, 109, 120, 108, 109, 
- 	121, 108, 109, 122, 108, 109, 123, 108, 
- 	109, 4, 108, 109, 67, 108, 126, 109, 
- 	137, 108, 127, 109, 108, 128, 109, 108, 
- 	109, 129, 108, 109, 130, 108, 109, 131, 
- 	108, 132, 109, 108, 133, 109, 108, 134, 
- 	109, 108, 109, 135, 108, 109, 136, 108, 
- 	109, 67, 108, 138, 109, 108, 139, 109, 
- 	108, 140, 109, 108, 109, 124, 108, 109, 
- 	142, 108, 109, 124, 108, 144, 109, 154, 
- 	108, 145, 109, 108, 146, 109, 108, 109, 
- 	147, 108, 109, 148, 108, 109, 149, 108, 
- 	109, 150, 108, 151, 109, 108, 152, 109, 
- 	108, 153, 109, 108, 109, 136, 108, 109, 
- 	124, 155, 108, 109, 156, 108, 109, 157, 
- 	108, 109, 158, 108, 109, 159, 160, 108, 
- 	144, 109, 108, 161, 109, 108, 162, 109, 
- 	108, 109, 163, 108, 109, 164, 108, 109, 
- 	165, 108, 109, 166, 108, 109, 167, 108, 
- 	168, 109, 108, 169, 109, 108, 170, 109, 
- 	108, 109, 171, 108, 109, 136, 108, 109, 
- 	173, 108, 174, 109, 108, 175, 109, 108, 
- 	109, 176, 108, 109, 124, 108, 178, 109, 
- 	185, 108, 162, 179, 109, 108, 109, 180, 
- 	108, 109, 181, 108, 109, 182, 108, 109, 
- 	183, 108, 184, 109, 108, 170, 109, 108, 
- 	186, 109, 108, 124, 109, 108, 188, 109, 
- 	108, 124, 109, 108, 31, 190, 0, 191, 
- 	0, 192, 0, 193, 0, 194, 271, 0, 
- 	195, 0, 196, 0, 197, 0, 198, 0, 
- 	199, 0, 200, 0, 201, 0, 202, 0, 
- 	203, 0, 204, 0, 205, 0, 206, 0, 
- 	208, 207, 208, 207, 208, 208, 4, 209, 
- 	223, 4, 224, 229, 231, 244, 249, 269, 
- 	208, 207, 208, 210, 207, 208, 211, 207, 
- 	208, 212, 207, 208, 213, 207, 208, 214, 
- 	207, 208, 215, 207, 208, 216, 207, 208, 
- 	217, 207, 208, 218, 207, 208, 219, 207, 
- 	208, 220, 207, 208, 221, 207, 208, 222, 
- 	207, 208, 4, 207, 208, 67, 207, 208, 
- 	225, 207, 226, 208, 207, 227, 208, 207, 
- 	228, 208, 207, 208, 223, 207, 208, 230, 
- 	207, 208, 223, 207, 232, 208, 243, 207, 
- 	233, 208, 207, 234, 208, 207, 208, 235, 
- 	207, 208, 236, 207, 208, 237, 207, 208, 
- 	238, 207, 239, 208, 207, 240, 208, 207, 
- 	241, 208, 207, 208, 242, 207, 208, 67, 
- 	207, 208, 223, 207, 208, 245, 207, 246, 
- 	208, 207, 247, 208, 207, 208, 248, 207, 
- 	208, 223, 207, 250, 208, 267, 207, 251, 
- 	261, 208, 207, 208, 252, 207, 208, 253, 
- 	207, 208, 254, 207, 208, 255, 207, 208, 
- 	256, 207, 257, 208, 207, 258, 208, 207, 
- 	259, 208, 207, 208, 260, 207, 208, 242, 
- 	207, 208, 262, 207, 208, 263, 207, 208, 
- 	264, 207, 208, 265, 207, 266, 208, 207, 
- 	259, 208, 207, 268, 208, 207, 223, 208, 
- 	207, 270, 208, 207, 223, 208, 207, 272, 
- 	0, 273, 0, 274, 0, 275, 0, 276, 
- 	0, 277, 0, 278, 0, 279, 0, 280, 
- 	0, 281, 0, 282, 0, 205, 0, 284, 
- 	0, 285, 0, 286, 0, 287, 0, 31, 
- 	0, 289, 385, 0, 290, 300, 0, 291, 
- 	0, 292, 0, 293, 0, 294, 0, 295, 
- 	0, 296, 0, 297, 0, 298, 0, 299, 
- 	0, 106, 0, 301, 0, 302, 0, 303, 
- 	0, 304, 0, 305, 0, 306, 0, 307, 
- 	0, 308, 0, 309, 0, 311, 310, 311, 
- 	310, 311, 311, 4, 312, 4, 326, 338, 
- 	348, 377, 311, 310, 311, 313, 310, 311, 
- 	314, 310, 311, 315, 310, 311, 316, 310, 
- 	311, 317, 310, 311, 318, 310, 311, 319, 
- 	310, 311, 320, 310, 311, 321, 310, 311, 
- 	322, 310, 311, 323, 310, 311, 324, 310, 
- 	311, 325, 310, 311, 4, 310, 327, 311, 
- 	310, 328, 311, 310, 329, 311, 310, 311, 
- 	330, 310, 311, 331, 310, 311, 332, 310, 
- 	333, 311, 310, 334, 311, 310, 335, 311, 
- 	310, 311, 336, 310, 311, 337, 310, 311, 
- 	67, 310, 339, 311, 310, 340, 311, 310, 
- 	341, 311, 310, 311, 342, 310, 311, 343, 
- 	310, 311, 344, 310, 345, 311, 310, 346, 
- 	311, 310, 347, 311, 310, 311, 337, 310, 
- 	349, 311, 359, 310, 350, 311, 310, 351, 
- 	311, 310, 311, 352, 310, 311, 353, 310, 
- 	311, 354, 310, 311, 355, 310, 356, 311, 
- 	310, 357, 311, 310, 358, 311, 310, 311, 
- 	337, 310, 311, 360, 310, 311, 361, 310, 
- 	311, 362, 310, 311, 363, 310, 311, 364, 
- 	365, 310, 349, 311, 310, 366, 311, 310, 
- 	367, 311, 310, 311, 368, 310, 311, 369, 
- 	310, 311, 370, 310, 311, 371, 310, 311, 
- 	372, 310, 373, 311, 310, 374, 311, 310, 
- 	375, 311, 310, 311, 376, 310, 311, 337, 
- 	310, 378, 311, 310, 367, 379, 311, 310, 
- 	311, 380, 310, 311, 381, 310, 311, 382, 
- 	310, 311, 383, 310, 384, 311, 310, 375, 
- 	311, 310, 386, 0, 31, 0, 388, 0, 
- 	31, 0, 389, 390, 389, 0, 394, 393, 
- 	392, 390, 393, 391, 0, 392, 390, 391, 
- 	0, 392, 391, 394, 393, 392, 390, 393, 
- 	391, 394, 394, 5, 15, 17, 31, 34, 
- 	37, 68, 70, 95, 283, 288, 387, 389, 
- 	394, 0, 51, 396, 50, 397, 51, 50, 
- 	398, 51, 50, 399, 51, 50, 51, 66, 
- 	50, 51, 401, 50, 51, 66, 50, 403, 
- 	51, 414, 50, 404, 51, 50, 405, 51, 
- 	50, 51, 406, 50, 51, 407, 50, 51, 
- 	408, 50, 51, 409, 50, 410, 51, 50, 
- 	411, 51, 50, 412, 51, 50, 51, 413, 
- 	50, 51, 67, 50, 51, 66, 415, 50, 
- 	51, 416, 50, 51, 417, 50, 51, 418, 
- 	50, 51, 419, 420, 50, 403, 51, 50, 
- 	421, 51, 50, 422, 51, 50, 51, 423, 
- 	50, 51, 424, 50, 51, 425, 50, 51, 
- 	426, 50, 51, 427, 50, 428, 51, 50, 
- 	429, 51, 50, 430, 51, 50, 51, 431, 
- 	50, 51, 413, 50, 51, 433, 50, 434, 
- 	51, 50, 435, 51, 50, 51, 436, 50, 
- 	51, 66, 50, 438, 51, 445, 50, 422, 
- 	439, 51, 50, 51, 440, 50, 51, 441, 
- 	50, 51, 442, 50, 51, 443, 50, 444, 
- 	51, 50, 430, 51, 50, 446, 51, 50, 
- 	66, 51, 50, 448, 51, 50, 66, 51, 
- 	50, 450, 0, 451, 0, 452, 0, 31, 
- 	0, 0, 0
- };
- 
- static const unsigned char _lexer_trans_actions[] = {
- 	0, 54, 0, 5, 1, 0, 29, 1, 
- 	29, 29, 29, 29, 29, 29, 29, 35, 
- 	0, 43, 0, 43, 0, 43, 54, 0, 
- 	5, 1, 0, 29, 1, 29, 29, 29, 
- 	29, 29, 29, 29, 35, 0, 43, 0, 
- 	43, 0, 43, 139, 48, 9, 106, 11, 
- 	0, 134, 45, 45, 45, 3, 122, 33, 
- 	33, 33, 0, 122, 33, 33, 33, 0, 
- 	122, 33, 0, 33, 0, 102, 7, 7, 
- 	43, 54, 0, 0, 43, 114, 25, 0, 
- 	54, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	149, 126, 57, 110, 23, 0, 43, 43, 
- 	43, 43, 0, 27, 118, 27, 27, 51, 
- 	27, 0, 54, 0, 1, 0, 43, 0, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	144, 57, 54, 0, 54, 0, 72, 33, 
- 	84, 72, 84, 84, 84, 84, 84, 84, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 15, 0, 54, 15, 0, 130, 
- 	31, 60, 57, 31, 63, 57, 63, 63, 
- 	63, 63, 63, 63, 63, 66, 31, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 144, 57, 54, 0, 54, 0, 
- 	81, 84, 81, 0, 0, 0, 54, 0, 
- 	0, 54, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 0, 
- 	54, 0, 0, 54, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 21, 0, 0, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 144, 
- 	57, 54, 0, 54, 0, 75, 33, 84, 
- 	75, 84, 84, 84, 84, 84, 84, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 17, 0, 54, 17, 0, 0, 54, 
- 	0, 0, 0, 54, 0, 0, 54, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 17, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 0, 54, 0, 
- 	0, 0, 54, 0, 0, 54, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 54, 0, 0, 54, 
- 	0, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 0, 54, 0, 0, 54, 0, 
- 	54, 0, 0, 54, 0, 0, 0, 54, 
- 	0, 0, 0, 0, 54, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	144, 57, 54, 0, 54, 0, 78, 33, 
- 	84, 78, 84, 84, 84, 84, 84, 84, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 19, 0, 54, 19, 0, 54, 
- 	0, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 0, 54, 0, 0, 
- 	0, 54, 0, 0, 54, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 54, 0, 0, 54, 19, 
- 	0, 54, 0, 0, 54, 0, 0, 0, 
- 	54, 0, 0, 54, 0, 54, 0, 0, 
- 	54, 0, 0, 0, 54, 0, 0, 0, 
- 	0, 54, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 0, 43, 0, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 144, 57, 54, 
- 	0, 54, 0, 69, 33, 69, 84, 84, 
- 	84, 84, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 13, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	13, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 54, 0, 0, 
- 	0, 54, 0, 0, 0, 54, 0, 0, 
- 	54, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 54, 0, 0, 54, 0, 
- 	0, 0, 54, 0, 0, 0, 54, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 0, 0, 43, 54, 37, 
- 	37, 87, 37, 37, 43, 0, 39, 0, 
- 	43, 0, 0, 54, 0, 0, 39, 0, 
- 	0, 54, 0, 93, 90, 41, 96, 90, 
- 	96, 96, 96, 96, 96, 96, 96, 99, 
- 	0, 43, 54, 0, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 0, 
- 	54, 0, 0, 0, 54, 0, 0, 54, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 54, 0, 
- 	0, 54, 15, 0, 54, 0, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 0, 
- 	54, 0, 0, 54, 0, 54, 0, 0, 
- 	54, 0, 0, 0, 54, 0, 0, 0, 
- 	0, 54, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 0
- };
- 
- static const unsigned char _lexer_eof_actions[] = {
- 	0, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43
- };
- 
- static const int lexer_start = 1;
- static const int lexer_first_final = 453;
- static const int lexer_error = 0;
- 
- static const int lexer_en_main = 1;
- 
- 
- #line 258 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/vi.c.rl"
- 
- static VALUE 
- unindent(VALUE con, int start_col)
- {
-   VALUE re;
-   // Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters
-   char pat[32]; 
-   snprintf(pat, 32, "^[\t ]{0,%d}", start_col); 
-   re = rb_reg_regcomp(rb_str_new2(pat));
-   rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2(""));
- 
-   return Qnil;
- 
- }
- 
- static void 
- store_kw_con(VALUE listener, const char * event_name, 
-              const char * keyword_at, size_t keyword_length, 
-              const char * at,         size_t length, 
-              int current_line)
- {
-   VALUE con = Qnil, kw = Qnil;
-   kw = ENCODED_STR_NEW(keyword_at, keyword_length);
-   con = ENCODED_STR_NEW(at, length);
-   rb_funcall(con, rb_intern("strip!"), 0);
-   rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); 
- }
- 
- static void
- store_multiline_kw_con(VALUE listener, const char * event_name,
-                       const char * keyword_at, size_t keyword_length,
-                       const char * at,         size_t length,
-                       int current_line, int start_col)
- {
-   VALUE split;
-   VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil;
- 
-   kw = ENCODED_STR_NEW(keyword_at, keyword_length);
-   con = ENCODED_STR_NEW(at, length);
- 
-   unindent(con, start_col);
-   
-   split = rb_str_split(con, "\n");
- 
-   name = rb_funcall(split, rb_intern("shift"), 0);
-   desc = rb_ary_join(split, rb_str_new2( "\n" ));
- 
-   if( name == Qnil ) 
-   {
-     name = rb_str_new2("");
-   }
-   if( rb_funcall(desc, rb_intern("size"), 0) == 0) 
-   {
-     desc = rb_str_new2("");
-   }
-   rb_funcall(name, rb_intern("strip!"), 0);
-   rb_funcall(desc, rb_intern("rstrip!"), 0);
-   rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); 
- }
- 
- static void 
- store_attr(VALUE listener, const char * attr_type,
-            const char * at, size_t length, 
-            int line)
- {
-   VALUE val = ENCODED_STR_NEW(at, length);
-   rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line));
- }
- static void 
- store_docstring_content(VALUE listener, 
-           int start_col, 
-           const char *type_at, size_t type_length,
-           const char *at, size_t length, 
-           int current_line)
- {
-   VALUE re2;
-   VALUE unescape_escaped_quotes;
-   VALUE con = ENCODED_STR_NEW(at, length);
-   VALUE con_type = ENCODED_STR_NEW(type_at, type_length);
- 
-   unindent(con, start_col);
- 
-   re2 = rb_reg_regcomp(rb_str_new2("\r\\Z"));
-   unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\""));
-   rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2(""));
-   rb_funcall(con_type, rb_intern("strip!"), 0);
-   rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\""));
-   rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line));
- }
- static void 
- raise_lexer_error(const char * at, int line)
- { 
-   rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at);
- }
- 
- static void lexer_init(lexer_state *lexer) {
-   lexer->content_start = 0;
-   lexer->content_end = 0;
-   lexer->content_len = 0;
-   lexer->docstring_content_type_start = 0;
-   lexer->docstring_content_type_end = 0;
-   lexer->mark = 0;
-   lexer->keyword_start = 0;
-   lexer->keyword_end = 0;
-   lexer->next_keyword_start = 0;
-   lexer->line_number = 1;
-   lexer->last_newline = 0;
-   lexer->final_newline = 0;
-   lexer->start_col = 0;
- }
- 
- static VALUE CLexer_alloc(VALUE klass)
- {
-   VALUE obj;
-   lexer_state *lxr = ALLOC(lexer_state);
-   lexer_init(lxr);
- 
-   obj = Data_Wrap_Struct(klass, NULL, -1, lxr);
- 
-   return obj;
- }
- 
- static VALUE CLexer_init(VALUE self, VALUE listener)
- {
-   lexer_state *lxr; 
-   rb_iv_set(self, "@listener", listener);
-   
-   lxr = NULL;
-   DATA_GET(self, lexer_state, lxr);
-   lexer_init(lxr);
-   
-   return self;
- }
- 
- static VALUE CLexer_scan(VALUE self, VALUE input)
- {
-   VALUE input_copy;
-   char *data;
-   size_t len;
-   VALUE listener = rb_iv_get(self, "@listener");
- 
-   lexer_state *lexer;
-   lexer = NULL;
-   DATA_GET(self, lexer_state, lexer);
- 
-   input_copy = rb_str_dup(input);
- 
-   rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%"));
-   data = RSTRING_PTR(input_copy);
-   len = RSTRING_LEN(input_copy);
-   
-   if (len == 0) { 
-     rb_raise(rb_eGherkinLexingError, "No content to lex.");
-   } else {
- 
-     const char *p, *pe, *eof;
-     int cs = 0;
-     
-     VALUE current_row = Qnil;
- 
-     p = data;
-     pe = data + len;
-     eof = pe;
-     
-     assert(*pe == '\0' && "pointer does not end on NULL");
-     
-     
- #line 1062 "ext/gherkin_lexer_vi/gherkin_lexer_vi.c"
- 	{
- 	cs = lexer_start;
- 	}
- 
- #line 425 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/vi.c.rl"
-     
- #line 1069 "ext/gherkin_lexer_vi/gherkin_lexer_vi.c"
- 	{
- 	int _klen;
- 	unsigned int _trans;
- 	const char *_acts;
- 	unsigned int _nacts;
- 	const char *_keys;
- 
- 	if ( p == pe )
- 		goto _test_eof;
- 	if ( cs == 0 )
- 		goto _out;
- _resume:
- 	_keys = _lexer_trans_keys + _lexer_key_offsets[cs];
- 	_trans = _lexer_index_offsets[cs];
- 
- 	_klen = _lexer_single_lengths[cs];
- 	if ( _klen > 0 ) {
- 		const char *_lower = _keys;
- 		const char *_mid;
- 		const char *_upper = _keys + _klen - 1;
- 		while (1) {
- 			if ( _upper < _lower )
- 				break;
- 
- 			_mid = _lower + ((_upper-_lower) >> 1);
- 			if ( (*p) < *_mid )
- 				_upper = _mid - 1;
- 			else if ( (*p) > *_mid )
- 				_lower = _mid + 1;
- 			else {
- 				_trans += (_mid - _keys);
- 				goto _match;
- 			}
- 		}
- 		_keys += _klen;
- 		_trans += _klen;
- 	}
- 
- 	_klen = _lexer_range_lengths[cs];
- 	if ( _klen > 0 ) {
- 		const char *_lower = _keys;
- 		const char *_mid;
- 		const char *_upper = _keys + (_klen<<1) - 2;
- 		while (1) {
- 			if ( _upper < _lower )
- 				break;
- 
- 			_mid = _lower + (((_upper-_lower) >> 1) & ~1);
- 			if ( (*p) < _mid[0] )
- 				_upper = _mid - 2;
- 			else if ( (*p) > _mid[1] )
- 				_lower = _mid + 2;
- 			else {
- 				_trans += ((_mid - _keys)>>1);
- 				goto _match;
- 			}
- 		}
- 		_trans += _klen;
- 	}
- 
- _match:
- 	cs = _lexer_trans_targs[_trans];
- 
- 	if ( _lexer_trans_actions[_trans] == 0 )
- 		goto _again;
- 
- 	_acts = _lexer_actions + _lexer_trans_actions[_trans];
- 	_nacts = (unsigned int) *_acts++;
- 	while ( _nacts-- > 0 )
- 	{
- 		switch ( *_acts++ )
- 		{
- 	case 0:
- #line 83 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/vi.c.rl"
- 	{
- 		MARK(content_start, p);
-     lexer->current_line = lexer->line_number;
-     lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2;
-   }
- 	break;
- 	case 1:
- #line 89 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/vi.c.rl"
- 	{
-     MARK(content_start, p);
-   }
- 	break;
- 	case 2:
- #line 93 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/vi.c.rl"
- 	{
-     lexer->current_line = lexer->line_number;
-     lexer->start_col = p - data - lexer->last_newline;
-   }
- 	break;
- 	case 3:
- #line 98 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/vi.c.rl"
- 	{
-     int len = LEN(content_start, PTR_TO(final_newline));
-     int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end));
- 
-     if (len < 0) len = 0;
-     if (type_len < 0) len = 0;
- 
-     store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line);
-   }
- 	break;
- 	case 4:
- #line 108 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/vi.c.rl"
- 	{ 
-     MARK(docstring_content_type_start, p);
-   }
- 	break;
- 	case 5:
- #line 112 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/vi.c.rl"
- 	{ 
-     MARK(docstring_content_type_end, p);
-   }
- 	break;
- 	case 6:
- #line 116 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/vi.c.rl"
- 	{
-     STORE_KW_END_CON(feature);
-   }
- 	break;
- 	case 7:
- #line 120 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/vi.c.rl"
- 	{
-     STORE_KW_END_CON(background);
-   }
- 	break;
- 	case 8:
- #line 124 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/vi.c.rl"
- 	{
-     STORE_KW_END_CON(scenario);
-   }
- 	break;
- 	case 9:
- #line 128 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/vi.c.rl"
- 	{
-     STORE_KW_END_CON(scenario_outline);
-   }
- 	break;
- 	case 10:
- #line 132 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/vi.c.rl"
- 	{
-     STORE_KW_END_CON(examples);
-   }
- 	break;
- 	case 11:
- #line 136 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/vi.c.rl"
- 	{
-     store_kw_con(listener, "step",
-       PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-       PTR_TO(content_start), LEN(content_start, p), 
-       lexer->current_line);
-   }
- 	break;
- 	case 12:
- #line 143 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/vi.c.rl"
- 	{
-     STORE_ATTR(comment);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 13:
- #line 148 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/vi.c.rl"
- 	{
-     STORE_ATTR(tag);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 14:
- #line 153 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/vi.c.rl"
- 	{
-     lexer->line_number += 1;
-     MARK(final_newline, p);
-   }
- 	break;
- 	case 15:
- #line 158 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/vi.c.rl"
- 	{
-     MARK(last_newline, p + 1);
-   }
- 	break;
- 	case 16:
- #line 162 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/vi.c.rl"
- 	{
-     if (lexer->mark == 0) {
-       MARK(mark, p);
-     }
-   }
- 	break;
- 	case 17:
- #line 168 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/vi.c.rl"
- 	{
-     MARK(keyword_end, p);
-     MARK(keyword_start, PTR_TO(mark));
-     MARK(content_start, p + 1);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 18:
- #line 175 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/vi.c.rl"
- 	{
-     MARK(content_end, p);
-   }
- 	break;
- 	case 19:
- #line 179 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/vi.c.rl"
- 	{
-     p = p - 1;
-     lexer->current_line = lexer->line_number;
-     current_row = rb_ary_new();
-   }
- 	break;
- 	case 20:
- #line 185 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/vi.c.rl"
- 	{
- 		MARK(content_start, p);
-   }
- 	break;
- 	case 21:
- #line 189 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/vi.c.rl"
- 	{
-     VALUE re_pipe, re_newline, re_backslash;
-     VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
-     rb_funcall(con, rb_intern("strip!"), 0);
-     re_pipe      = rb_reg_regcomp(rb_str_new2("\\\\\\|"));
-     re_newline   = rb_reg_regcomp(rb_str_new2("\\\\n"));
-     re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_pipe,      rb_str_new2("|"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_newline,   rb_str_new2("\n"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\"));
- 
-     rb_ary_push(current_row, con);
-   }
- 	break;
- 	case 22:
- #line 203 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/vi.c.rl"
- 	{
-     rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
-   }
- 	break;
- 	case 23:
- #line 207 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/vi.c.rl"
- 	{
-     int line;
-     if (cs < lexer_first_final) {
-       size_t count = 0;
-       VALUE newstr_val;
-       char *newstr;
-       int newstr_count = 0;        
-       size_t len;
-       const char *buff;
-       if (lexer->last_newline != 0) {
-         len = LEN(last_newline, eof);
-         buff = PTR_TO(last_newline);
-       } else {
-         len = strlen(data);
-         buff = data;
-       }
- 
-       // Allocate as a ruby string so that it gets cleaned up by GC
-       newstr_val = rb_str_new(buff, len);
-       newstr = RSTRING_PTR(newstr_val);
- 
- 
-       for (count = 0; count < len; count++) {
-         if(buff[count] == 10) {
-           newstr[newstr_count] = '\0'; // terminate new string at first newline found
-           break;
-         } else {
-           if (buff[count] == '%') {
-             newstr[newstr_count++] = buff[count];
-             newstr[newstr_count] = buff[count];
-           } else {
-             newstr[newstr_count] = buff[count];
-           }
-         }
-         newstr_count++;
-       }
- 
-       line = lexer->line_number;
-       lexer_init(lexer); // Re-initialize so we can scan again with the same lexer
-       raise_lexer_error(newstr, line);
-     } else {
-       rb_funcall(listener, rb_intern("eof"), 0);
-     }
-   }
- 	break;
- #line 1359 "ext/gherkin_lexer_vi/gherkin_lexer_vi.c"
- 		}
- 	}
- 
- _again:
- 	if ( cs == 0 )
- 		goto _out;
- 	if ( ++p != pe )
- 		goto _resume;
- 	_test_eof: {}
- 	if ( p == eof )
- 	{
- 	const char *__acts = _lexer_actions + _lexer_eof_actions[cs];
- 	unsigned int __nacts = (unsigned int) *__acts++;
- 	while ( __nacts-- > 0 ) {
- 		switch ( *__acts++ ) {
- 	case 23:
- #line 207 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/vi.c.rl"
- 	{
-     int line;
-     if (cs < lexer_first_final) {
-       size_t count = 0;
-       VALUE newstr_val;
-       char *newstr;
-       int newstr_count = 0;        
-       size_t len;
-       const char *buff;
-       if (lexer->last_newline != 0) {
-         len = LEN(last_newline, eof);
-         buff = PTR_TO(last_newline);
-       } else {
-         len = strlen(data);
-         buff = data;
-       }
- 
-       // Allocate as a ruby string so that it gets cleaned up by GC
-       newstr_val = rb_str_new(buff, len);
-       newstr = RSTRING_PTR(newstr_val);
- 
- 
-       for (count = 0; count < len; count++) {
-         if(buff[count] == 10) {
-           newstr[newstr_count] = '\0'; // terminate new string at first newline found
-           break;
-         } else {
-           if (buff[count] == '%') {
-             newstr[newstr_count++] = buff[count];
-             newstr[newstr_count] = buff[count];
-           } else {
-             newstr[newstr_count] = buff[count];
-           }
-         }
-         newstr_count++;
-       }
- 
-       line = lexer->line_number;
-       lexer_init(lexer); // Re-initialize so we can scan again with the same lexer
-       raise_lexer_error(newstr, line);
-     } else {
-       rb_funcall(listener, rb_intern("eof"), 0);
-     }
-   }
- 	break;
- #line 1422 "ext/gherkin_lexer_vi/gherkin_lexer_vi.c"
- 		}
- 	}
- 	}
- 
- 	_out: {}
- 	}
- 
- #line 426 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/vi.c.rl"
- 
-     assert(p <= pe && "data overflow after parsing execute");
-     assert(lexer->content_start <= len && "content starts after data end");
-     assert(lexer->mark < len && "mark is after data end");
-     
-     // Reset lexer by re-initializing the whole thing
-     lexer_init(lexer);
- 
-     if (cs == lexer_error) {
-       rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails.");
-     } else {
-       return Qtrue;
-     }
-   }
- }
- 
- void Init_gherkin_lexer_vi()
- {
-   mGherkin = rb_define_module("Gherkin");
-   mGherkinLexer = rb_define_module_under(mGherkin, "Lexer");
-   rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError"));
- 
-   mCLexer = rb_define_module_under(mGherkin, "CLexer");
-   cI18nLexer = rb_define_class_under(mCLexer, "Vi", rb_cObject);
-   rb_define_alloc_func(cI18nLexer, CLexer_alloc);
-   rb_define_method(cI18nLexer, "initialize", CLexer_init, 1);
-   rb_define_method(cI18nLexer, "scan", CLexer_scan, 1);
- }
- 
 -#line 1 "ragel/i18n/vi.c.rl"
 -#include <assert.h>
 -#include <ruby.h>
 -
 -#if defined(_WIN32)
 -#include <stddef.h>
 -#endif
 -
 -#ifdef HAVE_RUBY_RE_H
 -#include <ruby/re.h>
 -#else
 -#include <re.h>
 -#endif
 -
 -#ifdef HAVE_RUBY_ENCODING_H
 -#include <ruby/encoding.h>
 -#define ENCODED_STR_NEW(ptr, len) \
 -    rb_enc_str_new(ptr, len, rb_utf8_encoding())
 -#else
 -#define ENCODED_STR_NEW(ptr, len) \
 -    rb_str_new(ptr, len)
 -#endif
 -
 -#ifndef RSTRING_PTR
 -#define RSTRING_PTR(s) (RSTRING(s)->ptr)
 -#endif
 -
 -#ifndef RSTRING_LEN
 -#define RSTRING_LEN(s) (RSTRING(s)->len)
 -#endif
 -
 -#define DATA_GET(FROM, TYPE, NAME) \
 -  Data_Get_Struct(FROM, TYPE, NAME); \
 -  if (NAME == NULL) { \
 -    rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \
 -  }
 - 
 -typedef struct lexer_state {
 -  int content_len;
 -  int line_number;
 -  int current_line;
 -  int start_col;
 -  size_t mark;
 -  size_t keyword_start;
 -  size_t keyword_end;
 -  size_t next_keyword_start;
 -  size_t content_start;
 -  size_t content_end;
 -  size_t docstring_content_type_start;
 -  size_t docstring_content_type_end;
 -  size_t query_start;
 -  size_t last_newline;
 -  size_t final_newline;
 -} lexer_state;
 -
 -static VALUE mGherkin;
 -static VALUE mGherkinLexer;
 -static VALUE mCLexer;
 -static VALUE cI18nLexer;
 -static VALUE rb_eGherkinLexingError;
 -
 -#define LEN(AT, P) (P - data - lexer->AT)
 -#define MARK(M, P) (lexer->M = (P) - data)
 -#define PTR_TO(P) (data + lexer->P)
 -
 -#define STORE_KW_END_CON(EVENT) \
 -  store_multiline_kw_con(listener, # EVENT, \
 -    PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \
 -    PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \
 -    lexer->current_line, lexer->start_col); \
 -    if (lexer->content_end != 0) { \
 -      p = PTR_TO(content_end - 1); \
 -    } \
 -    lexer->content_end = 0
 -
 -#define STORE_ATTR(ATTR) \
 -    store_attr(listener, # ATTR, \
 -      PTR_TO(content_start), LEN(content_start, p), \
 -      lexer->line_number)
 -
 -
 -#line 254 "ragel/i18n/vi.c.rl"
 -
 -
 -/** Data **/
 -
 -#line 89 "ext/gherkin_lexer_vi/gherkin_lexer_vi.c"
 -static const char _lexer_actions[] = {
 -	0, 1, 0, 1, 1, 1, 2, 1, 
 -	3, 1, 4, 1, 5, 1, 6, 1, 
 -	7, 1, 8, 1, 9, 1, 10, 1, 
 -	11, 1, 12, 1, 13, 1, 16, 1, 
 -	17, 1, 18, 1, 19, 1, 20, 1, 
 -	21, 1, 22, 1, 23, 2, 1, 18, 
 -	2, 4, 5, 2, 13, 0, 2, 14, 
 -	15, 2, 17, 0, 2, 17, 2, 2, 
 -	17, 16, 2, 17, 19, 2, 18, 6, 
 -	2, 18, 7, 2, 18, 8, 2, 18, 
 -	9, 2, 18, 10, 2, 18, 16, 2, 
 -	20, 21, 2, 22, 0, 2, 22, 2, 
 -	2, 22, 16, 2, 22, 19, 3, 3, 
 -	14, 15, 3, 5, 14, 15, 3, 11, 
 -	14, 15, 3, 12, 14, 15, 3, 13, 
 -	14, 15, 3, 14, 15, 18, 3, 17, 
 -	0, 11, 3, 17, 14, 15, 4, 1, 
 -	14, 15, 18, 4, 4, 5, 14, 15, 
 -	4, 17, 0, 14, 15, 5, 17, 0, 
 -	11, 14, 15
 -};
 -
 -static const short _lexer_key_offsets[] = {
 -	0, 0, 18, 19, 20, 37, 38, 39, 
 -	41, 43, 48, 53, 58, 63, 67, 71, 
 -	73, 74, 75, 76, 77, 78, 79, 80, 
 -	81, 82, 83, 84, 85, 86, 87, 88, 
 -	89, 91, 93, 98, 105, 110, 112, 113, 
 -	114, 115, 116, 117, 118, 119, 120, 121, 
 -	122, 123, 124, 125, 139, 141, 143, 145, 
 -	147, 149, 151, 153, 155, 157, 159, 161, 
 -	163, 165, 167, 169, 186, 187, 188, 189, 
 -	190, 191, 192, 193, 194, 195, 196, 197, 
 -	198, 199, 200, 201, 208, 210, 212, 214, 
 -	216, 218, 220, 222, 224, 226, 228, 230, 
 -	232, 233, 234, 235, 236, 237, 238, 239, 
 -	240, 241, 242, 243, 244, 245, 259, 261, 
 -	263, 265, 267, 269, 271, 273, 275, 277, 
 -	279, 281, 283, 285, 287, 289, 292, 294, 
 -	296, 298, 300, 302, 304, 306, 308, 310, 
 -	312, 314, 316, 318, 320, 322, 324, 326, 
 -	329, 331, 333, 335, 337, 339, 341, 343, 
 -	345, 347, 349, 352, 354, 356, 358, 361, 
 -	363, 365, 367, 369, 371, 373, 375, 377, 
 -	379, 381, 383, 385, 387, 389, 391, 393, 
 -	395, 397, 400, 403, 405, 407, 409, 411, 
 -	413, 415, 417, 419, 421, 423, 425, 426, 
 -	427, 428, 430, 431, 432, 433, 434, 435, 
 -	436, 437, 438, 439, 440, 441, 442, 443, 
 -	444, 458, 460, 462, 464, 466, 468, 470, 
 -	472, 474, 476, 478, 480, 482, 484, 486, 
 -	488, 490, 492, 494, 496, 498, 500, 502, 
 -	505, 507, 509, 511, 513, 515, 517, 519, 
 -	521, 523, 525, 527, 529, 531, 533, 535, 
 -	537, 539, 542, 545, 547, 549, 551, 553, 
 -	555, 557, 559, 561, 563, 565, 567, 569, 
 -	571, 573, 575, 577, 579, 581, 583, 585, 
 -	586, 587, 588, 589, 590, 591, 592, 593, 
 -	594, 595, 596, 597, 598, 599, 600, 601, 
 -	602, 604, 606, 607, 608, 609, 610, 611, 
 -	612, 613, 614, 615, 616, 617, 618, 619, 
 -	620, 621, 622, 623, 624, 625, 626, 627, 
 -	638, 640, 642, 644, 646, 648, 650, 652, 
 -	654, 656, 658, 660, 662, 664, 666, 668, 
 -	670, 672, 674, 676, 678, 680, 682, 684, 
 -	686, 688, 690, 692, 694, 696, 698, 700, 
 -	702, 704, 706, 708, 710, 713, 715, 717, 
 -	719, 721, 723, 725, 727, 729, 731, 733, 
 -	735, 737, 739, 741, 744, 746, 748, 750, 
 -	752, 754, 756, 758, 760, 762, 764, 766, 
 -	768, 770, 772, 775, 777, 779, 781, 783, 
 -	785, 787, 788, 789, 790, 791, 795, 801, 
 -	804, 806, 812, 829, 831, 833, 835, 837, 
 -	839, 841, 843, 846, 848, 850, 852, 854, 
 -	856, 858, 860, 862, 864, 866, 868, 871, 
 -	873, 875, 877, 880, 882, 884, 886, 888, 
 -	890, 892, 894, 896, 898, 900, 902, 904, 
 -	906, 908, 910, 912, 914, 916, 919, 922, 
 -	924, 926, 928, 930, 932, 934, 936, 938, 
 -	940, 942, 943, 944, 945, 946
 -};
 -
 -static const char _lexer_trans_keys[] = {
 -	-17, 10, 32, 34, 35, 37, 42, 64, 
 -	66, 67, 68, 75, 78, 84, 86, 124, 
 -	9, 13, -69, -65, 10, 32, 34, 35, 
 -	37, 42, 64, 66, 67, 68, 75, 78, 
 -	84, 86, 124, 9, 13, 34, 34, 10, 
 -	13, 10, 13, 10, 32, 34, 9, 13, 
 -	10, 32, 34, 9, 13, 10, 32, 34, 
 -	9, 13, 10, 32, 34, 9, 13, 10, 
 -	32, 9, 13, 10, 32, 9, 13, 10, 
 -	13, 10, 95, 70, 69, 65, 84, 85, 
 -	82, 69, 95, 69, 78, 68, 95, 37, 
 -	32, 10, 13, 10, 13, 13, 32, 64, 
 -	9, 10, 9, 10, 13, 32, 64, 11, 
 -	12, 10, 32, 64, 9, 13, -31, 105, 
 -	-69, -111, 105, 32, 99, -31, -70, -93, 
 -	110, 104, 58, 10, 10, 10, 32, 35, 
 -	37, 42, 64, 66, 67, 75, 78, 84, 
 -	86, 9, 13, 10, 95, 10, 70, 10, 
 -	69, 10, 65, 10, 84, 10, 85, 10, 
 -	82, 10, 69, 10, 95, 10, 69, 10, 
 -	78, 10, 68, 10, 95, 10, 37, 10, 
 -	32, 10, 32, 34, 35, 37, 42, 64, 
 -	66, 67, 68, 75, 78, 84, 86, 124, 
 -	9, 13, 104, 111, -31, -69, -81, 32, 
 -	108, 105, -31, -69, -121, 117, 58, 10, 
 -	10, 10, 32, 35, 84, 124, 9, 13, 
 -	-61, 10, -83, 10, 10, 110, 10, 104, 
 -	10, 32, 10, 110, -60, 10, -125, 10, 
 -	10, 110, 10, 103, 10, 58, -31, 104, 
 -	-69, -117, 99, 104, 32, 98, -31, -70, 
 -	-93, 110, 58, 10, 10, 10, 32, 35, 
 -	37, 42, 64, 66, 67, 75, 78, 84, 
 -	86, 9, 13, 10, 95, 10, 70, 10, 
 -	69, 10, 65, 10, 84, 10, 85, 10, 
 -	82, 10, 69, 10, 95, 10, 69, 10, 
 -	78, 10, 68, 10, 95, 10, 37, 10, 
 -	32, -31, 10, 105, -69, 10, -111, 10, 
 -	10, 105, 10, 32, 10, 99, -31, 10, 
 -	-70, 10, -93, 10, 10, 110, 10, 104, 
 -	10, 58, -31, 10, -70, 10, -65, 10, 
 -	10, 116, 10, 104, 10, 111, -31, 10, 
 -	104, -69, 10, -117, 10, 10, 99, 10, 
 -	104, 10, 32, 10, 98, -31, 10, -70, 
 -	10, -93, 10, 10, 110, 10, 105, 117, 
 -	10, 110, 10, 103, 10, 32, 10, 107, 
 -	116, -31, 10, -61, 10, -84, 10, 10, 
 -	110, 10, 104, 10, 32, 10, 104, 10, 
 -	117, -31, 10, -69, 10, -111, 10, 10, 
 -	110, 10, 103, 10, 104, -58, 10, -80, 
 -	10, 10, 110, 10, 103, -61, 10, 104, 
 -	-84, -83, 10, 10, 110, 10, 104, 10, 
 -	32, 10, 110, -60, 10, -125, 10, -61, 
 -	10, -84, 10, -61, 10, -96, 10, 105, 
 -	117, 110, 103, 32, 107, 116, -31, -69, 
 -	-117, 99, 104, 32, 98, -31, -70, -93, 
 -	110, 58, 10, 10, 10, 32, 35, 37, 
 -	42, 64, 66, 67, 75, 78, 84, 86, 
 -	9, 13, 10, 95, 10, 70, 10, 69, 
 -	10, 65, 10, 84, 10, 85, 10, 82, 
 -	10, 69, 10, 95, 10, 69, 10, 78, 
 -	10, 68, 10, 95, 10, 37, 10, 32, 
 -	10, 105, -31, 10, -70, 10, -65, 10, 
 -	10, 116, 10, 104, 10, 111, -31, 10, 
 -	104, -69, 10, -117, 10, 10, 99, 10, 
 -	104, 10, 32, 10, 98, -31, 10, -70, 
 -	10, -93, 10, 10, 110, 10, 58, 10, 
 -	105, 10, 104, -58, 10, -80, 10, 10, 
 -	110, 10, 103, -61, 10, 104, -84, -83, 
 -	10, 10, 110, 10, 104, 10, 32, 10, 
 -	104, 10, 117, -31, 10, -69, 10, -111, 
 -	10, 10, 110, 10, 103, 10, 110, 10, 
 -	104, 10, 32, 10, 110, -60, 10, -125, 
 -	10, -61, 10, -84, 10, -61, 10, -96, 
 -	10, -61, -84, 110, 104, 32, 104, 117, 
 -	-31, -69, -111, 110, 103, 104, -58, -80, 
 -	110, 103, -61, 104, -84, -83, 110, 104, 
 -	32, 104, 117, -31, -69, -111, 110, 103, 
 -	110, 104, 32, 110, -60, -125, 110, 103, 
 -	58, 10, 10, 10, 32, 35, 37, 64, 
 -	66, 68, 75, 84, 9, 13, 10, 95, 
 -	10, 70, 10, 69, 10, 65, 10, 84, 
 -	10, 85, 10, 82, 10, 69, 10, 95, 
 -	10, 69, 10, 78, 10, 68, 10, 95, 
 -	10, 37, -31, 10, -69, 10, -111, 10, 
 -	10, 105, 10, 32, 10, 99, -31, 10, 
 -	-70, 10, -93, 10, 10, 110, 10, 104, 
 -	10, 58, -31, 10, -69, 10, -81, 10, 
 -	10, 32, 10, 108, 10, 105, -31, 10, 
 -	-69, 10, -121, 10, 10, 117, -31, 10, 
 -	104, -69, 10, -117, 10, 10, 99, 10, 
 -	104, 10, 32, 10, 98, -31, 10, -70, 
 -	10, -93, 10, 10, 110, 10, 117, 10, 
 -	110, 10, 103, 10, 32, 10, 107, 116, 
 -	-31, 10, -61, 10, -84, 10, 10, 110, 
 -	10, 104, 10, 32, 10, 104, 10, 117, 
 -	-31, 10, -69, 10, -111, 10, 10, 110, 
 -	10, 103, -61, 10, -84, -83, 10, 10, 
 -	110, 10, 104, 10, 32, 10, 110, -60, 
 -	10, -125, 10, -61, -84, -61, -96, 32, 
 -	124, 9, 13, 10, 32, 92, 124, 9, 
 -	13, 10, 92, 124, 10, 92, 10, 32, 
 -	92, 124, 9, 13, 10, 32, 34, 35, 
 -	37, 42, 64, 66, 67, 68, 75, 78, 
 -	84, 86, 124, 9, 13, 10, 105, -31, 
 -	10, -70, 10, -65, 10, 10, 116, 10, 
 -	104, 10, 111, -31, 10, 104, -69, 10, 
 -	-117, 10, 10, 99, 10, 104, 10, 32, 
 -	10, 98, -31, 10, -70, 10, -93, 10, 
 -	10, 110, 10, 58, 10, 105, 117, 10, 
 -	110, 10, 103, 10, 32, 10, 107, 116, 
 -	-31, 10, -61, 10, -84, 10, 10, 110, 
 -	10, 104, 10, 32, 10, 104, 10, 117, 
 -	-31, 10, -69, 10, -111, 10, 10, 110, 
 -	10, 103, 10, 104, -58, 10, -80, 10, 
 -	10, 110, 10, 103, -61, 10, 104, -84, 
 -	-83, 10, 10, 110, 10, 104, 10, 32, 
 -	10, 110, -60, 10, -125, 10, -61, 10, 
 -	-84, 10, -61, 10, -96, 10, -31, -70, 
 -	-65, 116, 0
 -};
 -
 -static const char _lexer_single_lengths[] = {
 -	0, 16, 1, 1, 15, 1, 1, 2, 
 -	2, 3, 3, 3, 3, 2, 2, 2, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	2, 2, 3, 5, 3, 2, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 12, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 15, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 5, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 12, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 3, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 3, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 3, 2, 2, 2, 3, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 3, 3, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 1, 1, 
 -	1, 2, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	12, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 3, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 3, 3, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	2, 2, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 9, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 3, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 3, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 3, 2, 2, 2, 2, 2, 
 -	2, 1, 1, 1, 1, 2, 4, 3, 
 -	2, 4, 15, 2, 2, 2, 2, 2, 
 -	2, 2, 3, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 3, 2, 
 -	2, 2, 3, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 3, 3, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 1, 1, 1, 1, 0
 -};
 -
 -static const char _lexer_range_lengths[] = {
 -	0, 1, 0, 0, 1, 0, 0, 0, 
 -	0, 1, 1, 1, 1, 1, 1, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 1, 1, 1, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 1, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 1, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 1, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 1, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	1, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 1, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 1, 1, 0, 
 -	0, 1, 1, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0
 -};
 -
 -static const short _lexer_index_offsets[] = {
 -	0, 0, 18, 20, 22, 39, 41, 43, 
 -	46, 49, 54, 59, 64, 69, 73, 77, 
 -	80, 82, 84, 86, 88, 90, 92, 94, 
 -	96, 98, 100, 102, 104, 106, 108, 110, 
 -	112, 115, 118, 123, 130, 135, 138, 140, 
 -	142, 144, 146, 148, 150, 152, 154, 156, 
 -	158, 160, 162, 164, 178, 181, 184, 187, 
 -	190, 193, 196, 199, 202, 205, 208, 211, 
 -	214, 217, 220, 223, 240, 242, 244, 246, 
 -	248, 250, 252, 254, 256, 258, 260, 262, 
 -	264, 266, 268, 270, 277, 280, 283, 286, 
 -	289, 292, 295, 298, 301, 304, 307, 310, 
 -	313, 315, 317, 319, 321, 323, 325, 327, 
 -	329, 331, 333, 335, 337, 339, 353, 356, 
 -	359, 362, 365, 368, 371, 374, 377, 380, 
 -	383, 386, 389, 392, 395, 398, 402, 405, 
 -	408, 411, 414, 417, 420, 423, 426, 429, 
 -	432, 435, 438, 441, 444, 447, 450, 453, 
 -	457, 460, 463, 466, 469, 472, 475, 478, 
 -	481, 484, 487, 491, 494, 497, 500, 504, 
 -	507, 510, 513, 516, 519, 522, 525, 528, 
 -	531, 534, 537, 540, 543, 546, 549, 552, 
 -	555, 558, 562, 566, 569, 572, 575, 578, 
 -	581, 584, 587, 590, 593, 596, 599, 601, 
 -	603, 605, 608, 610, 612, 614, 616, 618, 
 -	620, 622, 624, 626, 628, 630, 632, 634, 
 -	636, 650, 653, 656, 659, 662, 665, 668, 
 -	671, 674, 677, 680, 683, 686, 689, 692, 
 -	695, 698, 701, 704, 707, 710, 713, 716, 
 -	720, 723, 726, 729, 732, 735, 738, 741, 
 -	744, 747, 750, 753, 756, 759, 762, 765, 
 -	768, 771, 775, 779, 782, 785, 788, 791, 
 -	794, 797, 800, 803, 806, 809, 812, 815, 
 -	818, 821, 824, 827, 830, 833, 836, 839, 
 -	841, 843, 845, 847, 849, 851, 853, 855, 
 -	857, 859, 861, 863, 865, 867, 869, 871, 
 -	873, 876, 879, 881, 883, 885, 887, 889, 
 -	891, 893, 895, 897, 899, 901, 903, 905, 
 -	907, 909, 911, 913, 915, 917, 919, 921, 
 -	932, 935, 938, 941, 944, 947, 950, 953, 
 -	956, 959, 962, 965, 968, 971, 974, 977, 
 -	980, 983, 986, 989, 992, 995, 998, 1001, 
 -	1004, 1007, 1010, 1013, 1016, 1019, 1022, 1025, 
 -	1028, 1031, 1034, 1037, 1040, 1044, 1047, 1050, 
 -	1053, 1056, 1059, 1062, 1065, 1068, 1071, 1074, 
 -	1077, 1080, 1083, 1086, 1090, 1093, 1096, 1099, 
 -	1102, 1105, 1108, 1111, 1114, 1117, 1120, 1123, 
 -	1126, 1129, 1132, 1136, 1139, 1142, 1145, 1148, 
 -	1151, 1154, 1156, 1158, 1160, 1162, 1166, 1172, 
 -	1176, 1179, 1185, 1202, 1205, 1208, 1211, 1214, 
 -	1217, 1220, 1223, 1227, 1230, 1233, 1236, 1239, 
 -	1242, 1245, 1248, 1251, 1254, 1257, 1260, 1264, 
 -	1267, 1270, 1273, 1277, 1280, 1283, 1286, 1289, 
 -	1292, 1295, 1298, 1301, 1304, 1307, 1310, 1313, 
 -	1316, 1319, 1322, 1325, 1328, 1331, 1335, 1339, 
 -	1342, 1345, 1348, 1351, 1354, 1357, 1360, 1363, 
 -	1366, 1369, 1371, 1373, 1375, 1377
 -};
 -
 -static const short _lexer_trans_targs[] = {
 -	2, 4, 4, 5, 15, 17, 31, 34, 
 -	37, 68, 70, 95, 283, 288, 387, 389, 
 -	4, 0, 3, 0, 4, 0, 4, 4, 
 -	5, 15, 17, 31, 34, 37, 68, 70, 
 -	95, 283, 288, 387, 389, 4, 0, 6, 
 -	0, 7, 0, 9, 8, 8, 9, 8, 
 -	8, 10, 10, 11, 10, 10, 10, 10, 
 -	11, 10, 10, 10, 10, 12, 10, 10, 
 -	10, 10, 13, 10, 10, 4, 14, 14, 
 -	0, 4, 14, 14, 0, 4, 16, 15, 
 -	4, 0, 18, 0, 19, 0, 20, 0, 
 -	21, 0, 22, 0, 23, 0, 24, 0, 
 -	25, 0, 26, 0, 27, 0, 28, 0, 
 -	29, 0, 30, 0, 453, 0, 32, 0, 
 -	4, 16, 33, 4, 16, 33, 0, 0, 
 -	0, 0, 35, 36, 4, 36, 36, 34, 
 -	35, 35, 4, 36, 34, 36, 0, 38, 
 -	449, 0, 39, 0, 40, 0, 41, 0, 
 -	42, 0, 43, 0, 44, 0, 45, 0, 
 -	46, 0, 47, 0, 48, 0, 49, 0, 
 -	51, 50, 51, 50, 51, 51, 4, 52, 
 -	66, 4, 395, 400, 402, 432, 437, 447, 
 -	51, 50, 51, 53, 50, 51, 54, 50, 
 -	51, 55, 50, 51, 56, 50, 51, 57, 
 -	50, 51, 58, 50, 51, 59, 50, 51, 
 -	60, 50, 51, 61, 50, 51, 62, 50, 
 -	51, 63, 50, 51, 64, 50, 51, 65, 
 -	50, 51, 4, 50, 51, 67, 50, 4, 
 -	4, 5, 15, 17, 31, 34, 37, 68, 
 -	70, 95, 283, 288, 387, 389, 4, 0, 
 -	69, 0, 31, 0, 71, 0, 72, 0, 
 -	73, 0, 74, 0, 75, 0, 76, 0, 
 -	77, 0, 78, 0, 79, 0, 80, 0, 
 -	81, 0, 83, 82, 83, 82, 83, 83, 
 -	4, 84, 4, 83, 82, 85, 83, 82, 
 -	86, 83, 82, 83, 87, 82, 83, 88, 
 -	82, 83, 89, 82, 83, 90, 82, 91, 
 -	83, 82, 92, 83, 82, 83, 93, 82, 
 -	83, 94, 82, 83, 67, 82, 96, 189, 
 -	0, 97, 0, 98, 0, 99, 0, 100, 
 -	0, 101, 0, 102, 0, 103, 0, 104, 
 -	0, 105, 0, 106, 0, 107, 0, 109, 
 -	108, 109, 108, 109, 109, 4, 110, 124, 
 -	4, 125, 141, 143, 172, 177, 187, 109, 
 -	108, 109, 111, 108, 109, 112, 108, 109, 
 -	113, 108, 109, 114, 108, 109, 115, 108, 
 -	109, 116, 108, 109, 117, 108, 109, 118, 
 -	108, 109, 119, 108, 109, 120, 108, 109, 
 -	121, 108, 109, 122, 108, 109, 123, 108, 
 -	109, 4, 108, 109, 67, 108, 126, 109, 
 -	137, 108, 127, 109, 108, 128, 109, 108, 
 -	109, 129, 108, 109, 130, 108, 109, 131, 
 -	108, 132, 109, 108, 133, 109, 108, 134, 
 -	109, 108, 109, 135, 108, 109, 136, 108, 
 -	109, 67, 108, 138, 109, 108, 139, 109, 
 -	108, 140, 109, 108, 109, 124, 108, 109, 
 -	142, 108, 109, 124, 108, 144, 109, 154, 
 -	108, 145, 109, 108, 146, 109, 108, 109, 
 -	147, 108, 109, 148, 108, 109, 149, 108, 
 -	109, 150, 108, 151, 109, 108, 152, 109, 
 -	108, 153, 109, 108, 109, 136, 108, 109, 
 -	124, 155, 108, 109, 156, 108, 109, 157, 
 -	108, 109, 158, 108, 109, 159, 160, 108, 
 -	144, 109, 108, 161, 109, 108, 162, 109, 
 -	108, 109, 163, 108, 109, 164, 108, 109, 
 -	165, 108, 109, 166, 108, 109, 167, 108, 
 -	168, 109, 108, 169, 109, 108, 170, 109, 
 -	108, 109, 171, 108, 109, 136, 108, 109, 
 -	173, 108, 174, 109, 108, 175, 109, 108, 
 -	109, 176, 108, 109, 124, 108, 178, 109, 
 -	185, 108, 162, 179, 109, 108, 109, 180, 
 -	108, 109, 181, 108, 109, 182, 108, 109, 
 -	183, 108, 184, 109, 108, 170, 109, 108, 
 -	186, 109, 108, 124, 109, 108, 188, 109, 
 -	108, 124, 109, 108, 31, 190, 0, 191, 
 -	0, 192, 0, 193, 0, 194, 271, 0, 
 -	195, 0, 196, 0, 197, 0, 198, 0, 
 -	199, 0, 200, 0, 201, 0, 202, 0, 
 -	203, 0, 204, 0, 205, 0, 206, 0, 
 -	208, 207, 208, 207, 208, 208, 4, 209, 
 -	223, 4, 224, 229, 231, 244, 249, 269, 
 -	208, 207, 208, 210, 207, 208, 211, 207, 
 -	208, 212, 207, 208, 213, 207, 208, 214, 
 -	207, 208, 215, 207, 208, 216, 207, 208, 
 -	217, 207, 208, 218, 207, 208, 219, 207, 
 -	208, 220, 207, 208, 221, 207, 208, 222, 
 -	207, 208, 4, 207, 208, 67, 207, 208, 
 -	225, 207, 226, 208, 207, 227, 208, 207, 
 -	228, 208, 207, 208, 223, 207, 208, 230, 
 -	207, 208, 223, 207, 232, 208, 243, 207, 
 -	233, 208, 207, 234, 208, 207, 208, 235, 
 -	207, 208, 236, 207, 208, 237, 207, 208, 
 -	238, 207, 239, 208, 207, 240, 208, 207, 
 -	241, 208, 207, 208, 242, 207, 208, 67, 
 -	207, 208, 223, 207, 208, 245, 207, 246, 
 -	208, 207, 247, 208, 207, 208, 248, 207, 
 -	208, 223, 207, 250, 208, 267, 207, 251, 
 -	261, 208, 207, 208, 252, 207, 208, 253, 
 -	207, 208, 254, 207, 208, 255, 207, 208, 
 -	256, 207, 257, 208, 207, 258, 208, 207, 
 -	259, 208, 207, 208, 260, 207, 208, 242, 
 -	207, 208, 262, 207, 208, 263, 207, 208, 
 -	264, 207, 208, 265, 207, 266, 208, 207, 
 -	259, 208, 207, 268, 208, 207, 223, 208, 
 -	207, 270, 208, 207, 223, 208, 207, 272, 
 -	0, 273, 0, 274, 0, 275, 0, 276, 
 -	0, 277, 0, 278, 0, 279, 0, 280, 
 -	0, 281, 0, 282, 0, 205, 0, 284, 
 -	0, 285, 0, 286, 0, 287, 0, 31, 
 -	0, 289, 385, 0, 290, 300, 0, 291, 
 -	0, 292, 0, 293, 0, 294, 0, 295, 
 -	0, 296, 0, 297, 0, 298, 0, 299, 
 -	0, 106, 0, 301, 0, 302, 0, 303, 
 -	0, 304, 0, 305, 0, 306, 0, 307, 
 -	0, 308, 0, 309, 0, 311, 310, 311, 
 -	310, 311, 311, 4, 312, 4, 326, 338, 
 -	348, 377, 311, 310, 311, 313, 310, 311, 
 -	314, 310, 311, 315, 310, 311, 316, 310, 
 -	311, 317, 310, 311, 318, 310, 311, 319, 
 -	310, 311, 320, 310, 311, 321, 310, 311, 
 -	322, 310, 311, 323, 310, 311, 324, 310, 
 -	311, 325, 310, 311, 4, 310, 327, 311, 
 -	310, 328, 311, 310, 329, 311, 310, 311, 
 -	330, 310, 311, 331, 310, 311, 332, 310, 
 -	333, 311, 310, 334, 311, 310, 335, 311, 
 -	310, 311, 336, 310, 311, 337, 310, 311, 
 -	67, 310, 339, 311, 310, 340, 311, 310, 
 -	341, 311, 310, 311, 342, 310, 311, 343, 
 -	310, 311, 344, 310, 345, 311, 310, 346, 
 -	311, 310, 347, 311, 310, 311, 337, 310, 
 -	349, 311, 359, 310, 350, 311, 310, 351, 
 -	311, 310, 311, 352, 310, 311, 353, 310, 
 -	311, 354, 310, 311, 355, 310, 356, 311, 
 -	310, 357, 311, 310, 358, 311, 310, 311, 
 -	337, 310, 311, 360, 310, 311, 361, 310, 
 -	311, 362, 310, 311, 363, 310, 311, 364, 
 -	365, 310, 349, 311, 310, 366, 311, 310, 
 -	367, 311, 310, 311, 368, 310, 311, 369, 
 -	310, 311, 370, 310, 311, 371, 310, 311, 
 -	372, 310, 373, 311, 310, 374, 311, 310, 
 -	375, 311, 310, 311, 376, 310, 311, 337, 
 -	310, 378, 311, 310, 367, 379, 311, 310, 
 -	311, 380, 310, 311, 381, 310, 311, 382, 
 -	310, 311, 383, 310, 384, 311, 310, 375, 
 -	311, 310, 386, 0, 31, 0, 388, 0, 
 -	31, 0, 389, 390, 389, 0, 394, 393, 
 -	392, 390, 393, 391, 0, 392, 390, 391, 
 -	0, 392, 391, 394, 393, 392, 390, 393, 
 -	391, 394, 394, 5, 15, 17, 31, 34, 
 -	37, 68, 70, 95, 283, 288, 387, 389, 
 -	394, 0, 51, 396, 50, 397, 51, 50, 
 -	398, 51, 50, 399, 51, 50, 51, 66, 
 -	50, 51, 401, 50, 51, 66, 50, 403, 
 -	51, 414, 50, 404, 51, 50, 405, 51, 
 -	50, 51, 406, 50, 51, 407, 50, 51, 
 -	408, 50, 51, 409, 50, 410, 51, 50, 
 -	411, 51, 50, 412, 51, 50, 51, 413, 
 -	50, 51, 67, 50, 51, 66, 415, 50, 
 -	51, 416, 50, 51, 417, 50, 51, 418, 
 -	50, 51, 419, 420, 50, 403, 51, 50, 
 -	421, 51, 50, 422, 51, 50, 51, 423, 
 -	50, 51, 424, 50, 51, 425, 50, 51, 
 -	426, 50, 51, 427, 50, 428, 51, 50, 
 -	429, 51, 50, 430, 51, 50, 51, 431, 
 -	50, 51, 413, 50, 51, 433, 50, 434, 
 -	51, 50, 435, 51, 50, 51, 436, 50, 
 -	51, 66, 50, 438, 51, 445, 50, 422, 
 -	439, 51, 50, 51, 440, 50, 51, 441, 
 -	50, 51, 442, 50, 51, 443, 50, 444, 
 -	51, 50, 430, 51, 50, 446, 51, 50, 
 -	66, 51, 50, 448, 51, 50, 66, 51, 
 -	50, 450, 0, 451, 0, 452, 0, 31, 
 -	0, 0, 0
 -};
 -
 -static const unsigned char _lexer_trans_actions[] = {
 -	0, 54, 0, 5, 1, 0, 29, 1, 
 -	29, 29, 29, 29, 29, 29, 29, 35, 
 -	0, 43, 0, 43, 0, 43, 54, 0, 
 -	5, 1, 0, 29, 1, 29, 29, 29, 
 -	29, 29, 29, 29, 35, 0, 43, 0, 
 -	43, 0, 43, 139, 48, 9, 106, 11, 
 -	0, 134, 45, 45, 45, 3, 122, 33, 
 -	33, 33, 0, 122, 33, 33, 33, 0, 
 -	122, 33, 0, 33, 0, 102, 7, 7, 
 -	43, 54, 0, 0, 43, 114, 25, 0, 
 -	54, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	149, 126, 57, 110, 23, 0, 43, 43, 
 -	43, 43, 0, 27, 118, 27, 27, 51, 
 -	27, 0, 54, 0, 1, 0, 43, 0, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	144, 57, 54, 0, 54, 0, 72, 33, 
 -	84, 72, 84, 84, 84, 84, 84, 84, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 15, 0, 54, 15, 0, 130, 
 -	31, 60, 57, 31, 63, 57, 63, 63, 
 -	63, 63, 63, 63, 63, 66, 31, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 144, 57, 54, 0, 54, 0, 
 -	81, 84, 81, 0, 0, 0, 54, 0, 
 -	0, 54, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 0, 
 -	54, 0, 0, 54, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 21, 0, 0, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 144, 
 -	57, 54, 0, 54, 0, 75, 33, 84, 
 -	75, 84, 84, 84, 84, 84, 84, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 17, 0, 54, 17, 0, 0, 54, 
 -	0, 0, 0, 54, 0, 0, 54, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 17, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 0, 54, 0, 
 -	0, 0, 54, 0, 0, 54, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 54, 0, 0, 54, 
 -	0, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 0, 54, 0, 0, 54, 0, 
 -	54, 0, 0, 54, 0, 0, 0, 54, 
 -	0, 0, 0, 0, 54, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	144, 57, 54, 0, 54, 0, 78, 33, 
 -	84, 78, 84, 84, 84, 84, 84, 84, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 19, 0, 54, 19, 0, 54, 
 -	0, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 0, 54, 0, 0, 
 -	0, 54, 0, 0, 54, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 54, 0, 0, 54, 19, 
 -	0, 54, 0, 0, 54, 0, 0, 0, 
 -	54, 0, 0, 54, 0, 54, 0, 0, 
 -	54, 0, 0, 0, 54, 0, 0, 0, 
 -	0, 54, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 0, 43, 0, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 144, 57, 54, 
 -	0, 54, 0, 69, 33, 69, 84, 84, 
 -	84, 84, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 13, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	13, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 54, 0, 0, 
 -	0, 54, 0, 0, 0, 54, 0, 0, 
 -	54, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 54, 0, 0, 54, 0, 
 -	0, 0, 54, 0, 0, 0, 54, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 0, 0, 43, 54, 37, 
 -	37, 87, 37, 37, 43, 0, 39, 0, 
 -	43, 0, 0, 54, 0, 0, 39, 0, 
 -	0, 54, 0, 93, 90, 41, 96, 90, 
 -	96, 96, 96, 96, 96, 96, 96, 99, 
 -	0, 43, 54, 0, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 0, 
 -	54, 0, 0, 0, 54, 0, 0, 54, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 54, 0, 
 -	0, 54, 15, 0, 54, 0, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 0, 
 -	54, 0, 0, 54, 0, 54, 0, 0, 
 -	54, 0, 0, 0, 54, 0, 0, 0, 
 -	0, 54, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 0
 -};
 -
 -static const unsigned char _lexer_eof_actions[] = {
 -	0, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43
 -};
 -
 -static const int lexer_start = 1;
 -static const int lexer_first_final = 453;
 -static const int lexer_error = 0;
 -
 -static const int lexer_en_main = 1;
 -
 -
 -#line 258 "ragel/i18n/vi.c.rl"
 -
 -static VALUE 
 -unindent(VALUE con, int start_col)
 -{
 -  VALUE re;
 -  /* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */
 -  char pat[32]; 
 -  snprintf(pat, 32, "^[\t ]{0,%d}", start_col); 
 -  re = rb_reg_regcomp(rb_str_new2(pat));
 -  rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2(""));
 -
 -  return Qnil;
 -
 -}
 -
 -static void 
 -store_kw_con(VALUE listener, const char * event_name, 
 -             const char * keyword_at, size_t keyword_length, 
 -             const char * at,         size_t length, 
 -             int current_line)
 -{
 -  VALUE con = Qnil, kw = Qnil;
 -  kw = ENCODED_STR_NEW(keyword_at, keyword_length);
 -  con = ENCODED_STR_NEW(at, length);
 -  rb_funcall(con, rb_intern("strip!"), 0);
 -  rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); 
 -}
 -
 -static void
 -store_multiline_kw_con(VALUE listener, const char * event_name,
 -                      const char * keyword_at, size_t keyword_length,
 -                      const char * at,         size_t length,
 -                      int current_line, int start_col)
 -{
 -  VALUE split;
 -  VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil;
 -
 -  kw = ENCODED_STR_NEW(keyword_at, keyword_length);
 -  con = ENCODED_STR_NEW(at, length);
 -
 -  unindent(con, start_col);
 -  
 -  split = rb_str_split(con, "\n");
 -
 -  name = rb_funcall(split, rb_intern("shift"), 0);
 -  desc = rb_ary_join(split, rb_str_new2( "\n" ));
 -
 -  if( name == Qnil ) 
 -  {
 -    name = rb_str_new2("");
 -  }
 -  if( rb_funcall(desc, rb_intern("size"), 0) == 0) 
 -  {
 -    desc = rb_str_new2("");
 -  }
 -  rb_funcall(name, rb_intern("strip!"), 0);
 -  rb_funcall(desc, rb_intern("rstrip!"), 0);
 -  rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); 
 -}
 -
 -static void 
 -store_attr(VALUE listener, const char * attr_type,
 -           const char * at, size_t length, 
 -           int line)
 -{
 -  VALUE val = ENCODED_STR_NEW(at, length);
 -  rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line));
 -}
 -static void 
 -store_docstring_content(VALUE listener, 
 -          int start_col, 
 -          const char *type_at, size_t type_length,
 -          const char *at, size_t length, 
 -          int current_line)
 -{
 -  VALUE re2;
 -  VALUE unescape_escaped_quotes;
 -  VALUE con = ENCODED_STR_NEW(at, length);
 -  VALUE con_type = ENCODED_STR_NEW(type_at, type_length);
 -
 -  unindent(con, start_col);
 -
 -  re2 = rb_reg_regcomp(rb_str_new2("\r\\Z"));
 -  unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\""));
 -  rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2(""));
 -  rb_funcall(con_type, rb_intern("strip!"), 0);
 -  rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\""));
 -  rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line));
 -}
 -static void 
 -raise_lexer_error(const char * at, int line)
 -{ 
 -  rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at);
 -}
 -
 -static void lexer_init(lexer_state *lexer) {
 -  lexer->content_start = 0;
 -  lexer->content_end = 0;
 -  lexer->content_len = 0;
 -  lexer->docstring_content_type_start = 0;
 -  lexer->docstring_content_type_end = 0;
 -  lexer->mark = 0;
 -  lexer->keyword_start = 0;
 -  lexer->keyword_end = 0;
 -  lexer->next_keyword_start = 0;
 -  lexer->line_number = 1;
 -  lexer->last_newline = 0;
 -  lexer->final_newline = 0;
 -  lexer->start_col = 0;
 -}
 -
 -static VALUE CLexer_alloc(VALUE klass)
 -{
 -  VALUE obj;
 -  lexer_state *lxr = ALLOC(lexer_state);
 -  lexer_init(lxr);
 -
 -  obj = Data_Wrap_Struct(klass, NULL, -1, lxr);
 -
 -  return obj;
 -}
 -
 -static VALUE CLexer_init(VALUE self, VALUE listener)
 -{
 -  lexer_state *lxr; 
 -  rb_iv_set(self, "@listener", listener);
 -  
 -  lxr = NULL;
 -  DATA_GET(self, lexer_state, lxr);
 -  lexer_init(lxr);
 -  
 -  return self;
 -}
 -
 -static VALUE CLexer_scan(VALUE self, VALUE input)
 -{
 -  VALUE input_copy;
 -  char *data;
 -  size_t len;
 -  VALUE listener = rb_iv_get(self, "@listener");
 -
 -  lexer_state *lexer;
 -  lexer = NULL;
 -  DATA_GET(self, lexer_state, lexer);
 -
 -  input_copy = rb_str_dup(input);
 -
 -  rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%"));
 -  data = RSTRING_PTR(input_copy);
 -  len = RSTRING_LEN(input_copy);
 -  
 -  if (len == 0) { 
 -    rb_raise(rb_eGherkinLexingError, "No content to lex.");
 -  } else {
 -
 -    const char *p, *pe, *eof;
 -    int cs = 0;
 -    
 -    VALUE current_row = Qnil;
 -
 -    p = data;
 -    pe = data + len;
 -    eof = pe;
 -    
 -    assert(*pe == '\0' && "pointer does not end on NULL");
 -    
 -    
 -#line 1062 "ext/gherkin_lexer_vi/gherkin_lexer_vi.c"
 -	{
 -	cs = lexer_start;
 -	}
 -
 -#line 425 "ragel/i18n/vi.c.rl"
 -    
 -#line 1069 "ext/gherkin_lexer_vi/gherkin_lexer_vi.c"
 -	{
 -	int _klen;
 -	unsigned int _trans;
 -	const char *_acts;
 -	unsigned int _nacts;
 -	const char *_keys;
 -
 -	if ( p == pe )
 -		goto _test_eof;
 -	if ( cs == 0 )
 -		goto _out;
 -_resume:
 -	_keys = _lexer_trans_keys + _lexer_key_offsets[cs];
 -	_trans = _lexer_index_offsets[cs];
 -
 -	_klen = _lexer_single_lengths[cs];
 -	if ( _klen > 0 ) {
 -		const char *_lower = _keys;
 -		const char *_mid;
 -		const char *_upper = _keys + _klen - 1;
 -		while (1) {
 -			if ( _upper < _lower )
 -				break;
 -
 -			_mid = _lower + ((_upper-_lower) >> 1);
 -			if ( (*p) < *_mid )
 -				_upper = _mid - 1;
 -			else if ( (*p) > *_mid )
 -				_lower = _mid + 1;
 -			else {
 -				_trans += (unsigned int)(_mid - _keys);
 -				goto _match;
 -			}
 -		}
 -		_keys += _klen;
 -		_trans += _klen;
 -	}
 -
 -	_klen = _lexer_range_lengths[cs];
 -	if ( _klen > 0 ) {
 -		const char *_lower = _keys;
 -		const char *_mid;
 -		const char *_upper = _keys + (_klen<<1) - 2;
 -		while (1) {
 -			if ( _upper < _lower )
 -				break;
 -
 -			_mid = _lower + (((_upper-_lower) >> 1) & ~1);
 -			if ( (*p) < _mid[0] )
 -				_upper = _mid - 2;
 -			else if ( (*p) > _mid[1] )
 -				_lower = _mid + 2;
 -			else {
 -				_trans += (unsigned int)((_mid - _keys)>>1);
 -				goto _match;
 -			}
 -		}
 -		_trans += _klen;
 -	}
 -
 -_match:
 -	cs = _lexer_trans_targs[_trans];
 -
 -	if ( _lexer_trans_actions[_trans] == 0 )
 -		goto _again;
 -
 -	_acts = _lexer_actions + _lexer_trans_actions[_trans];
 -	_nacts = (unsigned int) *_acts++;
 -	while ( _nacts-- > 0 )
 -	{
 -		switch ( *_acts++ )
 -		{
 -	case 0:
 -#line 83 "ragel/i18n/vi.c.rl"
 -	{
 -		MARK(content_start, p);
 -    lexer->current_line = lexer->line_number;
 -    lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2;
 -  }
 -	break;
 -	case 1:
 -#line 89 "ragel/i18n/vi.c.rl"
 -	{
 -    MARK(content_start, p);
 -  }
 -	break;
 -	case 2:
 -#line 93 "ragel/i18n/vi.c.rl"
 -	{
 -    lexer->current_line = lexer->line_number;
 -    lexer->start_col = p - data - lexer->last_newline;
 -  }
 -	break;
 -	case 3:
 -#line 98 "ragel/i18n/vi.c.rl"
 -	{
 -    int len = LEN(content_start, PTR_TO(final_newline));
 -    int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end));
 -
 -    if (len < 0) len = 0;
 -    if (type_len < 0) len = 0;
 -
 -    store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line);
 -  }
 -	break;
 -	case 4:
 -#line 108 "ragel/i18n/vi.c.rl"
 -	{ 
 -    MARK(docstring_content_type_start, p);
 -  }
 -	break;
 -	case 5:
 -#line 112 "ragel/i18n/vi.c.rl"
 -	{ 
 -    MARK(docstring_content_type_end, p);
 -  }
 -	break;
 -	case 6:
 -#line 116 "ragel/i18n/vi.c.rl"
 -	{
 -    STORE_KW_END_CON(feature);
 -  }
 -	break;
 -	case 7:
 -#line 120 "ragel/i18n/vi.c.rl"
 -	{
 -    STORE_KW_END_CON(background);
 -  }
 -	break;
 -	case 8:
 -#line 124 "ragel/i18n/vi.c.rl"
 -	{
 -    STORE_KW_END_CON(scenario);
 -  }
 -	break;
 -	case 9:
 -#line 128 "ragel/i18n/vi.c.rl"
 -	{
 -    STORE_KW_END_CON(scenario_outline);
 -  }
 -	break;
 -	case 10:
 -#line 132 "ragel/i18n/vi.c.rl"
 -	{
 -    STORE_KW_END_CON(examples);
 -  }
 -	break;
 -	case 11:
 -#line 136 "ragel/i18n/vi.c.rl"
 -	{
 -    store_kw_con(listener, "step",
 -      PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
 -      PTR_TO(content_start), LEN(content_start, p), 
 -      lexer->current_line);
 -  }
 -	break;
 -	case 12:
 -#line 143 "ragel/i18n/vi.c.rl"
 -	{
 -    STORE_ATTR(comment);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 13:
 -#line 148 "ragel/i18n/vi.c.rl"
 -	{
 -    STORE_ATTR(tag);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 14:
 -#line 153 "ragel/i18n/vi.c.rl"
 -	{
 -    lexer->line_number += 1;
 -    MARK(final_newline, p);
 -  }
 -	break;
 -	case 15:
 -#line 158 "ragel/i18n/vi.c.rl"
 -	{
 -    MARK(last_newline, p + 1);
 -  }
 -	break;
 -	case 16:
 -#line 162 "ragel/i18n/vi.c.rl"
 -	{
 -    if (lexer->mark == 0) {
 -      MARK(mark, p);
 -    }
 -  }
 -	break;
 -	case 17:
 -#line 168 "ragel/i18n/vi.c.rl"
 -	{
 -    MARK(keyword_end, p);
 -    MARK(keyword_start, PTR_TO(mark));
 -    MARK(content_start, p + 1);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 18:
 -#line 175 "ragel/i18n/vi.c.rl"
 -	{
 -    MARK(content_end, p);
 -  }
 -	break;
 -	case 19:
 -#line 179 "ragel/i18n/vi.c.rl"
 -	{
 -    p = p - 1;
 -    lexer->current_line = lexer->line_number;
 -    current_row = rb_ary_new();
 -  }
 -	break;
 -	case 20:
 -#line 185 "ragel/i18n/vi.c.rl"
 -	{
 -		MARK(content_start, p);
 -  }
 -	break;
 -	case 21:
 -#line 189 "ragel/i18n/vi.c.rl"
 -	{
 -    VALUE re_pipe, re_newline, re_backslash;
 -    VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
 -    rb_funcall(con, rb_intern("strip!"), 0);
 -    re_pipe      = rb_reg_regcomp(rb_str_new2("\\\\\\|"));
 -    re_newline   = rb_reg_regcomp(rb_str_new2("\\\\n"));
 -    re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_pipe,      rb_str_new2("|"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_newline,   rb_str_new2("\n"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\"));
 -
 -    rb_ary_push(current_row, con);
 -  }
 -	break;
 -	case 22:
 -#line 203 "ragel/i18n/vi.c.rl"
 -	{
 -    rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
 -  }
 -	break;
 -	case 23:
 -#line 207 "ragel/i18n/vi.c.rl"
 -	{
 -    int line;
 -    if (cs < lexer_first_final) {
 -      size_t count = 0;
 -      VALUE newstr_val;
 -      char *newstr;
 -      int newstr_count = 0;        
 -      size_t len;
 -      const char *buff;
 -      if (lexer->last_newline != 0) {
 -        len = LEN(last_newline, eof);
 -        buff = PTR_TO(last_newline);
 -      } else {
 -        len = strlen(data);
 -        buff = data;
 -      }
 -
 -      /* Allocate as a ruby string so that it gets cleaned up by GC */
 -      newstr_val = rb_str_new(buff, len);
 -      newstr = RSTRING_PTR(newstr_val);
 -
 -
 -      for (count = 0; count < len; count++) {
 -        if(buff[count] == 10) {
 -          newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
 -          break;
 -        } else {
 -          if (buff[count] == '%') {
 -            newstr[newstr_count++] = buff[count];
 -            newstr[newstr_count] = buff[count];
 -          } else {
 -            newstr[newstr_count] = buff[count];
 -          }
 -        }
 -        newstr_count++;
 -      }
 -
 -      line = lexer->line_number;
 -      lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
 -      raise_lexer_error(newstr, line);
 -    } else {
 -      rb_funcall(listener, rb_intern("eof"), 0);
 -    }
 -  }
 -	break;
 -#line 1359 "ext/gherkin_lexer_vi/gherkin_lexer_vi.c"
 -		}
 -	}
 -
 -_again:
 -	if ( cs == 0 )
 -		goto _out;
 -	if ( ++p != pe )
 -		goto _resume;
 -	_test_eof: {}
 -	if ( p == eof )
 -	{
 -	const char *__acts = _lexer_actions + _lexer_eof_actions[cs];
 -	unsigned int __nacts = (unsigned int) *__acts++;
 -	while ( __nacts-- > 0 ) {
 -		switch ( *__acts++ ) {
 -	case 23:
 -#line 207 "ragel/i18n/vi.c.rl"
 -	{
 -    int line;
 -    if (cs < lexer_first_final) {
 -      size_t count = 0;
 -      VALUE newstr_val;
 -      char *newstr;
 -      int newstr_count = 0;        
 -      size_t len;
 -      const char *buff;
 -      if (lexer->last_newline != 0) {
 -        len = LEN(last_newline, eof);
 -        buff = PTR_TO(last_newline);
 -      } else {
 -        len = strlen(data);
 -        buff = data;
 -      }
 -
 -      /* Allocate as a ruby string so that it gets cleaned up by GC */
 -      newstr_val = rb_str_new(buff, len);
 -      newstr = RSTRING_PTR(newstr_val);
 -
 -
 -      for (count = 0; count < len; count++) {
 -        if(buff[count] == 10) {
 -          newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
 -          break;
 -        } else {
 -          if (buff[count] == '%') {
 -            newstr[newstr_count++] = buff[count];
 -            newstr[newstr_count] = buff[count];
 -          } else {
 -            newstr[newstr_count] = buff[count];
 -          }
 -        }
 -        newstr_count++;
 -      }
 -
 -      line = lexer->line_number;
 -      lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
 -      raise_lexer_error(newstr, line);
 -    } else {
 -      rb_funcall(listener, rb_intern("eof"), 0);
 -    }
 -  }
 -	break;
 -#line 1422 "ext/gherkin_lexer_vi/gherkin_lexer_vi.c"
 -		}
 -	}
 -	}
 -
 -	_out: {}
 -	}
 -
 -#line 426 "ragel/i18n/vi.c.rl"
 -
 -    assert(p <= pe && "data overflow after parsing execute");
 -    assert(lexer->content_start <= len && "content starts after data end");
 -    assert(lexer->mark < len && "mark is after data end");
 -    
 -    /* Reset lexer by re-initializing the whole thing */
 -    lexer_init(lexer);
 -
 -    if (cs == lexer_error) {
 -      rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails.");
 -    } else {
 -      return Qtrue;
 -    }
 -  }
 -}
 -
 -void Init_gherkin_lexer_vi()
 -{
 -  mGherkin = rb_define_module("Gherkin");
 -  mGherkinLexer = rb_define_module_under(mGherkin, "Lexer");
 -  rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError"));
 -
 -  mCLexer = rb_define_module_under(mGherkin, "CLexer");
 -  cI18nLexer = rb_define_class_under(mCLexer, "Vi", rb_cObject);
 -  rb_define_alloc_func(cI18nLexer, CLexer_alloc);
 -  rb_define_method(cI18nLexer, "initialize", CLexer_init, 1);
 -  rb_define_method(cI18nLexer, "scan", CLexer_scan, 1);
 -}
 -
diff --cc ext/gherkin_lexer_zh_cn/extconf.rb
index ac549a4,ac549a4..0000000
deleted file mode 100644,100644
--- a/ext/gherkin_lexer_zh_cn/extconf.rb
+++ /dev/null
@@@ -1,6 -1,6 +1,0 @@@
--require 'mkmf'
--CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags']
--$CFLAGS << ' -O0 -Wall' if CONFIG['CC'] =~ /gcc|clang/
--dir_config("gherkin_lexer_zh_cn")
--have_library("c", "main")
--create_makefile("gherkin_lexer_zh_cn")
diff --cc ext/gherkin_lexer_zh_cn/gherkin_lexer_zh_cn.c
index 64ec34c,ffbf884..0000000
deleted file mode 100644,100644
--- a/ext/gherkin_lexer_zh_cn/gherkin_lexer_zh_cn.c
+++ /dev/null
@@@ -1,1314 -1,1314 +1,0 @@@
--
- #line 1 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
- #include <assert.h>
- #include <ruby.h>
- 
- #if defined(_WIN32)
- #include <stddef.h>
- #endif
- 
- #ifdef HAVE_RUBY_RE_H
- #include <ruby/re.h>
- #else
- #include <re.h>
- #endif
- 
- #ifdef HAVE_RUBY_ENCODING_H
- #include <ruby/encoding.h>
- #define ENCODED_STR_NEW(ptr, len) \
-     rb_enc_str_new(ptr, len, rb_utf8_encoding())
- #else
- #define ENCODED_STR_NEW(ptr, len) \
-     rb_str_new(ptr, len)
- #endif
- 
- #ifndef RSTRING_PTR
- #define RSTRING_PTR(s) (RSTRING(s)->ptr)
- #endif
- 
- #ifndef RSTRING_LEN
- #define RSTRING_LEN(s) (RSTRING(s)->len)
- #endif
- 
- #define DATA_GET(FROM, TYPE, NAME) \
-   Data_Get_Struct(FROM, TYPE, NAME); \
-   if (NAME == NULL) { \
-     rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \
-   }
-  
- typedef struct lexer_state {
-   int content_len;
-   int line_number;
-   int current_line;
-   int start_col;
-   size_t mark;
-   size_t keyword_start;
-   size_t keyword_end;
-   size_t next_keyword_start;
-   size_t content_start;
-   size_t content_end;
-   size_t docstring_content_type_start;
-   size_t docstring_content_type_end;
-   size_t query_start;
-   size_t last_newline;
-   size_t final_newline;
- } lexer_state;
- 
- static VALUE mGherkin;
- static VALUE mGherkinLexer;
- static VALUE mCLexer;
- static VALUE cI18nLexer;
- static VALUE rb_eGherkinLexingError;
- 
- #define LEN(AT, P) (P - data - lexer->AT)
- #define MARK(M, P) (lexer->M = (P) - data)
- #define PTR_TO(P) (data + lexer->P)
- 
- #define STORE_KW_END_CON(EVENT) \
-   store_multiline_kw_con(listener, # EVENT, \
-     PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \
-     PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \
-     lexer->current_line, lexer->start_col); \
-     if (lexer->content_end != 0) { \
-       p = PTR_TO(content_end - 1); \
-     } \
-     lexer->content_end = 0
- 
- #define STORE_ATTR(ATTR) \
-     store_attr(listener, # ATTR, \
-       PTR_TO(content_start), LEN(content_start, p), \
-       lexer->line_number)
- 
- 
- #line 254 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
- 
- 
- /** Data **/
- 
- #line 89 "ext/gherkin_lexer_zh_cn/gherkin_lexer_zh_cn.c"
- static const char _lexer_actions[] = {
- 	0, 1, 0, 1, 1, 1, 2, 1, 
- 	3, 1, 4, 1, 5, 1, 6, 1, 
- 	7, 1, 8, 1, 9, 1, 10, 1, 
- 	11, 1, 12, 1, 13, 1, 16, 1, 
- 	17, 1, 18, 1, 19, 1, 20, 1, 
- 	21, 1, 22, 1, 23, 2, 1, 18, 
- 	2, 4, 5, 2, 13, 0, 2, 14, 
- 	15, 2, 17, 0, 2, 17, 2, 2, 
- 	17, 16, 2, 17, 19, 2, 18, 6, 
- 	2, 18, 7, 2, 18, 8, 2, 18, 
- 	9, 2, 18, 10, 2, 18, 16, 2, 
- 	20, 21, 2, 22, 0, 2, 22, 2, 
- 	2, 22, 16, 2, 22, 19, 3, 3, 
- 	14, 15, 3, 5, 14, 15, 3, 11, 
- 	14, 15, 3, 12, 14, 15, 3, 13, 
- 	14, 15, 3, 14, 15, 18, 3, 17, 
- 	0, 11, 3, 17, 14, 15, 4, 1, 
- 	14, 15, 18, 4, 4, 5, 14, 15, 
- 	4, 17, 0, 14, 15, 5, 17, 0, 
- 	11, 14, 15
- };
- 
- static const short _lexer_key_offsets[] = {
- 	0, 0, 15, 17, 18, 19, 20, 21, 
- 	23, 25, 39, 46, 47, 49, 51, 52, 
- 	53, 54, 55, 56, 57, 58, 59, 61, 
- 	62, 63, 64, 65, 66, 67, 68, 69, 
- 	81, 83, 85, 87, 89, 91, 105, 107, 
- 	108, 109, 110, 111, 112, 113, 114, 115, 
- 	116, 117, 118, 130, 132, 134, 136, 138, 
- 	140, 148, 150, 153, 156, 158, 160, 162, 
- 	164, 166, 168, 170, 172, 175, 177, 179, 
- 	181, 183, 185, 187, 189, 191, 193, 195, 
- 	197, 199, 201, 203, 205, 207, 209, 211, 
- 	213, 215, 217, 219, 221, 223, 225, 227, 
- 	229, 231, 233, 235, 237, 239, 241, 243, 
- 	245, 247, 249, 251, 253, 255, 257, 259, 
- 	261, 263, 265, 266, 267, 268, 269, 270, 
- 	271, 272, 274, 276, 281, 286, 291, 296, 
- 	300, 304, 306, 307, 308, 309, 310, 311, 
- 	312, 313, 314, 315, 316, 317, 318, 319, 
- 	320, 321, 322, 327, 334, 339, 343, 349, 
- 	352, 354, 360, 374, 382, 384, 387, 390, 
- 	392, 394, 396, 398, 400, 402, 404, 406, 
- 	408, 410, 412, 414, 416, 418, 420, 422, 
- 	424, 426, 428, 430, 432, 434, 436, 438, 
- 	440, 442, 444, 446, 448, 450, 452, 454, 
- 	456, 458, 460, 462, 464, 466, 468, 470, 
- 	472, 474, 476, 478, 480, 482, 484, 486, 
- 	487, 488, 500, 502, 504, 506, 508, 510, 
- 	518, 520, 523, 526, 528, 530, 532, 534, 
- 	536, 538, 540, 542, 545, 547, 549, 551, 
- 	553, 555, 557, 559, 561, 563, 565, 567, 
- 	569, 571, 573, 575, 577, 579, 581, 583, 
- 	585, 587, 589, 591, 594, 596, 598, 600, 
- 	602, 604, 606, 608, 610, 612, 614, 616, 
- 	618, 620, 622, 624, 626, 628, 630, 632, 
- 	634, 636, 638, 640, 642, 644, 645, 646, 
- 	647, 648, 649, 650, 651, 661, 663, 665, 
- 	667, 669, 671, 673, 677, 679, 681, 683, 
- 	685, 688, 690, 692, 694, 696, 698, 700, 
- 	702, 704, 706, 708, 710, 712, 714, 716, 
- 	718, 720, 722, 724, 726, 728, 730, 732, 
- 	734, 736, 738, 740, 742, 744, 746, 748, 
- 	750, 752, 753, 754, 755, 756, 757, 758, 
- 	759, 760, 761, 762, 763, 764, 765, 766, 
- 	767, 768, 769, 776, 778, 780, 782, 784, 
- 	786, 788, 789, 790
- };
- 
- static const char _lexer_trans_keys[] = {
- 	-28, -27, -24, -23, -17, 10, 32, 34, 
- 	35, 37, 42, 64, 124, 9, 13, -67, 
- 	-66, -122, -26, -104, -81, 10, 13, 10, 
- 	13, -28, -27, -24, -23, 10, 32, 34, 
- 	35, 37, 42, 64, 124, 9, 13, -127, 
- 	-119, -118, -112, -100, -71, -67, -121, -27, 
- 	-24, -90, -82, -126, -102, -82, -66, -89, 
- 	-26, -100, -84, -27, 58, -92, -89, -25, 
- 	-70, -78, 58, 10, 10, -28, -27, -24, 
- 	-23, 10, 32, 35, 37, 42, 64, 9, 
- 	13, -67, 10, -122, 10, -26, 10, -104, 
- 	10, -81, 10, -28, -27, -24, -23, 10, 
- 	32, 34, 35, 37, 42, 64, 124, 9, 
- 	13, -128, -125, -116, -28, -72, -108, -116, 
- 	-26, -103, -81, 58, 10, 10, -28, -27, 
- 	-24, -23, 10, 32, 35, 37, 42, 64, 
- 	9, 13, -67, 10, -122, 10, -26, 10, 
- 	-104, 10, -81, 10, -127, -119, -118, -112, 
- 	-100, -71, -67, 10, -121, 10, -27, -24, 
- 	10, -90, -82, 10, -126, 10, -102, 10, 
- 	-82, 10, -66, 10, -89, 10, -26, 10, 
- 	-100, 10, -84, 10, -27, 10, 58, -92, 
- 	10, -89, 10, -25, 10, -70, 10, -78, 
- 	10, 10, 58, -97, 10, -24, 10, -125, 
- 	10, -67, 10, -116, 10, -26, 10, -105, 
- 	10, -74, 10, -70, 10, -26, 10, -103, 
- 	10, -81, 10, -74, 10, -28, 10, -72, 
- 	10, -108, 10, -109, 10, -128, 10, -116, 
- 	10, -126, 10, -93, 10, -28, 10, -71, 
- 	10, -120, 10, 10, 95, 10, 70, 10, 
- 	69, 10, 65, 10, 84, 10, 85, 10, 
- 	82, 10, 69, 10, 95, 10, 69, 10, 
- 	78, 10, 68, 10, 95, 10, 37, 10, 
- 	32, -126, -93, -28, -71, -120, 34, 34, 
- 	10, 13, 10, 13, 10, 32, 34, 9, 
- 	13, 10, 32, 34, 9, 13, 10, 32, 
- 	34, 9, 13, 10, 32, 34, 9, 13, 
- 	10, 32, 9, 13, 10, 32, 9, 13, 
- 	10, 13, 10, 95, 70, 69, 65, 84, 
- 	85, 82, 69, 95, 69, 78, 68, 95, 
- 	37, 32, 13, 32, 64, 9, 10, 9, 
- 	10, 13, 32, 64, 11, 12, 10, 32, 
- 	64, 9, 13, 32, 124, 9, 13, 10, 
- 	32, 92, 124, 9, 13, 10, 92, 124, 
- 	10, 92, 10, 32, 92, 124, 9, 13, 
- 	-28, -27, -24, -23, 10, 32, 34, 35, 
- 	37, 42, 64, 124, 9, 13, -127, -119, 
- 	-118, -112, -100, -71, -67, 10, -121, 10, 
- 	-27, -24, 10, -90, -82, 10, -126, 10, 
- 	-102, 10, -82, 10, -66, 10, -89, 10, 
- 	-26, 10, -100, 10, -84, 10, 10, 58, 
- 	-97, 10, -24, 10, -125, 10, -67, 10, 
- 	-116, 10, -26, 10, -105, 10, -74, 10, 
- 	-70, 10, -26, 10, -103, 10, -81, 10, 
- 	-74, 10, -28, 10, -72, 10, -108, 10, 
- 	-109, 10, -128, 10, -116, 10, -126, 10, 
- 	-93, 10, -28, 10, -71, 10, -120, 10, 
- 	10, 95, 10, 70, 10, 69, 10, 65, 
- 	10, 84, 10, 85, 10, 82, 10, 69, 
- 	10, 95, 10, 69, 10, 78, 10, 68, 
- 	10, 95, 10, 37, 10, 32, 10, 10, 
- 	-28, -27, -24, -23, 10, 32, 35, 37, 
- 	42, 64, 9, 13, -67, 10, -122, 10, 
- 	-26, 10, -104, 10, -81, 10, -127, -119, 
- 	-118, -112, -100, -71, -67, 10, -121, 10, 
- 	-27, -24, 10, -90, -82, 10, -126, 10, 
- 	-102, 10, -82, 10, -66, 10, -89, 10, 
- 	-26, 10, -100, 10, -84, 10, -27, 10, 
- 	58, -92, 10, -89, 10, -25, 10, -70, 
- 	10, -78, 10, 10, 58, -97, 10, -24, 
- 	10, -125, 10, -67, 10, -116, 10, -26, 
- 	10, -105, 10, -74, 10, -70, 10, -26, 
- 	10, -103, 10, -81, 10, -74, 10, -28, 
- 	10, -72, 10, -108, 10, -109, 10, -128, 
- 	-125, 10, -116, 10, -116, 10, -26, 10, 
- 	-103, 10, -81, 10, -126, 10, -93, 10, 
- 	-28, 10, -71, 10, -120, 10, 10, 95, 
- 	10, 70, 10, 69, 10, 65, 10, 84, 
- 	10, 85, 10, 82, 10, 69, 10, 95, 
- 	10, 69, 10, 78, 10, 68, 10, 95, 
- 	10, 37, 10, 32, -97, -24, -125, -67, 
- 	58, 10, 10, -28, -27, -24, 10, 32, 
- 	35, 37, 64, 9, 13, -66, 10, -117, 
- 	10, -27, 10, -83, 10, -112, 10, 10, 
- 	58, -119, -118, -100, 10, -89, 10, -26, 
- 	10, -100, 10, -84, 10, -27, 10, 58, 
- 	-92, 10, -89, 10, -25, 10, -70, 10, 
- 	-78, 10, -97, 10, -24, 10, -125, 10, 
- 	-67, 10, -70, 10, -26, 10, -103, 10, 
- 	-81, 10, -125, 10, -116, 10, -26, 10, 
- 	-103, 10, -81, 10, 10, 95, 10, 70, 
- 	10, 69, 10, 65, 10, 84, 10, 85, 
- 	10, 82, 10, 69, 10, 95, 10, 69, 
- 	10, 78, 10, 68, 10, 95, 10, 37, 
- 	-116, -26, -105, -74, -70, -26, -103, -81, 
- 	-74, -109, -117, -27, -83, -112, 58, 10, 
- 	10, -27, 10, 32, 35, 124, 9, 13, 
- 	-118, 10, -97, 10, -24, 10, -125, 10, 
- 	-67, 10, 10, 58, -69, -65, 0
- };
- 
- static const char _lexer_single_lengths[] = {
- 	0, 13, 2, 1, 1, 1, 1, 2, 
- 	2, 12, 7, 1, 2, 2, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 2, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 10, 
- 	2, 2, 2, 2, 2, 12, 2, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 10, 2, 2, 2, 2, 2, 
- 	8, 2, 3, 3, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 3, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 1, 1, 1, 1, 1, 1, 
- 	1, 2, 2, 3, 3, 3, 3, 2, 
- 	2, 2, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 3, 5, 3, 2, 4, 3, 
- 	2, 4, 12, 8, 2, 3, 3, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 1, 
- 	1, 10, 2, 2, 2, 2, 2, 8, 
- 	2, 3, 3, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 3, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 3, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 1, 1, 1, 
- 	1, 1, 1, 1, 8, 2, 2, 2, 
- 	2, 2, 2, 4, 2, 2, 2, 2, 
- 	3, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 5, 2, 2, 2, 2, 2, 
- 	2, 1, 1, 0
- };
- 
- static const char _lexer_range_lengths[] = {
- 	0, 1, 0, 0, 0, 0, 0, 0, 
- 	0, 1, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 1, 
- 	0, 0, 0, 0, 0, 1, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 1, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 1, 1, 1, 1, 1, 
- 	1, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 1, 1, 1, 1, 1, 0, 
- 	0, 1, 1, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 1, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 1, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 1, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0
- };
- 
- static const short _lexer_index_offsets[] = {
- 	0, 0, 15, 18, 20, 22, 24, 26, 
- 	29, 32, 46, 54, 56, 59, 62, 64, 
- 	66, 68, 70, 72, 74, 76, 78, 81, 
- 	83, 85, 87, 89, 91, 93, 95, 97, 
- 	109, 112, 115, 118, 121, 124, 138, 141, 
- 	143, 145, 147, 149, 151, 153, 155, 157, 
- 	159, 161, 163, 175, 178, 181, 184, 187, 
- 	190, 199, 202, 206, 210, 213, 216, 219, 
- 	222, 225, 228, 231, 234, 238, 241, 244, 
- 	247, 250, 253, 256, 259, 262, 265, 268, 
- 	271, 274, 277, 280, 283, 286, 289, 292, 
- 	295, 298, 301, 304, 307, 310, 313, 316, 
- 	319, 322, 325, 328, 331, 334, 337, 340, 
- 	343, 346, 349, 352, 355, 358, 361, 364, 
- 	367, 370, 373, 375, 377, 379, 381, 383, 
- 	385, 387, 390, 393, 398, 403, 408, 413, 
- 	417, 421, 424, 426, 428, 430, 432, 434, 
- 	436, 438, 440, 442, 444, 446, 448, 450, 
- 	452, 454, 456, 461, 468, 473, 477, 483, 
- 	487, 490, 496, 510, 519, 522, 526, 530, 
- 	533, 536, 539, 542, 545, 548, 551, 554, 
- 	557, 560, 563, 566, 569, 572, 575, 578, 
- 	581, 584, 587, 590, 593, 596, 599, 602, 
- 	605, 608, 611, 614, 617, 620, 623, 626, 
- 	629, 632, 635, 638, 641, 644, 647, 650, 
- 	653, 656, 659, 662, 665, 668, 671, 674, 
- 	676, 678, 690, 693, 696, 699, 702, 705, 
- 	714, 717, 721, 725, 728, 731, 734, 737, 
- 	740, 743, 746, 749, 753, 756, 759, 762, 
- 	765, 768, 771, 774, 777, 780, 783, 786, 
- 	789, 792, 795, 798, 801, 804, 807, 810, 
- 	813, 816, 819, 822, 826, 829, 832, 835, 
- 	838, 841, 844, 847, 850, 853, 856, 859, 
- 	862, 865, 868, 871, 874, 877, 880, 883, 
- 	886, 889, 892, 895, 898, 901, 903, 905, 
- 	907, 909, 911, 913, 915, 925, 928, 931, 
- 	934, 937, 940, 943, 948, 951, 954, 957, 
- 	960, 964, 967, 970, 973, 976, 979, 982, 
- 	985, 988, 991, 994, 997, 1000, 1003, 1006, 
- 	1009, 1012, 1015, 1018, 1021, 1024, 1027, 1030, 
- 	1033, 1036, 1039, 1042, 1045, 1048, 1051, 1054, 
- 	1057, 1060, 1062, 1064, 1066, 1068, 1070, 1072, 
- 	1074, 1076, 1078, 1080, 1082, 1084, 1086, 1088, 
- 	1090, 1092, 1094, 1101, 1104, 1107, 1110, 1113, 
- 	1116, 1119, 1121, 1123
- };
- 
- static const short _lexer_trans_targs[] = {
- 	2, 10, 38, 114, 353, 9, 9, 119, 
- 	129, 131, 145, 146, 149, 9, 0, 3, 
- 	339, 0, 4, 0, 5, 0, 6, 0, 
- 	7, 0, 9, 130, 8, 9, 130, 8, 
- 	2, 10, 38, 114, 9, 9, 119, 129, 
- 	131, 145, 146, 149, 9, 0, 11, 18, 
- 	277, 329, 333, 337, 338, 0, 12, 0, 
- 	13, 16, 0, 14, 15, 0, 7, 0, 
- 	7, 0, 17, 0, 7, 0, 19, 0, 
- 	20, 0, 21, 0, 22, 0, 23, 207, 
- 	0, 24, 0, 25, 0, 26, 0, 27, 
- 	0, 28, 0, 29, 0, 31, 30, 31, 
- 	30, 32, 155, 185, 187, 31, 31, 9, 
- 	192, 206, 9, 31, 30, 33, 31, 30, 
- 	34, 31, 30, 35, 31, 30, 36, 31, 
- 	30, 37, 31, 30, 2, 10, 38, 114, 
- 	9, 9, 119, 129, 131, 145, 146, 149, 
- 	9, 0, 39, 43, 0, 40, 0, 41, 
- 	0, 42, 0, 7, 0, 44, 0, 45, 
- 	0, 46, 0, 47, 0, 48, 0, 50, 
- 	49, 50, 49, 51, 56, 92, 94, 50, 
- 	50, 9, 99, 113, 9, 50, 49, 52, 
- 	50, 49, 53, 50, 49, 54, 50, 49, 
- 	55, 50, 49, 37, 50, 49, 57, 64, 
- 	75, 79, 83, 87, 91, 50, 49, 58, 
- 	50, 49, 59, 62, 50, 49, 60, 61, 
- 	50, 49, 37, 50, 49, 37, 50, 49, 
- 	63, 50, 49, 37, 50, 49, 65, 50, 
- 	49, 66, 50, 49, 67, 50, 49, 68, 
- 	50, 49, 69, 50, 37, 49, 70, 50, 
- 	49, 71, 50, 49, 72, 50, 49, 73, 
- 	50, 49, 74, 50, 49, 50, 37, 49, 
- 	76, 50, 49, 77, 50, 49, 78, 50, 
- 	49, 74, 50, 49, 80, 50, 49, 81, 
- 	50, 49, 82, 50, 49, 37, 50, 49, 
- 	84, 50, 49, 85, 50, 49, 86, 50, 
- 	49, 68, 50, 49, 88, 50, 49, 89, 
- 	50, 49, 90, 50, 49, 37, 50, 49, 
- 	37, 50, 49, 93, 50, 49, 88, 50, 
- 	49, 95, 50, 49, 96, 50, 49, 97, 
- 	50, 49, 98, 50, 49, 37, 50, 49, 
- 	50, 100, 49, 50, 101, 49, 50, 102, 
- 	49, 50, 103, 49, 50, 104, 49, 50, 
- 	105, 49, 50, 106, 49, 50, 107, 49, 
- 	50, 108, 49, 50, 109, 49, 50, 110, 
- 	49, 50, 111, 49, 50, 112, 49, 50, 
- 	9, 49, 50, 37, 49, 115, 0, 116, 
- 	0, 117, 0, 118, 0, 7, 0, 120, 
- 	0, 121, 0, 123, 122, 122, 123, 122, 
- 	122, 124, 124, 125, 124, 124, 124, 124, 
- 	125, 124, 124, 124, 124, 126, 124, 124, 
- 	124, 124, 127, 124, 124, 9, 128, 128, 
- 	0, 9, 128, 128, 0, 9, 130, 129, 
- 	9, 0, 132, 0, 133, 0, 134, 0, 
- 	135, 0, 136, 0, 137, 0, 138, 0, 
- 	139, 0, 140, 0, 141, 0, 142, 0, 
- 	143, 0, 144, 0, 355, 0, 7, 0, 
- 	0, 0, 0, 0, 147, 148, 9, 148, 
- 	148, 146, 147, 147, 9, 148, 146, 148, 
- 	0, 149, 150, 149, 0, 154, 153, 152, 
- 	150, 153, 151, 0, 152, 150, 151, 0, 
- 	152, 151, 154, 153, 152, 150, 153, 151, 
- 	2, 10, 38, 114, 154, 154, 119, 129, 
- 	131, 145, 146, 149, 154, 0, 156, 163, 
- 	168, 172, 176, 180, 184, 31, 30, 157, 
- 	31, 30, 158, 161, 31, 30, 159, 160, 
- 	31, 30, 37, 31, 30, 37, 31, 30, 
- 	162, 31, 30, 37, 31, 30, 164, 31, 
- 	30, 165, 31, 30, 166, 31, 30, 167, 
- 	31, 30, 31, 37, 30, 169, 31, 30, 
- 	170, 31, 30, 171, 31, 30, 167, 31, 
- 	30, 173, 31, 30, 174, 31, 30, 175, 
- 	31, 30, 37, 31, 30, 177, 31, 30, 
- 	178, 31, 30, 179, 31, 30, 167, 31, 
- 	30, 181, 31, 30, 182, 31, 30, 183, 
- 	31, 30, 37, 31, 30, 37, 31, 30, 
- 	186, 31, 30, 181, 31, 30, 188, 31, 
- 	30, 189, 31, 30, 190, 31, 30, 191, 
- 	31, 30, 37, 31, 30, 31, 193, 30, 
- 	31, 194, 30, 31, 195, 30, 31, 196, 
- 	30, 31, 197, 30, 31, 198, 30, 31, 
- 	199, 30, 31, 200, 30, 31, 201, 30, 
- 	31, 202, 30, 31, 203, 30, 31, 204, 
- 	30, 31, 205, 30, 31, 9, 30, 31, 
- 	37, 30, 209, 208, 209, 208, 210, 215, 
- 	251, 257, 209, 209, 9, 262, 276, 9, 
- 	209, 208, 211, 209, 208, 212, 209, 208, 
- 	213, 209, 208, 214, 209, 208, 37, 209, 
- 	208, 216, 223, 234, 238, 242, 246, 250, 
- 	209, 208, 217, 209, 208, 218, 221, 209, 
- 	208, 219, 220, 209, 208, 37, 209, 208, 
- 	37, 209, 208, 222, 209, 208, 37, 209, 
- 	208, 224, 209, 208, 225, 209, 208, 226, 
- 	209, 208, 227, 209, 208, 228, 209, 37, 
- 	208, 229, 209, 208, 230, 209, 208, 231, 
- 	209, 208, 232, 209, 208, 233, 209, 208, 
- 	209, 37, 208, 235, 209, 208, 236, 209, 
- 	208, 237, 209, 208, 233, 209, 208, 239, 
- 	209, 208, 240, 209, 208, 241, 209, 208, 
- 	37, 209, 208, 243, 209, 208, 244, 209, 
- 	208, 245, 209, 208, 227, 209, 208, 247, 
- 	209, 208, 248, 209, 208, 249, 209, 208, 
- 	37, 209, 208, 37, 209, 208, 252, 253, 
- 	209, 208, 247, 209, 208, 254, 209, 208, 
- 	255, 209, 208, 256, 209, 208, 233, 209, 
- 	208, 258, 209, 208, 259, 209, 208, 260, 
- 	209, 208, 261, 209, 208, 37, 209, 208, 
- 	209, 263, 208, 209, 264, 208, 209, 265, 
- 	208, 209, 266, 208, 209, 267, 208, 209, 
- 	268, 208, 209, 269, 208, 209, 270, 208, 
- 	209, 271, 208, 209, 272, 208, 209, 273, 
- 	208, 209, 274, 208, 209, 275, 208, 209, 
- 	9, 208, 209, 37, 208, 278, 0, 279, 
- 	0, 280, 0, 281, 0, 282, 0, 284, 
- 	283, 284, 283, 285, 291, 310, 284, 284, 
- 	9, 315, 9, 284, 283, 286, 284, 283, 
- 	287, 284, 283, 288, 284, 283, 289, 284, 
- 	283, 290, 284, 283, 284, 37, 283, 292, 
- 	302, 306, 284, 283, 293, 284, 283, 294, 
- 	284, 283, 295, 284, 283, 296, 284, 283, 
- 	297, 284, 37, 283, 298, 284, 283, 299, 
- 	284, 283, 300, 284, 283, 301, 284, 283, 
- 	290, 284, 283, 303, 284, 283, 304, 284, 
- 	283, 305, 284, 283, 290, 284, 283, 307, 
- 	284, 283, 308, 284, 283, 309, 284, 283, 
- 	296, 284, 283, 311, 284, 283, 312, 284, 
- 	283, 313, 284, 283, 314, 284, 283, 290, 
- 	284, 283, 284, 316, 283, 284, 317, 283, 
- 	284, 318, 283, 284, 319, 283, 284, 320, 
- 	283, 284, 321, 283, 284, 322, 283, 284, 
- 	323, 283, 284, 324, 283, 284, 325, 283, 
- 	284, 326, 283, 284, 327, 283, 284, 328, 
- 	283, 284, 9, 283, 330, 0, 331, 0, 
- 	332, 0, 7, 0, 334, 0, 335, 0, 
- 	336, 0, 22, 0, 40, 0, 7, 0, 
- 	340, 0, 341, 0, 342, 0, 343, 0, 
- 	344, 0, 346, 345, 346, 345, 347, 346, 
- 	346, 9, 9, 346, 345, 348, 346, 345, 
- 	349, 346, 345, 350, 346, 345, 351, 346, 
- 	345, 352, 346, 345, 346, 37, 345, 354, 
- 	0, 9, 0, 0, 0
- };
- 
- static const unsigned char _lexer_trans_actions[] = {
- 	29, 29, 29, 29, 0, 54, 0, 5, 
- 	1, 0, 29, 1, 35, 0, 43, 0, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 149, 126, 57, 110, 23, 0, 
- 	29, 29, 29, 29, 54, 0, 5, 1, 
- 	0, 29, 1, 35, 0, 43, 0, 0, 
- 	0, 0, 0, 0, 0, 43, 0, 43, 
- 	0, 0, 43, 0, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 144, 57, 54, 
- 	0, 84, 84, 84, 84, 54, 0, 78, 
- 	33, 84, 78, 0, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 19, 54, 0, 63, 63, 63, 63, 
- 	130, 31, 60, 57, 31, 63, 57, 66, 
- 	31, 43, 0, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 144, 
- 	57, 54, 0, 84, 84, 84, 84, 54, 
- 	0, 72, 33, 84, 72, 0, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 15, 54, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 0, 54, 0, 0, 0, 
- 	54, 0, 15, 54, 0, 15, 54, 0, 
- 	0, 54, 0, 15, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 15, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 54, 15, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 15, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 15, 54, 0, 
- 	15, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 15, 54, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	15, 0, 54, 15, 0, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 139, 48, 9, 106, 11, 
- 	0, 134, 45, 45, 45, 3, 122, 33, 
- 	33, 33, 0, 122, 33, 33, 33, 0, 
- 	122, 33, 0, 33, 0, 102, 7, 7, 
- 	43, 54, 0, 0, 43, 114, 25, 0, 
- 	54, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	43, 43, 43, 43, 0, 27, 118, 27, 
- 	27, 51, 27, 0, 54, 0, 1, 0, 
- 	43, 0, 0, 0, 43, 54, 37, 37, 
- 	87, 37, 37, 43, 0, 39, 0, 43, 
- 	0, 0, 54, 0, 0, 39, 0, 0, 
- 	96, 96, 96, 96, 54, 0, 93, 90, 
- 	41, 96, 90, 99, 0, 43, 0, 0, 
- 	0, 0, 0, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 0, 54, 0, 0, 0, 
- 	54, 0, 19, 54, 0, 19, 54, 0, 
- 	0, 54, 0, 19, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 54, 19, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 19, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 19, 54, 0, 19, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 19, 54, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 19, 0, 54, 
- 	19, 0, 144, 57, 54, 0, 84, 84, 
- 	84, 84, 54, 0, 75, 33, 84, 75, 
- 	0, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 17, 54, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 0, 54, 
- 	0, 0, 0, 54, 0, 17, 54, 0, 
- 	17, 54, 0, 0, 54, 0, 17, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 17, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	54, 17, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	17, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	17, 54, 0, 17, 54, 0, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 17, 54, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	17, 0, 54, 17, 0, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 144, 
- 	57, 54, 0, 84, 84, 84, 54, 0, 
- 	69, 33, 69, 0, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 54, 13, 0, 0, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 13, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 13, 0, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 144, 57, 54, 0, 84, 54, 
- 	0, 81, 81, 0, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 54, 21, 0, 0, 
- 	43, 0, 43, 0, 0
- };
- 
- static const unsigned char _lexer_eof_actions[] = {
- 	0, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43
- };
- 
- static const int lexer_start = 1;
- static const int lexer_first_final = 355;
- static const int lexer_error = 0;
- 
- static const int lexer_en_main = 1;
- 
- 
- #line 258 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
- 
- static VALUE 
- unindent(VALUE con, int start_col)
- {
-   VALUE re;
-   // Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters
-   char pat[32]; 
-   snprintf(pat, 32, "^[\t ]{0,%d}", start_col); 
-   re = rb_reg_regcomp(rb_str_new2(pat));
-   rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2(""));
- 
-   return Qnil;
- 
- }
- 
- static void 
- store_kw_con(VALUE listener, const char * event_name, 
-              const char * keyword_at, size_t keyword_length, 
-              const char * at,         size_t length, 
-              int current_line)
- {
-   VALUE con = Qnil, kw = Qnil;
-   kw = ENCODED_STR_NEW(keyword_at, keyword_length);
-   con = ENCODED_STR_NEW(at, length);
-   rb_funcall(con, rb_intern("strip!"), 0);
-   rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); 
- }
- 
- static void
- store_multiline_kw_con(VALUE listener, const char * event_name,
-                       const char * keyword_at, size_t keyword_length,
-                       const char * at,         size_t length,
-                       int current_line, int start_col)
- {
-   VALUE split;
-   VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil;
- 
-   kw = ENCODED_STR_NEW(keyword_at, keyword_length);
-   con = ENCODED_STR_NEW(at, length);
- 
-   unindent(con, start_col);
-   
-   split = rb_str_split(con, "\n");
- 
-   name = rb_funcall(split, rb_intern("shift"), 0);
-   desc = rb_ary_join(split, rb_str_new2( "\n" ));
- 
-   if( name == Qnil ) 
-   {
-     name = rb_str_new2("");
-   }
-   if( rb_funcall(desc, rb_intern("size"), 0) == 0) 
-   {
-     desc = rb_str_new2("");
-   }
-   rb_funcall(name, rb_intern("strip!"), 0);
-   rb_funcall(desc, rb_intern("rstrip!"), 0);
-   rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); 
- }
- 
- static void 
- store_attr(VALUE listener, const char * attr_type,
-            const char * at, size_t length, 
-            int line)
- {
-   VALUE val = ENCODED_STR_NEW(at, length);
-   rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line));
- }
- static void 
- store_docstring_content(VALUE listener, 
-           int start_col, 
-           const char *type_at, size_t type_length,
-           const char *at, size_t length, 
-           int current_line)
- {
-   VALUE re2;
-   VALUE unescape_escaped_quotes;
-   VALUE con = ENCODED_STR_NEW(at, length);
-   VALUE con_type = ENCODED_STR_NEW(type_at, type_length);
- 
-   unindent(con, start_col);
- 
-   re2 = rb_reg_regcomp(rb_str_new2("\r\\Z"));
-   unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\""));
-   rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2(""));
-   rb_funcall(con_type, rb_intern("strip!"), 0);
-   rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\""));
-   rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line));
- }
- static void 
- raise_lexer_error(const char * at, int line)
- { 
-   rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at);
- }
- 
- static void lexer_init(lexer_state *lexer) {
-   lexer->content_start = 0;
-   lexer->content_end = 0;
-   lexer->content_len = 0;
-   lexer->docstring_content_type_start = 0;
-   lexer->docstring_content_type_end = 0;
-   lexer->mark = 0;
-   lexer->keyword_start = 0;
-   lexer->keyword_end = 0;
-   lexer->next_keyword_start = 0;
-   lexer->line_number = 1;
-   lexer->last_newline = 0;
-   lexer->final_newline = 0;
-   lexer->start_col = 0;
- }
- 
- static VALUE CLexer_alloc(VALUE klass)
- {
-   VALUE obj;
-   lexer_state *lxr = ALLOC(lexer_state);
-   lexer_init(lxr);
- 
-   obj = Data_Wrap_Struct(klass, NULL, -1, lxr);
- 
-   return obj;
- }
- 
- static VALUE CLexer_init(VALUE self, VALUE listener)
- {
-   lexer_state *lxr; 
-   rb_iv_set(self, "@listener", listener);
-   
-   lxr = NULL;
-   DATA_GET(self, lexer_state, lxr);
-   lexer_init(lxr);
-   
-   return self;
- }
- 
- static VALUE CLexer_scan(VALUE self, VALUE input)
- {
-   VALUE input_copy;
-   char *data;
-   size_t len;
-   VALUE listener = rb_iv_get(self, "@listener");
- 
-   lexer_state *lexer;
-   lexer = NULL;
-   DATA_GET(self, lexer_state, lexer);
- 
-   input_copy = rb_str_dup(input);
- 
-   rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%"));
-   data = RSTRING_PTR(input_copy);
-   len = RSTRING_LEN(input_copy);
-   
-   if (len == 0) { 
-     rb_raise(rb_eGherkinLexingError, "No content to lex.");
-   } else {
- 
-     const char *p, *pe, *eof;
-     int cs = 0;
-     
-     VALUE current_row = Qnil;
- 
-     p = data;
-     pe = data + len;
-     eof = pe;
-     
-     assert(*pe == '\0' && "pointer does not end on NULL");
-     
-     
- #line 918 "ext/gherkin_lexer_zh_cn/gherkin_lexer_zh_cn.c"
- 	{
- 	cs = lexer_start;
- 	}
- 
- #line 425 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
-     
- #line 925 "ext/gherkin_lexer_zh_cn/gherkin_lexer_zh_cn.c"
- 	{
- 	int _klen;
- 	unsigned int _trans;
- 	const char *_acts;
- 	unsigned int _nacts;
- 	const char *_keys;
- 
- 	if ( p == pe )
- 		goto _test_eof;
- 	if ( cs == 0 )
- 		goto _out;
- _resume:
- 	_keys = _lexer_trans_keys + _lexer_key_offsets[cs];
- 	_trans = _lexer_index_offsets[cs];
- 
- 	_klen = _lexer_single_lengths[cs];
- 	if ( _klen > 0 ) {
- 		const char *_lower = _keys;
- 		const char *_mid;
- 		const char *_upper = _keys + _klen - 1;
- 		while (1) {
- 			if ( _upper < _lower )
- 				break;
- 
- 			_mid = _lower + ((_upper-_lower) >> 1);
- 			if ( (*p) < *_mid )
- 				_upper = _mid - 1;
- 			else if ( (*p) > *_mid )
- 				_lower = _mid + 1;
- 			else {
- 				_trans += (_mid - _keys);
- 				goto _match;
- 			}
- 		}
- 		_keys += _klen;
- 		_trans += _klen;
- 	}
- 
- 	_klen = _lexer_range_lengths[cs];
- 	if ( _klen > 0 ) {
- 		const char *_lower = _keys;
- 		const char *_mid;
- 		const char *_upper = _keys + (_klen<<1) - 2;
- 		while (1) {
- 			if ( _upper < _lower )
- 				break;
- 
- 			_mid = _lower + (((_upper-_lower) >> 1) & ~1);
- 			if ( (*p) < _mid[0] )
- 				_upper = _mid - 2;
- 			else if ( (*p) > _mid[1] )
- 				_lower = _mid + 2;
- 			else {
- 				_trans += ((_mid - _keys)>>1);
- 				goto _match;
- 			}
- 		}
- 		_trans += _klen;
- 	}
- 
- _match:
- 	cs = _lexer_trans_targs[_trans];
- 
- 	if ( _lexer_trans_actions[_trans] == 0 )
- 		goto _again;
- 
- 	_acts = _lexer_actions + _lexer_trans_actions[_trans];
- 	_nacts = (unsigned int) *_acts++;
- 	while ( _nacts-- > 0 )
- 	{
- 		switch ( *_acts++ )
- 		{
- 	case 0:
- #line 83 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
- 	{
- 		MARK(content_start, p);
-     lexer->current_line = lexer->line_number;
-     lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2;
-   }
- 	break;
- 	case 1:
- #line 89 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
- 	{
-     MARK(content_start, p);
-   }
- 	break;
- 	case 2:
- #line 93 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
- 	{
-     lexer->current_line = lexer->line_number;
-     lexer->start_col = p - data - lexer->last_newline;
-   }
- 	break;
- 	case 3:
- #line 98 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
- 	{
-     int len = LEN(content_start, PTR_TO(final_newline));
-     int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end));
- 
-     if (len < 0) len = 0;
-     if (type_len < 0) len = 0;
- 
-     store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line);
-   }
- 	break;
- 	case 4:
- #line 108 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
- 	{ 
-     MARK(docstring_content_type_start, p);
-   }
- 	break;
- 	case 5:
- #line 112 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
- 	{ 
-     MARK(docstring_content_type_end, p);
-   }
- 	break;
- 	case 6:
- #line 116 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
- 	{
-     STORE_KW_END_CON(feature);
-   }
- 	break;
- 	case 7:
- #line 120 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
- 	{
-     STORE_KW_END_CON(background);
-   }
- 	break;
- 	case 8:
- #line 124 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
- 	{
-     STORE_KW_END_CON(scenario);
-   }
- 	break;
- 	case 9:
- #line 128 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
- 	{
-     STORE_KW_END_CON(scenario_outline);
-   }
- 	break;
- 	case 10:
- #line 132 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
- 	{
-     STORE_KW_END_CON(examples);
-   }
- 	break;
- 	case 11:
- #line 136 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
- 	{
-     store_kw_con(listener, "step",
-       PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-       PTR_TO(content_start), LEN(content_start, p), 
-       lexer->current_line);
-   }
- 	break;
- 	case 12:
- #line 143 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
- 	{
-     STORE_ATTR(comment);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 13:
- #line 148 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
- 	{
-     STORE_ATTR(tag);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 14:
- #line 153 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
- 	{
-     lexer->line_number += 1;
-     MARK(final_newline, p);
-   }
- 	break;
- 	case 15:
- #line 158 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
- 	{
-     MARK(last_newline, p + 1);
-   }
- 	break;
- 	case 16:
- #line 162 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
- 	{
-     if (lexer->mark == 0) {
-       MARK(mark, p);
-     }
-   }
- 	break;
- 	case 17:
- #line 168 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
- 	{
-     MARK(keyword_end, p);
-     MARK(keyword_start, PTR_TO(mark));
-     MARK(content_start, p + 1);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 18:
- #line 175 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
- 	{
-     MARK(content_end, p);
-   }
- 	break;
- 	case 19:
- #line 179 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
- 	{
-     p = p - 1;
-     lexer->current_line = lexer->line_number;
-     current_row = rb_ary_new();
-   }
- 	break;
- 	case 20:
- #line 185 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
- 	{
- 		MARK(content_start, p);
-   }
- 	break;
- 	case 21:
- #line 189 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
- 	{
-     VALUE re_pipe, re_newline, re_backslash;
-     VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
-     rb_funcall(con, rb_intern("strip!"), 0);
-     re_pipe      = rb_reg_regcomp(rb_str_new2("\\\\\\|"));
-     re_newline   = rb_reg_regcomp(rb_str_new2("\\\\n"));
-     re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_pipe,      rb_str_new2("|"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_newline,   rb_str_new2("\n"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\"));
- 
-     rb_ary_push(current_row, con);
-   }
- 	break;
- 	case 22:
- #line 203 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
- 	{
-     rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
-   }
- 	break;
- 	case 23:
- #line 207 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
- 	{
-     int line;
-     if (cs < lexer_first_final) {
-       size_t count = 0;
-       VALUE newstr_val;
-       char *newstr;
-       int newstr_count = 0;        
-       size_t len;
-       const char *buff;
-       if (lexer->last_newline != 0) {
-         len = LEN(last_newline, eof);
-         buff = PTR_TO(last_newline);
-       } else {
-         len = strlen(data);
-         buff = data;
-       }
- 
-       // Allocate as a ruby string so that it gets cleaned up by GC
-       newstr_val = rb_str_new(buff, len);
-       newstr = RSTRING_PTR(newstr_val);
- 
- 
-       for (count = 0; count < len; count++) {
-         if(buff[count] == 10) {
-           newstr[newstr_count] = '\0'; // terminate new string at first newline found
-           break;
-         } else {
-           if (buff[count] == '%') {
-             newstr[newstr_count++] = buff[count];
-             newstr[newstr_count] = buff[count];
-           } else {
-             newstr[newstr_count] = buff[count];
-           }
-         }
-         newstr_count++;
-       }
- 
-       line = lexer->line_number;
-       lexer_init(lexer); // Re-initialize so we can scan again with the same lexer
-       raise_lexer_error(newstr, line);
-     } else {
-       rb_funcall(listener, rb_intern("eof"), 0);
-     }
-   }
- 	break;
- #line 1215 "ext/gherkin_lexer_zh_cn/gherkin_lexer_zh_cn.c"
- 		}
- 	}
- 
- _again:
- 	if ( cs == 0 )
- 		goto _out;
- 	if ( ++p != pe )
- 		goto _resume;
- 	_test_eof: {}
- 	if ( p == eof )
- 	{
- 	const char *__acts = _lexer_actions + _lexer_eof_actions[cs];
- 	unsigned int __nacts = (unsigned int) *__acts++;
- 	while ( __nacts-- > 0 ) {
- 		switch ( *__acts++ ) {
- 	case 23:
- #line 207 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
- 	{
-     int line;
-     if (cs < lexer_first_final) {
-       size_t count = 0;
-       VALUE newstr_val;
-       char *newstr;
-       int newstr_count = 0;        
-       size_t len;
-       const char *buff;
-       if (lexer->last_newline != 0) {
-         len = LEN(last_newline, eof);
-         buff = PTR_TO(last_newline);
-       } else {
-         len = strlen(data);
-         buff = data;
-       }
- 
-       // Allocate as a ruby string so that it gets cleaned up by GC
-       newstr_val = rb_str_new(buff, len);
-       newstr = RSTRING_PTR(newstr_val);
- 
- 
-       for (count = 0; count < len; count++) {
-         if(buff[count] == 10) {
-           newstr[newstr_count] = '\0'; // terminate new string at first newline found
-           break;
-         } else {
-           if (buff[count] == '%') {
-             newstr[newstr_count++] = buff[count];
-             newstr[newstr_count] = buff[count];
-           } else {
-             newstr[newstr_count] = buff[count];
-           }
-         }
-         newstr_count++;
-       }
- 
-       line = lexer->line_number;
-       lexer_init(lexer); // Re-initialize so we can scan again with the same lexer
-       raise_lexer_error(newstr, line);
-     } else {
-       rb_funcall(listener, rb_intern("eof"), 0);
-     }
-   }
- 	break;
- #line 1278 "ext/gherkin_lexer_zh_cn/gherkin_lexer_zh_cn.c"
- 		}
- 	}
- 	}
- 
- 	_out: {}
- 	}
- 
- #line 426 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/zh_cn.c.rl"
- 
-     assert(p <= pe && "data overflow after parsing execute");
-     assert(lexer->content_start <= len && "content starts after data end");
-     assert(lexer->mark < len && "mark is after data end");
-     
-     // Reset lexer by re-initializing the whole thing
-     lexer_init(lexer);
- 
-     if (cs == lexer_error) {
-       rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails.");
-     } else {
-       return Qtrue;
-     }
-   }
- }
- 
- void Init_gherkin_lexer_zh_cn()
- {
-   mGherkin = rb_define_module("Gherkin");
-   mGherkinLexer = rb_define_module_under(mGherkin, "Lexer");
-   rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError"));
- 
-   mCLexer = rb_define_module_under(mGherkin, "CLexer");
-   cI18nLexer = rb_define_class_under(mCLexer, "Zh_cn", rb_cObject);
-   rb_define_alloc_func(cI18nLexer, CLexer_alloc);
-   rb_define_method(cI18nLexer, "initialize", CLexer_init, 1);
-   rb_define_method(cI18nLexer, "scan", CLexer_scan, 1);
- }
- 
 -#line 1 "ragel/i18n/zh_cn.c.rl"
 -#include <assert.h>
 -#include <ruby.h>
 -
 -#if defined(_WIN32)
 -#include <stddef.h>
 -#endif
 -
 -#ifdef HAVE_RUBY_RE_H
 -#include <ruby/re.h>
 -#else
 -#include <re.h>
 -#endif
 -
 -#ifdef HAVE_RUBY_ENCODING_H
 -#include <ruby/encoding.h>
 -#define ENCODED_STR_NEW(ptr, len) \
 -    rb_enc_str_new(ptr, len, rb_utf8_encoding())
 -#else
 -#define ENCODED_STR_NEW(ptr, len) \
 -    rb_str_new(ptr, len)
 -#endif
 -
 -#ifndef RSTRING_PTR
 -#define RSTRING_PTR(s) (RSTRING(s)->ptr)
 -#endif
 -
 -#ifndef RSTRING_LEN
 -#define RSTRING_LEN(s) (RSTRING(s)->len)
 -#endif
 -
 -#define DATA_GET(FROM, TYPE, NAME) \
 -  Data_Get_Struct(FROM, TYPE, NAME); \
 -  if (NAME == NULL) { \
 -    rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \
 -  }
 - 
 -typedef struct lexer_state {
 -  int content_len;
 -  int line_number;
 -  int current_line;
 -  int start_col;
 -  size_t mark;
 -  size_t keyword_start;
 -  size_t keyword_end;
 -  size_t next_keyword_start;
 -  size_t content_start;
 -  size_t content_end;
 -  size_t docstring_content_type_start;
 -  size_t docstring_content_type_end;
 -  size_t query_start;
 -  size_t last_newline;
 -  size_t final_newline;
 -} lexer_state;
 -
 -static VALUE mGherkin;
 -static VALUE mGherkinLexer;
 -static VALUE mCLexer;
 -static VALUE cI18nLexer;
 -static VALUE rb_eGherkinLexingError;
 -
 -#define LEN(AT, P) (P - data - lexer->AT)
 -#define MARK(M, P) (lexer->M = (P) - data)
 -#define PTR_TO(P) (data + lexer->P)
 -
 -#define STORE_KW_END_CON(EVENT) \
 -  store_multiline_kw_con(listener, # EVENT, \
 -    PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \
 -    PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \
 -    lexer->current_line, lexer->start_col); \
 -    if (lexer->content_end != 0) { \
 -      p = PTR_TO(content_end - 1); \
 -    } \
 -    lexer->content_end = 0
 -
 -#define STORE_ATTR(ATTR) \
 -    store_attr(listener, # ATTR, \
 -      PTR_TO(content_start), LEN(content_start, p), \
 -      lexer->line_number)
 -
 -
 -#line 254 "ragel/i18n/zh_cn.c.rl"
 -
 -
 -/** Data **/
 -
 -#line 89 "ext/gherkin_lexer_zh_cn/gherkin_lexer_zh_cn.c"
 -static const char _lexer_actions[] = {
 -	0, 1, 0, 1, 1, 1, 2, 1, 
 -	3, 1, 4, 1, 5, 1, 6, 1, 
 -	7, 1, 8, 1, 9, 1, 10, 1, 
 -	11, 1, 12, 1, 13, 1, 16, 1, 
 -	17, 1, 18, 1, 19, 1, 20, 1, 
 -	21, 1, 22, 1, 23, 2, 1, 18, 
 -	2, 4, 5, 2, 13, 0, 2, 14, 
 -	15, 2, 17, 0, 2, 17, 2, 2, 
 -	17, 16, 2, 17, 19, 2, 18, 6, 
 -	2, 18, 7, 2, 18, 8, 2, 18, 
 -	9, 2, 18, 10, 2, 18, 16, 2, 
 -	20, 21, 2, 22, 0, 2, 22, 2, 
 -	2, 22, 16, 2, 22, 19, 3, 3, 
 -	14, 15, 3, 5, 14, 15, 3, 11, 
 -	14, 15, 3, 12, 14, 15, 3, 13, 
 -	14, 15, 3, 14, 15, 18, 3, 17, 
 -	0, 11, 3, 17, 14, 15, 4, 1, 
 -	14, 15, 18, 4, 4, 5, 14, 15, 
 -	4, 17, 0, 14, 15, 5, 17, 0, 
 -	11, 14, 15
 -};
 -
 -static const short _lexer_key_offsets[] = {
 -	0, 0, 15, 17, 18, 19, 20, 21, 
 -	23, 25, 39, 46, 47, 49, 51, 52, 
 -	53, 54, 55, 56, 57, 58, 59, 61, 
 -	62, 63, 64, 65, 66, 67, 68, 69, 
 -	81, 83, 85, 87, 89, 91, 105, 107, 
 -	108, 109, 110, 111, 112, 113, 114, 115, 
 -	116, 117, 118, 130, 132, 134, 136, 138, 
 -	140, 148, 150, 153, 156, 158, 160, 162, 
 -	164, 166, 168, 170, 172, 175, 177, 179, 
 -	181, 183, 185, 187, 189, 191, 193, 195, 
 -	197, 199, 201, 203, 205, 207, 209, 211, 
 -	213, 215, 217, 219, 221, 223, 225, 227, 
 -	229, 231, 233, 235, 237, 239, 241, 243, 
 -	245, 247, 249, 251, 253, 255, 257, 259, 
 -	261, 263, 265, 266, 267, 268, 269, 270, 
 -	271, 272, 274, 276, 281, 286, 291, 296, 
 -	300, 304, 306, 307, 308, 309, 310, 311, 
 -	312, 313, 314, 315, 316, 317, 318, 319, 
 -	320, 321, 322, 327, 334, 339, 343, 349, 
 -	352, 354, 360, 374, 382, 384, 387, 390, 
 -	392, 394, 396, 398, 400, 402, 404, 406, 
 -	408, 410, 412, 414, 416, 418, 420, 422, 
 -	424, 426, 428, 430, 432, 434, 436, 438, 
 -	440, 442, 444, 446, 448, 450, 452, 454, 
 -	456, 458, 460, 462, 464, 466, 468, 470, 
 -	472, 474, 476, 478, 480, 482, 484, 486, 
 -	487, 488, 500, 502, 504, 506, 508, 510, 
 -	518, 520, 523, 526, 528, 530, 532, 534, 
 -	536, 538, 540, 542, 545, 547, 549, 551, 
 -	553, 555, 557, 559, 561, 563, 565, 567, 
 -	569, 571, 573, 575, 577, 579, 581, 583, 
 -	585, 587, 589, 591, 594, 596, 598, 600, 
 -	602, 604, 606, 608, 610, 612, 614, 616, 
 -	618, 620, 622, 624, 626, 628, 630, 632, 
 -	634, 636, 638, 640, 642, 644, 645, 646, 
 -	647, 648, 649, 650, 651, 661, 663, 665, 
 -	667, 669, 671, 673, 677, 679, 681, 683, 
 -	685, 688, 690, 692, 694, 696, 698, 700, 
 -	702, 704, 706, 708, 710, 712, 714, 716, 
 -	718, 720, 722, 724, 726, 728, 730, 732, 
 -	734, 736, 738, 740, 742, 744, 746, 748, 
 -	750, 752, 753, 754, 755, 756, 757, 758, 
 -	759, 760, 761, 762, 763, 764, 765, 766, 
 -	767, 768, 769, 776, 778, 780, 782, 784, 
 -	786, 788, 789, 790
 -};
 -
 -static const char _lexer_trans_keys[] = {
 -	-28, -27, -24, -23, -17, 10, 32, 34, 
 -	35, 37, 42, 64, 124, 9, 13, -67, 
 -	-66, -122, -26, -104, -81, 10, 13, 10, 
 -	13, -28, -27, -24, -23, 10, 32, 34, 
 -	35, 37, 42, 64, 124, 9, 13, -127, 
 -	-119, -118, -112, -100, -71, -67, -121, -27, 
 -	-24, -90, -82, -126, -102, -82, -66, -89, 
 -	-26, -100, -84, -27, 58, -92, -89, -25, 
 -	-70, -78, 58, 10, 10, -28, -27, -24, 
 -	-23, 10, 32, 35, 37, 42, 64, 9, 
 -	13, -67, 10, -122, 10, -26, 10, -104, 
 -	10, -81, 10, -28, -27, -24, -23, 10, 
 -	32, 34, 35, 37, 42, 64, 124, 9, 
 -	13, -128, -125, -116, -28, -72, -108, -116, 
 -	-26, -103, -81, 58, 10, 10, -28, -27, 
 -	-24, -23, 10, 32, 35, 37, 42, 64, 
 -	9, 13, -67, 10, -122, 10, -26, 10, 
 -	-104, 10, -81, 10, -127, -119, -118, -112, 
 -	-100, -71, -67, 10, -121, 10, -27, -24, 
 -	10, -90, -82, 10, -126, 10, -102, 10, 
 -	-82, 10, -66, 10, -89, 10, -26, 10, 
 -	-100, 10, -84, 10, -27, 10, 58, -92, 
 -	10, -89, 10, -25, 10, -70, 10, -78, 
 -	10, 10, 58, -97, 10, -24, 10, -125, 
 -	10, -67, 10, -116, 10, -26, 10, -105, 
 -	10, -74, 10, -70, 10, -26, 10, -103, 
 -	10, -81, 10, -74, 10, -28, 10, -72, 
 -	10, -108, 10, -109, 10, -128, 10, -116, 
 -	10, -126, 10, -93, 10, -28, 10, -71, 
 -	10, -120, 10, 10, 95, 10, 70, 10, 
 -	69, 10, 65, 10, 84, 10, 85, 10, 
 -	82, 10, 69, 10, 95, 10, 69, 10, 
 -	78, 10, 68, 10, 95, 10, 37, 10, 
 -	32, -126, -93, -28, -71, -120, 34, 34, 
 -	10, 13, 10, 13, 10, 32, 34, 9, 
 -	13, 10, 32, 34, 9, 13, 10, 32, 
 -	34, 9, 13, 10, 32, 34, 9, 13, 
 -	10, 32, 9, 13, 10, 32, 9, 13, 
 -	10, 13, 10, 95, 70, 69, 65, 84, 
 -	85, 82, 69, 95, 69, 78, 68, 95, 
 -	37, 32, 13, 32, 64, 9, 10, 9, 
 -	10, 13, 32, 64, 11, 12, 10, 32, 
 -	64, 9, 13, 32, 124, 9, 13, 10, 
 -	32, 92, 124, 9, 13, 10, 92, 124, 
 -	10, 92, 10, 32, 92, 124, 9, 13, 
 -	-28, -27, -24, -23, 10, 32, 34, 35, 
 -	37, 42, 64, 124, 9, 13, -127, -119, 
 -	-118, -112, -100, -71, -67, 10, -121, 10, 
 -	-27, -24, 10, -90, -82, 10, -126, 10, 
 -	-102, 10, -82, 10, -66, 10, -89, 10, 
 -	-26, 10, -100, 10, -84, 10, 10, 58, 
 -	-97, 10, -24, 10, -125, 10, -67, 10, 
 -	-116, 10, -26, 10, -105, 10, -74, 10, 
 -	-70, 10, -26, 10, -103, 10, -81, 10, 
 -	-74, 10, -28, 10, -72, 10, -108, 10, 
 -	-109, 10, -128, 10, -116, 10, -126, 10, 
 -	-93, 10, -28, 10, -71, 10, -120, 10, 
 -	10, 95, 10, 70, 10, 69, 10, 65, 
 -	10, 84, 10, 85, 10, 82, 10, 69, 
 -	10, 95, 10, 69, 10, 78, 10, 68, 
 -	10, 95, 10, 37, 10, 32, 10, 10, 
 -	-28, -27, -24, -23, 10, 32, 35, 37, 
 -	42, 64, 9, 13, -67, 10, -122, 10, 
 -	-26, 10, -104, 10, -81, 10, -127, -119, 
 -	-118, -112, -100, -71, -67, 10, -121, 10, 
 -	-27, -24, 10, -90, -82, 10, -126, 10, 
 -	-102, 10, -82, 10, -66, 10, -89, 10, 
 -	-26, 10, -100, 10, -84, 10, -27, 10, 
 -	58, -92, 10, -89, 10, -25, 10, -70, 
 -	10, -78, 10, 10, 58, -97, 10, -24, 
 -	10, -125, 10, -67, 10, -116, 10, -26, 
 -	10, -105, 10, -74, 10, -70, 10, -26, 
 -	10, -103, 10, -81, 10, -74, 10, -28, 
 -	10, -72, 10, -108, 10, -109, 10, -128, 
 -	-125, 10, -116, 10, -116, 10, -26, 10, 
 -	-103, 10, -81, 10, -126, 10, -93, 10, 
 -	-28, 10, -71, 10, -120, 10, 10, 95, 
 -	10, 70, 10, 69, 10, 65, 10, 84, 
 -	10, 85, 10, 82, 10, 69, 10, 95, 
 -	10, 69, 10, 78, 10, 68, 10, 95, 
 -	10, 37, 10, 32, -97, -24, -125, -67, 
 -	58, 10, 10, -28, -27, -24, 10, 32, 
 -	35, 37, 64, 9, 13, -66, 10, -117, 
 -	10, -27, 10, -83, 10, -112, 10, 10, 
 -	58, -119, -118, -100, 10, -89, 10, -26, 
 -	10, -100, 10, -84, 10, -27, 10, 58, 
 -	-92, 10, -89, 10, -25, 10, -70, 10, 
 -	-78, 10, -97, 10, -24, 10, -125, 10, 
 -	-67, 10, -70, 10, -26, 10, -103, 10, 
 -	-81, 10, -125, 10, -116, 10, -26, 10, 
 -	-103, 10, -81, 10, 10, 95, 10, 70, 
 -	10, 69, 10, 65, 10, 84, 10, 85, 
 -	10, 82, 10, 69, 10, 95, 10, 69, 
 -	10, 78, 10, 68, 10, 95, 10, 37, 
 -	-116, -26, -105, -74, -70, -26, -103, -81, 
 -	-74, -109, -117, -27, -83, -112, 58, 10, 
 -	10, -27, 10, 32, 35, 124, 9, 13, 
 -	-118, 10, -97, 10, -24, 10, -125, 10, 
 -	-67, 10, 10, 58, -69, -65, 0
 -};
 -
 -static const char _lexer_single_lengths[] = {
 -	0, 13, 2, 1, 1, 1, 1, 2, 
 -	2, 12, 7, 1, 2, 2, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 2, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 10, 
 -	2, 2, 2, 2, 2, 12, 2, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 10, 2, 2, 2, 2, 2, 
 -	8, 2, 3, 3, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 3, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 1, 1, 1, 1, 1, 1, 
 -	1, 2, 2, 3, 3, 3, 3, 2, 
 -	2, 2, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 3, 5, 3, 2, 4, 3, 
 -	2, 4, 12, 8, 2, 3, 3, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 1, 
 -	1, 10, 2, 2, 2, 2, 2, 8, 
 -	2, 3, 3, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 3, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 3, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 1, 1, 1, 
 -	1, 1, 1, 1, 8, 2, 2, 2, 
 -	2, 2, 2, 4, 2, 2, 2, 2, 
 -	3, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 5, 2, 2, 2, 2, 2, 
 -	2, 1, 1, 0
 -};
 -
 -static const char _lexer_range_lengths[] = {
 -	0, 1, 0, 0, 0, 0, 0, 0, 
 -	0, 1, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 1, 
 -	0, 0, 0, 0, 0, 1, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 1, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 1, 1, 1, 1, 1, 
 -	1, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 1, 1, 1, 1, 1, 0, 
 -	0, 1, 1, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 1, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 1, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 1, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0
 -};
 -
 -static const short _lexer_index_offsets[] = {
 -	0, 0, 15, 18, 20, 22, 24, 26, 
 -	29, 32, 46, 54, 56, 59, 62, 64, 
 -	66, 68, 70, 72, 74, 76, 78, 81, 
 -	83, 85, 87, 89, 91, 93, 95, 97, 
 -	109, 112, 115, 118, 121, 124, 138, 141, 
 -	143, 145, 147, 149, 151, 153, 155, 157, 
 -	159, 161, 163, 175, 178, 181, 184, 187, 
 -	190, 199, 202, 206, 210, 213, 216, 219, 
 -	222, 225, 228, 231, 234, 238, 241, 244, 
 -	247, 250, 253, 256, 259, 262, 265, 268, 
 -	271, 274, 277, 280, 283, 286, 289, 292, 
 -	295, 298, 301, 304, 307, 310, 313, 316, 
 -	319, 322, 325, 328, 331, 334, 337, 340, 
 -	343, 346, 349, 352, 355, 358, 361, 364, 
 -	367, 370, 373, 375, 377, 379, 381, 383, 
 -	385, 387, 390, 393, 398, 403, 408, 413, 
 -	417, 421, 424, 426, 428, 430, 432, 434, 
 -	436, 438, 440, 442, 444, 446, 448, 450, 
 -	452, 454, 456, 461, 468, 473, 477, 483, 
 -	487, 490, 496, 510, 519, 522, 526, 530, 
 -	533, 536, 539, 542, 545, 548, 551, 554, 
 -	557, 560, 563, 566, 569, 572, 575, 578, 
 -	581, 584, 587, 590, 593, 596, 599, 602, 
 -	605, 608, 611, 614, 617, 620, 623, 626, 
 -	629, 632, 635, 638, 641, 644, 647, 650, 
 -	653, 656, 659, 662, 665, 668, 671, 674, 
 -	676, 678, 690, 693, 696, 699, 702, 705, 
 -	714, 717, 721, 725, 728, 731, 734, 737, 
 -	740, 743, 746, 749, 753, 756, 759, 762, 
 -	765, 768, 771, 774, 777, 780, 783, 786, 
 -	789, 792, 795, 798, 801, 804, 807, 810, 
 -	813, 816, 819, 822, 826, 829, 832, 835, 
 -	838, 841, 844, 847, 850, 853, 856, 859, 
 -	862, 865, 868, 871, 874, 877, 880, 883, 
 -	886, 889, 892, 895, 898, 901, 903, 905, 
 -	907, 909, 911, 913, 915, 925, 928, 931, 
 -	934, 937, 940, 943, 948, 951, 954, 957, 
 -	960, 964, 967, 970, 973, 976, 979, 982, 
 -	985, 988, 991, 994, 997, 1000, 1003, 1006, 
 -	1009, 1012, 1015, 1018, 1021, 1024, 1027, 1030, 
 -	1033, 1036, 1039, 1042, 1045, 1048, 1051, 1054, 
 -	1057, 1060, 1062, 1064, 1066, 1068, 1070, 1072, 
 -	1074, 1076, 1078, 1080, 1082, 1084, 1086, 1088, 
 -	1090, 1092, 1094, 1101, 1104, 1107, 1110, 1113, 
 -	1116, 1119, 1121, 1123
 -};
 -
 -static const short _lexer_trans_targs[] = {
 -	2, 10, 38, 114, 353, 9, 9, 119, 
 -	129, 131, 145, 146, 149, 9, 0, 3, 
 -	339, 0, 4, 0, 5, 0, 6, 0, 
 -	7, 0, 9, 130, 8, 9, 130, 8, 
 -	2, 10, 38, 114, 9, 9, 119, 129, 
 -	131, 145, 146, 149, 9, 0, 11, 18, 
 -	277, 329, 333, 337, 338, 0, 12, 0, 
 -	13, 16, 0, 14, 15, 0, 7, 0, 
 -	7, 0, 17, 0, 7, 0, 19, 0, 
 -	20, 0, 21, 0, 22, 0, 23, 207, 
 -	0, 24, 0, 25, 0, 26, 0, 27, 
 -	0, 28, 0, 29, 0, 31, 30, 31, 
 -	30, 32, 155, 185, 187, 31, 31, 9, 
 -	192, 206, 9, 31, 30, 33, 31, 30, 
 -	34, 31, 30, 35, 31, 30, 36, 31, 
 -	30, 37, 31, 30, 2, 10, 38, 114, 
 -	9, 9, 119, 129, 131, 145, 146, 149, 
 -	9, 0, 39, 43, 0, 40, 0, 41, 
 -	0, 42, 0, 7, 0, 44, 0, 45, 
 -	0, 46, 0, 47, 0, 48, 0, 50, 
 -	49, 50, 49, 51, 56, 92, 94, 50, 
 -	50, 9, 99, 113, 9, 50, 49, 52, 
 -	50, 49, 53, 50, 49, 54, 50, 49, 
 -	55, 50, 49, 37, 50, 49, 57, 64, 
 -	75, 79, 83, 87, 91, 50, 49, 58, 
 -	50, 49, 59, 62, 50, 49, 60, 61, 
 -	50, 49, 37, 50, 49, 37, 50, 49, 
 -	63, 50, 49, 37, 50, 49, 65, 50, 
 -	49, 66, 50, 49, 67, 50, 49, 68, 
 -	50, 49, 69, 50, 37, 49, 70, 50, 
 -	49, 71, 50, 49, 72, 50, 49, 73, 
 -	50, 49, 74, 50, 49, 50, 37, 49, 
 -	76, 50, 49, 77, 50, 49, 78, 50, 
 -	49, 74, 50, 49, 80, 50, 49, 81, 
 -	50, 49, 82, 50, 49, 37, 50, 49, 
 -	84, 50, 49, 85, 50, 49, 86, 50, 
 -	49, 68, 50, 49, 88, 50, 49, 89, 
 -	50, 49, 90, 50, 49, 37, 50, 49, 
 -	37, 50, 49, 93, 50, 49, 88, 50, 
 -	49, 95, 50, 49, 96, 50, 49, 97, 
 -	50, 49, 98, 50, 49, 37, 50, 49, 
 -	50, 100, 49, 50, 101, 49, 50, 102, 
 -	49, 50, 103, 49, 50, 104, 49, 50, 
 -	105, 49, 50, 106, 49, 50, 107, 49, 
 -	50, 108, 49, 50, 109, 49, 50, 110, 
 -	49, 50, 111, 49, 50, 112, 49, 50, 
 -	9, 49, 50, 37, 49, 115, 0, 116, 
 -	0, 117, 0, 118, 0, 7, 0, 120, 
 -	0, 121, 0, 123, 122, 122, 123, 122, 
 -	122, 124, 124, 125, 124, 124, 124, 124, 
 -	125, 124, 124, 124, 124, 126, 124, 124, 
 -	124, 124, 127, 124, 124, 9, 128, 128, 
 -	0, 9, 128, 128, 0, 9, 130, 129, 
 -	9, 0, 132, 0, 133, 0, 134, 0, 
 -	135, 0, 136, 0, 137, 0, 138, 0, 
 -	139, 0, 140, 0, 141, 0, 142, 0, 
 -	143, 0, 144, 0, 355, 0, 7, 0, 
 -	0, 0, 0, 0, 147, 148, 9, 148, 
 -	148, 146, 147, 147, 9, 148, 146, 148, 
 -	0, 149, 150, 149, 0, 154, 153, 152, 
 -	150, 153, 151, 0, 152, 150, 151, 0, 
 -	152, 151, 154, 153, 152, 150, 153, 151, 
 -	2, 10, 38, 114, 154, 154, 119, 129, 
 -	131, 145, 146, 149, 154, 0, 156, 163, 
 -	168, 172, 176, 180, 184, 31, 30, 157, 
 -	31, 30, 158, 161, 31, 30, 159, 160, 
 -	31, 30, 37, 31, 30, 37, 31, 30, 
 -	162, 31, 30, 37, 31, 30, 164, 31, 
 -	30, 165, 31, 30, 166, 31, 30, 167, 
 -	31, 30, 31, 37, 30, 169, 31, 30, 
 -	170, 31, 30, 171, 31, 30, 167, 31, 
 -	30, 173, 31, 30, 174, 31, 30, 175, 
 -	31, 30, 37, 31, 30, 177, 31, 30, 
 -	178, 31, 30, 179, 31, 30, 167, 31, 
 -	30, 181, 31, 30, 182, 31, 30, 183, 
 -	31, 30, 37, 31, 30, 37, 31, 30, 
 -	186, 31, 30, 181, 31, 30, 188, 31, 
 -	30, 189, 31, 30, 190, 31, 30, 191, 
 -	31, 30, 37, 31, 30, 31, 193, 30, 
 -	31, 194, 30, 31, 195, 30, 31, 196, 
 -	30, 31, 197, 30, 31, 198, 30, 31, 
 -	199, 30, 31, 200, 30, 31, 201, 30, 
 -	31, 202, 30, 31, 203, 30, 31, 204, 
 -	30, 31, 205, 30, 31, 9, 30, 31, 
 -	37, 30, 209, 208, 209, 208, 210, 215, 
 -	251, 257, 209, 209, 9, 262, 276, 9, 
 -	209, 208, 211, 209, 208, 212, 209, 208, 
 -	213, 209, 208, 214, 209, 208, 37, 209, 
 -	208, 216, 223, 234, 238, 242, 246, 250, 
 -	209, 208, 217, 209, 208, 218, 221, 209, 
 -	208, 219, 220, 209, 208, 37, 209, 208, 
 -	37, 209, 208, 222, 209, 208, 37, 209, 
 -	208, 224, 209, 208, 225, 209, 208, 226, 
 -	209, 208, 227, 209, 208, 228, 209, 37, 
 -	208, 229, 209, 208, 230, 209, 208, 231, 
 -	209, 208, 232, 209, 208, 233, 209, 208, 
 -	209, 37, 208, 235, 209, 208, 236, 209, 
 -	208, 237, 209, 208, 233, 209, 208, 239, 
 -	209, 208, 240, 209, 208, 241, 209, 208, 
 -	37, 209, 208, 243, 209, 208, 244, 209, 
 -	208, 245, 209, 208, 227, 209, 208, 247, 
 -	209, 208, 248, 209, 208, 249, 209, 208, 
 -	37, 209, 208, 37, 209, 208, 252, 253, 
 -	209, 208, 247, 209, 208, 254, 209, 208, 
 -	255, 209, 208, 256, 209, 208, 233, 209, 
 -	208, 258, 209, 208, 259, 209, 208, 260, 
 -	209, 208, 261, 209, 208, 37, 209, 208, 
 -	209, 263, 208, 209, 264, 208, 209, 265, 
 -	208, 209, 266, 208, 209, 267, 208, 209, 
 -	268, 208, 209, 269, 208, 209, 270, 208, 
 -	209, 271, 208, 209, 272, 208, 209, 273, 
 -	208, 209, 274, 208, 209, 275, 208, 209, 
 -	9, 208, 209, 37, 208, 278, 0, 279, 
 -	0, 280, 0, 281, 0, 282, 0, 284, 
 -	283, 284, 283, 285, 291, 310, 284, 284, 
 -	9, 315, 9, 284, 283, 286, 284, 283, 
 -	287, 284, 283, 288, 284, 283, 289, 284, 
 -	283, 290, 284, 283, 284, 37, 283, 292, 
 -	302, 306, 284, 283, 293, 284, 283, 294, 
 -	284, 283, 295, 284, 283, 296, 284, 283, 
 -	297, 284, 37, 283, 298, 284, 283, 299, 
 -	284, 283, 300, 284, 283, 301, 284, 283, 
 -	290, 284, 283, 303, 284, 283, 304, 284, 
 -	283, 305, 284, 283, 290, 284, 283, 307, 
 -	284, 283, 308, 284, 283, 309, 284, 283, 
 -	296, 284, 283, 311, 284, 283, 312, 284, 
 -	283, 313, 284, 283, 314, 284, 283, 290, 
 -	284, 283, 284, 316, 283, 284, 317, 283, 
 -	284, 318, 283, 284, 319, 283, 284, 320, 
 -	283, 284, 321, 283, 284, 322, 283, 284, 
 -	323, 283, 284, 324, 283, 284, 325, 283, 
 -	284, 326, 283, 284, 327, 283, 284, 328, 
 -	283, 284, 9, 283, 330, 0, 331, 0, 
 -	332, 0, 7, 0, 334, 0, 335, 0, 
 -	336, 0, 22, 0, 40, 0, 7, 0, 
 -	340, 0, 341, 0, 342, 0, 343, 0, 
 -	344, 0, 346, 345, 346, 345, 347, 346, 
 -	346, 9, 9, 346, 345, 348, 346, 345, 
 -	349, 346, 345, 350, 346, 345, 351, 346, 
 -	345, 352, 346, 345, 346, 37, 345, 354, 
 -	0, 9, 0, 0, 0
 -};
 -
 -static const unsigned char _lexer_trans_actions[] = {
 -	29, 29, 29, 29, 0, 54, 0, 5, 
 -	1, 0, 29, 1, 35, 0, 43, 0, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 149, 126, 57, 110, 23, 0, 
 -	29, 29, 29, 29, 54, 0, 5, 1, 
 -	0, 29, 1, 35, 0, 43, 0, 0, 
 -	0, 0, 0, 0, 0, 43, 0, 43, 
 -	0, 0, 43, 0, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 144, 57, 54, 
 -	0, 84, 84, 84, 84, 54, 0, 78, 
 -	33, 84, 78, 0, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 19, 54, 0, 63, 63, 63, 63, 
 -	130, 31, 60, 57, 31, 63, 57, 66, 
 -	31, 43, 0, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 144, 
 -	57, 54, 0, 84, 84, 84, 84, 54, 
 -	0, 72, 33, 84, 72, 0, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 15, 54, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 0, 54, 0, 0, 0, 
 -	54, 0, 15, 54, 0, 15, 54, 0, 
 -	0, 54, 0, 15, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 15, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 54, 15, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 15, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 15, 54, 0, 
 -	15, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 15, 54, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	15, 0, 54, 15, 0, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 139, 48, 9, 106, 11, 
 -	0, 134, 45, 45, 45, 3, 122, 33, 
 -	33, 33, 0, 122, 33, 33, 33, 0, 
 -	122, 33, 0, 33, 0, 102, 7, 7, 
 -	43, 54, 0, 0, 43, 114, 25, 0, 
 -	54, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	43, 43, 43, 43, 0, 27, 118, 27, 
 -	27, 51, 27, 0, 54, 0, 1, 0, 
 -	43, 0, 0, 0, 43, 54, 37, 37, 
 -	87, 37, 37, 43, 0, 39, 0, 43, 
 -	0, 0, 54, 0, 0, 39, 0, 0, 
 -	96, 96, 96, 96, 54, 0, 93, 90, 
 -	41, 96, 90, 99, 0, 43, 0, 0, 
 -	0, 0, 0, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 0, 54, 0, 0, 0, 
 -	54, 0, 19, 54, 0, 19, 54, 0, 
 -	0, 54, 0, 19, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 54, 19, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 19, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 19, 54, 0, 19, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 19, 54, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 19, 0, 54, 
 -	19, 0, 144, 57, 54, 0, 84, 84, 
 -	84, 84, 54, 0, 75, 33, 84, 75, 
 -	0, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 17, 54, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 0, 54, 
 -	0, 0, 0, 54, 0, 17, 54, 0, 
 -	17, 54, 0, 0, 54, 0, 17, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 17, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	54, 17, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	17, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	17, 54, 0, 17, 54, 0, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 17, 54, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	17, 0, 54, 17, 0, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 144, 
 -	57, 54, 0, 84, 84, 84, 54, 0, 
 -	69, 33, 69, 0, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 54, 13, 0, 0, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 13, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 13, 0, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 144, 57, 54, 0, 84, 54, 
 -	0, 81, 81, 0, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 54, 21, 0, 0, 
 -	43, 0, 43, 0, 0
 -};
 -
 -static const unsigned char _lexer_eof_actions[] = {
 -	0, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43
 -};
 -
 -static const int lexer_start = 1;
 -static const int lexer_first_final = 355;
 -static const int lexer_error = 0;
 -
 -static const int lexer_en_main = 1;
 -
 -
 -#line 258 "ragel/i18n/zh_cn.c.rl"
 -
 -static VALUE 
 -unindent(VALUE con, int start_col)
 -{
 -  VALUE re;
 -  /* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */
 -  char pat[32]; 
 -  snprintf(pat, 32, "^[\t ]{0,%d}", start_col); 
 -  re = rb_reg_regcomp(rb_str_new2(pat));
 -  rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2(""));
 -
 -  return Qnil;
 -
 -}
 -
 -static void 
 -store_kw_con(VALUE listener, const char * event_name, 
 -             const char * keyword_at, size_t keyword_length, 
 -             const char * at,         size_t length, 
 -             int current_line)
 -{
 -  VALUE con = Qnil, kw = Qnil;
 -  kw = ENCODED_STR_NEW(keyword_at, keyword_length);
 -  con = ENCODED_STR_NEW(at, length);
 -  rb_funcall(con, rb_intern("strip!"), 0);
 -  rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); 
 -}
 -
 -static void
 -store_multiline_kw_con(VALUE listener, const char * event_name,
 -                      const char * keyword_at, size_t keyword_length,
 -                      const char * at,         size_t length,
 -                      int current_line, int start_col)
 -{
 -  VALUE split;
 -  VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil;
 -
 -  kw = ENCODED_STR_NEW(keyword_at, keyword_length);
 -  con = ENCODED_STR_NEW(at, length);
 -
 -  unindent(con, start_col);
 -  
 -  split = rb_str_split(con, "\n");
 -
 -  name = rb_funcall(split, rb_intern("shift"), 0);
 -  desc = rb_ary_join(split, rb_str_new2( "\n" ));
 -
 -  if( name == Qnil ) 
 -  {
 -    name = rb_str_new2("");
 -  }
 -  if( rb_funcall(desc, rb_intern("size"), 0) == 0) 
 -  {
 -    desc = rb_str_new2("");
 -  }
 -  rb_funcall(name, rb_intern("strip!"), 0);
 -  rb_funcall(desc, rb_intern("rstrip!"), 0);
 -  rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); 
 -}
 -
 -static void 
 -store_attr(VALUE listener, const char * attr_type,
 -           const char * at, size_t length, 
 -           int line)
 -{
 -  VALUE val = ENCODED_STR_NEW(at, length);
 -  rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line));
 -}
 -static void 
 -store_docstring_content(VALUE listener, 
 -          int start_col, 
 -          const char *type_at, size_t type_length,
 -          const char *at, size_t length, 
 -          int current_line)
 -{
 -  VALUE re2;
 -  VALUE unescape_escaped_quotes;
 -  VALUE con = ENCODED_STR_NEW(at, length);
 -  VALUE con_type = ENCODED_STR_NEW(type_at, type_length);
 -
 -  unindent(con, start_col);
 -
 -  re2 = rb_reg_regcomp(rb_str_new2("\r\\Z"));
 -  unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\""));
 -  rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2(""));
 -  rb_funcall(con_type, rb_intern("strip!"), 0);
 -  rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\""));
 -  rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line));
 -}
 -static void 
 -raise_lexer_error(const char * at, int line)
 -{ 
 -  rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at);
 -}
 -
 -static void lexer_init(lexer_state *lexer) {
 -  lexer->content_start = 0;
 -  lexer->content_end = 0;
 -  lexer->content_len = 0;
 -  lexer->docstring_content_type_start = 0;
 -  lexer->docstring_content_type_end = 0;
 -  lexer->mark = 0;
 -  lexer->keyword_start = 0;
 -  lexer->keyword_end = 0;
 -  lexer->next_keyword_start = 0;
 -  lexer->line_number = 1;
 -  lexer->last_newline = 0;
 -  lexer->final_newline = 0;
 -  lexer->start_col = 0;
 -}
 -
 -static VALUE CLexer_alloc(VALUE klass)
 -{
 -  VALUE obj;
 -  lexer_state *lxr = ALLOC(lexer_state);
 -  lexer_init(lxr);
 -
 -  obj = Data_Wrap_Struct(klass, NULL, -1, lxr);
 -
 -  return obj;
 -}
 -
 -static VALUE CLexer_init(VALUE self, VALUE listener)
 -{
 -  lexer_state *lxr; 
 -  rb_iv_set(self, "@listener", listener);
 -  
 -  lxr = NULL;
 -  DATA_GET(self, lexer_state, lxr);
 -  lexer_init(lxr);
 -  
 -  return self;
 -}
 -
 -static VALUE CLexer_scan(VALUE self, VALUE input)
 -{
 -  VALUE input_copy;
 -  char *data;
 -  size_t len;
 -  VALUE listener = rb_iv_get(self, "@listener");
 -
 -  lexer_state *lexer;
 -  lexer = NULL;
 -  DATA_GET(self, lexer_state, lexer);
 -
 -  input_copy = rb_str_dup(input);
 -
 -  rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%"));
 -  data = RSTRING_PTR(input_copy);
 -  len = RSTRING_LEN(input_copy);
 -  
 -  if (len == 0) { 
 -    rb_raise(rb_eGherkinLexingError, "No content to lex.");
 -  } else {
 -
 -    const char *p, *pe, *eof;
 -    int cs = 0;
 -    
 -    VALUE current_row = Qnil;
 -
 -    p = data;
 -    pe = data + len;
 -    eof = pe;
 -    
 -    assert(*pe == '\0' && "pointer does not end on NULL");
 -    
 -    
 -#line 918 "ext/gherkin_lexer_zh_cn/gherkin_lexer_zh_cn.c"
 -	{
 -	cs = lexer_start;
 -	}
 -
 -#line 425 "ragel/i18n/zh_cn.c.rl"
 -    
 -#line 925 "ext/gherkin_lexer_zh_cn/gherkin_lexer_zh_cn.c"
 -	{
 -	int _klen;
 -	unsigned int _trans;
 -	const char *_acts;
 -	unsigned int _nacts;
 -	const char *_keys;
 -
 -	if ( p == pe )
 -		goto _test_eof;
 -	if ( cs == 0 )
 -		goto _out;
 -_resume:
 -	_keys = _lexer_trans_keys + _lexer_key_offsets[cs];
 -	_trans = _lexer_index_offsets[cs];
 -
 -	_klen = _lexer_single_lengths[cs];
 -	if ( _klen > 0 ) {
 -		const char *_lower = _keys;
 -		const char *_mid;
 -		const char *_upper = _keys + _klen - 1;
 -		while (1) {
 -			if ( _upper < _lower )
 -				break;
 -
 -			_mid = _lower + ((_upper-_lower) >> 1);
 -			if ( (*p) < *_mid )
 -				_upper = _mid - 1;
 -			else if ( (*p) > *_mid )
 -				_lower = _mid + 1;
 -			else {
 -				_trans += (unsigned int)(_mid - _keys);
 -				goto _match;
 -			}
 -		}
 -		_keys += _klen;
 -		_trans += _klen;
 -	}
 -
 -	_klen = _lexer_range_lengths[cs];
 -	if ( _klen > 0 ) {
 -		const char *_lower = _keys;
 -		const char *_mid;
 -		const char *_upper = _keys + (_klen<<1) - 2;
 -		while (1) {
 -			if ( _upper < _lower )
 -				break;
 -
 -			_mid = _lower + (((_upper-_lower) >> 1) & ~1);
 -			if ( (*p) < _mid[0] )
 -				_upper = _mid - 2;
 -			else if ( (*p) > _mid[1] )
 -				_lower = _mid + 2;
 -			else {
 -				_trans += (unsigned int)((_mid - _keys)>>1);
 -				goto _match;
 -			}
 -		}
 -		_trans += _klen;
 -	}
 -
 -_match:
 -	cs = _lexer_trans_targs[_trans];
 -
 -	if ( _lexer_trans_actions[_trans] == 0 )
 -		goto _again;
 -
 -	_acts = _lexer_actions + _lexer_trans_actions[_trans];
 -	_nacts = (unsigned int) *_acts++;
 -	while ( _nacts-- > 0 )
 -	{
 -		switch ( *_acts++ )
 -		{
 -	case 0:
 -#line 83 "ragel/i18n/zh_cn.c.rl"
 -	{
 -		MARK(content_start, p);
 -    lexer->current_line = lexer->line_number;
 -    lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2;
 -  }
 -	break;
 -	case 1:
 -#line 89 "ragel/i18n/zh_cn.c.rl"
 -	{
 -    MARK(content_start, p);
 -  }
 -	break;
 -	case 2:
 -#line 93 "ragel/i18n/zh_cn.c.rl"
 -	{
 -    lexer->current_line = lexer->line_number;
 -    lexer->start_col = p - data - lexer->last_newline;
 -  }
 -	break;
 -	case 3:
 -#line 98 "ragel/i18n/zh_cn.c.rl"
 -	{
 -    int len = LEN(content_start, PTR_TO(final_newline));
 -    int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end));
 -
 -    if (len < 0) len = 0;
 -    if (type_len < 0) len = 0;
 -
 -    store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line);
 -  }
 -	break;
 -	case 4:
 -#line 108 "ragel/i18n/zh_cn.c.rl"
 -	{ 
 -    MARK(docstring_content_type_start, p);
 -  }
 -	break;
 -	case 5:
 -#line 112 "ragel/i18n/zh_cn.c.rl"
 -	{ 
 -    MARK(docstring_content_type_end, p);
 -  }
 -	break;
 -	case 6:
 -#line 116 "ragel/i18n/zh_cn.c.rl"
 -	{
 -    STORE_KW_END_CON(feature);
 -  }
 -	break;
 -	case 7:
 -#line 120 "ragel/i18n/zh_cn.c.rl"
 -	{
 -    STORE_KW_END_CON(background);
 -  }
 -	break;
 -	case 8:
 -#line 124 "ragel/i18n/zh_cn.c.rl"
 -	{
 -    STORE_KW_END_CON(scenario);
 -  }
 -	break;
 -	case 9:
 -#line 128 "ragel/i18n/zh_cn.c.rl"
 -	{
 -    STORE_KW_END_CON(scenario_outline);
 -  }
 -	break;
 -	case 10:
 -#line 132 "ragel/i18n/zh_cn.c.rl"
 -	{
 -    STORE_KW_END_CON(examples);
 -  }
 -	break;
 -	case 11:
 -#line 136 "ragel/i18n/zh_cn.c.rl"
 -	{
 -    store_kw_con(listener, "step",
 -      PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
 -      PTR_TO(content_start), LEN(content_start, p), 
 -      lexer->current_line);
 -  }
 -	break;
 -	case 12:
 -#line 143 "ragel/i18n/zh_cn.c.rl"
 -	{
 -    STORE_ATTR(comment);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 13:
 -#line 148 "ragel/i18n/zh_cn.c.rl"
 -	{
 -    STORE_ATTR(tag);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 14:
 -#line 153 "ragel/i18n/zh_cn.c.rl"
 -	{
 -    lexer->line_number += 1;
 -    MARK(final_newline, p);
 -  }
 -	break;
 -	case 15:
 -#line 158 "ragel/i18n/zh_cn.c.rl"
 -	{
 -    MARK(last_newline, p + 1);
 -  }
 -	break;
 -	case 16:
 -#line 162 "ragel/i18n/zh_cn.c.rl"
 -	{
 -    if (lexer->mark == 0) {
 -      MARK(mark, p);
 -    }
 -  }
 -	break;
 -	case 17:
 -#line 168 "ragel/i18n/zh_cn.c.rl"
 -	{
 -    MARK(keyword_end, p);
 -    MARK(keyword_start, PTR_TO(mark));
 -    MARK(content_start, p + 1);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 18:
 -#line 175 "ragel/i18n/zh_cn.c.rl"
 -	{
 -    MARK(content_end, p);
 -  }
 -	break;
 -	case 19:
 -#line 179 "ragel/i18n/zh_cn.c.rl"
 -	{
 -    p = p - 1;
 -    lexer->current_line = lexer->line_number;
 -    current_row = rb_ary_new();
 -  }
 -	break;
 -	case 20:
 -#line 185 "ragel/i18n/zh_cn.c.rl"
 -	{
 -		MARK(content_start, p);
 -  }
 -	break;
 -	case 21:
 -#line 189 "ragel/i18n/zh_cn.c.rl"
 -	{
 -    VALUE re_pipe, re_newline, re_backslash;
 -    VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
 -    rb_funcall(con, rb_intern("strip!"), 0);
 -    re_pipe      = rb_reg_regcomp(rb_str_new2("\\\\\\|"));
 -    re_newline   = rb_reg_regcomp(rb_str_new2("\\\\n"));
 -    re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_pipe,      rb_str_new2("|"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_newline,   rb_str_new2("\n"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\"));
 -
 -    rb_ary_push(current_row, con);
 -  }
 -	break;
 -	case 22:
 -#line 203 "ragel/i18n/zh_cn.c.rl"
 -	{
 -    rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
 -  }
 -	break;
 -	case 23:
 -#line 207 "ragel/i18n/zh_cn.c.rl"
 -	{
 -    int line;
 -    if (cs < lexer_first_final) {
 -      size_t count = 0;
 -      VALUE newstr_val;
 -      char *newstr;
 -      int newstr_count = 0;        
 -      size_t len;
 -      const char *buff;
 -      if (lexer->last_newline != 0) {
 -        len = LEN(last_newline, eof);
 -        buff = PTR_TO(last_newline);
 -      } else {
 -        len = strlen(data);
 -        buff = data;
 -      }
 -
 -      /* Allocate as a ruby string so that it gets cleaned up by GC */
 -      newstr_val = rb_str_new(buff, len);
 -      newstr = RSTRING_PTR(newstr_val);
 -
 -
 -      for (count = 0; count < len; count++) {
 -        if(buff[count] == 10) {
 -          newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
 -          break;
 -        } else {
 -          if (buff[count] == '%') {
 -            newstr[newstr_count++] = buff[count];
 -            newstr[newstr_count] = buff[count];
 -          } else {
 -            newstr[newstr_count] = buff[count];
 -          }
 -        }
 -        newstr_count++;
 -      }
 -
 -      line = lexer->line_number;
 -      lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
 -      raise_lexer_error(newstr, line);
 -    } else {
 -      rb_funcall(listener, rb_intern("eof"), 0);
 -    }
 -  }
 -	break;
 -#line 1215 "ext/gherkin_lexer_zh_cn/gherkin_lexer_zh_cn.c"
 -		}
 -	}
 -
 -_again:
 -	if ( cs == 0 )
 -		goto _out;
 -	if ( ++p != pe )
 -		goto _resume;
 -	_test_eof: {}
 -	if ( p == eof )
 -	{
 -	const char *__acts = _lexer_actions + _lexer_eof_actions[cs];
 -	unsigned int __nacts = (unsigned int) *__acts++;
 -	while ( __nacts-- > 0 ) {
 -		switch ( *__acts++ ) {
 -	case 23:
 -#line 207 "ragel/i18n/zh_cn.c.rl"
 -	{
 -    int line;
 -    if (cs < lexer_first_final) {
 -      size_t count = 0;
 -      VALUE newstr_val;
 -      char *newstr;
 -      int newstr_count = 0;        
 -      size_t len;
 -      const char *buff;
 -      if (lexer->last_newline != 0) {
 -        len = LEN(last_newline, eof);
 -        buff = PTR_TO(last_newline);
 -      } else {
 -        len = strlen(data);
 -        buff = data;
 -      }
 -
 -      /* Allocate as a ruby string so that it gets cleaned up by GC */
 -      newstr_val = rb_str_new(buff, len);
 -      newstr = RSTRING_PTR(newstr_val);
 -
 -
 -      for (count = 0; count < len; count++) {
 -        if(buff[count] == 10) {
 -          newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
 -          break;
 -        } else {
 -          if (buff[count] == '%') {
 -            newstr[newstr_count++] = buff[count];
 -            newstr[newstr_count] = buff[count];
 -          } else {
 -            newstr[newstr_count] = buff[count];
 -          }
 -        }
 -        newstr_count++;
 -      }
 -
 -      line = lexer->line_number;
 -      lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
 -      raise_lexer_error(newstr, line);
 -    } else {
 -      rb_funcall(listener, rb_intern("eof"), 0);
 -    }
 -  }
 -	break;
 -#line 1278 "ext/gherkin_lexer_zh_cn/gherkin_lexer_zh_cn.c"
 -		}
 -	}
 -	}
 -
 -	_out: {}
 -	}
 -
 -#line 426 "ragel/i18n/zh_cn.c.rl"
 -
 -    assert(p <= pe && "data overflow after parsing execute");
 -    assert(lexer->content_start <= len && "content starts after data end");
 -    assert(lexer->mark < len && "mark is after data end");
 -    
 -    /* Reset lexer by re-initializing the whole thing */
 -    lexer_init(lexer);
 -
 -    if (cs == lexer_error) {
 -      rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails.");
 -    } else {
 -      return Qtrue;
 -    }
 -  }
 -}
 -
 -void Init_gherkin_lexer_zh_cn()
 -{
 -  mGherkin = rb_define_module("Gherkin");
 -  mGherkinLexer = rb_define_module_under(mGherkin, "Lexer");
 -  rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError"));
 -
 -  mCLexer = rb_define_module_under(mGherkin, "CLexer");
 -  cI18nLexer = rb_define_class_under(mCLexer, "Zh_cn", rb_cObject);
 -  rb_define_alloc_func(cI18nLexer, CLexer_alloc);
 -  rb_define_method(cI18nLexer, "initialize", CLexer_init, 1);
 -  rb_define_method(cI18nLexer, "scan", CLexer_scan, 1);
 -}
 -
diff --cc ext/gherkin_lexer_zh_tw/extconf.rb
index 3d9cb62,3d9cb62..0000000
deleted file mode 100644,100644
--- a/ext/gherkin_lexer_zh_tw/extconf.rb
+++ /dev/null
@@@ -1,6 -1,6 +1,0 @@@
--require 'mkmf'
--CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags']
--$CFLAGS << ' -O0 -Wall' if CONFIG['CC'] =~ /gcc|clang/
--dir_config("gherkin_lexer_zh_tw")
--have_library("c", "main")
--create_makefile("gherkin_lexer_zh_tw")
diff --cc ext/gherkin_lexer_zh_tw/gherkin_lexer_zh_tw.c
index 3c483a1,ab845fd..0000000
deleted file mode 100644,100644
--- a/ext/gherkin_lexer_zh_tw/gherkin_lexer_zh_tw.c
+++ /dev/null
@@@ -1,1307 -1,1307 +1,0 @@@
--
- #line 1 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
- #include <assert.h>
- #include <ruby.h>
- 
- #if defined(_WIN32)
- #include <stddef.h>
- #endif
- 
- #ifdef HAVE_RUBY_RE_H
- #include <ruby/re.h>
- #else
- #include <re.h>
- #endif
- 
- #ifdef HAVE_RUBY_ENCODING_H
- #include <ruby/encoding.h>
- #define ENCODED_STR_NEW(ptr, len) \
-     rb_enc_str_new(ptr, len, rb_utf8_encoding())
- #else
- #define ENCODED_STR_NEW(ptr, len) \
-     rb_str_new(ptr, len)
- #endif
- 
- #ifndef RSTRING_PTR
- #define RSTRING_PTR(s) (RSTRING(s)->ptr)
- #endif
- 
- #ifndef RSTRING_LEN
- #define RSTRING_LEN(s) (RSTRING(s)->len)
- #endif
- 
- #define DATA_GET(FROM, TYPE, NAME) \
-   Data_Get_Struct(FROM, TYPE, NAME); \
-   if (NAME == NULL) { \
-     rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \
-   }
-  
- typedef struct lexer_state {
-   int content_len;
-   int line_number;
-   int current_line;
-   int start_col;
-   size_t mark;
-   size_t keyword_start;
-   size_t keyword_end;
-   size_t next_keyword_start;
-   size_t content_start;
-   size_t content_end;
-   size_t docstring_content_type_start;
-   size_t docstring_content_type_end;
-   size_t query_start;
-   size_t last_newline;
-   size_t final_newline;
- } lexer_state;
- 
- static VALUE mGherkin;
- static VALUE mGherkinLexer;
- static VALUE mCLexer;
- static VALUE cI18nLexer;
- static VALUE rb_eGherkinLexingError;
- 
- #define LEN(AT, P) (P - data - lexer->AT)
- #define MARK(M, P) (lexer->M = (P) - data)
- #define PTR_TO(P) (data + lexer->P)
- 
- #define STORE_KW_END_CON(EVENT) \
-   store_multiline_kw_con(listener, # EVENT, \
-     PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \
-     PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \
-     lexer->current_line, lexer->start_col); \
-     if (lexer->content_end != 0) { \
-       p = PTR_TO(content_end - 1); \
-     } \
-     lexer->content_end = 0
- 
- #define STORE_ATTR(ATTR) \
-     store_attr(listener, # ATTR, \
-       PTR_TO(content_start), LEN(content_start, p), \
-       lexer->line_number)
- 
- 
- #line 254 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
- 
- 
- /** Data **/
- 
- #line 89 "ext/gherkin_lexer_zh_tw/gherkin_lexer_zh_tw.c"
- static const char _lexer_actions[] = {
- 	0, 1, 0, 1, 1, 1, 2, 1, 
- 	3, 1, 4, 1, 5, 1, 6, 1, 
- 	7, 1, 8, 1, 9, 1, 10, 1, 
- 	11, 1, 12, 1, 13, 1, 16, 1, 
- 	17, 1, 18, 1, 19, 1, 20, 1, 
- 	21, 1, 22, 1, 23, 2, 1, 18, 
- 	2, 4, 5, 2, 13, 0, 2, 14, 
- 	15, 2, 17, 0, 2, 17, 2, 2, 
- 	17, 16, 2, 17, 19, 2, 18, 6, 
- 	2, 18, 7, 2, 18, 8, 2, 18, 
- 	9, 2, 18, 10, 2, 18, 16, 2, 
- 	20, 21, 2, 22, 0, 2, 22, 2, 
- 	2, 22, 16, 2, 22, 19, 3, 3, 
- 	14, 15, 3, 5, 14, 15, 3, 11, 
- 	14, 15, 3, 12, 14, 15, 3, 13, 
- 	14, 15, 3, 14, 15, 18, 3, 17, 
- 	0, 11, 3, 17, 14, 15, 4, 1, 
- 	14, 15, 18, 4, 4, 5, 14, 15, 
- 	4, 17, 0, 14, 15, 5, 17, 0, 
- 	11, 14, 15
- };
- 
- static const short _lexer_key_offsets[] = {
- 	0, 0, 16, 19, 20, 21, 22, 23, 
- 	25, 27, 42, 46, 47, 49, 51, 52, 
- 	53, 54, 55, 57, 58, 59, 60, 62, 
- 	63, 64, 65, 66, 67, 68, 69, 70, 
- 	83, 86, 88, 90, 92, 94, 109, 110, 
- 	111, 113, 114, 115, 116, 117, 118, 119, 
- 	120, 121, 134, 137, 139, 141, 143, 145, 
- 	147, 149, 151, 153, 158, 160, 163, 166, 
- 	168, 170, 172, 174, 177, 179, 181, 183, 
- 	186, 188, 190, 192, 194, 196, 198, 200, 
- 	202, 204, 206, 208, 210, 212, 214, 216, 
- 	218, 220, 222, 224, 226, 228, 230, 232, 
- 	234, 236, 238, 240, 242, 244, 246, 248, 
- 	250, 252, 254, 256, 258, 260, 262, 264, 
- 	266, 267, 268, 269, 270, 271, 272, 273, 
- 	275, 277, 282, 287, 292, 297, 301, 305, 
- 	307, 308, 309, 310, 311, 312, 313, 314, 
- 	315, 316, 317, 318, 319, 320, 321, 322, 
- 	323, 328, 335, 340, 344, 350, 353, 355, 
- 	361, 376, 378, 380, 382, 384, 389, 391, 
- 	394, 397, 399, 401, 403, 405, 408, 410, 
- 	412, 414, 416, 418, 420, 422, 424, 426, 
- 	428, 430, 432, 434, 436, 438, 440, 442, 
- 	444, 446, 448, 450, 452, 454, 456, 458, 
- 	460, 462, 464, 466, 468, 470, 472, 474, 
- 	476, 478, 480, 482, 484, 485, 486, 499, 
- 	502, 504, 506, 508, 510, 512, 514, 516, 
- 	518, 523, 525, 528, 531, 533, 535, 537, 
- 	539, 542, 544, 546, 548, 551, 553, 555, 
- 	557, 559, 561, 563, 565, 567, 569, 571, 
- 	573, 575, 577, 579, 581, 583, 585, 587, 
- 	590, 592, 594, 596, 598, 600, 602, 604, 
- 	606, 608, 610, 612, 614, 616, 618, 620, 
- 	622, 624, 626, 628, 630, 632, 634, 636, 
- 	638, 640, 641, 642, 643, 644, 645, 646, 
- 	656, 658, 660, 662, 664, 666, 668, 671, 
- 	674, 676, 678, 680, 683, 685, 687, 689, 
- 	691, 693, 695, 697, 699, 701, 703, 705, 
- 	707, 709, 711, 713, 715, 717, 719, 721, 
- 	723, 725, 727, 729, 731, 733, 735, 737, 
- 	739, 741, 743, 745, 746, 747, 748, 749, 
- 	750, 751, 752, 753, 754, 755, 756, 757, 
- 	758, 759, 760, 761, 762, 763, 770, 772, 
- 	774, 776, 778, 780, 782, 783, 784
- };
- 
- static const char _lexer_trans_keys[] = {
- 	-28, -27, -25, -24, -23, -17, 10, 32, 
- 	34, 35, 37, 42, 64, 124, 9, 13, 
- 	-72, -67, -66, -90, -28, -72, -108, 10, 
- 	13, 10, 13, -28, -27, -25, -24, -23, 
- 	10, 32, 34, 35, 37, 42, 64, 124, 
- 	9, 13, -127, -118, -112, -96, -121, -27, 
- 	-24, -90, -82, -126, -102, -88, -83, -121, 
- 	-97, -26, -100, -84, -27, 58, -92, -89, 
- 	-25, -74, -79, 58, 10, 10, -28, -27, 
- 	-25, -24, -23, 10, 32, 35, 37, 42, 
- 	64, 9, 13, -72, -67, 10, -90, 10, 
- 	-28, 10, -72, 10, -108, 10, -28, -27, 
- 	-25, -24, -23, 10, 32, 34, 35, 37, 
- 	42, 64, 124, 9, 13, -107, -74, -128, 
- 	-125, -116, -116, -26, -103, -81, 58, 10, 
- 	10, -28, -27, -25, -24, -23, 10, 32, 
- 	35, 37, 42, 64, 9, 13, -72, -67, 
- 	10, -90, 10, -28, 10, -72, 10, -108, 
- 	10, -122, 10, -26, 10, -104, 10, -81, 
- 	10, -127, -118, -112, -96, 10, -121, 10, 
- 	-27, -24, 10, -90, -82, 10, -126, 10, 
- 	-102, 10, -88, 10, -83, 10, -121, -97, 
- 	10, -26, 10, -100, 10, -84, 10, -27, 
- 	10, 58, -92, 10, -89, 10, -25, 10, 
- 	-74, 10, -79, 10, 10, 58, -24, 10, 
- 	-125, 10, -67, 10, -116, 10, -26, 10, 
- 	-103, 10, -76, 10, -26, 10, -103, 10, 
- 	-81, 10, -107, 10, -74, 10, -128, 10, 
- 	-116, 10, -126, 10, -93, 10, -23, 10, 
- 	-70, 10, -68, 10, 10, 95, 10, 70, 
- 	10, 69, 10, 65, 10, 84, 10, 85, 
- 	10, 82, 10, 69, 10, 95, 10, 69, 
- 	10, 78, 10, 68, 10, 95, 10, 37, 
- 	10, 32, -126, -93, -23, -70, -68, 34, 
- 	34, 10, 13, 10, 13, 10, 32, 34, 
- 	9, 13, 10, 32, 34, 9, 13, 10, 
- 	32, 34, 9, 13, 10, 32, 34, 9, 
- 	13, 10, 32, 9, 13, 10, 32, 9, 
- 	13, 10, 13, 10, 95, 70, 69, 65, 
- 	84, 85, 82, 69, 95, 69, 78, 68, 
- 	95, 37, 32, 13, 32, 64, 9, 10, 
- 	9, 10, 13, 32, 64, 11, 12, 10, 
- 	32, 64, 9, 13, 32, 124, 9, 13, 
- 	10, 32, 92, 124, 9, 13, 10, 92, 
- 	124, 10, 92, 10, 32, 92, 124, 9, 
- 	13, -28, -27, -25, -24, -23, 10, 32, 
- 	34, 35, 37, 42, 64, 124, 9, 13, 
- 	-122, 10, -26, 10, -104, 10, -81, 10, 
- 	-127, -118, -112, -96, 10, -121, 10, -27, 
- 	-24, 10, -90, -82, 10, -126, 10, -102, 
- 	10, -88, 10, -83, 10, -121, -97, 10, 
- 	-26, 10, -100, 10, -84, 10, 10, 58, 
- 	-24, 10, -125, 10, -67, 10, -116, 10, 
- 	-26, 10, -103, 10, -76, 10, -26, 10, 
- 	-103, 10, -81, 10, -107, 10, -74, 10, 
- 	-128, 10, -116, 10, -126, 10, -93, 10, 
- 	-23, 10, -70, 10, -68, 10, 10, 95, 
- 	10, 70, 10, 69, 10, 65, 10, 84, 
- 	10, 85, 10, 82, 10, 69, 10, 95, 
- 	10, 69, 10, 78, 10, 68, 10, 95, 
- 	10, 37, 10, 32, 10, 10, -28, -27, 
- 	-25, -24, -23, 10, 32, 35, 37, 42, 
- 	64, 9, 13, -72, -67, 10, -90, 10, 
- 	-28, 10, -72, 10, -108, 10, -122, 10, 
- 	-26, 10, -104, 10, -81, 10, -127, -118, 
- 	-112, -96, 10, -121, 10, -27, -24, 10, 
- 	-90, -82, 10, -126, 10, -102, 10, -88, 
- 	10, -83, 10, -121, -97, 10, -26, 10, 
- 	-100, 10, -84, 10, -27, 10, 58, -92, 
- 	10, -89, 10, -25, 10, -74, 10, -79, 
- 	10, 10, 58, -24, 10, -125, 10, -67, 
- 	10, -116, 10, -26, 10, -103, 10, -76, 
- 	10, -26, 10, -103, 10, -81, 10, -107, 
- 	10, -74, 10, -128, -125, 10, -116, 10, 
- 	-116, 10, -26, 10, -103, 10, -81, 10, 
- 	-126, 10, -93, 10, -23, 10, -70, 10, 
- 	-68, 10, 10, 95, 10, 70, 10, 69, 
- 	10, 65, 10, 84, 10, 85, 10, 82, 
- 	10, 69, 10, 95, 10, 69, 10, 78, 
- 	10, 68, 10, 95, 10, 37, 10, 32, 
- 	-24, -125, -67, 58, 10, 10, -28, -27, 
- 	-24, 10, 32, 35, 37, 64, 9, 13, 
- 	-66, 10, -117, 10, -27, 10, -83, 10, 
- 	-112, 10, 10, 58, -118, -96, 10, -121, 
- 	-97, 10, -26, 10, -100, 10, -84, 10, 
- 	-27, 10, 58, -92, 10, -89, 10, -25, 
- 	10, -74, 10, -79, 10, -24, 10, -125, 
- 	10, -67, 10, -76, 10, -26, 10, -103, 
- 	10, -81, 10, -125, 10, -116, 10, -26, 
- 	10, -103, 10, -81, 10, 10, 95, 10, 
- 	70, 10, 69, 10, 65, 10, 84, 10, 
- 	85, 10, 82, 10, 69, 10, 95, 10, 
- 	69, 10, 78, 10, 68, 10, 95, 10, 
- 	37, -116, -26, -103, -76, -26, -103, -81, 
- 	-122, -26, -104, -81, -117, -27, -83, -112, 
- 	58, 10, 10, -27, 10, 32, 35, 124, 
- 	9, 13, -118, 10, -97, 10, -24, 10, 
- 	-125, 10, -67, 10, 10, 58, -69, -65, 
- 	0
- };
- 
- static const char _lexer_single_lengths[] = {
- 	0, 14, 3, 1, 1, 1, 1, 2, 
- 	2, 13, 4, 1, 2, 2, 1, 1, 
- 	1, 1, 2, 1, 1, 1, 2, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 11, 
- 	3, 2, 2, 2, 2, 13, 1, 1, 
- 	2, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 11, 3, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 5, 2, 3, 3, 2, 
- 	2, 2, 2, 3, 2, 2, 2, 3, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	1, 1, 1, 1, 1, 1, 1, 2, 
- 	2, 3, 3, 3, 3, 2, 2, 2, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	3, 5, 3, 2, 4, 3, 2, 4, 
- 	13, 2, 2, 2, 2, 5, 2, 3, 
- 	3, 2, 2, 2, 2, 3, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 1, 1, 11, 3, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	5, 2, 3, 3, 2, 2, 2, 2, 
- 	3, 2, 2, 2, 3, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 3, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 1, 1, 1, 1, 1, 1, 8, 
- 	2, 2, 2, 2, 2, 2, 3, 3, 
- 	2, 2, 2, 3, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 2, 2, 2, 2, 2, 
- 	2, 2, 2, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 1, 1, 1, 
- 	1, 1, 1, 1, 1, 5, 2, 2, 
- 	2, 2, 2, 2, 1, 1, 0
- };
- 
- static const char _lexer_range_lengths[] = {
- 	0, 1, 0, 0, 0, 0, 0, 0, 
- 	0, 1, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 1, 
- 	0, 0, 0, 0, 0, 1, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 1, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 1, 1, 1, 1, 1, 1, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	1, 1, 1, 1, 1, 0, 0, 1, 
- 	1, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 1, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 1, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0, 0, 
- 	0, 0, 0, 0, 0, 1, 0, 0, 
- 	0, 0, 0, 0, 0, 0, 0
- };
- 
- static const short _lexer_index_offsets[] = {
- 	0, 0, 16, 20, 22, 24, 26, 28, 
- 	31, 34, 49, 54, 56, 59, 62, 64, 
- 	66, 68, 70, 73, 75, 77, 79, 82, 
- 	84, 86, 88, 90, 92, 94, 96, 98, 
- 	111, 115, 118, 121, 124, 127, 142, 144, 
- 	146, 149, 151, 153, 155, 157, 159, 161, 
- 	163, 165, 178, 182, 185, 188, 191, 194, 
- 	197, 200, 203, 206, 212, 215, 219, 223, 
- 	226, 229, 232, 235, 239, 242, 245, 248, 
- 	252, 255, 258, 261, 264, 267, 270, 273, 
- 	276, 279, 282, 285, 288, 291, 294, 297, 
- 	300, 303, 306, 309, 312, 315, 318, 321, 
- 	324, 327, 330, 333, 336, 339, 342, 345, 
- 	348, 351, 354, 357, 360, 363, 366, 369, 
- 	372, 374, 376, 378, 380, 382, 384, 386, 
- 	389, 392, 397, 402, 407, 412, 416, 420, 
- 	423, 425, 427, 429, 431, 433, 435, 437, 
- 	439, 441, 443, 445, 447, 449, 451, 453, 
- 	455, 460, 467, 472, 476, 482, 486, 489, 
- 	495, 510, 513, 516, 519, 522, 528, 531, 
- 	535, 539, 542, 545, 548, 551, 555, 558, 
- 	561, 564, 567, 570, 573, 576, 579, 582, 
- 	585, 588, 591, 594, 597, 600, 603, 606, 
- 	609, 612, 615, 618, 621, 624, 627, 630, 
- 	633, 636, 639, 642, 645, 648, 651, 654, 
- 	657, 660, 663, 666, 669, 671, 673, 686, 
- 	690, 693, 696, 699, 702, 705, 708, 711, 
- 	714, 720, 723, 727, 731, 734, 737, 740, 
- 	743, 747, 750, 753, 756, 760, 763, 766, 
- 	769, 772, 775, 778, 781, 784, 787, 790, 
- 	793, 796, 799, 802, 805, 808, 811, 814, 
- 	818, 821, 824, 827, 830, 833, 836, 839, 
- 	842, 845, 848, 851, 854, 857, 860, 863, 
- 	866, 869, 872, 875, 878, 881, 884, 887, 
- 	890, 893, 895, 897, 899, 901, 903, 905, 
- 	915, 918, 921, 924, 927, 930, 933, 937, 
- 	941, 944, 947, 950, 954, 957, 960, 963, 
- 	966, 969, 972, 975, 978, 981, 984, 987, 
- 	990, 993, 996, 999, 1002, 1005, 1008, 1011, 
- 	1014, 1017, 1020, 1023, 1026, 1029, 1032, 1035, 
- 	1038, 1041, 1044, 1047, 1049, 1051, 1053, 1055, 
- 	1057, 1059, 1061, 1063, 1065, 1067, 1069, 1071, 
- 	1073, 1075, 1077, 1079, 1081, 1083, 1090, 1093, 
- 	1096, 1099, 1102, 1105, 1108, 1110, 1112
- };
- 
- static const short _lexer_trans_targs[] = {
- 	2, 10, 38, 40, 112, 348, 9, 9, 
- 	117, 127, 129, 143, 144, 147, 9, 0, 
- 	3, 330, 334, 0, 4, 0, 5, 0, 
- 	6, 0, 7, 0, 9, 128, 8, 9, 
- 	128, 8, 2, 10, 38, 40, 112, 9, 
- 	9, 117, 127, 129, 143, 144, 147, 9, 
- 	0, 11, 18, 323, 326, 0, 12, 0, 
- 	13, 16, 0, 14, 15, 0, 7, 0, 
- 	7, 0, 17, 0, 7, 0, 19, 273, 
- 	0, 20, 0, 21, 0, 22, 0, 23, 
- 	204, 0, 24, 0, 25, 0, 26, 0, 
- 	27, 0, 28, 0, 29, 0, 31, 30, 
- 	31, 30, 32, 157, 180, 182, 184, 31, 
- 	31, 9, 189, 203, 9, 31, 30, 33, 
- 	153, 31, 30, 34, 31, 30, 35, 31, 
- 	30, 36, 31, 30, 37, 31, 30, 2, 
- 	10, 38, 40, 112, 9, 9, 117, 127, 
- 	129, 143, 144, 147, 9, 0, 39, 0, 
- 	7, 0, 41, 42, 0, 4, 0, 43, 
- 	0, 44, 0, 45, 0, 46, 0, 47, 
- 	0, 49, 48, 49, 48, 50, 59, 88, 
- 	90, 92, 49, 49, 9, 97, 111, 9, 
- 	49, 48, 51, 55, 49, 48, 52, 49, 
- 	48, 53, 49, 48, 54, 49, 48, 37, 
- 	49, 48, 56, 49, 48, 57, 49, 48, 
- 	58, 49, 48, 37, 49, 48, 60, 67, 
- 	81, 84, 49, 48, 61, 49, 48, 62, 
- 	65, 49, 48, 63, 64, 49, 48, 37, 
- 	49, 48, 37, 49, 48, 66, 49, 48, 
- 	37, 49, 48, 68, 78, 49, 48, 69, 
- 	49, 48, 70, 49, 48, 71, 49, 48, 
- 	72, 49, 37, 48, 73, 49, 48, 74, 
- 	49, 48, 75, 49, 48, 76, 49, 48, 
- 	77, 49, 48, 49, 37, 48, 79, 49, 
- 	48, 80, 49, 48, 77, 49, 48, 82, 
- 	49, 48, 83, 49, 48, 63, 49, 48, 
- 	85, 49, 48, 86, 49, 48, 87, 49, 
- 	48, 71, 49, 48, 89, 49, 48, 37, 
- 	49, 48, 91, 49, 48, 52, 49, 48, 
- 	93, 49, 48, 94, 49, 48, 95, 49, 
- 	48, 96, 49, 48, 37, 49, 48, 49, 
- 	98, 48, 49, 99, 48, 49, 100, 48, 
- 	49, 101, 48, 49, 102, 48, 49, 103, 
- 	48, 49, 104, 48, 49, 105, 48, 49, 
- 	106, 48, 49, 107, 48, 49, 108, 48, 
- 	49, 109, 48, 49, 110, 48, 49, 9, 
- 	48, 49, 37, 48, 113, 0, 114, 0, 
- 	115, 0, 116, 0, 7, 0, 118, 0, 
- 	119, 0, 121, 120, 120, 121, 120, 120, 
- 	122, 122, 123, 122, 122, 122, 122, 123, 
- 	122, 122, 122, 122, 124, 122, 122, 122, 
- 	122, 125, 122, 122, 9, 126, 126, 0, 
- 	9, 126, 126, 0, 9, 128, 127, 9, 
- 	0, 130, 0, 131, 0, 132, 0, 133, 
- 	0, 134, 0, 135, 0, 136, 0, 137, 
- 	0, 138, 0, 139, 0, 140, 0, 141, 
- 	0, 142, 0, 350, 0, 7, 0, 0, 
- 	0, 0, 0, 145, 146, 9, 146, 146, 
- 	144, 145, 145, 9, 146, 144, 146, 0, 
- 	147, 148, 147, 0, 152, 151, 150, 148, 
- 	151, 149, 0, 150, 148, 149, 0, 150, 
- 	149, 152, 151, 150, 148, 151, 149, 2, 
- 	10, 38, 40, 112, 152, 152, 117, 127, 
- 	129, 143, 144, 147, 152, 0, 154, 31, 
- 	30, 155, 31, 30, 156, 31, 30, 37, 
- 	31, 30, 158, 165, 173, 176, 31, 30, 
- 	159, 31, 30, 160, 163, 31, 30, 161, 
- 	162, 31, 30, 37, 31, 30, 37, 31, 
- 	30, 164, 31, 30, 37, 31, 30, 166, 
- 	170, 31, 30, 167, 31, 30, 168, 31, 
- 	30, 169, 31, 30, 31, 37, 30, 171, 
- 	31, 30, 172, 31, 30, 169, 31, 30, 
- 	174, 31, 30, 175, 31, 30, 161, 31, 
- 	30, 177, 31, 30, 178, 31, 30, 179, 
- 	31, 30, 169, 31, 30, 181, 31, 30, 
- 	37, 31, 30, 183, 31, 30, 34, 31, 
- 	30, 185, 31, 30, 186, 31, 30, 187, 
- 	31, 30, 188, 31, 30, 37, 31, 30, 
- 	31, 190, 30, 31, 191, 30, 31, 192, 
- 	30, 31, 193, 30, 31, 194, 30, 31, 
- 	195, 30, 31, 196, 30, 31, 197, 30, 
- 	31, 198, 30, 31, 199, 30, 31, 200, 
- 	30, 31, 201, 30, 31, 202, 30, 31, 
- 	9, 30, 31, 37, 30, 206, 205, 206, 
- 	205, 207, 216, 245, 247, 253, 206, 206, 
- 	9, 258, 272, 9, 206, 205, 208, 212, 
- 	206, 205, 209, 206, 205, 210, 206, 205, 
- 	211, 206, 205, 37, 206, 205, 213, 206, 
- 	205, 214, 206, 205, 215, 206, 205, 37, 
- 	206, 205, 217, 224, 238, 241, 206, 205, 
- 	218, 206, 205, 219, 222, 206, 205, 220, 
- 	221, 206, 205, 37, 206, 205, 37, 206, 
- 	205, 223, 206, 205, 37, 206, 205, 225, 
- 	235, 206, 205, 226, 206, 205, 227, 206, 
- 	205, 228, 206, 205, 229, 206, 37, 205, 
- 	230, 206, 205, 231, 206, 205, 232, 206, 
- 	205, 233, 206, 205, 234, 206, 205, 206, 
- 	37, 205, 236, 206, 205, 237, 206, 205, 
- 	234, 206, 205, 239, 206, 205, 240, 206, 
- 	205, 220, 206, 205, 242, 206, 205, 243, 
- 	206, 205, 244, 206, 205, 228, 206, 205, 
- 	246, 206, 205, 37, 206, 205, 248, 249, 
- 	206, 205, 209, 206, 205, 250, 206, 205, 
- 	251, 206, 205, 252, 206, 205, 234, 206, 
- 	205, 254, 206, 205, 255, 206, 205, 256, 
- 	206, 205, 257, 206, 205, 37, 206, 205, 
- 	206, 259, 205, 206, 260, 205, 206, 261, 
- 	205, 206, 262, 205, 206, 263, 205, 206, 
- 	264, 205, 206, 265, 205, 206, 266, 205, 
- 	206, 267, 205, 206, 268, 205, 206, 269, 
- 	205, 206, 270, 205, 206, 271, 205, 206, 
- 	9, 205, 206, 37, 205, 274, 0, 275, 
- 	0, 276, 0, 277, 0, 279, 278, 279, 
- 	278, 280, 286, 304, 279, 279, 9, 309, 
- 	9, 279, 278, 281, 279, 278, 282, 279, 
- 	278, 283, 279, 278, 284, 279, 278, 285, 
- 	279, 278, 279, 37, 278, 287, 300, 279, 
- 	278, 288, 297, 279, 278, 289, 279, 278, 
- 	290, 279, 278, 291, 279, 278, 292, 279, 
- 	37, 278, 293, 279, 278, 294, 279, 278, 
- 	295, 279, 278, 296, 279, 278, 285, 279, 
- 	278, 298, 279, 278, 299, 279, 278, 285, 
- 	279, 278, 301, 279, 278, 302, 279, 278, 
- 	303, 279, 278, 291, 279, 278, 305, 279, 
- 	278, 306, 279, 278, 307, 279, 278, 308, 
- 	279, 278, 285, 279, 278, 279, 310, 278, 
- 	279, 311, 278, 279, 312, 278, 279, 313, 
- 	278, 279, 314, 278, 279, 315, 278, 279, 
- 	316, 278, 279, 317, 278, 279, 318, 278, 
- 	279, 319, 278, 279, 320, 278, 279, 321, 
- 	278, 279, 322, 278, 279, 9, 278, 324, 
- 	0, 325, 0, 14, 0, 327, 0, 328, 
- 	0, 329, 0, 22, 0, 331, 0, 332, 
- 	0, 333, 0, 7, 0, 335, 0, 336, 
- 	0, 337, 0, 338, 0, 339, 0, 341, 
- 	340, 341, 340, 342, 341, 341, 9, 9, 
- 	341, 340, 343, 341, 340, 344, 341, 340, 
- 	345, 341, 340, 346, 341, 340, 347, 341, 
- 	340, 341, 37, 340, 349, 0, 9, 0, 
- 	0, 0
- };
- 
- static const unsigned char _lexer_trans_actions[] = {
- 	29, 29, 29, 29, 29, 0, 54, 0, 
- 	5, 1, 0, 29, 1, 35, 0, 43, 
- 	0, 0, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 149, 126, 57, 110, 
- 	23, 0, 29, 29, 29, 29, 29, 54, 
- 	0, 5, 1, 0, 29, 1, 35, 0, 
- 	43, 0, 0, 0, 0, 43, 0, 43, 
- 	0, 0, 43, 0, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 144, 57, 
- 	54, 0, 84, 84, 84, 84, 84, 54, 
- 	0, 78, 33, 84, 78, 0, 0, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 19, 54, 0, 63, 
- 	63, 63, 63, 63, 130, 31, 60, 57, 
- 	31, 63, 57, 66, 31, 43, 0, 43, 
- 	0, 43, 0, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 144, 57, 54, 0, 84, 84, 84, 
- 	84, 84, 54, 0, 72, 33, 84, 72, 
- 	0, 0, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 15, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 15, 54, 0, 0, 0, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	0, 54, 0, 0, 0, 54, 0, 15, 
- 	54, 0, 15, 54, 0, 0, 54, 0, 
- 	15, 54, 0, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 15, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 54, 15, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 15, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 15, 54, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 15, 
- 	0, 54, 15, 0, 0, 43, 0, 43, 
- 	0, 43, 0, 43, 0, 43, 0, 43, 
- 	0, 43, 139, 48, 9, 106, 11, 0, 
- 	134, 45, 45, 45, 3, 122, 33, 33, 
- 	33, 0, 122, 33, 33, 33, 0, 122, 
- 	33, 0, 33, 0, 102, 7, 7, 43, 
- 	54, 0, 0, 43, 114, 25, 0, 54, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 43, 
- 	43, 43, 43, 0, 27, 118, 27, 27, 
- 	51, 27, 0, 54, 0, 1, 0, 43, 
- 	0, 0, 0, 43, 54, 37, 37, 87, 
- 	37, 37, 43, 0, 39, 0, 43, 0, 
- 	0, 54, 0, 0, 39, 0, 0, 96, 
- 	96, 96, 96, 96, 54, 0, 93, 90, 
- 	41, 96, 90, 99, 0, 43, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 19, 
- 	54, 0, 0, 0, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 0, 54, 0, 0, 
- 	0, 54, 0, 19, 54, 0, 19, 54, 
- 	0, 0, 54, 0, 19, 54, 0, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 54, 19, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	19, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 19, 54, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	19, 0, 54, 19, 0, 144, 57, 54, 
- 	0, 84, 84, 84, 84, 84, 54, 0, 
- 	75, 33, 84, 75, 0, 0, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 17, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 17, 
- 	54, 0, 0, 0, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 0, 54, 0, 0, 
- 	0, 54, 0, 17, 54, 0, 17, 54, 
- 	0, 0, 54, 0, 17, 54, 0, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 17, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 54, 
- 	17, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 17, 54, 0, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 17, 54, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	17, 0, 54, 17, 0, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 144, 57, 54, 
- 	0, 84, 84, 84, 54, 0, 69, 33, 
- 	69, 0, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 54, 13, 0, 0, 0, 54, 
- 	0, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	13, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 0, 54, 0, 0, 54, 0, 0, 
- 	54, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 13, 0, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 0, 
- 	43, 0, 43, 0, 43, 0, 43, 144, 
- 	57, 54, 0, 84, 54, 0, 81, 81, 
- 	0, 0, 0, 54, 0, 0, 54, 0, 
- 	0, 54, 0, 0, 54, 0, 0, 54, 
- 	0, 54, 21, 0, 0, 43, 0, 43, 
- 	0, 0
- };
- 
- static const unsigned char _lexer_eof_actions[] = {
- 	0, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43, 43, 
- 	43, 43, 43, 43, 43, 43, 43
- };
- 
- static const int lexer_start = 1;
- static const int lexer_first_final = 350;
- static const int lexer_error = 0;
- 
- static const int lexer_en_main = 1;
- 
- 
- #line 258 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
- 
- static VALUE 
- unindent(VALUE con, int start_col)
- {
-   VALUE re;
-   // Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters
-   char pat[32]; 
-   snprintf(pat, 32, "^[\t ]{0,%d}", start_col); 
-   re = rb_reg_regcomp(rb_str_new2(pat));
-   rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2(""));
- 
-   return Qnil;
- 
- }
- 
- static void 
- store_kw_con(VALUE listener, const char * event_name, 
-              const char * keyword_at, size_t keyword_length, 
-              const char * at,         size_t length, 
-              int current_line)
- {
-   VALUE con = Qnil, kw = Qnil;
-   kw = ENCODED_STR_NEW(keyword_at, keyword_length);
-   con = ENCODED_STR_NEW(at, length);
-   rb_funcall(con, rb_intern("strip!"), 0);
-   rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); 
- }
- 
- static void
- store_multiline_kw_con(VALUE listener, const char * event_name,
-                       const char * keyword_at, size_t keyword_length,
-                       const char * at,         size_t length,
-                       int current_line, int start_col)
- {
-   VALUE split;
-   VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil;
- 
-   kw = ENCODED_STR_NEW(keyword_at, keyword_length);
-   con = ENCODED_STR_NEW(at, length);
- 
-   unindent(con, start_col);
-   
-   split = rb_str_split(con, "\n");
- 
-   name = rb_funcall(split, rb_intern("shift"), 0);
-   desc = rb_ary_join(split, rb_str_new2( "\n" ));
- 
-   if( name == Qnil ) 
-   {
-     name = rb_str_new2("");
-   }
-   if( rb_funcall(desc, rb_intern("size"), 0) == 0) 
-   {
-     desc = rb_str_new2("");
-   }
-   rb_funcall(name, rb_intern("strip!"), 0);
-   rb_funcall(desc, rb_intern("rstrip!"), 0);
-   rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); 
- }
- 
- static void 
- store_attr(VALUE listener, const char * attr_type,
-            const char * at, size_t length, 
-            int line)
- {
-   VALUE val = ENCODED_STR_NEW(at, length);
-   rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line));
- }
- static void 
- store_docstring_content(VALUE listener, 
-           int start_col, 
-           const char *type_at, size_t type_length,
-           const char *at, size_t length, 
-           int current_line)
- {
-   VALUE re2;
-   VALUE unescape_escaped_quotes;
-   VALUE con = ENCODED_STR_NEW(at, length);
-   VALUE con_type = ENCODED_STR_NEW(type_at, type_length);
- 
-   unindent(con, start_col);
- 
-   re2 = rb_reg_regcomp(rb_str_new2("\r\\Z"));
-   unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\""));
-   rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2(""));
-   rb_funcall(con_type, rb_intern("strip!"), 0);
-   rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\""));
-   rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line));
- }
- static void 
- raise_lexer_error(const char * at, int line)
- { 
-   rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at);
- }
- 
- static void lexer_init(lexer_state *lexer) {
-   lexer->content_start = 0;
-   lexer->content_end = 0;
-   lexer->content_len = 0;
-   lexer->docstring_content_type_start = 0;
-   lexer->docstring_content_type_end = 0;
-   lexer->mark = 0;
-   lexer->keyword_start = 0;
-   lexer->keyword_end = 0;
-   lexer->next_keyword_start = 0;
-   lexer->line_number = 1;
-   lexer->last_newline = 0;
-   lexer->final_newline = 0;
-   lexer->start_col = 0;
- }
- 
- static VALUE CLexer_alloc(VALUE klass)
- {
-   VALUE obj;
-   lexer_state *lxr = ALLOC(lexer_state);
-   lexer_init(lxr);
- 
-   obj = Data_Wrap_Struct(klass, NULL, -1, lxr);
- 
-   return obj;
- }
- 
- static VALUE CLexer_init(VALUE self, VALUE listener)
- {
-   lexer_state *lxr; 
-   rb_iv_set(self, "@listener", listener);
-   
-   lxr = NULL;
-   DATA_GET(self, lexer_state, lxr);
-   lexer_init(lxr);
-   
-   return self;
- }
- 
- static VALUE CLexer_scan(VALUE self, VALUE input)
- {
-   VALUE input_copy;
-   char *data;
-   size_t len;
-   VALUE listener = rb_iv_get(self, "@listener");
- 
-   lexer_state *lexer;
-   lexer = NULL;
-   DATA_GET(self, lexer_state, lexer);
- 
-   input_copy = rb_str_dup(input);
- 
-   rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%"));
-   data = RSTRING_PTR(input_copy);
-   len = RSTRING_LEN(input_copy);
-   
-   if (len == 0) { 
-     rb_raise(rb_eGherkinLexingError, "No content to lex.");
-   } else {
- 
-     const char *p, *pe, *eof;
-     int cs = 0;
-     
-     VALUE current_row = Qnil;
- 
-     p = data;
-     pe = data + len;
-     eof = pe;
-     
-     assert(*pe == '\0' && "pointer does not end on NULL");
-     
-     
- #line 911 "ext/gherkin_lexer_zh_tw/gherkin_lexer_zh_tw.c"
- 	{
- 	cs = lexer_start;
- 	}
- 
- #line 425 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
-     
- #line 918 "ext/gherkin_lexer_zh_tw/gherkin_lexer_zh_tw.c"
- 	{
- 	int _klen;
- 	unsigned int _trans;
- 	const char *_acts;
- 	unsigned int _nacts;
- 	const char *_keys;
- 
- 	if ( p == pe )
- 		goto _test_eof;
- 	if ( cs == 0 )
- 		goto _out;
- _resume:
- 	_keys = _lexer_trans_keys + _lexer_key_offsets[cs];
- 	_trans = _lexer_index_offsets[cs];
- 
- 	_klen = _lexer_single_lengths[cs];
- 	if ( _klen > 0 ) {
- 		const char *_lower = _keys;
- 		const char *_mid;
- 		const char *_upper = _keys + _klen - 1;
- 		while (1) {
- 			if ( _upper < _lower )
- 				break;
- 
- 			_mid = _lower + ((_upper-_lower) >> 1);
- 			if ( (*p) < *_mid )
- 				_upper = _mid - 1;
- 			else if ( (*p) > *_mid )
- 				_lower = _mid + 1;
- 			else {
- 				_trans += (_mid - _keys);
- 				goto _match;
- 			}
- 		}
- 		_keys += _klen;
- 		_trans += _klen;
- 	}
- 
- 	_klen = _lexer_range_lengths[cs];
- 	if ( _klen > 0 ) {
- 		const char *_lower = _keys;
- 		const char *_mid;
- 		const char *_upper = _keys + (_klen<<1) - 2;
- 		while (1) {
- 			if ( _upper < _lower )
- 				break;
- 
- 			_mid = _lower + (((_upper-_lower) >> 1) & ~1);
- 			if ( (*p) < _mid[0] )
- 				_upper = _mid - 2;
- 			else if ( (*p) > _mid[1] )
- 				_lower = _mid + 2;
- 			else {
- 				_trans += ((_mid - _keys)>>1);
- 				goto _match;
- 			}
- 		}
- 		_trans += _klen;
- 	}
- 
- _match:
- 	cs = _lexer_trans_targs[_trans];
- 
- 	if ( _lexer_trans_actions[_trans] == 0 )
- 		goto _again;
- 
- 	_acts = _lexer_actions + _lexer_trans_actions[_trans];
- 	_nacts = (unsigned int) *_acts++;
- 	while ( _nacts-- > 0 )
- 	{
- 		switch ( *_acts++ )
- 		{
- 	case 0:
- #line 83 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
- 	{
- 		MARK(content_start, p);
-     lexer->current_line = lexer->line_number;
-     lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2;
-   }
- 	break;
- 	case 1:
- #line 89 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
- 	{
-     MARK(content_start, p);
-   }
- 	break;
- 	case 2:
- #line 93 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
- 	{
-     lexer->current_line = lexer->line_number;
-     lexer->start_col = p - data - lexer->last_newline;
-   }
- 	break;
- 	case 3:
- #line 98 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
- 	{
-     int len = LEN(content_start, PTR_TO(final_newline));
-     int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end));
- 
-     if (len < 0) len = 0;
-     if (type_len < 0) len = 0;
- 
-     store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line);
-   }
- 	break;
- 	case 4:
- #line 108 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
- 	{ 
-     MARK(docstring_content_type_start, p);
-   }
- 	break;
- 	case 5:
- #line 112 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
- 	{ 
-     MARK(docstring_content_type_end, p);
-   }
- 	break;
- 	case 6:
- #line 116 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
- 	{
-     STORE_KW_END_CON(feature);
-   }
- 	break;
- 	case 7:
- #line 120 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
- 	{
-     STORE_KW_END_CON(background);
-   }
- 	break;
- 	case 8:
- #line 124 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
- 	{
-     STORE_KW_END_CON(scenario);
-   }
- 	break;
- 	case 9:
- #line 128 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
- 	{
-     STORE_KW_END_CON(scenario_outline);
-   }
- 	break;
- 	case 10:
- #line 132 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
- 	{
-     STORE_KW_END_CON(examples);
-   }
- 	break;
- 	case 11:
- #line 136 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
- 	{
-     store_kw_con(listener, "step",
-       PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
-       PTR_TO(content_start), LEN(content_start, p), 
-       lexer->current_line);
-   }
- 	break;
- 	case 12:
- #line 143 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
- 	{
-     STORE_ATTR(comment);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 13:
- #line 148 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
- 	{
-     STORE_ATTR(tag);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 14:
- #line 153 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
- 	{
-     lexer->line_number += 1;
-     MARK(final_newline, p);
-   }
- 	break;
- 	case 15:
- #line 158 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
- 	{
-     MARK(last_newline, p + 1);
-   }
- 	break;
- 	case 16:
- #line 162 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
- 	{
-     if (lexer->mark == 0) {
-       MARK(mark, p);
-     }
-   }
- 	break;
- 	case 17:
- #line 168 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
- 	{
-     MARK(keyword_end, p);
-     MARK(keyword_start, PTR_TO(mark));
-     MARK(content_start, p + 1);
-     lexer->mark = 0;
-   }
- 	break;
- 	case 18:
- #line 175 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
- 	{
-     MARK(content_end, p);
-   }
- 	break;
- 	case 19:
- #line 179 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
- 	{
-     p = p - 1;
-     lexer->current_line = lexer->line_number;
-     current_row = rb_ary_new();
-   }
- 	break;
- 	case 20:
- #line 185 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
- 	{
- 		MARK(content_start, p);
-   }
- 	break;
- 	case 21:
- #line 189 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
- 	{
-     VALUE re_pipe, re_newline, re_backslash;
-     VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
-     rb_funcall(con, rb_intern("strip!"), 0);
-     re_pipe      = rb_reg_regcomp(rb_str_new2("\\\\\\|"));
-     re_newline   = rb_reg_regcomp(rb_str_new2("\\\\n"));
-     re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_pipe,      rb_str_new2("|"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_newline,   rb_str_new2("\n"));
-     rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\"));
- 
-     rb_ary_push(current_row, con);
-   }
- 	break;
- 	case 22:
- #line 203 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
- 	{
-     rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
-   }
- 	break;
- 	case 23:
- #line 207 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
- 	{
-     int line;
-     if (cs < lexer_first_final) {
-       size_t count = 0;
-       VALUE newstr_val;
-       char *newstr;
-       int newstr_count = 0;        
-       size_t len;
-       const char *buff;
-       if (lexer->last_newline != 0) {
-         len = LEN(last_newline, eof);
-         buff = PTR_TO(last_newline);
-       } else {
-         len = strlen(data);
-         buff = data;
-       }
- 
-       // Allocate as a ruby string so that it gets cleaned up by GC
-       newstr_val = rb_str_new(buff, len);
-       newstr = RSTRING_PTR(newstr_val);
- 
- 
-       for (count = 0; count < len; count++) {
-         if(buff[count] == 10) {
-           newstr[newstr_count] = '\0'; // terminate new string at first newline found
-           break;
-         } else {
-           if (buff[count] == '%') {
-             newstr[newstr_count++] = buff[count];
-             newstr[newstr_count] = buff[count];
-           } else {
-             newstr[newstr_count] = buff[count];
-           }
-         }
-         newstr_count++;
-       }
- 
-       line = lexer->line_number;
-       lexer_init(lexer); // Re-initialize so we can scan again with the same lexer
-       raise_lexer_error(newstr, line);
-     } else {
-       rb_funcall(listener, rb_intern("eof"), 0);
-     }
-   }
- 	break;
- #line 1208 "ext/gherkin_lexer_zh_tw/gherkin_lexer_zh_tw.c"
- 		}
- 	}
- 
- _again:
- 	if ( cs == 0 )
- 		goto _out;
- 	if ( ++p != pe )
- 		goto _resume;
- 	_test_eof: {}
- 	if ( p == eof )
- 	{
- 	const char *__acts = _lexer_actions + _lexer_eof_actions[cs];
- 	unsigned int __nacts = (unsigned int) *__acts++;
- 	while ( __nacts-- > 0 ) {
- 		switch ( *__acts++ ) {
- 	case 23:
- #line 207 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
- 	{
-     int line;
-     if (cs < lexer_first_final) {
-       size_t count = 0;
-       VALUE newstr_val;
-       char *newstr;
-       int newstr_count = 0;        
-       size_t len;
-       const char *buff;
-       if (lexer->last_newline != 0) {
-         len = LEN(last_newline, eof);
-         buff = PTR_TO(last_newline);
-       } else {
-         len = strlen(data);
-         buff = data;
-       }
- 
-       // Allocate as a ruby string so that it gets cleaned up by GC
-       newstr_val = rb_str_new(buff, len);
-       newstr = RSTRING_PTR(newstr_val);
- 
- 
-       for (count = 0; count < len; count++) {
-         if(buff[count] == 10) {
-           newstr[newstr_count] = '\0'; // terminate new string at first newline found
-           break;
-         } else {
-           if (buff[count] == '%') {
-             newstr[newstr_count++] = buff[count];
-             newstr[newstr_count] = buff[count];
-           } else {
-             newstr[newstr_count] = buff[count];
-           }
-         }
-         newstr_count++;
-       }
- 
-       line = lexer->line_number;
-       lexer_init(lexer); // Re-initialize so we can scan again with the same lexer
-       raise_lexer_error(newstr, line);
-     } else {
-       rb_funcall(listener, rb_intern("eof"), 0);
-     }
-   }
- 	break;
- #line 1271 "ext/gherkin_lexer_zh_tw/gherkin_lexer_zh_tw.c"
- 		}
- 	}
- 	}
- 
- 	_out: {}
- 	}
- 
- #line 426 "/Users/ahellesoy/github/gherkin/tasks/../ragel/i18n/zh_tw.c.rl"
- 
-     assert(p <= pe && "data overflow after parsing execute");
-     assert(lexer->content_start <= len && "content starts after data end");
-     assert(lexer->mark < len && "mark is after data end");
-     
-     // Reset lexer by re-initializing the whole thing
-     lexer_init(lexer);
- 
-     if (cs == lexer_error) {
-       rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails.");
-     } else {
-       return Qtrue;
-     }
-   }
- }
- 
- void Init_gherkin_lexer_zh_tw()
- {
-   mGherkin = rb_define_module("Gherkin");
-   mGherkinLexer = rb_define_module_under(mGherkin, "Lexer");
-   rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError"));
- 
-   mCLexer = rb_define_module_under(mGherkin, "CLexer");
-   cI18nLexer = rb_define_class_under(mCLexer, "Zh_tw", rb_cObject);
-   rb_define_alloc_func(cI18nLexer, CLexer_alloc);
-   rb_define_method(cI18nLexer, "initialize", CLexer_init, 1);
-   rb_define_method(cI18nLexer, "scan", CLexer_scan, 1);
- }
- 
 -#line 1 "ragel/i18n/zh_tw.c.rl"
 -#include <assert.h>
 -#include <ruby.h>
 -
 -#if defined(_WIN32)
 -#include <stddef.h>
 -#endif
 -
 -#ifdef HAVE_RUBY_RE_H
 -#include <ruby/re.h>
 -#else
 -#include <re.h>
 -#endif
 -
 -#ifdef HAVE_RUBY_ENCODING_H
 -#include <ruby/encoding.h>
 -#define ENCODED_STR_NEW(ptr, len) \
 -    rb_enc_str_new(ptr, len, rb_utf8_encoding())
 -#else
 -#define ENCODED_STR_NEW(ptr, len) \
 -    rb_str_new(ptr, len)
 -#endif
 -
 -#ifndef RSTRING_PTR
 -#define RSTRING_PTR(s) (RSTRING(s)->ptr)
 -#endif
 -
 -#ifndef RSTRING_LEN
 -#define RSTRING_LEN(s) (RSTRING(s)->len)
 -#endif
 -
 -#define DATA_GET(FROM, TYPE, NAME) \
 -  Data_Get_Struct(FROM, TYPE, NAME); \
 -  if (NAME == NULL) { \
 -    rb_raise(rb_eArgError, "NULL found for " # NAME " when it shouldn't be."); \
 -  }
 - 
 -typedef struct lexer_state {
 -  int content_len;
 -  int line_number;
 -  int current_line;
 -  int start_col;
 -  size_t mark;
 -  size_t keyword_start;
 -  size_t keyword_end;
 -  size_t next_keyword_start;
 -  size_t content_start;
 -  size_t content_end;
 -  size_t docstring_content_type_start;
 -  size_t docstring_content_type_end;
 -  size_t query_start;
 -  size_t last_newline;
 -  size_t final_newline;
 -} lexer_state;
 -
 -static VALUE mGherkin;
 -static VALUE mGherkinLexer;
 -static VALUE mCLexer;
 -static VALUE cI18nLexer;
 -static VALUE rb_eGherkinLexingError;
 -
 -#define LEN(AT, P) (P - data - lexer->AT)
 -#define MARK(M, P) (lexer->M = (P) - data)
 -#define PTR_TO(P) (data + lexer->P)
 -
 -#define STORE_KW_END_CON(EVENT) \
 -  store_multiline_kw_con(listener, # EVENT, \
 -    PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end - 1)), \
 -    PTR_TO(content_start), LEN(content_start, PTR_TO(content_end)), \
 -    lexer->current_line, lexer->start_col); \
 -    if (lexer->content_end != 0) { \
 -      p = PTR_TO(content_end - 1); \
 -    } \
 -    lexer->content_end = 0
 -
 -#define STORE_ATTR(ATTR) \
 -    store_attr(listener, # ATTR, \
 -      PTR_TO(content_start), LEN(content_start, p), \
 -      lexer->line_number)
 -
 -
 -#line 254 "ragel/i18n/zh_tw.c.rl"
 -
 -
 -/** Data **/
 -
 -#line 89 "ext/gherkin_lexer_zh_tw/gherkin_lexer_zh_tw.c"
 -static const char _lexer_actions[] = {
 -	0, 1, 0, 1, 1, 1, 2, 1, 
 -	3, 1, 4, 1, 5, 1, 6, 1, 
 -	7, 1, 8, 1, 9, 1, 10, 1, 
 -	11, 1, 12, 1, 13, 1, 16, 1, 
 -	17, 1, 18, 1, 19, 1, 20, 1, 
 -	21, 1, 22, 1, 23, 2, 1, 18, 
 -	2, 4, 5, 2, 13, 0, 2, 14, 
 -	15, 2, 17, 0, 2, 17, 2, 2, 
 -	17, 16, 2, 17, 19, 2, 18, 6, 
 -	2, 18, 7, 2, 18, 8, 2, 18, 
 -	9, 2, 18, 10, 2, 18, 16, 2, 
 -	20, 21, 2, 22, 0, 2, 22, 2, 
 -	2, 22, 16, 2, 22, 19, 3, 3, 
 -	14, 15, 3, 5, 14, 15, 3, 11, 
 -	14, 15, 3, 12, 14, 15, 3, 13, 
 -	14, 15, 3, 14, 15, 18, 3, 17, 
 -	0, 11, 3, 17, 14, 15, 4, 1, 
 -	14, 15, 18, 4, 4, 5, 14, 15, 
 -	4, 17, 0, 14, 15, 5, 17, 0, 
 -	11, 14, 15
 -};
 -
 -static const short _lexer_key_offsets[] = {
 -	0, 0, 16, 19, 20, 21, 22, 23, 
 -	25, 27, 42, 46, 47, 49, 51, 52, 
 -	53, 54, 55, 57, 58, 59, 60, 62, 
 -	63, 64, 65, 66, 67, 68, 69, 70, 
 -	83, 86, 88, 90, 92, 94, 109, 110, 
 -	111, 113, 114, 115, 116, 117, 118, 119, 
 -	120, 121, 134, 137, 139, 141, 143, 145, 
 -	147, 149, 151, 153, 158, 160, 163, 166, 
 -	168, 170, 172, 174, 177, 179, 181, 183, 
 -	186, 188, 190, 192, 194, 196, 198, 200, 
 -	202, 204, 206, 208, 210, 212, 214, 216, 
 -	218, 220, 222, 224, 226, 228, 230, 232, 
 -	234, 236, 238, 240, 242, 244, 246, 248, 
 -	250, 252, 254, 256, 258, 260, 262, 264, 
 -	266, 267, 268, 269, 270, 271, 272, 273, 
 -	275, 277, 282, 287, 292, 297, 301, 305, 
 -	307, 308, 309, 310, 311, 312, 313, 314, 
 -	315, 316, 317, 318, 319, 320, 321, 322, 
 -	323, 328, 335, 340, 344, 350, 353, 355, 
 -	361, 376, 378, 380, 382, 384, 389, 391, 
 -	394, 397, 399, 401, 403, 405, 408, 410, 
 -	412, 414, 416, 418, 420, 422, 424, 426, 
 -	428, 430, 432, 434, 436, 438, 440, 442, 
 -	444, 446, 448, 450, 452, 454, 456, 458, 
 -	460, 462, 464, 466, 468, 470, 472, 474, 
 -	476, 478, 480, 482, 484, 485, 486, 499, 
 -	502, 504, 506, 508, 510, 512, 514, 516, 
 -	518, 523, 525, 528, 531, 533, 535, 537, 
 -	539, 542, 544, 546, 548, 551, 553, 555, 
 -	557, 559, 561, 563, 565, 567, 569, 571, 
 -	573, 575, 577, 579, 581, 583, 585, 587, 
 -	590, 592, 594, 596, 598, 600, 602, 604, 
 -	606, 608, 610, 612, 614, 616, 618, 620, 
 -	622, 624, 626, 628, 630, 632, 634, 636, 
 -	638, 640, 641, 642, 643, 644, 645, 646, 
 -	656, 658, 660, 662, 664, 666, 668, 671, 
 -	674, 676, 678, 680, 683, 685, 687, 689, 
 -	691, 693, 695, 697, 699, 701, 703, 705, 
 -	707, 709, 711, 713, 715, 717, 719, 721, 
 -	723, 725, 727, 729, 731, 733, 735, 737, 
 -	739, 741, 743, 745, 746, 747, 748, 749, 
 -	750, 751, 752, 753, 754, 755, 756, 757, 
 -	758, 759, 760, 761, 762, 763, 770, 772, 
 -	774, 776, 778, 780, 782, 783, 784
 -};
 -
 -static const char _lexer_trans_keys[] = {
 -	-28, -27, -25, -24, -23, -17, 10, 32, 
 -	34, 35, 37, 42, 64, 124, 9, 13, 
 -	-72, -67, -66, -90, -28, -72, -108, 10, 
 -	13, 10, 13, -28, -27, -25, -24, -23, 
 -	10, 32, 34, 35, 37, 42, 64, 124, 
 -	9, 13, -127, -118, -112, -96, -121, -27, 
 -	-24, -90, -82, -126, -102, -88, -83, -121, 
 -	-97, -26, -100, -84, -27, 58, -92, -89, 
 -	-25, -74, -79, 58, 10, 10, -28, -27, 
 -	-25, -24, -23, 10, 32, 35, 37, 42, 
 -	64, 9, 13, -72, -67, 10, -90, 10, 
 -	-28, 10, -72, 10, -108, 10, -28, -27, 
 -	-25, -24, -23, 10, 32, 34, 35, 37, 
 -	42, 64, 124, 9, 13, -107, -74, -128, 
 -	-125, -116, -116, -26, -103, -81, 58, 10, 
 -	10, -28, -27, -25, -24, -23, 10, 32, 
 -	35, 37, 42, 64, 9, 13, -72, -67, 
 -	10, -90, 10, -28, 10, -72, 10, -108, 
 -	10, -122, 10, -26, 10, -104, 10, -81, 
 -	10, -127, -118, -112, -96, 10, -121, 10, 
 -	-27, -24, 10, -90, -82, 10, -126, 10, 
 -	-102, 10, -88, 10, -83, 10, -121, -97, 
 -	10, -26, 10, -100, 10, -84, 10, -27, 
 -	10, 58, -92, 10, -89, 10, -25, 10, 
 -	-74, 10, -79, 10, 10, 58, -24, 10, 
 -	-125, 10, -67, 10, -116, 10, -26, 10, 
 -	-103, 10, -76, 10, -26, 10, -103, 10, 
 -	-81, 10, -107, 10, -74, 10, -128, 10, 
 -	-116, 10, -126, 10, -93, 10, -23, 10, 
 -	-70, 10, -68, 10, 10, 95, 10, 70, 
 -	10, 69, 10, 65, 10, 84, 10, 85, 
 -	10, 82, 10, 69, 10, 95, 10, 69, 
 -	10, 78, 10, 68, 10, 95, 10, 37, 
 -	10, 32, -126, -93, -23, -70, -68, 34, 
 -	34, 10, 13, 10, 13, 10, 32, 34, 
 -	9, 13, 10, 32, 34, 9, 13, 10, 
 -	32, 34, 9, 13, 10, 32, 34, 9, 
 -	13, 10, 32, 9, 13, 10, 32, 9, 
 -	13, 10, 13, 10, 95, 70, 69, 65, 
 -	84, 85, 82, 69, 95, 69, 78, 68, 
 -	95, 37, 32, 13, 32, 64, 9, 10, 
 -	9, 10, 13, 32, 64, 11, 12, 10, 
 -	32, 64, 9, 13, 32, 124, 9, 13, 
 -	10, 32, 92, 124, 9, 13, 10, 92, 
 -	124, 10, 92, 10, 32, 92, 124, 9, 
 -	13, -28, -27, -25, -24, -23, 10, 32, 
 -	34, 35, 37, 42, 64, 124, 9, 13, 
 -	-122, 10, -26, 10, -104, 10, -81, 10, 
 -	-127, -118, -112, -96, 10, -121, 10, -27, 
 -	-24, 10, -90, -82, 10, -126, 10, -102, 
 -	10, -88, 10, -83, 10, -121, -97, 10, 
 -	-26, 10, -100, 10, -84, 10, 10, 58, 
 -	-24, 10, -125, 10, -67, 10, -116, 10, 
 -	-26, 10, -103, 10, -76, 10, -26, 10, 
 -	-103, 10, -81, 10, -107, 10, -74, 10, 
 -	-128, 10, -116, 10, -126, 10, -93, 10, 
 -	-23, 10, -70, 10, -68, 10, 10, 95, 
 -	10, 70, 10, 69, 10, 65, 10, 84, 
 -	10, 85, 10, 82, 10, 69, 10, 95, 
 -	10, 69, 10, 78, 10, 68, 10, 95, 
 -	10, 37, 10, 32, 10, 10, -28, -27, 
 -	-25, -24, -23, 10, 32, 35, 37, 42, 
 -	64, 9, 13, -72, -67, 10, -90, 10, 
 -	-28, 10, -72, 10, -108, 10, -122, 10, 
 -	-26, 10, -104, 10, -81, 10, -127, -118, 
 -	-112, -96, 10, -121, 10, -27, -24, 10, 
 -	-90, -82, 10, -126, 10, -102, 10, -88, 
 -	10, -83, 10, -121, -97, 10, -26, 10, 
 -	-100, 10, -84, 10, -27, 10, 58, -92, 
 -	10, -89, 10, -25, 10, -74, 10, -79, 
 -	10, 10, 58, -24, 10, -125, 10, -67, 
 -	10, -116, 10, -26, 10, -103, 10, -76, 
 -	10, -26, 10, -103, 10, -81, 10, -107, 
 -	10, -74, 10, -128, -125, 10, -116, 10, 
 -	-116, 10, -26, 10, -103, 10, -81, 10, 
 -	-126, 10, -93, 10, -23, 10, -70, 10, 
 -	-68, 10, 10, 95, 10, 70, 10, 69, 
 -	10, 65, 10, 84, 10, 85, 10, 82, 
 -	10, 69, 10, 95, 10, 69, 10, 78, 
 -	10, 68, 10, 95, 10, 37, 10, 32, 
 -	-24, -125, -67, 58, 10, 10, -28, -27, 
 -	-24, 10, 32, 35, 37, 64, 9, 13, 
 -	-66, 10, -117, 10, -27, 10, -83, 10, 
 -	-112, 10, 10, 58, -118, -96, 10, -121, 
 -	-97, 10, -26, 10, -100, 10, -84, 10, 
 -	-27, 10, 58, -92, 10, -89, 10, -25, 
 -	10, -74, 10, -79, 10, -24, 10, -125, 
 -	10, -67, 10, -76, 10, -26, 10, -103, 
 -	10, -81, 10, -125, 10, -116, 10, -26, 
 -	10, -103, 10, -81, 10, 10, 95, 10, 
 -	70, 10, 69, 10, 65, 10, 84, 10, 
 -	85, 10, 82, 10, 69, 10, 95, 10, 
 -	69, 10, 78, 10, 68, 10, 95, 10, 
 -	37, -116, -26, -103, -76, -26, -103, -81, 
 -	-122, -26, -104, -81, -117, -27, -83, -112, 
 -	58, 10, 10, -27, 10, 32, 35, 124, 
 -	9, 13, -118, 10, -97, 10, -24, 10, 
 -	-125, 10, -67, 10, 10, 58, -69, -65, 
 -	0
 -};
 -
 -static const char _lexer_single_lengths[] = {
 -	0, 14, 3, 1, 1, 1, 1, 2, 
 -	2, 13, 4, 1, 2, 2, 1, 1, 
 -	1, 1, 2, 1, 1, 1, 2, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 11, 
 -	3, 2, 2, 2, 2, 13, 1, 1, 
 -	2, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 11, 3, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 5, 2, 3, 3, 2, 
 -	2, 2, 2, 3, 2, 2, 2, 3, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	1, 1, 1, 1, 1, 1, 1, 2, 
 -	2, 3, 3, 3, 3, 2, 2, 2, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	3, 5, 3, 2, 4, 3, 2, 4, 
 -	13, 2, 2, 2, 2, 5, 2, 3, 
 -	3, 2, 2, 2, 2, 3, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 1, 1, 11, 3, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	5, 2, 3, 3, 2, 2, 2, 2, 
 -	3, 2, 2, 2, 3, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 3, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 1, 1, 1, 1, 1, 1, 8, 
 -	2, 2, 2, 2, 2, 2, 3, 3, 
 -	2, 2, 2, 3, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 2, 2, 2, 2, 2, 
 -	2, 2, 2, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 1, 1, 1, 
 -	1, 1, 1, 1, 1, 5, 2, 2, 
 -	2, 2, 2, 2, 1, 1, 0
 -};
 -
 -static const char _lexer_range_lengths[] = {
 -	0, 1, 0, 0, 0, 0, 0, 0, 
 -	0, 1, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 1, 
 -	0, 0, 0, 0, 0, 1, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 1, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 1, 1, 1, 1, 1, 1, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	1, 1, 1, 1, 1, 0, 0, 1, 
 -	1, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 1, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 1, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0, 0, 
 -	0, 0, 0, 0, 0, 1, 0, 0, 
 -	0, 0, 0, 0, 0, 0, 0
 -};
 -
 -static const short _lexer_index_offsets[] = {
 -	0, 0, 16, 20, 22, 24, 26, 28, 
 -	31, 34, 49, 54, 56, 59, 62, 64, 
 -	66, 68, 70, 73, 75, 77, 79, 82, 
 -	84, 86, 88, 90, 92, 94, 96, 98, 
 -	111, 115, 118, 121, 124, 127, 142, 144, 
 -	146, 149, 151, 153, 155, 157, 159, 161, 
 -	163, 165, 178, 182, 185, 188, 191, 194, 
 -	197, 200, 203, 206, 212, 215, 219, 223, 
 -	226, 229, 232, 235, 239, 242, 245, 248, 
 -	252, 255, 258, 261, 264, 267, 270, 273, 
 -	276, 279, 282, 285, 288, 291, 294, 297, 
 -	300, 303, 306, 309, 312, 315, 318, 321, 
 -	324, 327, 330, 333, 336, 339, 342, 345, 
 -	348, 351, 354, 357, 360, 363, 366, 369, 
 -	372, 374, 376, 378, 380, 382, 384, 386, 
 -	389, 392, 397, 402, 407, 412, 416, 420, 
 -	423, 425, 427, 429, 431, 433, 435, 437, 
 -	439, 441, 443, 445, 447, 449, 451, 453, 
 -	455, 460, 467, 472, 476, 482, 486, 489, 
 -	495, 510, 513, 516, 519, 522, 528, 531, 
 -	535, 539, 542, 545, 548, 551, 555, 558, 
 -	561, 564, 567, 570, 573, 576, 579, 582, 
 -	585, 588, 591, 594, 597, 600, 603, 606, 
 -	609, 612, 615, 618, 621, 624, 627, 630, 
 -	633, 636, 639, 642, 645, 648, 651, 654, 
 -	657, 660, 663, 666, 669, 671, 673, 686, 
 -	690, 693, 696, 699, 702, 705, 708, 711, 
 -	714, 720, 723, 727, 731, 734, 737, 740, 
 -	743, 747, 750, 753, 756, 760, 763, 766, 
 -	769, 772, 775, 778, 781, 784, 787, 790, 
 -	793, 796, 799, 802, 805, 808, 811, 814, 
 -	818, 821, 824, 827, 830, 833, 836, 839, 
 -	842, 845, 848, 851, 854, 857, 860, 863, 
 -	866, 869, 872, 875, 878, 881, 884, 887, 
 -	890, 893, 895, 897, 899, 901, 903, 905, 
 -	915, 918, 921, 924, 927, 930, 933, 937, 
 -	941, 944, 947, 950, 954, 957, 960, 963, 
 -	966, 969, 972, 975, 978, 981, 984, 987, 
 -	990, 993, 996, 999, 1002, 1005, 1008, 1011, 
 -	1014, 1017, 1020, 1023, 1026, 1029, 1032, 1035, 
 -	1038, 1041, 1044, 1047, 1049, 1051, 1053, 1055, 
 -	1057, 1059, 1061, 1063, 1065, 1067, 1069, 1071, 
 -	1073, 1075, 1077, 1079, 1081, 1083, 1090, 1093, 
 -	1096, 1099, 1102, 1105, 1108, 1110, 1112
 -};
 -
 -static const short _lexer_trans_targs[] = {
 -	2, 10, 38, 40, 112, 348, 9, 9, 
 -	117, 127, 129, 143, 144, 147, 9, 0, 
 -	3, 330, 334, 0, 4, 0, 5, 0, 
 -	6, 0, 7, 0, 9, 128, 8, 9, 
 -	128, 8, 2, 10, 38, 40, 112, 9, 
 -	9, 117, 127, 129, 143, 144, 147, 9, 
 -	0, 11, 18, 323, 326, 0, 12, 0, 
 -	13, 16, 0, 14, 15, 0, 7, 0, 
 -	7, 0, 17, 0, 7, 0, 19, 273, 
 -	0, 20, 0, 21, 0, 22, 0, 23, 
 -	204, 0, 24, 0, 25, 0, 26, 0, 
 -	27, 0, 28, 0, 29, 0, 31, 30, 
 -	31, 30, 32, 157, 180, 182, 184, 31, 
 -	31, 9, 189, 203, 9, 31, 30, 33, 
 -	153, 31, 30, 34, 31, 30, 35, 31, 
 -	30, 36, 31, 30, 37, 31, 30, 2, 
 -	10, 38, 40, 112, 9, 9, 117, 127, 
 -	129, 143, 144, 147, 9, 0, 39, 0, 
 -	7, 0, 41, 42, 0, 4, 0, 43, 
 -	0, 44, 0, 45, 0, 46, 0, 47, 
 -	0, 49, 48, 49, 48, 50, 59, 88, 
 -	90, 92, 49, 49, 9, 97, 111, 9, 
 -	49, 48, 51, 55, 49, 48, 52, 49, 
 -	48, 53, 49, 48, 54, 49, 48, 37, 
 -	49, 48, 56, 49, 48, 57, 49, 48, 
 -	58, 49, 48, 37, 49, 48, 60, 67, 
 -	81, 84, 49, 48, 61, 49, 48, 62, 
 -	65, 49, 48, 63, 64, 49, 48, 37, 
 -	49, 48, 37, 49, 48, 66, 49, 48, 
 -	37, 49, 48, 68, 78, 49, 48, 69, 
 -	49, 48, 70, 49, 48, 71, 49, 48, 
 -	72, 49, 37, 48, 73, 49, 48, 74, 
 -	49, 48, 75, 49, 48, 76, 49, 48, 
 -	77, 49, 48, 49, 37, 48, 79, 49, 
 -	48, 80, 49, 48, 77, 49, 48, 82, 
 -	49, 48, 83, 49, 48, 63, 49, 48, 
 -	85, 49, 48, 86, 49, 48, 87, 49, 
 -	48, 71, 49, 48, 89, 49, 48, 37, 
 -	49, 48, 91, 49, 48, 52, 49, 48, 
 -	93, 49, 48, 94, 49, 48, 95, 49, 
 -	48, 96, 49, 48, 37, 49, 48, 49, 
 -	98, 48, 49, 99, 48, 49, 100, 48, 
 -	49, 101, 48, 49, 102, 48, 49, 103, 
 -	48, 49, 104, 48, 49, 105, 48, 49, 
 -	106, 48, 49, 107, 48, 49, 108, 48, 
 -	49, 109, 48, 49, 110, 48, 49, 9, 
 -	48, 49, 37, 48, 113, 0, 114, 0, 
 -	115, 0, 116, 0, 7, 0, 118, 0, 
 -	119, 0, 121, 120, 120, 121, 120, 120, 
 -	122, 122, 123, 122, 122, 122, 122, 123, 
 -	122, 122, 122, 122, 124, 122, 122, 122, 
 -	122, 125, 122, 122, 9, 126, 126, 0, 
 -	9, 126, 126, 0, 9, 128, 127, 9, 
 -	0, 130, 0, 131, 0, 132, 0, 133, 
 -	0, 134, 0, 135, 0, 136, 0, 137, 
 -	0, 138, 0, 139, 0, 140, 0, 141, 
 -	0, 142, 0, 350, 0, 7, 0, 0, 
 -	0, 0, 0, 145, 146, 9, 146, 146, 
 -	144, 145, 145, 9, 146, 144, 146, 0, 
 -	147, 148, 147, 0, 152, 151, 150, 148, 
 -	151, 149, 0, 150, 148, 149, 0, 150, 
 -	149, 152, 151, 150, 148, 151, 149, 2, 
 -	10, 38, 40, 112, 152, 152, 117, 127, 
 -	129, 143, 144, 147, 152, 0, 154, 31, 
 -	30, 155, 31, 30, 156, 31, 30, 37, 
 -	31, 30, 158, 165, 173, 176, 31, 30, 
 -	159, 31, 30, 160, 163, 31, 30, 161, 
 -	162, 31, 30, 37, 31, 30, 37, 31, 
 -	30, 164, 31, 30, 37, 31, 30, 166, 
 -	170, 31, 30, 167, 31, 30, 168, 31, 
 -	30, 169, 31, 30, 31, 37, 30, 171, 
 -	31, 30, 172, 31, 30, 169, 31, 30, 
 -	174, 31, 30, 175, 31, 30, 161, 31, 
 -	30, 177, 31, 30, 178, 31, 30, 179, 
 -	31, 30, 169, 31, 30, 181, 31, 30, 
 -	37, 31, 30, 183, 31, 30, 34, 31, 
 -	30, 185, 31, 30, 186, 31, 30, 187, 
 -	31, 30, 188, 31, 30, 37, 31, 30, 
 -	31, 190, 30, 31, 191, 30, 31, 192, 
 -	30, 31, 193, 30, 31, 194, 30, 31, 
 -	195, 30, 31, 196, 30, 31, 197, 30, 
 -	31, 198, 30, 31, 199, 30, 31, 200, 
 -	30, 31, 201, 30, 31, 202, 30, 31, 
 -	9, 30, 31, 37, 30, 206, 205, 206, 
 -	205, 207, 216, 245, 247, 253, 206, 206, 
 -	9, 258, 272, 9, 206, 205, 208, 212, 
 -	206, 205, 209, 206, 205, 210, 206, 205, 
 -	211, 206, 205, 37, 206, 205, 213, 206, 
 -	205, 214, 206, 205, 215, 206, 205, 37, 
 -	206, 205, 217, 224, 238, 241, 206, 205, 
 -	218, 206, 205, 219, 222, 206, 205, 220, 
 -	221, 206, 205, 37, 206, 205, 37, 206, 
 -	205, 223, 206, 205, 37, 206, 205, 225, 
 -	235, 206, 205, 226, 206, 205, 227, 206, 
 -	205, 228, 206, 205, 229, 206, 37, 205, 
 -	230, 206, 205, 231, 206, 205, 232, 206, 
 -	205, 233, 206, 205, 234, 206, 205, 206, 
 -	37, 205, 236, 206, 205, 237, 206, 205, 
 -	234, 206, 205, 239, 206, 205, 240, 206, 
 -	205, 220, 206, 205, 242, 206, 205, 243, 
 -	206, 205, 244, 206, 205, 228, 206, 205, 
 -	246, 206, 205, 37, 206, 205, 248, 249, 
 -	206, 205, 209, 206, 205, 250, 206, 205, 
 -	251, 206, 205, 252, 206, 205, 234, 206, 
 -	205, 254, 206, 205, 255, 206, 205, 256, 
 -	206, 205, 257, 206, 205, 37, 206, 205, 
 -	206, 259, 205, 206, 260, 205, 206, 261, 
 -	205, 206, 262, 205, 206, 263, 205, 206, 
 -	264, 205, 206, 265, 205, 206, 266, 205, 
 -	206, 267, 205, 206, 268, 205, 206, 269, 
 -	205, 206, 270, 205, 206, 271, 205, 206, 
 -	9, 205, 206, 37, 205, 274, 0, 275, 
 -	0, 276, 0, 277, 0, 279, 278, 279, 
 -	278, 280, 286, 304, 279, 279, 9, 309, 
 -	9, 279, 278, 281, 279, 278, 282, 279, 
 -	278, 283, 279, 278, 284, 279, 278, 285, 
 -	279, 278, 279, 37, 278, 287, 300, 279, 
 -	278, 288, 297, 279, 278, 289, 279, 278, 
 -	290, 279, 278, 291, 279, 278, 292, 279, 
 -	37, 278, 293, 279, 278, 294, 279, 278, 
 -	295, 279, 278, 296, 279, 278, 285, 279, 
 -	278, 298, 279, 278, 299, 279, 278, 285, 
 -	279, 278, 301, 279, 278, 302, 279, 278, 
 -	303, 279, 278, 291, 279, 278, 305, 279, 
 -	278, 306, 279, 278, 307, 279, 278, 308, 
 -	279, 278, 285, 279, 278, 279, 310, 278, 
 -	279, 311, 278, 279, 312, 278, 279, 313, 
 -	278, 279, 314, 278, 279, 315, 278, 279, 
 -	316, 278, 279, 317, 278, 279, 318, 278, 
 -	279, 319, 278, 279, 320, 278, 279, 321, 
 -	278, 279, 322, 278, 279, 9, 278, 324, 
 -	0, 325, 0, 14, 0, 327, 0, 328, 
 -	0, 329, 0, 22, 0, 331, 0, 332, 
 -	0, 333, 0, 7, 0, 335, 0, 336, 
 -	0, 337, 0, 338, 0, 339, 0, 341, 
 -	340, 341, 340, 342, 341, 341, 9, 9, 
 -	341, 340, 343, 341, 340, 344, 341, 340, 
 -	345, 341, 340, 346, 341, 340, 347, 341, 
 -	340, 341, 37, 340, 349, 0, 9, 0, 
 -	0, 0
 -};
 -
 -static const unsigned char _lexer_trans_actions[] = {
 -	29, 29, 29, 29, 29, 0, 54, 0, 
 -	5, 1, 0, 29, 1, 35, 0, 43, 
 -	0, 0, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 149, 126, 57, 110, 
 -	23, 0, 29, 29, 29, 29, 29, 54, 
 -	0, 5, 1, 0, 29, 1, 35, 0, 
 -	43, 0, 0, 0, 0, 43, 0, 43, 
 -	0, 0, 43, 0, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 144, 57, 
 -	54, 0, 84, 84, 84, 84, 84, 54, 
 -	0, 78, 33, 84, 78, 0, 0, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 19, 54, 0, 63, 
 -	63, 63, 63, 63, 130, 31, 60, 57, 
 -	31, 63, 57, 66, 31, 43, 0, 43, 
 -	0, 43, 0, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 144, 57, 54, 0, 84, 84, 84, 
 -	84, 84, 54, 0, 72, 33, 84, 72, 
 -	0, 0, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 15, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 15, 54, 0, 0, 0, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	0, 54, 0, 0, 0, 54, 0, 15, 
 -	54, 0, 15, 54, 0, 0, 54, 0, 
 -	15, 54, 0, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 15, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 54, 15, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 15, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 15, 54, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 15, 
 -	0, 54, 15, 0, 0, 43, 0, 43, 
 -	0, 43, 0, 43, 0, 43, 0, 43, 
 -	0, 43, 139, 48, 9, 106, 11, 0, 
 -	134, 45, 45, 45, 3, 122, 33, 33, 
 -	33, 0, 122, 33, 33, 33, 0, 122, 
 -	33, 0, 33, 0, 102, 7, 7, 43, 
 -	54, 0, 0, 43, 114, 25, 0, 54, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 43, 
 -	43, 43, 43, 0, 27, 118, 27, 27, 
 -	51, 27, 0, 54, 0, 1, 0, 43, 
 -	0, 0, 0, 43, 54, 37, 37, 87, 
 -	37, 37, 43, 0, 39, 0, 43, 0, 
 -	0, 54, 0, 0, 39, 0, 0, 96, 
 -	96, 96, 96, 96, 54, 0, 93, 90, 
 -	41, 96, 90, 99, 0, 43, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 19, 
 -	54, 0, 0, 0, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 0, 54, 0, 0, 
 -	0, 54, 0, 19, 54, 0, 19, 54, 
 -	0, 0, 54, 0, 19, 54, 0, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 54, 19, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	19, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 19, 54, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	19, 0, 54, 19, 0, 144, 57, 54, 
 -	0, 84, 84, 84, 84, 84, 54, 0, 
 -	75, 33, 84, 75, 0, 0, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 17, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 17, 
 -	54, 0, 0, 0, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 0, 54, 0, 0, 
 -	0, 54, 0, 17, 54, 0, 17, 54, 
 -	0, 0, 54, 0, 17, 54, 0, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 17, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 54, 
 -	17, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 17, 54, 0, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 17, 54, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	17, 0, 54, 17, 0, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 144, 57, 54, 
 -	0, 84, 84, 84, 54, 0, 69, 33, 
 -	69, 0, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 54, 13, 0, 0, 0, 54, 
 -	0, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	13, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 0, 54, 0, 0, 54, 0, 0, 
 -	54, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 13, 0, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 0, 
 -	43, 0, 43, 0, 43, 0, 43, 144, 
 -	57, 54, 0, 84, 54, 0, 81, 81, 
 -	0, 0, 0, 54, 0, 0, 54, 0, 
 -	0, 54, 0, 0, 54, 0, 0, 54, 
 -	0, 54, 21, 0, 0, 43, 0, 43, 
 -	0, 0
 -};
 -
 -static const unsigned char _lexer_eof_actions[] = {
 -	0, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43, 43, 
 -	43, 43, 43, 43, 43, 43, 43
 -};
 -
 -static const int lexer_start = 1;
 -static const int lexer_first_final = 350;
 -static const int lexer_error = 0;
 -
 -static const int lexer_en_main = 1;
 -
 -
 -#line 258 "ragel/i18n/zh_tw.c.rl"
 -
 -static VALUE 
 -unindent(VALUE con, int start_col)
 -{
 -  VALUE re;
 -  /* Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters */
 -  char pat[32]; 
 -  snprintf(pat, 32, "^[\t ]{0,%d}", start_col); 
 -  re = rb_reg_regcomp(rb_str_new2(pat));
 -  rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2(""));
 -
 -  return Qnil;
 -
 -}
 -
 -static void 
 -store_kw_con(VALUE listener, const char * event_name, 
 -             const char * keyword_at, size_t keyword_length, 
 -             const char * at,         size_t length, 
 -             int current_line)
 -{
 -  VALUE con = Qnil, kw = Qnil;
 -  kw = ENCODED_STR_NEW(keyword_at, keyword_length);
 -  con = ENCODED_STR_NEW(at, length);
 -  rb_funcall(con, rb_intern("strip!"), 0);
 -  rb_funcall(listener, rb_intern(event_name), 3, kw, con, INT2FIX(current_line)); 
 -}
 -
 -static void
 -store_multiline_kw_con(VALUE listener, const char * event_name,
 -                      const char * keyword_at, size_t keyword_length,
 -                      const char * at,         size_t length,
 -                      int current_line, int start_col)
 -{
 -  VALUE split;
 -  VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil;
 -
 -  kw = ENCODED_STR_NEW(keyword_at, keyword_length);
 -  con = ENCODED_STR_NEW(at, length);
 -
 -  unindent(con, start_col);
 -  
 -  split = rb_str_split(con, "\n");
 -
 -  name = rb_funcall(split, rb_intern("shift"), 0);
 -  desc = rb_ary_join(split, rb_str_new2( "\n" ));
 -
 -  if( name == Qnil ) 
 -  {
 -    name = rb_str_new2("");
 -  }
 -  if( rb_funcall(desc, rb_intern("size"), 0) == 0) 
 -  {
 -    desc = rb_str_new2("");
 -  }
 -  rb_funcall(name, rb_intern("strip!"), 0);
 -  rb_funcall(desc, rb_intern("rstrip!"), 0);
 -  rb_funcall(listener, rb_intern(event_name), 4, kw, name, desc, INT2FIX(current_line)); 
 -}
 -
 -static void 
 -store_attr(VALUE listener, const char * attr_type,
 -           const char * at, size_t length, 
 -           int line)
 -{
 -  VALUE val = ENCODED_STR_NEW(at, length);
 -  rb_funcall(listener, rb_intern(attr_type), 2, val, INT2FIX(line));
 -}
 -static void 
 -store_docstring_content(VALUE listener, 
 -          int start_col, 
 -          const char *type_at, size_t type_length,
 -          const char *at, size_t length, 
 -          int current_line)
 -{
 -  VALUE re2;
 -  VALUE unescape_escaped_quotes;
 -  VALUE con = ENCODED_STR_NEW(at, length);
 -  VALUE con_type = ENCODED_STR_NEW(type_at, type_length);
 -
 -  unindent(con, start_col);
 -
 -  re2 = rb_reg_regcomp(rb_str_new2("\r\\Z"));
 -  unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\""));
 -  rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2(""));
 -  rb_funcall(con_type, rb_intern("strip!"), 0);
 -  rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\""));
 -  rb_funcall(listener, rb_intern("doc_string"), 3, con_type, con, INT2FIX(current_line));
 -}
 -static void 
 -raise_lexer_error(const char * at, int line)
 -{ 
 -  rb_raise(rb_eGherkinLexingError, "Lexing error on line %d: '%s'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.", line, at);
 -}
 -
 -static void lexer_init(lexer_state *lexer) {
 -  lexer->content_start = 0;
 -  lexer->content_end = 0;
 -  lexer->content_len = 0;
 -  lexer->docstring_content_type_start = 0;
 -  lexer->docstring_content_type_end = 0;
 -  lexer->mark = 0;
 -  lexer->keyword_start = 0;
 -  lexer->keyword_end = 0;
 -  lexer->next_keyword_start = 0;
 -  lexer->line_number = 1;
 -  lexer->last_newline = 0;
 -  lexer->final_newline = 0;
 -  lexer->start_col = 0;
 -}
 -
 -static VALUE CLexer_alloc(VALUE klass)
 -{
 -  VALUE obj;
 -  lexer_state *lxr = ALLOC(lexer_state);
 -  lexer_init(lxr);
 -
 -  obj = Data_Wrap_Struct(klass, NULL, -1, lxr);
 -
 -  return obj;
 -}
 -
 -static VALUE CLexer_init(VALUE self, VALUE listener)
 -{
 -  lexer_state *lxr; 
 -  rb_iv_set(self, "@listener", listener);
 -  
 -  lxr = NULL;
 -  DATA_GET(self, lexer_state, lxr);
 -  lexer_init(lxr);
 -  
 -  return self;
 -}
 -
 -static VALUE CLexer_scan(VALUE self, VALUE input)
 -{
 -  VALUE input_copy;
 -  char *data;
 -  size_t len;
 -  VALUE listener = rb_iv_get(self, "@listener");
 -
 -  lexer_state *lexer;
 -  lexer = NULL;
 -  DATA_GET(self, lexer_state, lexer);
 -
 -  input_copy = rb_str_dup(input);
 -
 -  rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%"));
 -  data = RSTRING_PTR(input_copy);
 -  len = RSTRING_LEN(input_copy);
 -  
 -  if (len == 0) { 
 -    rb_raise(rb_eGherkinLexingError, "No content to lex.");
 -  } else {
 -
 -    const char *p, *pe, *eof;
 -    int cs = 0;
 -    
 -    VALUE current_row = Qnil;
 -
 -    p = data;
 -    pe = data + len;
 -    eof = pe;
 -    
 -    assert(*pe == '\0' && "pointer does not end on NULL");
 -    
 -    
 -#line 911 "ext/gherkin_lexer_zh_tw/gherkin_lexer_zh_tw.c"
 -	{
 -	cs = lexer_start;
 -	}
 -
 -#line 425 "ragel/i18n/zh_tw.c.rl"
 -    
 -#line 918 "ext/gherkin_lexer_zh_tw/gherkin_lexer_zh_tw.c"
 -	{
 -	int _klen;
 -	unsigned int _trans;
 -	const char *_acts;
 -	unsigned int _nacts;
 -	const char *_keys;
 -
 -	if ( p == pe )
 -		goto _test_eof;
 -	if ( cs == 0 )
 -		goto _out;
 -_resume:
 -	_keys = _lexer_trans_keys + _lexer_key_offsets[cs];
 -	_trans = _lexer_index_offsets[cs];
 -
 -	_klen = _lexer_single_lengths[cs];
 -	if ( _klen > 0 ) {
 -		const char *_lower = _keys;
 -		const char *_mid;
 -		const char *_upper = _keys + _klen - 1;
 -		while (1) {
 -			if ( _upper < _lower )
 -				break;
 -
 -			_mid = _lower + ((_upper-_lower) >> 1);
 -			if ( (*p) < *_mid )
 -				_upper = _mid - 1;
 -			else if ( (*p) > *_mid )
 -				_lower = _mid + 1;
 -			else {
 -				_trans += (unsigned int)(_mid - _keys);
 -				goto _match;
 -			}
 -		}
 -		_keys += _klen;
 -		_trans += _klen;
 -	}
 -
 -	_klen = _lexer_range_lengths[cs];
 -	if ( _klen > 0 ) {
 -		const char *_lower = _keys;
 -		const char *_mid;
 -		const char *_upper = _keys + (_klen<<1) - 2;
 -		while (1) {
 -			if ( _upper < _lower )
 -				break;
 -
 -			_mid = _lower + (((_upper-_lower) >> 1) & ~1);
 -			if ( (*p) < _mid[0] )
 -				_upper = _mid - 2;
 -			else if ( (*p) > _mid[1] )
 -				_lower = _mid + 2;
 -			else {
 -				_trans += (unsigned int)((_mid - _keys)>>1);
 -				goto _match;
 -			}
 -		}
 -		_trans += _klen;
 -	}
 -
 -_match:
 -	cs = _lexer_trans_targs[_trans];
 -
 -	if ( _lexer_trans_actions[_trans] == 0 )
 -		goto _again;
 -
 -	_acts = _lexer_actions + _lexer_trans_actions[_trans];
 -	_nacts = (unsigned int) *_acts++;
 -	while ( _nacts-- > 0 )
 -	{
 -		switch ( *_acts++ )
 -		{
 -	case 0:
 -#line 83 "ragel/i18n/zh_tw.c.rl"
 -	{
 -		MARK(content_start, p);
 -    lexer->current_line = lexer->line_number;
 -    lexer->start_col = lexer->content_start - lexer->last_newline - (lexer->keyword_end - lexer->keyword_start) + 2;
 -  }
 -	break;
 -	case 1:
 -#line 89 "ragel/i18n/zh_tw.c.rl"
 -	{
 -    MARK(content_start, p);
 -  }
 -	break;
 -	case 2:
 -#line 93 "ragel/i18n/zh_tw.c.rl"
 -	{
 -    lexer->current_line = lexer->line_number;
 -    lexer->start_col = p - data - lexer->last_newline;
 -  }
 -	break;
 -	case 3:
 -#line 98 "ragel/i18n/zh_tw.c.rl"
 -	{
 -    int len = LEN(content_start, PTR_TO(final_newline));
 -    int type_len = LEN(docstring_content_type_start, PTR_TO(docstring_content_type_end));
 -
 -    if (len < 0) len = 0;
 -    if (type_len < 0) len = 0;
 -
 -    store_docstring_content(listener, lexer->start_col, PTR_TO(docstring_content_type_start), type_len, PTR_TO(content_start), len, lexer->current_line);
 -  }
 -	break;
 -	case 4:
 -#line 108 "ragel/i18n/zh_tw.c.rl"
 -	{ 
 -    MARK(docstring_content_type_start, p);
 -  }
 -	break;
 -	case 5:
 -#line 112 "ragel/i18n/zh_tw.c.rl"
 -	{ 
 -    MARK(docstring_content_type_end, p);
 -  }
 -	break;
 -	case 6:
 -#line 116 "ragel/i18n/zh_tw.c.rl"
 -	{
 -    STORE_KW_END_CON(feature);
 -  }
 -	break;
 -	case 7:
 -#line 120 "ragel/i18n/zh_tw.c.rl"
 -	{
 -    STORE_KW_END_CON(background);
 -  }
 -	break;
 -	case 8:
 -#line 124 "ragel/i18n/zh_tw.c.rl"
 -	{
 -    STORE_KW_END_CON(scenario);
 -  }
 -	break;
 -	case 9:
 -#line 128 "ragel/i18n/zh_tw.c.rl"
 -	{
 -    STORE_KW_END_CON(scenario_outline);
 -  }
 -	break;
 -	case 10:
 -#line 132 "ragel/i18n/zh_tw.c.rl"
 -	{
 -    STORE_KW_END_CON(examples);
 -  }
 -	break;
 -	case 11:
 -#line 136 "ragel/i18n/zh_tw.c.rl"
 -	{
 -    store_kw_con(listener, "step",
 -      PTR_TO(keyword_start), LEN(keyword_start, PTR_TO(keyword_end)),
 -      PTR_TO(content_start), LEN(content_start, p), 
 -      lexer->current_line);
 -  }
 -	break;
 -	case 12:
 -#line 143 "ragel/i18n/zh_tw.c.rl"
 -	{
 -    STORE_ATTR(comment);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 13:
 -#line 148 "ragel/i18n/zh_tw.c.rl"
 -	{
 -    STORE_ATTR(tag);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 14:
 -#line 153 "ragel/i18n/zh_tw.c.rl"
 -	{
 -    lexer->line_number += 1;
 -    MARK(final_newline, p);
 -  }
 -	break;
 -	case 15:
 -#line 158 "ragel/i18n/zh_tw.c.rl"
 -	{
 -    MARK(last_newline, p + 1);
 -  }
 -	break;
 -	case 16:
 -#line 162 "ragel/i18n/zh_tw.c.rl"
 -	{
 -    if (lexer->mark == 0) {
 -      MARK(mark, p);
 -    }
 -  }
 -	break;
 -	case 17:
 -#line 168 "ragel/i18n/zh_tw.c.rl"
 -	{
 -    MARK(keyword_end, p);
 -    MARK(keyword_start, PTR_TO(mark));
 -    MARK(content_start, p + 1);
 -    lexer->mark = 0;
 -  }
 -	break;
 -	case 18:
 -#line 175 "ragel/i18n/zh_tw.c.rl"
 -	{
 -    MARK(content_end, p);
 -  }
 -	break;
 -	case 19:
 -#line 179 "ragel/i18n/zh_tw.c.rl"
 -	{
 -    p = p - 1;
 -    lexer->current_line = lexer->line_number;
 -    current_row = rb_ary_new();
 -  }
 -	break;
 -	case 20:
 -#line 185 "ragel/i18n/zh_tw.c.rl"
 -	{
 -		MARK(content_start, p);
 -  }
 -	break;
 -	case 21:
 -#line 189 "ragel/i18n/zh_tw.c.rl"
 -	{
 -    VALUE re_pipe, re_newline, re_backslash;
 -    VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
 -    rb_funcall(con, rb_intern("strip!"), 0);
 -    re_pipe      = rb_reg_regcomp(rb_str_new2("\\\\\\|"));
 -    re_newline   = rb_reg_regcomp(rb_str_new2("\\\\n"));
 -    re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_pipe,      rb_str_new2("|"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_newline,   rb_str_new2("\n"));
 -    rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\"));
 -
 -    rb_ary_push(current_row, con);
 -  }
 -	break;
 -	case 22:
 -#line 203 "ragel/i18n/zh_tw.c.rl"
 -	{
 -    rb_funcall(listener, rb_intern("row"), 2, current_row, INT2FIX(lexer->current_line));
 -  }
 -	break;
 -	case 23:
 -#line 207 "ragel/i18n/zh_tw.c.rl"
 -	{
 -    int line;
 -    if (cs < lexer_first_final) {
 -      size_t count = 0;
 -      VALUE newstr_val;
 -      char *newstr;
 -      int newstr_count = 0;        
 -      size_t len;
 -      const char *buff;
 -      if (lexer->last_newline != 0) {
 -        len = LEN(last_newline, eof);
 -        buff = PTR_TO(last_newline);
 -      } else {
 -        len = strlen(data);
 -        buff = data;
 -      }
 -
 -      /* Allocate as a ruby string so that it gets cleaned up by GC */
 -      newstr_val = rb_str_new(buff, len);
 -      newstr = RSTRING_PTR(newstr_val);
 -
 -
 -      for (count = 0; count < len; count++) {
 -        if(buff[count] == 10) {
 -          newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
 -          break;
 -        } else {
 -          if (buff[count] == '%') {
 -            newstr[newstr_count++] = buff[count];
 -            newstr[newstr_count] = buff[count];
 -          } else {
 -            newstr[newstr_count] = buff[count];
 -          }
 -        }
 -        newstr_count++;
 -      }
 -
 -      line = lexer->line_number;
 -      lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
 -      raise_lexer_error(newstr, line);
 -    } else {
 -      rb_funcall(listener, rb_intern("eof"), 0);
 -    }
 -  }
 -	break;
 -#line 1208 "ext/gherkin_lexer_zh_tw/gherkin_lexer_zh_tw.c"
 -		}
 -	}
 -
 -_again:
 -	if ( cs == 0 )
 -		goto _out;
 -	if ( ++p != pe )
 -		goto _resume;
 -	_test_eof: {}
 -	if ( p == eof )
 -	{
 -	const char *__acts = _lexer_actions + _lexer_eof_actions[cs];
 -	unsigned int __nacts = (unsigned int) *__acts++;
 -	while ( __nacts-- > 0 ) {
 -		switch ( *__acts++ ) {
 -	case 23:
 -#line 207 "ragel/i18n/zh_tw.c.rl"
 -	{
 -    int line;
 -    if (cs < lexer_first_final) {
 -      size_t count = 0;
 -      VALUE newstr_val;
 -      char *newstr;
 -      int newstr_count = 0;        
 -      size_t len;
 -      const char *buff;
 -      if (lexer->last_newline != 0) {
 -        len = LEN(last_newline, eof);
 -        buff = PTR_TO(last_newline);
 -      } else {
 -        len = strlen(data);
 -        buff = data;
 -      }
 -
 -      /* Allocate as a ruby string so that it gets cleaned up by GC */
 -      newstr_val = rb_str_new(buff, len);
 -      newstr = RSTRING_PTR(newstr_val);
 -
 -
 -      for (count = 0; count < len; count++) {
 -        if(buff[count] == 10) {
 -          newstr[newstr_count] = '\0'; /* terminate new string at first newline found */
 -          break;
 -        } else {
 -          if (buff[count] == '%') {
 -            newstr[newstr_count++] = buff[count];
 -            newstr[newstr_count] = buff[count];
 -          } else {
 -            newstr[newstr_count] = buff[count];
 -          }
 -        }
 -        newstr_count++;
 -      }
 -
 -      line = lexer->line_number;
 -      lexer_init(lexer); /* Re-initialize so we can scan again with the same lexer */
 -      raise_lexer_error(newstr, line);
 -    } else {
 -      rb_funcall(listener, rb_intern("eof"), 0);
 -    }
 -  }
 -	break;
 -#line 1271 "ext/gherkin_lexer_zh_tw/gherkin_lexer_zh_tw.c"
 -		}
 -	}
 -	}
 -
 -	_out: {}
 -	}
 -
 -#line 426 "ragel/i18n/zh_tw.c.rl"
 -
 -    assert(p <= pe && "data overflow after parsing execute");
 -    assert(lexer->content_start <= len && "content starts after data end");
 -    assert(lexer->mark < len && "mark is after data end");
 -    
 -    /* Reset lexer by re-initializing the whole thing */
 -    lexer_init(lexer);
 -
 -    if (cs == lexer_error) {
 -      rb_raise(rb_eGherkinLexingError, "Invalid format, lexing fails.");
 -    } else {
 -      return Qtrue;
 -    }
 -  }
 -}
 -
 -void Init_gherkin_lexer_zh_tw()
 -{
 -  mGherkin = rb_define_module("Gherkin");
 -  mGherkinLexer = rb_define_module_under(mGherkin, "Lexer");
 -  rb_eGherkinLexingError = rb_const_get(mGherkinLexer, rb_intern("LexingError"));
 -
 -  mCLexer = rb_define_module_under(mGherkin, "CLexer");
 -  cI18nLexer = rb_define_class_under(mCLexer, "Zh_tw", rb_cObject);
 -  rb_define_alloc_func(cI18nLexer, CLexer_alloc);
 -  rb_define_method(cI18nLexer, "initialize", CLexer_init, 1);
 -  rb_define_method(cI18nLexer, "scan", CLexer_scan, 1);
 -}
 -

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-ruby-extras/ruby-gherkin.git



More information about the Pkg-ruby-extras-commits mailing list