From 20beec2de3ba3d3e5134e5c5a623f238de51bfee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tobias=20Lu=CC=88tke?= Date: Mon, 29 Oct 2012 16:43:19 -0400 Subject: [PATCH] Convert parser to C99 --- Rakefile | 39 +- ext/liquid/Makefile | 213 +++ ext/liquid/extconf.rb | 6 + ext/liquid/liquid_ext.bundle | Bin 0 -> 28680 bytes ext/liquid/liquid_ext.c | 2636 ++++++++++++++++++++++++++++++++++ ext/liquid/liquid_ext.o | Bin 0 -> 45736 bytes ext/liquid/liquid_ext.rl | 159 ++ ext/liquid/mkmf.log | 22 + lib/liquid.rb | 2 +- lib/liquid/parser.rb | 1313 ----------------- lib/liquid/parser.rl | 126 -- lib/liquid_ext.bundle | Bin 0 -> 28680 bytes 12 files changed, 3073 insertions(+), 1443 deletions(-) create mode 100644 ext/liquid/Makefile create mode 100644 ext/liquid/extconf.rb create mode 100755 ext/liquid/liquid_ext.bundle create mode 100644 ext/liquid/liquid_ext.c create mode 100644 ext/liquid/liquid_ext.o create mode 100644 ext/liquid/liquid_ext.rl create mode 100644 ext/liquid/mkmf.log delete mode 100644 lib/liquid/parser.rb delete mode 100644 lib/liquid/parser.rl create mode 100755 lib/liquid_ext.bundle diff --git a/Rakefile b/Rakefile index cccac16..ecd44b6 100755 --- a/Rakefile +++ b/Rakefile @@ -2,17 +2,50 @@ require 'rubygems' require 'rake' +require 'rake/clean' +require 'fileutils' require 'rake/testtask' require 'rubygems/package_task' -task :default => 'test' +task :default => [:compile, :test] task :ragel do - sh "find . -name '*.rl' | xargs ragel -R -F1" + sh "find . -name '*.rl' | xargs ragel -C -G2" end +task :compile => [:ragel, :liquid_ext] -Rake::TestTask.new(:test) do |t| +extension = "liquid_ext" +ext = "ext/liquid" +ext_so = "#{ext}/#{extension}.#{RbConfig::CONFIG['DLEXT']}" +ext_files = FileList[ + "#{ext}/*.c", + "#{ext}/*.h", + "#{ext}/*.rl", + "#{ext}/extconf.rb", + "#{ext}/Makefile", + "lib" +] + +task "lib" do + directory "lib" +end + +desc "Builds just the #{extension} extension" +task extension.to_sym => [:ragel, "#{ext}/Makefile", ext_so ] + +file "#{ext}/Makefile" => ["#{ext}/extconf.rb"] do + Dir.chdir(ext) do ruby "extconf.rb" end +end + +file ext_so => ext_files do + Dir.chdir(ext) do + sh "make" + end + cp ext_so, "lib" +end + +Rake::TestTask.new(:test => [:ragel, 'liquid_ext']) do |t| t.libs << '.' << 'lib' << 'test' t.test_files = FileList['test/liquid/**/*_test.rb'] t.verbose = false diff --git a/ext/liquid/Makefile b/ext/liquid/Makefile new file mode 100644 index 0000000..42d30f5 --- /dev/null +++ b/ext/liquid/Makefile @@ -0,0 +1,213 @@ + +SHELL = /bin/sh + +# V=0 quiet, V=1 verbose. other values don't work. +V = 0 +Q1 = $(V:1=) +Q = $(Q1:0=@) +n=$(NULLCMD) +ECHO1 = $(V:1=@$n) +ECHO = $(ECHO1:0=@echo) + +#### Start of system configuration section. #### + +srcdir = . +topdir = /Users/tobi/.rbenv/versions/1.9.3-p194-perf/include/ruby-1.9.1 +hdrdir = /Users/tobi/.rbenv/versions/1.9.3-p194-perf/include/ruby-1.9.1 +arch_hdrdir = /Users/tobi/.rbenv/versions/1.9.3-p194-perf/include/ruby-1.9.1/$(arch) +VPATH = $(srcdir):$(arch_hdrdir)/ruby:$(hdrdir)/ruby +prefix = $(DESTDIR)/Users/tobi/.rbenv/versions/1.9.3-p194-perf +exec_prefix = $(prefix) +rubylibprefix = $(libdir)/$(RUBY_BASE_NAME) +bindir = $(exec_prefix)/bin +sbindir = $(exec_prefix)/sbin +libexecdir = $(exec_prefix)/libexec +datarootdir = $(prefix)/share +datadir = $(datarootdir) +sysconfdir = $(prefix)/etc +sharedstatedir = $(prefix)/com +localstatedir = $(prefix)/var +includedir = $(prefix)/include +oldincludedir = $(DESTDIR)/usr/include +docdir = $(datarootdir)/doc/$(PACKAGE) +infodir = $(datarootdir)/info +htmldir = $(docdir) +dvidir = $(docdir) +pdfdir = $(docdir) +psdir = $(docdir) +libdir = $(exec_prefix)/lib +localedir = $(datarootdir)/locale +mandir = $(datarootdir)/man +ridir = $(datarootdir)/$(RI_BASE_NAME) +sitedir = $(rubylibprefix)/site_ruby +vendordir = $(rubylibprefix)/vendor_ruby +rubyhdrdir = $(includedir)/$(RUBY_BASE_NAME)-$(ruby_version) +sitehdrdir = $(rubyhdrdir)/site_ruby +vendorhdrdir = $(rubyhdrdir)/vendor_ruby +rubylibdir = $(rubylibprefix)/$(ruby_version) +archdir = $(rubylibdir)/$(arch) +sitelibdir = $(sitedir)/$(ruby_version) +sitearchdir = $(sitelibdir)/$(sitearch) +vendorlibdir = $(vendordir)/$(ruby_version) +vendorarchdir = $(vendorlibdir)/$(sitearch) + +NULLCMD = : + +CC = /usr/bin/gcc-4.2 +CXX = g++ +LIBRUBY = $(LIBRUBY_A) +LIBRUBY_A = lib$(RUBY_SO_NAME)-static.a +LIBRUBYARG_SHARED = +LIBRUBYARG_STATIC = -l$(RUBY_SO_NAME)-static +OUTFLAG = -o +COUTFLAG = -o + +RUBY_EXTCONF_H = +cflags = $(optflags) $(debugflags) $(warnflags) +optflags = -O3 +debugflags = -ggdb +warnflags = -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers -Wpointer-arith -Wwrite-strings -Wdeclaration-after-statement -Wshorten-64-to-32 -Wimplicit-function-declaration +CFLAGS = -fno-common $(cflags) -pipe $(ARCH_FLAG) +INCFLAGS = -I. -I$(arch_hdrdir) -I$(hdrdir)/ruby/backward -I$(hdrdir) -I$(srcdir) +DEFS = +CPPFLAGS = -I'/Users/tobi/.rbenv/versions/1.9.3-p194-perf/include' -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE $(DEFS) $(cppflags) +CXXFLAGS = $(CFLAGS) $(cxxflags) +ldflags = -L. -L'/Users/tobi/.rbenv/versions/1.9.3-p194-perf/lib' -L/usr/local/lib +dldflags = -Wl,-undefined,dynamic_lookup -Wl,-multiply_defined,suppress -Wl,-flat_namespace +ARCH_FLAG = +DLDFLAGS = $(ldflags) $(dldflags) $(ARCH_FLAG) +LDSHARED = $(CC) -dynamic -bundle +LDSHAREDXX = $(CXX) -dynamic -bundle +AR = ar +EXEEXT = + +RUBY_BASE_NAME = ruby +RUBY_INSTALL_NAME = ruby +RUBY_SO_NAME = ruby +arch = x86_64-darwin12.0.0 +sitearch = $(arch) +ruby_version = 1.9.1 +ruby = /Users/tobi/.rbenv/versions/1.9.3-p194-perf/bin/ruby +RUBY = $(ruby) +RM = rm -f +RM_RF = $(RUBY) -run -e rm -- -rf +RMDIRS = rmdir -p +MAKEDIRS = mkdir -p +INSTALL = /usr/bin/install -c +INSTALL_PROG = $(INSTALL) -m 0755 +INSTALL_DATA = $(INSTALL) -m 644 +COPY = cp + +#### End of system configuration section. #### + +preload = + +libpath = . $(libdir) +LIBPATH = -L. -L$(libdir) +DEFFILE = + +CLEANFILES = mkmf.log +DISTCLEANFILES = +DISTCLEANDIRS = + +extout = +extout_prefix = +target_prefix = +LOCAL_LIBS = +LIBS = -lc -lpthread -ldl -lobjc +SRCS = liquid_ext.c +OBJS = liquid_ext.o +TARGET = liquid_ext +DLLIB = $(TARGET).bundle +EXTSTATIC = +STATIC_LIB = + +BINDIR = $(bindir) +RUBYCOMMONDIR = $(sitedir)$(target_prefix) +RUBYLIBDIR = $(sitelibdir)$(target_prefix) +RUBYARCHDIR = $(sitearchdir)$(target_prefix) +HDRDIR = $(rubyhdrdir)/ruby$(target_prefix) +ARCHHDRDIR = $(rubyhdrdir)/$(arch)/ruby$(target_prefix) + +TARGET_SO = $(DLLIB) +CLEANLIBS = $(TARGET).bundle +CLEANOBJS = *.o *.bak + +all: $(DLLIB) +static: $(STATIC_LIB) +.PHONY: all install static install-so install-rb +.PHONY: clean clean-so clean-rb + +clean-rb-default:: +clean-rb:: +clean-so:: +clean: clean-so clean-rb-default clean-rb + @-$(RM) $(CLEANLIBS) $(CLEANOBJS) $(CLEANFILES) + +distclean-rb-default:: +distclean-rb:: +distclean-so:: +distclean: clean distclean-so distclean-rb-default distclean-rb + @-$(RM) Makefile $(RUBY_EXTCONF_H) conftest.* mkmf.log + @-$(RM) core ruby$(EXEEXT) *~ $(DISTCLEANFILES) + @-$(RMDIRS) $(DISTCLEANDIRS) 2> /dev/null || true + +realclean: distclean +install: install-so install-rb + +install-so: $(RUBYARCHDIR) +install-so: $(RUBYARCHDIR)/$(DLLIB) +$(RUBYARCHDIR)/$(DLLIB): $(DLLIB) + @-$(MAKEDIRS) $(@D) + $(INSTALL_PROG) $(DLLIB) $(@D) +install-rb: pre-install-rb install-rb-default +install-rb-default: pre-install-rb-default +pre-install-rb: Makefile +pre-install-rb-default: Makefile +pre-install-rb-default: + $(ECHO) installing default liquid_ext libraries +$(RUBYARCHDIR): + $(Q) $(MAKEDIRS) $@ + +site-install: site-install-so site-install-rb +site-install-so: install-so +site-install-rb: install-rb + +.SUFFIXES: .c .m .cc .mm .cxx .cpp .C .o + +.cc.o: + $(ECHO) compiling $(<) + $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $< + +.mm.o: + $(ECHO) compiling $(<) + $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $< + +.cxx.o: + $(ECHO) compiling $(<) + $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $< + +.cpp.o: + $(ECHO) compiling $(<) + $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $< + +.C.o: + $(ECHO) compiling $(<) + $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $< + +.c.o: + $(ECHO) compiling $(<) + $(Q) $(CC) $(INCFLAGS) $(CPPFLAGS) $(CFLAGS) $(COUTFLAG)$@ -c $< + +.m.o: + $(ECHO) compiling $(<) + $(Q) $(CC) $(INCFLAGS) $(CPPFLAGS) $(CFLAGS) $(COUTFLAG)$@ -c $< + +$(DLLIB): $(OBJS) Makefile + $(ECHO) linking shared-object $(DLLIB) + @-$(RM) $(@) + $(Q) $(LDSHARED) -o $@ $(OBJS) $(LIBPATH) $(DLDFLAGS) $(LOCAL_LIBS) $(LIBS) + + + +$(OBJS): $(hdrdir)/ruby.h $(hdrdir)/ruby/defines.h $(arch_hdrdir)/ruby/config.h diff --git a/ext/liquid/extconf.rb b/ext/liquid/extconf.rb new file mode 100644 index 0000000..8bfdb79 --- /dev/null +++ b/ext/liquid/extconf.rb @@ -0,0 +1,6 @@ +require 'mkmf' + +dir_config("liquid_ext") +have_library("c", "main") + +create_makefile("liquid_ext") diff --git a/ext/liquid/liquid_ext.bundle b/ext/liquid/liquid_ext.bundle new file mode 100755 index 0000000000000000000000000000000000000000..e35a56bc9bd018ce625c29d548dbb8bd3b84642f GIT binary patch literal 28680 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 U-rMiKd2he + + +#line 108 "./ext/liquid/liquid_ext.rl" + + + +#line 16 "./ext/liquid/liquid_ext.c" +static const int fsm_start = 1; +static const int fsm_error = 0; + +static const int fsm_en_main = 1; + + +#line 111 "./ext/liquid/liquid_ext.rl" + +// def self.emit(sym, data, tokens) +// puts "emitting: #{sym} -> #{data.inspect}" if $VERBOSE +// tokens.push [sym, data] +// end + +#define EMIT(sym, data) rb_ary_push(tokens, rb_ary_new3(2, ID2SYM(rb_intern(sym)), data)); + + +void liquid_context_parse_impl(VALUE text, VALUE tokens) +{ + char *p; + char *pe; + char *eof; + char *mark; + int cs, res = 0; + + if (RSTRING_LEN(text) <= 0) { + return; + } + + mark = p = RSTRING_PTR(text); + eof = pe = RSTRING_PTR(text) + RSTRING_LEN(text); + + +#line 49 "./ext/liquid/liquid_ext.c" + { + cs = fsm_start; + } + +#line 136 "./ext/liquid/liquid_ext.rl" + +#line 56 "./ext/liquid/liquid_ext.c" + { + if ( p == pe ) + goto _test_eof; + switch ( cs ) + { +case 1: + switch( (*p) ) { + case 34: goto tr0; + case 39: goto tr2; + case 40: goto st4; + case 43: goto tr4; + case 45: goto tr4; + case 91: goto st60; + case 102: goto tr8; + case 110: goto tr9; + case 116: goto tr10; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto tr5; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto tr6; + } else + goto tr6; + goto st0; +st0: +cs = 0; + goto _out; +tr0: +#line 11 "./ext/liquid/liquid_ext.rl" + { + mark = p; + } + goto st2; +st2: + if ( ++p == pe ) + goto _test_eof2; +case 2: +#line 96 "./ext/liquid/liquid_ext.c" + if ( (*p) == 34 ) + goto st63; + goto st2; +st63: + if ( ++p == pe ) + goto _test_eof63; +case 63: + if ( (*p) == 34 ) + goto st63; + goto st2; +tr2: +#line 11 "./ext/liquid/liquid_ext.rl" + { + mark = p; + } + goto st3; +st3: + if ( ++p == pe ) + goto _test_eof3; +case 3: +#line 117 "./ext/liquid/liquid_ext.c" + if ( (*p) == 39 ) + goto st64; + goto st3; +st64: + if ( ++p == pe ) + goto _test_eof64; +case 64: + if ( (*p) == 39 ) + goto st64; + goto st3; +st4: + if ( ++p == pe ) + goto _test_eof4; +case 4: + switch( (*p) ) { + case 34: goto tr15; + case 39: goto tr16; + case 43: goto tr17; + case 45: goto tr17; + case 102: goto tr20; + case 110: goto tr21; + case 116: goto tr22; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto tr18; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto tr19; + } else + goto tr19; + goto st0; +tr15: +#line 11 "./ext/liquid/liquid_ext.rl" + { + mark = p; + } + goto st5; +st5: + if ( ++p == pe ) + goto _test_eof5; +case 5: +#line 160 "./ext/liquid/liquid_ext.c" + if ( (*p) == 34 ) + goto st6; + goto st5; +tr27: +#line 11 "./ext/liquid/liquid_ext.rl" + { + mark = p; + } + goto st6; +st6: + if ( ++p == pe ) + goto _test_eof6; +case 6: +#line 174 "./ext/liquid/liquid_ext.c" + switch( (*p) ) { + case 34: goto st6; + case 46: goto tr25; + } + goto st5; +tr25: +#line 53 "./ext/liquid/liquid_ext.rl" + { EMIT("id", rb_str_new(mark + 1, p - mark - 2)) } + goto st7; +st7: + if ( ++p == pe ) + goto _test_eof7; +case 7: +#line 188 "./ext/liquid/liquid_ext.c" + switch( (*p) ) { + case 34: goto st6; + case 46: goto st8; + } + goto st5; +st8: + if ( ++p == pe ) + goto _test_eof8; +case 8: + switch( (*p) ) { + case 34: goto tr27; + case 39: goto tr15; + case 43: goto tr15; + case 45: goto tr15; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto tr15; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto tr15; + } else + goto tr15; + goto st5; +tr16: +#line 11 "./ext/liquid/liquid_ext.rl" + { + mark = p; + } + goto st9; +st9: + if ( ++p == pe ) + goto _test_eof9; +case 9: +#line 223 "./ext/liquid/liquid_ext.c" + if ( (*p) == 39 ) + goto st10; + goto st9; +tr32: +#line 11 "./ext/liquid/liquid_ext.rl" + { + mark = p; + } + goto st10; +st10: + if ( ++p == pe ) + goto _test_eof10; +case 10: +#line 237 "./ext/liquid/liquid_ext.c" + switch( (*p) ) { + case 39: goto st10; + case 46: goto tr30; + } + goto st9; +tr30: +#line 53 "./ext/liquid/liquid_ext.rl" + { EMIT("id", rb_str_new(mark + 1, p - mark - 2)) } + goto st11; +st11: + if ( ++p == pe ) + goto _test_eof11; +case 11: +#line 251 "./ext/liquid/liquid_ext.c" + switch( (*p) ) { + case 39: goto st10; + case 46: goto st12; + } + goto st9; +st12: + if ( ++p == pe ) + goto _test_eof12; +case 12: + switch( (*p) ) { + case 34: goto tr16; + case 39: goto tr32; + case 43: goto tr16; + case 45: goto tr16; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto tr16; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto tr16; + } else + goto tr16; + goto st9; +tr17: +#line 11 "./ext/liquid/liquid_ext.rl" + { + mark = p; + } + goto st13; +st13: + if ( ++p == pe ) + goto _test_eof13; +case 13: +#line 286 "./ext/liquid/liquid_ext.c" + if ( 48 <= (*p) && (*p) <= 57 ) + goto st14; + goto st0; +tr18: +#line 11 "./ext/liquid/liquid_ext.rl" + { + mark = p; + } + goto st14; +st14: + if ( ++p == pe ) + goto _test_eof14; +case 14: +#line 300 "./ext/liquid/liquid_ext.c" + if ( (*p) == 46 ) + goto tr34; + if ( 48 <= (*p) && (*p) <= 57 ) + goto st14; + goto st0; +tr34: +#line 41 "./ext/liquid/liquid_ext.rl" + { + EMIT("id", rb_funcall(rb_cObject, rb_intern("Integer"), 1, rb_str_new(mark, p - mark))); + } + goto st15; +st15: + if ( ++p == pe ) + goto _test_eof15; +case 15: +#line 316 "./ext/liquid/liquid_ext.c" + if ( (*p) == 46 ) + goto st16; + if ( 48 <= (*p) && (*p) <= 57 ) + goto st42; + goto st0; +st16: + if ( ++p == pe ) + goto _test_eof16; +case 16: + switch( (*p) ) { + case 34: goto tr37; + case 39: goto tr37; + case 43: goto tr38; + case 45: goto tr38; + case 102: goto tr41; + case 110: goto tr42; + case 116: goto tr43; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto tr39; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto tr40; + } else + goto tr40; + goto st0; +tr37: +#line 11 "./ext/liquid/liquid_ext.rl" + { + mark = p; + } + goto st17; +st17: + if ( ++p == pe ) + goto _test_eof17; +case 17: +#line 354 "./ext/liquid/liquid_ext.c" + goto st17; +tr38: +#line 11 "./ext/liquid/liquid_ext.rl" + { + mark = p; + } + goto st18; +st18: + if ( ++p == pe ) + goto _test_eof18; +case 18: +#line 366 "./ext/liquid/liquid_ext.c" + if ( 48 <= (*p) && (*p) <= 57 ) + goto st19; + goto st0; +tr39: +#line 11 "./ext/liquid/liquid_ext.rl" + { + mark = p; + } + goto st19; +st19: + if ( ++p == pe ) + goto _test_eof19; +case 19: +#line 380 "./ext/liquid/liquid_ext.c" + switch( (*p) ) { + case 41: goto tr46; + case 46: goto st26; + } + if ( 48 <= (*p) && (*p) <= 57 ) + goto st19; + goto st0; +tr46: +#line 41 "./ext/liquid/liquid_ext.rl" + { + EMIT("id", rb_funcall(rb_cObject, rb_intern("Integer"), 1, rb_str_new(mark, p - mark))); + } + goto st65; +tr62: +#line 45 "./ext/liquid/liquid_ext.rl" + { + EMIT("id", rb_funcall(rb_cObject, rb_intern("Float"), 1, rb_str_new(mark, p - mark))) + } + goto st65; +tr63: +#line 58 "./ext/liquid/liquid_ext.rl" + { + EMIT("id", rb_str_new(mark, p - mark)) + EMIT("lookup", Qnil) + } + goto st65; +tr69: +#line 51 "./ext/liquid/liquid_ext.rl" + { EMIT("id", Qfalse) } + goto st65; +tr73: +#line 49 "./ext/liquid/liquid_ext.rl" + { EMIT("id", Qnil) } + goto st65; +tr77: +#line 50 "./ext/liquid/liquid_ext.rl" + { EMIT("id", Qtrue) } + goto st65; +st65: + if ( ++p == pe ) + goto _test_eof65; +case 65: +#line 423 "./ext/liquid/liquid_ext.c" + switch( (*p) ) { + case 46: goto tr100; + case 91: goto tr101; + } + goto st0; +tr144: +#line 45 "./ext/liquid/liquid_ext.rl" + { + EMIT("id", rb_funcall(rb_cObject, rb_intern("Float"), 1, rb_str_new(mark, p - mark))) + } + goto st20; +tr147: +#line 58 "./ext/liquid/liquid_ext.rl" + { + EMIT("id", rb_str_new(mark, p - mark)) + EMIT("lookup", Qnil) + } + goto st20; +tr153: +#line 51 "./ext/liquid/liquid_ext.rl" + { EMIT("id", Qfalse) } + goto st20; +tr158: +#line 49 "./ext/liquid/liquid_ext.rl" + { EMIT("id", Qnil) } + goto st20; +tr163: +#line 50 "./ext/liquid/liquid_ext.rl" + { EMIT("id", Qtrue) } + goto st20; +tr100: +#line 22 "./ext/liquid/liquid_ext.rl" + { + EMIT("range", Qnil) + } + goto st20; +tr103: +#line 96 "./ext/liquid/liquid_ext.rl" + { + EMIT("id", rb_str_new(mark, p - mark)) + EMIT("call", Qnil) + } + goto st20; +tr130: +#line 84 "./ext/liquid/liquid_ext.rl" + { + EMIT("buildin", rb_str_new2("first")) + } + goto st20; +tr135: +#line 88 "./ext/liquid/liquid_ext.rl" + { + EMIT("buildin", rb_str_new2("last")) + } + goto st20; +tr140: +#line 92 "./ext/liquid/liquid_ext.rl" + { + EMIT("buildin", rb_str_new2("size")) + } + goto st20; +st20: + if ( ++p == pe ) + goto _test_eof20; +case 20: +#line 489 "./ext/liquid/liquid_ext.c" + switch( (*p) ) { + case 102: goto tr49; + case 108: goto tr50; + case 115: goto tr51; + } + if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto tr48; + } else if ( (*p) >= 65 ) + goto tr48; + goto st0; +tr48: +#line 11 "./ext/liquid/liquid_ext.rl" + { + mark = p; + } + goto st66; +st66: + if ( ++p == pe ) + goto _test_eof66; +case 66: +#line 511 "./ext/liquid/liquid_ext.c" + switch( (*p) ) { + case 45: goto st66; + case 46: goto tr103; + case 91: goto tr104; + case 95: goto st66; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st66; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st66; + } else + goto st66; + goto st0; +tr143: +#line 41 "./ext/liquid/liquid_ext.rl" + { + EMIT("id", rb_funcall(rb_cObject, rb_intern("Integer"), 1, rb_str_new(mark, p - mark))); + } + goto st21; +tr145: +#line 45 "./ext/liquid/liquid_ext.rl" + { + EMIT("id", rb_funcall(rb_cObject, rb_intern("Float"), 1, rb_str_new(mark, p - mark))) + } + goto st21; +tr148: +#line 58 "./ext/liquid/liquid_ext.rl" + { + EMIT("id", rb_str_new(mark, p - mark)) + EMIT("lookup", Qnil) + } + goto st21; +tr154: +#line 51 "./ext/liquid/liquid_ext.rl" + { EMIT("id", Qfalse) } + goto st21; +tr159: +#line 49 "./ext/liquid/liquid_ext.rl" + { EMIT("id", Qnil) } + goto st21; +tr164: +#line 50 "./ext/liquid/liquid_ext.rl" + { EMIT("id", Qtrue) } + goto st21; +tr101: +#line 22 "./ext/liquid/liquid_ext.rl" + { + EMIT("range", Qnil) + } + goto st21; +tr104: +#line 96 "./ext/liquid/liquid_ext.rl" + { + EMIT("id", rb_str_new(mark, p - mark)) + EMIT("call", Qnil) + } + goto st21; +tr131: +#line 84 "./ext/liquid/liquid_ext.rl" + { + EMIT("buildin", rb_str_new2("first")) + } + goto st21; +tr136: +#line 88 "./ext/liquid/liquid_ext.rl" + { + EMIT("buildin", rb_str_new2("last")) + } + goto st21; +tr141: +#line 92 "./ext/liquid/liquid_ext.rl" + { + EMIT("buildin", rb_str_new2("size")) + } + goto st21; +st21: + if ( ++p == pe ) + goto _test_eof21; +case 21: +#line 593 "./ext/liquid/liquid_ext.c" + if ( (*p) == 93 ) + goto tr53; + goto tr52; +tr52: +#line 11 "./ext/liquid/liquid_ext.rl" + { + mark = p; + } + goto st22; +st22: + if ( ++p == pe ) + goto _test_eof22; +case 22: +#line 607 "./ext/liquid/liquid_ext.c" + if ( (*p) == 93 ) + goto tr55; + goto st22; +tr55: +#line 68 "./ext/liquid/liquid_ext.rl" + { + VALUE body = rb_str_new(mark, p - mark); + liquid_context_parse_impl(body, tokens); + } + goto st67; +tr60: +#line 11 "./ext/liquid/liquid_ext.rl" + { + mark = p; + } +#line 68 "./ext/liquid/liquid_ext.rl" + { + VALUE body = rb_str_new(mark, p - mark); + liquid_context_parse_impl(body, tokens); + } + goto st67; +st67: + if ( ++p == pe ) + goto _test_eof67; +case 67: +#line 633 "./ext/liquid/liquid_ext.c" + switch( (*p) ) { + case 46: goto tr105; + case 91: goto tr106; + case 93: goto tr55; + } + goto st22; +tr108: +#line 96 "./ext/liquid/liquid_ext.rl" + { + EMIT("id", rb_str_new(mark, p - mark)) + EMIT("call", Qnil) + } + goto st23; +tr105: +#line 19 "./ext/liquid/liquid_ext.rl" + { + EMIT("call", Qnil) + } + goto st23; +tr114: +#line 84 "./ext/liquid/liquid_ext.rl" + { + EMIT("buildin", rb_str_new2("first")) + } + goto st23; +tr119: +#line 88 "./ext/liquid/liquid_ext.rl" + { + EMIT("buildin", rb_str_new2("last")) + } + goto st23; +tr124: +#line 92 "./ext/liquid/liquid_ext.rl" + { + EMIT("buildin", rb_str_new2("size")) + } + goto st23; +st23: + if ( ++p == pe ) + goto _test_eof23; +case 23: +#line 675 "./ext/liquid/liquid_ext.c" + switch( (*p) ) { + case 93: goto tr55; + case 102: goto tr57; + case 108: goto tr58; + case 115: goto tr59; + } + if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto tr56; + } else if ( (*p) >= 65 ) + goto tr56; + goto st22; +tr56: +#line 11 "./ext/liquid/liquid_ext.rl" + { + mark = p; + } + goto st68; +st68: + if ( ++p == pe ) + goto _test_eof68; +case 68: +#line 698 "./ext/liquid/liquid_ext.c" + switch( (*p) ) { + case 45: goto st68; + case 46: goto tr108; + case 91: goto tr109; + case 93: goto tr55; + case 95: goto st68; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st68; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st68; + } else + goto st68; + goto st22; +tr109: +#line 96 "./ext/liquid/liquid_ext.rl" + { + EMIT("id", rb_str_new(mark, p - mark)) + EMIT("call", Qnil) + } + goto st24; +tr106: +#line 19 "./ext/liquid/liquid_ext.rl" + { + EMIT("call", Qnil) + } + goto st24; +tr115: +#line 84 "./ext/liquid/liquid_ext.rl" + { + EMIT("buildin", rb_str_new2("first")) + } + goto st24; +tr120: +#line 88 "./ext/liquid/liquid_ext.rl" + { + EMIT("buildin", rb_str_new2("last")) + } + goto st24; +tr125: +#line 92 "./ext/liquid/liquid_ext.rl" + { + EMIT("buildin", rb_str_new2("size")) + } + goto st24; +st24: + if ( ++p == pe ) + goto _test_eof24; +case 24: +#line 750 "./ext/liquid/liquid_ext.c" + if ( (*p) == 93 ) + goto tr60; + goto tr52; +tr57: +#line 11 "./ext/liquid/liquid_ext.rl" + { + mark = p; + } + goto st69; +st69: + if ( ++p == pe ) + goto _test_eof69; +case 69: +#line 764 "./ext/liquid/liquid_ext.c" + switch( (*p) ) { + case 45: goto st68; + case 46: goto tr108; + case 91: goto tr109; + case 93: goto tr55; + case 95: goto st68; + case 105: goto st70; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st68; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st68; + } else + goto st68; + goto st22; +st70: + if ( ++p == pe ) + goto _test_eof70; +case 70: + switch( (*p) ) { + case 45: goto st68; + case 46: goto tr108; + case 91: goto tr109; + case 93: goto tr55; + case 95: goto st68; + case 114: goto st71; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st68; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st68; + } else + goto st68; + goto st22; +st71: + if ( ++p == pe ) + goto _test_eof71; +case 71: + switch( (*p) ) { + case 45: goto st68; + case 46: goto tr108; + case 91: goto tr109; + case 93: goto tr55; + case 95: goto st68; + case 115: goto st72; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st68; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st68; + } else + goto st68; + goto st22; +st72: + if ( ++p == pe ) + goto _test_eof72; +case 72: + switch( (*p) ) { + case 45: goto st68; + case 46: goto tr108; + case 91: goto tr109; + case 93: goto tr55; + case 95: goto st68; + case 116: goto st73; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st68; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st68; + } else + goto st68; + goto st22; +st73: + if ( ++p == pe ) + goto _test_eof73; +case 73: + switch( (*p) ) { + case 45: goto st68; + case 46: goto tr114; + case 91: goto tr115; + case 93: goto tr55; + case 95: goto st68; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st68; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st68; + } else + goto st68; + goto st22; +tr58: +#line 11 "./ext/liquid/liquid_ext.rl" + { + mark = p; + } + goto st74; +st74: + if ( ++p == pe ) + goto _test_eof74; +case 74: +#line 875 "./ext/liquid/liquid_ext.c" + switch( (*p) ) { + case 45: goto st68; + case 46: goto tr108; + case 91: goto tr109; + case 93: goto tr55; + case 95: goto st68; + case 97: goto st75; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st68; + } else if ( (*p) > 90 ) { + if ( 98 <= (*p) && (*p) <= 122 ) + goto st68; + } else + goto st68; + goto st22; +st75: + if ( ++p == pe ) + goto _test_eof75; +case 75: + switch( (*p) ) { + case 45: goto st68; + case 46: goto tr108; + case 91: goto tr109; + case 93: goto tr55; + case 95: goto st68; + case 115: goto st76; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st68; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st68; + } else + goto st68; + goto st22; +st76: + if ( ++p == pe ) + goto _test_eof76; +case 76: + switch( (*p) ) { + case 45: goto st68; + case 46: goto tr108; + case 91: goto tr109; + case 93: goto tr55; + case 95: goto st68; + case 116: goto st77; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st68; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st68; + } else + goto st68; + goto st22; +st77: + if ( ++p == pe ) + goto _test_eof77; +case 77: + switch( (*p) ) { + case 45: goto st68; + case 46: goto tr119; + case 91: goto tr120; + case 93: goto tr55; + case 95: goto st68; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st68; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st68; + } else + goto st68; + goto st22; +tr59: +#line 11 "./ext/liquid/liquid_ext.rl" + { + mark = p; + } + goto st78; +st78: + if ( ++p == pe ) + goto _test_eof78; +case 78: +#line 965 "./ext/liquid/liquid_ext.c" + switch( (*p) ) { + case 45: goto st68; + case 46: goto tr108; + case 91: goto tr109; + case 93: goto tr55; + case 95: goto st68; + case 105: goto st79; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st68; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st68; + } else + goto st68; + goto st22; +st79: + if ( ++p == pe ) + goto _test_eof79; +case 79: + switch( (*p) ) { + case 45: goto st68; + case 46: goto tr108; + case 91: goto tr109; + case 93: goto tr55; + case 95: goto st68; + case 122: goto st80; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st68; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 121 ) + goto st68; + } else + goto st68; + goto st22; +st80: + if ( ++p == pe ) + goto _test_eof80; +case 80: + switch( (*p) ) { + case 45: goto st68; + case 46: goto tr108; + case 91: goto tr109; + case 93: goto tr55; + case 95: goto st68; + case 101: goto st81; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st68; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st68; + } else + goto st68; + goto st22; +st81: + if ( ++p == pe ) + goto _test_eof81; +case 81: + switch( (*p) ) { + case 45: goto st68; + case 46: goto tr124; + case 91: goto tr125; + case 93: goto tr55; + case 95: goto st68; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st68; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st68; + } else + goto st68; + goto st22; +tr53: +#line 11 "./ext/liquid/liquid_ext.rl" + { + mark = p; + } + goto st25; +st25: + if ( ++p == pe ) + goto _test_eof25; +case 25: +#line 1055 "./ext/liquid/liquid_ext.c" + goto st22; +tr49: +#line 11 "./ext/liquid/liquid_ext.rl" + { + mark = p; + } + goto st82; +st82: + if ( ++p == pe ) + goto _test_eof82; +case 82: +#line 1067 "./ext/liquid/liquid_ext.c" + switch( (*p) ) { + case 45: goto st66; + case 46: goto tr103; + case 91: goto tr104; + case 95: goto st66; + case 105: goto st83; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st66; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st66; + } else + goto st66; + goto st0; +st83: + if ( ++p == pe ) + goto _test_eof83; +case 83: + switch( (*p) ) { + case 45: goto st66; + case 46: goto tr103; + case 91: goto tr104; + case 95: goto st66; + case 114: goto st84; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st66; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st66; + } else + goto st66; + goto st0; +st84: + if ( ++p == pe ) + goto _test_eof84; +case 84: + switch( (*p) ) { + case 45: goto st66; + case 46: goto tr103; + case 91: goto tr104; + case 95: goto st66; + case 115: goto st85; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st66; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st66; + } else + goto st66; + goto st0; +st85: + if ( ++p == pe ) + goto _test_eof85; +case 85: + switch( (*p) ) { + case 45: goto st66; + case 46: goto tr103; + case 91: goto tr104; + case 95: goto st66; + case 116: goto st86; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st66; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st66; + } else + goto st66; + goto st0; +st86: + if ( ++p == pe ) + goto _test_eof86; +case 86: + switch( (*p) ) { + case 45: goto st66; + case 46: goto tr130; + case 91: goto tr131; + case 95: goto st66; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st66; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st66; + } else + goto st66; + goto st0; +tr50: +#line 11 "./ext/liquid/liquid_ext.rl" + { + mark = p; + } + goto st87; +st87: + if ( ++p == pe ) + goto _test_eof87; +case 87: +#line 1173 "./ext/liquid/liquid_ext.c" + switch( (*p) ) { + case 45: goto st66; + case 46: goto tr103; + case 91: goto tr104; + case 95: goto st66; + case 97: goto st88; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st66; + } else if ( (*p) > 90 ) { + if ( 98 <= (*p) && (*p) <= 122 ) + goto st66; + } else + goto st66; + goto st0; +st88: + if ( ++p == pe ) + goto _test_eof88; +case 88: + switch( (*p) ) { + case 45: goto st66; + case 46: goto tr103; + case 91: goto tr104; + case 95: goto st66; + case 115: goto st89; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st66; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st66; + } else + goto st66; + goto st0; +st89: + if ( ++p == pe ) + goto _test_eof89; +case 89: + switch( (*p) ) { + case 45: goto st66; + case 46: goto tr103; + case 91: goto tr104; + case 95: goto st66; + case 116: goto st90; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st66; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st66; + } else + goto st66; + goto st0; +st90: + if ( ++p == pe ) + goto _test_eof90; +case 90: + switch( (*p) ) { + case 45: goto st66; + case 46: goto tr135; + case 91: goto tr136; + case 95: goto st66; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st66; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st66; + } else + goto st66; + goto st0; +tr51: +#line 11 "./ext/liquid/liquid_ext.rl" + { + mark = p; + } + goto st91; +st91: + if ( ++p == pe ) + goto _test_eof91; +case 91: +#line 1259 "./ext/liquid/liquid_ext.c" + switch( (*p) ) { + case 45: goto st66; + case 46: goto tr103; + case 91: goto tr104; + case 95: goto st66; + case 105: goto st92; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st66; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st66; + } else + goto st66; + goto st0; +st92: + if ( ++p == pe ) + goto _test_eof92; +case 92: + switch( (*p) ) { + case 45: goto st66; + case 46: goto tr103; + case 91: goto tr104; + case 95: goto st66; + case 122: goto st93; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st66; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 121 ) + goto st66; + } else + goto st66; + goto st0; +st93: + if ( ++p == pe ) + goto _test_eof93; +case 93: + switch( (*p) ) { + case 45: goto st66; + case 46: goto tr103; + case 91: goto tr104; + case 95: goto st66; + case 101: goto st94; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st66; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st66; + } else + goto st66; + goto st0; +st94: + if ( ++p == pe ) + goto _test_eof94; +case 94: + switch( (*p) ) { + case 45: goto st66; + case 46: goto tr140; + case 91: goto tr141; + case 95: goto st66; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st66; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st66; + } else + goto st66; + goto st0; +st26: + if ( ++p == pe ) + goto _test_eof26; +case 26: + if ( 48 <= (*p) && (*p) <= 57 ) + goto st27; + goto st0; +st27: + if ( ++p == pe ) + goto _test_eof27; +case 27: + if ( (*p) == 41 ) + goto tr62; + if ( 48 <= (*p) && (*p) <= 57 ) + goto st27; + goto st0; +tr40: +#line 11 "./ext/liquid/liquid_ext.rl" + { + mark = p; + } + goto st28; +st28: + if ( ++p == pe ) + goto _test_eof28; +case 28: +#line 1361 "./ext/liquid/liquid_ext.c" + switch( (*p) ) { + case 41: goto tr63; + case 45: goto st28; + case 95: goto st28; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st28; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st28; + } else + goto st28; + goto st0; +tr41: +#line 11 "./ext/liquid/liquid_ext.rl" + { + mark = p; + } + goto st29; +st29: + if ( ++p == pe ) + goto _test_eof29; +case 29: +#line 1386 "./ext/liquid/liquid_ext.c" + switch( (*p) ) { + case 41: goto tr63; + case 45: goto st28; + case 95: goto st28; + case 97: goto st30; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st28; + } else if ( (*p) > 90 ) { + if ( 98 <= (*p) && (*p) <= 122 ) + goto st28; + } else + goto st28; + goto st0; +st30: + if ( ++p == pe ) + goto _test_eof30; +case 30: + switch( (*p) ) { + case 41: goto tr63; + case 45: goto st28; + case 95: goto st28; + case 108: goto st31; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st28; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st28; + } else + goto st28; + goto st0; +st31: + if ( ++p == pe ) + goto _test_eof31; +case 31: + switch( (*p) ) { + case 41: goto tr63; + case 45: goto st28; + case 95: goto st28; + case 115: goto st32; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st28; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st28; + } else + goto st28; + goto st0; +st32: + if ( ++p == pe ) + goto _test_eof32; +case 32: + switch( (*p) ) { + case 41: goto tr63; + case 45: goto st28; + case 95: goto st28; + case 101: goto st33; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st28; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st28; + } else + goto st28; + goto st0; +st33: + if ( ++p == pe ) + goto _test_eof33; +case 33: + switch( (*p) ) { + case 41: goto tr69; + case 45: goto st28; + case 95: goto st28; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st28; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st28; + } else + goto st28; + goto st0; +tr42: +#line 11 "./ext/liquid/liquid_ext.rl" + { + mark = p; + } + goto st34; +st34: + if ( ++p == pe ) + goto _test_eof34; +case 34: +#line 1487 "./ext/liquid/liquid_ext.c" + switch( (*p) ) { + case 41: goto tr63; + case 45: goto st28; + case 95: goto st28; + case 105: goto st35; + case 117: goto st37; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st28; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st28; + } else + goto st28; + goto st0; +st35: + if ( ++p == pe ) + goto _test_eof35; +case 35: + switch( (*p) ) { + case 41: goto tr63; + case 45: goto st28; + case 95: goto st28; + case 108: goto st36; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st28; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st28; + } else + goto st28; + goto st0; +st36: + if ( ++p == pe ) + goto _test_eof36; +case 36: + switch( (*p) ) { + case 41: goto tr73; + case 45: goto st28; + case 95: goto st28; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st28; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st28; + } else + goto st28; + goto st0; +st37: + if ( ++p == pe ) + goto _test_eof37; +case 37: + switch( (*p) ) { + case 41: goto tr63; + case 45: goto st28; + case 95: goto st28; + case 108: goto st35; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st28; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st28; + } else + goto st28; + goto st0; +tr43: +#line 11 "./ext/liquid/liquid_ext.rl" + { + mark = p; + } + goto st38; +st38: + if ( ++p == pe ) + goto _test_eof38; +case 38: +#line 1570 "./ext/liquid/liquid_ext.c" + switch( (*p) ) { + case 41: goto tr63; + case 45: goto st28; + case 95: goto st28; + case 114: goto st39; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st28; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st28; + } else + goto st28; + goto st0; +st39: + if ( ++p == pe ) + goto _test_eof39; +case 39: + switch( (*p) ) { + case 41: goto tr63; + case 45: goto st28; + case 95: goto st28; + case 117: goto st40; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st28; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st28; + } else + goto st28; + goto st0; +st40: + if ( ++p == pe ) + goto _test_eof40; +case 40: + switch( (*p) ) { + case 41: goto tr63; + case 45: goto st28; + case 95: goto st28; + case 101: goto st41; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st28; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st28; + } else + goto st28; + goto st0; +st41: + if ( ++p == pe ) + goto _test_eof41; +case 41: + switch( (*p) ) { + case 41: goto tr77; + case 45: goto st28; + case 95: goto st28; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st28; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st28; + } else + goto st28; + goto st0; +st42: + if ( ++p == pe ) + goto _test_eof42; +case 42: + if ( (*p) == 46 ) + goto tr78; + if ( 48 <= (*p) && (*p) <= 57 ) + goto st42; + goto st0; +tr78: +#line 45 "./ext/liquid/liquid_ext.rl" + { + EMIT("id", rb_funcall(rb_cObject, rb_intern("Float"), 1, rb_str_new(mark, p - mark))) + } + goto st43; +tr80: +#line 58 "./ext/liquid/liquid_ext.rl" + { + EMIT("id", rb_str_new(mark, p - mark)) + EMIT("lookup", Qnil) + } + goto st43; +tr85: +#line 51 "./ext/liquid/liquid_ext.rl" + { EMIT("id", Qfalse) } + goto st43; +tr89: +#line 49 "./ext/liquid/liquid_ext.rl" + { EMIT("id", Qnil) } + goto st43; +tr93: +#line 50 "./ext/liquid/liquid_ext.rl" + { EMIT("id", Qtrue) } + goto st43; +st43: + if ( ++p == pe ) + goto _test_eof43; +case 43: +#line 1680 "./ext/liquid/liquid_ext.c" + if ( (*p) == 46 ) + goto st16; + goto st0; +tr19: +#line 11 "./ext/liquid/liquid_ext.rl" + { + mark = p; + } + goto st44; +st44: + if ( ++p == pe ) + goto _test_eof44; +case 44: +#line 1694 "./ext/liquid/liquid_ext.c" + switch( (*p) ) { + case 45: goto st44; + case 46: goto tr80; + case 95: goto st44; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st44; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st44; + } else + goto st44; + goto st0; +tr20: +#line 11 "./ext/liquid/liquid_ext.rl" + { + mark = p; + } + goto st45; +st45: + if ( ++p == pe ) + goto _test_eof45; +case 45: +#line 1719 "./ext/liquid/liquid_ext.c" + switch( (*p) ) { + case 45: goto st44; + case 46: goto tr80; + case 95: goto st44; + case 97: goto st46; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st44; + } else if ( (*p) > 90 ) { + if ( 98 <= (*p) && (*p) <= 122 ) + goto st44; + } else + goto st44; + goto st0; +st46: + if ( ++p == pe ) + goto _test_eof46; +case 46: + switch( (*p) ) { + case 45: goto st44; + case 46: goto tr80; + case 95: goto st44; + case 108: goto st47; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st44; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st44; + } else + goto st44; + goto st0; +st47: + if ( ++p == pe ) + goto _test_eof47; +case 47: + switch( (*p) ) { + case 45: goto st44; + case 46: goto tr80; + case 95: goto st44; + case 115: goto st48; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st44; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st44; + } else + goto st44; + goto st0; +st48: + if ( ++p == pe ) + goto _test_eof48; +case 48: + switch( (*p) ) { + case 45: goto st44; + case 46: goto tr80; + case 95: goto st44; + case 101: goto st49; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st44; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st44; + } else + goto st44; + goto st0; +st49: + if ( ++p == pe ) + goto _test_eof49; +case 49: + switch( (*p) ) { + case 45: goto st44; + case 46: goto tr85; + case 95: goto st44; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st44; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st44; + } else + goto st44; + goto st0; +tr21: +#line 11 "./ext/liquid/liquid_ext.rl" + { + mark = p; + } + goto st50; +st50: + if ( ++p == pe ) + goto _test_eof50; +case 50: +#line 1820 "./ext/liquid/liquid_ext.c" + switch( (*p) ) { + case 45: goto st44; + case 46: goto tr80; + case 95: goto st44; + case 105: goto st51; + case 117: goto st53; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st44; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st44; + } else + goto st44; + goto st0; +st51: + if ( ++p == pe ) + goto _test_eof51; +case 51: + switch( (*p) ) { + case 45: goto st44; + case 46: goto tr80; + case 95: goto st44; + case 108: goto st52; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st44; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st44; + } else + goto st44; + goto st0; +st52: + if ( ++p == pe ) + goto _test_eof52; +case 52: + switch( (*p) ) { + case 45: goto st44; + case 46: goto tr89; + case 95: goto st44; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st44; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st44; + } else + goto st44; + goto st0; +st53: + if ( ++p == pe ) + goto _test_eof53; +case 53: + switch( (*p) ) { + case 45: goto st44; + case 46: goto tr80; + case 95: goto st44; + case 108: goto st51; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st44; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st44; + } else + goto st44; + goto st0; +tr22: +#line 11 "./ext/liquid/liquid_ext.rl" + { + mark = p; + } + goto st54; +st54: + if ( ++p == pe ) + goto _test_eof54; +case 54: +#line 1903 "./ext/liquid/liquid_ext.c" + switch( (*p) ) { + case 45: goto st44; + case 46: goto tr80; + case 95: goto st44; + case 114: goto st55; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st44; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st44; + } else + goto st44; + goto st0; +st55: + if ( ++p == pe ) + goto _test_eof55; +case 55: + switch( (*p) ) { + case 45: goto st44; + case 46: goto tr80; + case 95: goto st44; + case 117: goto st56; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st44; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st44; + } else + goto st44; + goto st0; +st56: + if ( ++p == pe ) + goto _test_eof56; +case 56: + switch( (*p) ) { + case 45: goto st44; + case 46: goto tr80; + case 95: goto st44; + case 101: goto st57; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st44; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st44; + } else + goto st44; + goto st0; +st57: + if ( ++p == pe ) + goto _test_eof57; +case 57: + switch( (*p) ) { + case 45: goto st44; + case 46: goto tr93; + case 95: goto st44; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st44; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st44; + } else + goto st44; + goto st0; +tr4: +#line 11 "./ext/liquid/liquid_ext.rl" + { + mark = p; + } + goto st58; +st58: + if ( ++p == pe ) + goto _test_eof58; +case 58: +#line 1985 "./ext/liquid/liquid_ext.c" + if ( 48 <= (*p) && (*p) <= 57 ) + goto st95; + goto st0; +tr5: +#line 11 "./ext/liquid/liquid_ext.rl" + { + mark = p; + } + goto st95; +st95: + if ( ++p == pe ) + goto _test_eof95; +case 95: +#line 1999 "./ext/liquid/liquid_ext.c" + switch( (*p) ) { + case 46: goto st59; + case 91: goto tr143; + } + if ( 48 <= (*p) && (*p) <= 57 ) + goto st95; + goto st0; +st59: + if ( ++p == pe ) + goto _test_eof59; +case 59: + if ( 48 <= (*p) && (*p) <= 57 ) + goto st96; + goto st0; +st96: + if ( ++p == pe ) + goto _test_eof96; +case 96: + switch( (*p) ) { + case 46: goto tr144; + case 91: goto tr145; + } + if ( 48 <= (*p) && (*p) <= 57 ) + goto st96; + goto st0; +tr6: +#line 11 "./ext/liquid/liquid_ext.rl" + { + mark = p; + } + goto st97; +st97: + if ( ++p == pe ) + goto _test_eof97; +case 97: +#line 2035 "./ext/liquid/liquid_ext.c" + switch( (*p) ) { + case 45: goto st97; + case 46: goto tr147; + case 91: goto tr148; + case 95: goto st97; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st97; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st97; + } else + goto st97; + goto st0; +st60: + if ( ++p == pe ) + goto _test_eof60; +case 60: + if ( (*p) == 93 ) + goto tr97; + goto tr96; +tr96: +#line 11 "./ext/liquid/liquid_ext.rl" + { + mark = p; + } + goto st61; +st61: + if ( ++p == pe ) + goto _test_eof61; +case 61: +#line 2068 "./ext/liquid/liquid_ext.c" + if ( (*p) == 93 ) + goto tr99; + goto st61; +tr99: +#line 68 "./ext/liquid/liquid_ext.rl" + { + VALUE body = rb_str_new(mark, p - mark); + liquid_context_parse_impl(body, tokens); + } + goto st98; +st98: + if ( ++p == pe ) + goto _test_eof98; +case 98: +#line 2083 "./ext/liquid/liquid_ext.c" + if ( (*p) == 93 ) + goto tr99; + goto st61; +tr97: +#line 11 "./ext/liquid/liquid_ext.rl" + { + mark = p; + } + goto st62; +st62: + if ( ++p == pe ) + goto _test_eof62; +case 62: +#line 2097 "./ext/liquid/liquid_ext.c" + goto st61; +tr8: +#line 11 "./ext/liquid/liquid_ext.rl" + { + mark = p; + } + goto st99; +st99: + if ( ++p == pe ) + goto _test_eof99; +case 99: +#line 2109 "./ext/liquid/liquid_ext.c" + switch( (*p) ) { + case 45: goto st97; + case 46: goto tr147; + case 91: goto tr148; + case 95: goto st97; + case 97: goto st100; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st97; + } else if ( (*p) > 90 ) { + if ( 98 <= (*p) && (*p) <= 122 ) + goto st97; + } else + goto st97; + goto st0; +st100: + if ( ++p == pe ) + goto _test_eof100; +case 100: + switch( (*p) ) { + case 45: goto st97; + case 46: goto tr147; + case 91: goto tr148; + case 95: goto st97; + case 108: goto st101; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st97; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st97; + } else + goto st97; + goto st0; +st101: + if ( ++p == pe ) + goto _test_eof101; +case 101: + switch( (*p) ) { + case 45: goto st97; + case 46: goto tr147; + case 91: goto tr148; + case 95: goto st97; + case 115: goto st102; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st97; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st97; + } else + goto st97; + goto st0; +st102: + if ( ++p == pe ) + goto _test_eof102; +case 102: + switch( (*p) ) { + case 45: goto st97; + case 46: goto tr147; + case 91: goto tr148; + case 95: goto st97; + case 101: goto st103; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st97; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st97; + } else + goto st97; + goto st0; +st103: + if ( ++p == pe ) + goto _test_eof103; +case 103: + switch( (*p) ) { + case 45: goto st97; + case 46: goto tr153; + case 91: goto tr154; + case 95: goto st97; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st97; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st97; + } else + goto st97; + goto st0; +tr9: +#line 11 "./ext/liquid/liquid_ext.rl" + { + mark = p; + } + goto st104; +st104: + if ( ++p == pe ) + goto _test_eof104; +case 104: +#line 2215 "./ext/liquid/liquid_ext.c" + switch( (*p) ) { + case 45: goto st97; + case 46: goto tr147; + case 91: goto tr148; + case 95: goto st97; + case 105: goto st105; + case 117: goto st107; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st97; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st97; + } else + goto st97; + goto st0; +st105: + if ( ++p == pe ) + goto _test_eof105; +case 105: + switch( (*p) ) { + case 45: goto st97; + case 46: goto tr147; + case 91: goto tr148; + case 95: goto st97; + case 108: goto st106; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st97; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st97; + } else + goto st97; + goto st0; +st106: + if ( ++p == pe ) + goto _test_eof106; +case 106: + switch( (*p) ) { + case 45: goto st97; + case 46: goto tr158; + case 91: goto tr159; + case 95: goto st97; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st97; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st97; + } else + goto st97; + goto st0; +st107: + if ( ++p == pe ) + goto _test_eof107; +case 107: + switch( (*p) ) { + case 45: goto st97; + case 46: goto tr147; + case 91: goto tr148; + case 95: goto st97; + case 108: goto st105; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st97; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st97; + } else + goto st97; + goto st0; +tr10: +#line 11 "./ext/liquid/liquid_ext.rl" + { + mark = p; + } + goto st108; +st108: + if ( ++p == pe ) + goto _test_eof108; +case 108: +#line 2302 "./ext/liquid/liquid_ext.c" + switch( (*p) ) { + case 45: goto st97; + case 46: goto tr147; + case 91: goto tr148; + case 95: goto st97; + case 114: goto st109; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st97; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st97; + } else + goto st97; + goto st0; +st109: + if ( ++p == pe ) + goto _test_eof109; +case 109: + switch( (*p) ) { + case 45: goto st97; + case 46: goto tr147; + case 91: goto tr148; + case 95: goto st97; + case 117: goto st110; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st97; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st97; + } else + goto st97; + goto st0; +st110: + if ( ++p == pe ) + goto _test_eof110; +case 110: + switch( (*p) ) { + case 45: goto st97; + case 46: goto tr147; + case 91: goto tr148; + case 95: goto st97; + case 101: goto st111; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st97; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st97; + } else + goto st97; + goto st0; +st111: + if ( ++p == pe ) + goto _test_eof111; +case 111: + switch( (*p) ) { + case 45: goto st97; + case 46: goto tr163; + case 91: goto tr164; + case 95: goto st97; + } + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st97; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st97; + } else + goto st97; + goto st0; + } + _test_eof2: cs = 2; goto _test_eof; + _test_eof63: cs = 63; goto _test_eof; + _test_eof3: cs = 3; goto _test_eof; + _test_eof64: cs = 64; goto _test_eof; + _test_eof4: cs = 4; goto _test_eof; + _test_eof5: cs = 5; goto _test_eof; + _test_eof6: cs = 6; goto _test_eof; + _test_eof7: cs = 7; goto _test_eof; + _test_eof8: cs = 8; goto _test_eof; + _test_eof9: cs = 9; goto _test_eof; + _test_eof10: cs = 10; goto _test_eof; + _test_eof11: cs = 11; goto _test_eof; + _test_eof12: cs = 12; goto _test_eof; + _test_eof13: cs = 13; goto _test_eof; + _test_eof14: cs = 14; goto _test_eof; + _test_eof15: cs = 15; goto _test_eof; + _test_eof16: cs = 16; goto _test_eof; + _test_eof17: cs = 17; goto _test_eof; + _test_eof18: cs = 18; goto _test_eof; + _test_eof19: cs = 19; goto _test_eof; + _test_eof65: cs = 65; goto _test_eof; + _test_eof20: cs = 20; goto _test_eof; + _test_eof66: cs = 66; goto _test_eof; + _test_eof21: cs = 21; goto _test_eof; + _test_eof22: cs = 22; goto _test_eof; + _test_eof67: cs = 67; goto _test_eof; + _test_eof23: cs = 23; goto _test_eof; + _test_eof68: cs = 68; goto _test_eof; + _test_eof24: cs = 24; goto _test_eof; + _test_eof69: cs = 69; goto _test_eof; + _test_eof70: cs = 70; goto _test_eof; + _test_eof71: cs = 71; goto _test_eof; + _test_eof72: cs = 72; goto _test_eof; + _test_eof73: cs = 73; goto _test_eof; + _test_eof74: cs = 74; goto _test_eof; + _test_eof75: cs = 75; goto _test_eof; + _test_eof76: cs = 76; goto _test_eof; + _test_eof77: cs = 77; goto _test_eof; + _test_eof78: cs = 78; goto _test_eof; + _test_eof79: cs = 79; goto _test_eof; + _test_eof80: cs = 80; goto _test_eof; + _test_eof81: cs = 81; goto _test_eof; + _test_eof25: cs = 25; goto _test_eof; + _test_eof82: cs = 82; goto _test_eof; + _test_eof83: cs = 83; goto _test_eof; + _test_eof84: cs = 84; goto _test_eof; + _test_eof85: cs = 85; goto _test_eof; + _test_eof86: cs = 86; goto _test_eof; + _test_eof87: cs = 87; goto _test_eof; + _test_eof88: cs = 88; goto _test_eof; + _test_eof89: cs = 89; goto _test_eof; + _test_eof90: cs = 90; goto _test_eof; + _test_eof91: cs = 91; goto _test_eof; + _test_eof92: cs = 92; goto _test_eof; + _test_eof93: cs = 93; goto _test_eof; + _test_eof94: cs = 94; goto _test_eof; + _test_eof26: cs = 26; goto _test_eof; + _test_eof27: cs = 27; goto _test_eof; + _test_eof28: cs = 28; goto _test_eof; + _test_eof29: cs = 29; goto _test_eof; + _test_eof30: cs = 30; goto _test_eof; + _test_eof31: cs = 31; goto _test_eof; + _test_eof32: cs = 32; goto _test_eof; + _test_eof33: cs = 33; goto _test_eof; + _test_eof34: cs = 34; goto _test_eof; + _test_eof35: cs = 35; goto _test_eof; + _test_eof36: cs = 36; goto _test_eof; + _test_eof37: cs = 37; goto _test_eof; + _test_eof38: cs = 38; goto _test_eof; + _test_eof39: cs = 39; goto _test_eof; + _test_eof40: cs = 40; goto _test_eof; + _test_eof41: cs = 41; goto _test_eof; + _test_eof42: cs = 42; goto _test_eof; + _test_eof43: cs = 43; goto _test_eof; + _test_eof44: cs = 44; goto _test_eof; + _test_eof45: cs = 45; goto _test_eof; + _test_eof46: cs = 46; goto _test_eof; + _test_eof47: cs = 47; goto _test_eof; + _test_eof48: cs = 48; goto _test_eof; + _test_eof49: cs = 49; goto _test_eof; + _test_eof50: cs = 50; goto _test_eof; + _test_eof51: cs = 51; goto _test_eof; + _test_eof52: cs = 52; goto _test_eof; + _test_eof53: cs = 53; goto _test_eof; + _test_eof54: cs = 54; goto _test_eof; + _test_eof55: cs = 55; goto _test_eof; + _test_eof56: cs = 56; goto _test_eof; + _test_eof57: cs = 57; goto _test_eof; + _test_eof58: cs = 58; goto _test_eof; + _test_eof95: cs = 95; goto _test_eof; + _test_eof59: cs = 59; goto _test_eof; + _test_eof96: cs = 96; goto _test_eof; + _test_eof97: cs = 97; goto _test_eof; + _test_eof60: cs = 60; goto _test_eof; + _test_eof61: cs = 61; goto _test_eof; + _test_eof98: cs = 98; goto _test_eof; + _test_eof62: cs = 62; goto _test_eof; + _test_eof99: cs = 99; goto _test_eof; + _test_eof100: cs = 100; goto _test_eof; + _test_eof101: cs = 101; goto _test_eof; + _test_eof102: cs = 102; goto _test_eof; + _test_eof103: cs = 103; goto _test_eof; + _test_eof104: cs = 104; goto _test_eof; + _test_eof105: cs = 105; goto _test_eof; + _test_eof106: cs = 106; goto _test_eof; + _test_eof107: cs = 107; goto _test_eof; + _test_eof108: cs = 108; goto _test_eof; + _test_eof109: cs = 109; goto _test_eof; + _test_eof110: cs = 110; goto _test_eof; + _test_eof111: cs = 111; goto _test_eof; + + _test_eof: {} + if ( p == eof ) + { + switch ( cs ) { + case 98: +#line 15 "./ext/liquid/liquid_ext.rl" + { + EMIT("lookup", Qnil) + } + break; + case 67: +#line 19 "./ext/liquid/liquid_ext.rl" + { + EMIT("call", Qnil) + } + break; + case 65: +#line 22 "./ext/liquid/liquid_ext.rl" + { + EMIT("range", Qnil) + } + break; + case 95: +#line 41 "./ext/liquid/liquid_ext.rl" + { + EMIT("id", rb_funcall(rb_cObject, rb_intern("Integer"), 1, rb_str_new(mark, p - mark))); + } + break; + case 96: +#line 45 "./ext/liquid/liquid_ext.rl" + { + EMIT("id", rb_funcall(rb_cObject, rb_intern("Float"), 1, rb_str_new(mark, p - mark))) + } + break; + case 106: +#line 49 "./ext/liquid/liquid_ext.rl" + { EMIT("id", Qnil) } + break; + case 111: +#line 50 "./ext/liquid/liquid_ext.rl" + { EMIT("id", Qtrue) } + break; + case 103: +#line 51 "./ext/liquid/liquid_ext.rl" + { EMIT("id", Qfalse) } + break; + case 63: + case 64: +#line 53 "./ext/liquid/liquid_ext.rl" + { EMIT("id", rb_str_new(mark + 1, p - mark - 2)) } + break; + case 97: + case 99: + case 100: + case 101: + case 102: + case 104: + case 105: + case 107: + case 108: + case 109: + case 110: +#line 58 "./ext/liquid/liquid_ext.rl" + { + EMIT("id", rb_str_new(mark, p - mark)) + EMIT("lookup", Qnil) + } + break; + case 73: + case 86: +#line 84 "./ext/liquid/liquid_ext.rl" + { + EMIT("buildin", rb_str_new2("first")) + } + break; + case 77: + case 90: +#line 88 "./ext/liquid/liquid_ext.rl" + { + EMIT("buildin", rb_str_new2("last")) + } + break; + case 81: + case 94: +#line 92 "./ext/liquid/liquid_ext.rl" + { + EMIT("buildin", rb_str_new2("size")) + } + break; + case 66: + case 68: + case 69: + case 70: + case 71: + case 72: + case 74: + case 75: + case 76: + case 78: + case 79: + case 80: + case 82: + case 83: + case 84: + case 85: + case 87: + case 88: + case 89: + case 91: + case 92: + case 93: +#line 96 "./ext/liquid/liquid_ext.rl" + { + EMIT("id", rb_str_new(mark, p - mark)) + EMIT("call", Qnil) + } + break; +#line 2607 "./ext/liquid/liquid_ext.c" + } + } + + _out: {} + } + +#line 137 "./ext/liquid/liquid_ext.rl" +} + +VALUE liquid_context_parse(VALUE self, VALUE text) { + VALUE tokens; + + //printf("text: %s\n", RSTRING_PTR(text)); + + //Check_Type(text, T_STRING); + + tokens = rb_ary_new(); + liquid_context_parse_impl(text, tokens); + return tokens; +} + +static VALUE rb_Liquid; +static VALUE rb_Parser; + +void Init_liquid_ext() +{ + rb_Liquid = rb_define_module("Liquid"); + rb_Parser = rb_define_class_under(rb_Liquid, "Parser", rb_cObject); + rb_define_singleton_method(rb_Parser, "parse", liquid_context_parse, 1); +} diff --git a/ext/liquid/liquid_ext.o b/ext/liquid/liquid_ext.o new file mode 100644 index 0000000000000000000000000000000000000000..4e97bfcdaee94151442e8b102d72130fc3ace505 GIT binary patch literal 45736 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 literal 0 HcmV?d00001 diff --git a/ext/liquid/liquid_ext.rl b/ext/liquid/liquid_ext.rl new file mode 100644 index 0000000..ab932b8 --- /dev/null +++ b/ext/liquid/liquid_ext.rl @@ -0,0 +1,159 @@ +/* + Parser for context#[] method. Generated through ragel from parser.rl + Only modify parser.rl. Run rake ragel afterwards to generate this file. +*/ + +#include + +%%{ + machine fsm; + + action mark { + mark = p; + } + + action lookup { + EMIT("lookup", Qnil) + } + + action call { + EMIT("call", Qnil) + } + action range { + EMIT("range", Qnil) + } + + constants = ( "true" | "false" | "nil" | "null" ); + + # strings + string = "\"" any* "\"" | "'" any* "'"; + + # nothingness + nil = "nil" | "null" ; + + # numbers + integer = ('+'|'-')? digit+; + float = ('+'|'-')? digit+ '.' digit+; + + # simple values + primitive = ( + + integer >mark %{ + EMIT("id", rb_funcall(rb_cObject, rb_intern("Integer"), 1, rb_str_new(mark, p - mark))); + } | + + float >mark %{ + EMIT("id", rb_funcall(rb_cObject, rb_intern("Float"), 1, rb_str_new(mark, p - mark))) + } | + + nil %{ EMIT("id", Qnil) } | + "true" %{ EMIT("id", Qtrue) } | + "false" %{ EMIT("id", Qfalse) } | + + string >mark %{ EMIT("id", rb_str_new(mark + 1, p - mark - 2)) } + + ); + + entity = ( + ((alpha [A-Za-z0-9_\-]*) - (constants)) >mark %{ + EMIT("id", rb_str_new(mark, p - mark)) + EMIT("lookup", Qnil) + } + ); + + # Because of recursion we cannot immediatly resolve the content of this in + # the current grammar. We simply re-invoke the parser here to descend into + # the substring + recur = ( + (any+ - ']') >mark %{ + VALUE body = rb_str_new(mark, p - mark); + liquid_context_parse_impl(body, tokens); + } + ); + + expr = ( + entity | + primitive | + "(" (primitive | entity) ".." (primitive | entity) <: ")" %range | + "[" recur "]" %lookup + ); + + hash_accessors = ( + "[" recur "]" %call | + + ".first" %{ + EMIT("buildin", rb_str_new2("first")) + } | + + ".last" %{ + EMIT("buildin", rb_str_new2("last")) + } | + + ".size" %{ + EMIT("buildin", rb_str_new2("size")) + } | + + "." ((alpha [A-Za-z0-9_\-]*) - ("first"|"last"|"size")) >mark %{ + EMIT("id", rb_str_new(mark, p - mark)) + EMIT("call", Qnil) + } + ); + + main := ( + + expr <: (hash_accessors)* + + ); + +}%% + +%% write data nofinal; + +// def self.emit(sym, data, tokens) +// puts "emitting: #{sym} -> #{data.inspect}" if $VERBOSE +// tokens.push [sym, data] +// end + +#define EMIT(sym, data) rb_ary_push(tokens, rb_ary_new3(2, ID2SYM(rb_intern(sym)), data)); + + +void liquid_context_parse_impl(VALUE text, VALUE tokens) +{ + char *p; + char *pe; + char *eof; + char *mark; + int cs, res = 0; + + if (RSTRING_LEN(text) <= 0) { + return; + } + + mark = p = RSTRING_PTR(text); + eof = pe = RSTRING_PTR(text) + RSTRING_LEN(text); + + %% write init; + %% write exec; +} + +VALUE liquid_context_parse(VALUE self, VALUE text) { + VALUE tokens; + + //printf("text: %s\n", RSTRING_PTR(text)); + + //Check_Type(text, T_STRING); + + tokens = rb_ary_new(); + liquid_context_parse_impl(text, tokens); + return tokens; +} + +static VALUE rb_Liquid; +static VALUE rb_Parser; + +void Init_liquid_ext() +{ + rb_Liquid = rb_define_module("Liquid"); + rb_Parser = rb_define_class_under(rb_Liquid, "Parser", rb_cObject); + rb_define_singleton_method(rb_Parser, "parse", liquid_context_parse, 1); +} diff --git a/ext/liquid/mkmf.log b/ext/liquid/mkmf.log new file mode 100644 index 0000000..3dd9739 --- /dev/null +++ b/ext/liquid/mkmf.log @@ -0,0 +1,22 @@ +have_library: checking for main() in -lc... -------------------- yes + +"/usr/bin/gcc-4.2 -o conftest -I/Users/tobi/.rbenv/versions/1.9.3-p194-perf/include/ruby-1.9.1/x86_64-darwin12.0.0 -I/Users/tobi/.rbenv/versions/1.9.3-p194-perf/include/ruby-1.9.1/ruby/backward -I/Users/tobi/.rbenv/versions/1.9.3-p194-perf/include/ruby-1.9.1 -I. -I'/Users/tobi/.rbenv/versions/1.9.3-p194-perf/include' -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -I'/Users/tobi/.rbenv/versions/1.9.3-p194-perf/include' -O3 -ggdb -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers -Wpointer-arith -Wwrite-strings -Wdeclaration-after-statement -Wshorten-64-to-32 -Wimplicit-function-declaration -pipe conftest.c -L. -L/Users/tobi/.rbenv/versions/1.9.3-p194-perf/lib -L. -L'/Users/tobi/.rbenv/versions/1.9.3-p194-perf/lib' -L/usr/local/lib -lruby-static -lpthread -ldl -lobjc " +checked program was: +/* begin */ +1: #include "ruby.h" +2: +3: int main() {return 0;} +/* end */ + +"/usr/bin/gcc-4.2 -o conftest -I/Users/tobi/.rbenv/versions/1.9.3-p194-perf/include/ruby-1.9.1/x86_64-darwin12.0.0 -I/Users/tobi/.rbenv/versions/1.9.3-p194-perf/include/ruby-1.9.1/ruby/backward -I/Users/tobi/.rbenv/versions/1.9.3-p194-perf/include/ruby-1.9.1 -I. -I'/Users/tobi/.rbenv/versions/1.9.3-p194-perf/include' -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -I'/Users/tobi/.rbenv/versions/1.9.3-p194-perf/include' -O3 -ggdb -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers -Wpointer-arith -Wwrite-strings -Wdeclaration-after-statement -Wshorten-64-to-32 -Wimplicit-function-declaration -pipe conftest.c -L. -L/Users/tobi/.rbenv/versions/1.9.3-p194-perf/lib -L. -L'/Users/tobi/.rbenv/versions/1.9.3-p194-perf/lib' -L/usr/local/lib -lruby-static -lc -lpthread -ldl -lobjc " +checked program was: +/* begin */ +1: #include "ruby.h" +2: +3: /*top*/ +4: int main() {return 0;} +5: int t() { void ((*volatile p)()); p = (void ((*)()))main; return 0; } +/* end */ + +-------------------- + diff --git a/lib/liquid.rb b/lib/liquid.rb index c641dea..a8d2201 100644 --- a/lib/liquid.rb +++ b/lib/liquid.rb @@ -62,7 +62,7 @@ require 'liquid/standardfilters' require 'liquid/condition' require 'liquid/module_ex' require 'liquid/utils' -require 'liquid/parser' +require 'liquid_ext' # Load all the tags of the standard library # diff --git a/lib/liquid/parser.rb b/lib/liquid/parser.rb deleted file mode 100644 index c3d5fd9..0000000 --- a/lib/liquid/parser.rb +++ /dev/null @@ -1,1313 +0,0 @@ - -# line 1 "./lib/liquid/parser.rl" -# Parser for context#[] method. Generated through ragel from parser.rl -# Only modify parser.rl. Run rake ragel afterwards to generate this file. -# -#VERBOSE=true - - -# line 101 "./lib/liquid/parser.rl" - -# % fix syntax highlighting - - -module Liquid - module Parser - -# line 18 "./lib/liquid/parser.rb" -class << self - attr_accessor :_fsm_actions - private :_fsm_actions, :_fsm_actions= -end -self._fsm_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, 14, 1, - 15, 2, 0, 11 -] - -class << self - attr_accessor :_fsm_trans_keys - private :_fsm_trans_keys, :_fsm_trans_keys= -end -self._fsm_trans_keys = [ - 0, 0, 34, 122, 34, 34, - 39, 39, 34, 122, 34, - 34, 34, 46, 34, 46, - 34, 122, 39, 39, 39, 46, - 39, 46, 34, 122, 48, - 57, 46, 57, 46, 57, - 34, 122, 0, 0, 48, 57, - 41, 57, 65, 122, 93, - 93, 93, 93, 65, 122, - 93, 93, 0, 0, 48, 57, - 41, 57, 41, 122, 41, - 122, 41, 122, 41, 122, - 41, 122, 41, 122, 41, 122, - 41, 122, 41, 122, 41, - 122, 41, 122, 41, 122, - 41, 122, 41, 122, 46, 57, - 46, 46, 45, 122, 45, - 122, 45, 122, 45, 122, - 45, 122, 45, 122, 45, 122, - 45, 122, 45, 122, 45, - 122, 45, 122, 45, 122, - 45, 122, 45, 122, 48, 57, - 48, 57, 93, 93, 93, - 93, 0, 0, 34, 34, - 39, 39, 46, 91, 45, 122, - 46, 93, 45, 122, 45, - 122, 45, 122, 45, 122, - 45, 122, 45, 122, 45, 122, - 45, 122, 45, 122, 45, - 122, 45, 122, 45, 122, - 45, 122, 45, 122, 45, 122, - 45, 122, 45, 122, 45, - 122, 45, 122, 45, 122, - 45, 122, 45, 122, 45, 122, - 45, 122, 45, 122, 45, - 122, 45, 122, 46, 91, - 46, 91, 45, 122, 93, 93, - 45, 122, 45, 122, 45, - 122, 45, 122, 45, 122, - 45, 122, 45, 122, 45, 122, - 45, 122, 45, 122, 45, - 122, 45, 122, 45, 122, - 0 -] - -class << self - attr_accessor :_fsm_key_spans - private :_fsm_key_spans, :_fsm_key_spans= -end -self._fsm_key_spans = [ - 0, 89, 1, 1, 89, 1, 13, 13, - 89, 1, 8, 8, 89, 10, 12, 12, - 89, 0, 10, 17, 58, 1, 1, 58, - 1, 0, 10, 17, 82, 82, 82, 82, - 82, 82, 82, 82, 82, 82, 82, 82, - 82, 82, 12, 1, 78, 78, 78, 78, - 78, 78, 78, 78, 78, 78, 78, 78, - 78, 78, 10, 10, 1, 1, 0, 1, - 1, 46, 78, 48, 78, 78, 78, 78, - 78, 78, 78, 78, 78, 78, 78, 78, - 78, 78, 78, 78, 78, 78, 78, 78, - 78, 78, 78, 78, 78, 78, 78, 46, - 46, 78, 1, 78, 78, 78, 78, 78, - 78, 78, 78, 78, 78, 78, 78, 78 -] - -class << self - attr_accessor :_fsm_index_offsets - private :_fsm_index_offsets, :_fsm_index_offsets= -end -self._fsm_index_offsets = [ - 0, 0, 90, 92, 94, 184, 186, 200, - 214, 304, 306, 315, 324, 414, 425, 438, - 451, 541, 542, 553, 571, 630, 632, 634, - 693, 695, 696, 707, 725, 808, 891, 974, - 1057, 1140, 1223, 1306, 1389, 1472, 1555, 1638, - 1721, 1804, 1887, 1900, 1902, 1981, 2060, 2139, - 2218, 2297, 2376, 2455, 2534, 2613, 2692, 2771, - 2850, 2929, 3008, 3019, 3030, 3032, 3034, 3035, - 3037, 3039, 3086, 3165, 3214, 3293, 3372, 3451, - 3530, 3609, 3688, 3767, 3846, 3925, 4004, 4083, - 4162, 4241, 4320, 4399, 4478, 4557, 4636, 4715, - 4794, 4873, 4952, 5031, 5110, 5189, 5268, 5347, - 5394, 5441, 5520, 5522, 5601, 5680, 5759, 5838, - 5917, 5996, 6075, 6154, 6233, 6312, 6391, 6470 -] - -class << self - attr_accessor :_fsm_indicies - private :_fsm_indicies, :_fsm_indicies= -end -self._fsm_indicies = [ - 0, 1, 1, 1, 1, 2, 3, 1, - 1, 4, 1, 4, 1, 1, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, - 1, 1, 1, 1, 1, 1, 1, 6, - 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, - 6, 7, 1, 1, 1, 1, 1, 6, - 6, 6, 6, 6, 8, 6, 6, 6, - 6, 6, 6, 6, 9, 6, 6, 6, - 6, 6, 10, 6, 6, 6, 6, 6, - 6, 1, 12, 11, 14, 13, 15, 1, - 1, 1, 1, 16, 1, 1, 1, 17, - 1, 17, 1, 1, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 1, 1, - 1, 1, 1, 1, 1, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 1, - 1, 1, 1, 1, 1, 19, 19, 19, - 19, 19, 20, 19, 19, 19, 19, 19, - 19, 19, 21, 19, 19, 19, 19, 19, - 22, 19, 19, 19, 19, 19, 19, 1, - 24, 23, 24, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 25, 23, - 24, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 26, 23, 27, 23, - 23, 23, 23, 15, 23, 23, 23, 15, - 23, 15, 23, 23, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 23, 23, - 23, 23, 23, 23, 23, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 23, - 23, 23, 23, 23, 23, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 23, - 29, 28, 29, 28, 28, 28, 28, 28, - 28, 30, 28, 29, 28, 28, 28, 28, - 28, 28, 31, 28, 16, 28, 28, 28, - 28, 32, 28, 28, 28, 16, 28, 16, - 28, 28, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 28, 28, 28, 28, - 28, 28, 28, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 28, 28, 28, - 28, 28, 28, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 28, 33, 33, - 33, 33, 33, 33, 33, 33, 33, 33, - 1, 34, 1, 33, 33, 33, 33, 33, - 33, 33, 33, 33, 33, 1, 35, 1, - 36, 36, 36, 36, 36, 36, 36, 36, - 36, 36, 1, 37, 1, 1, 1, 1, - 37, 1, 1, 1, 38, 1, 38, 1, - 1, 39, 39, 39, 39, 39, 39, 39, - 39, 39, 39, 1, 1, 1, 1, 1, - 1, 1, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 1, 1, 1, 1, - 1, 1, 40, 40, 40, 40, 40, 41, - 40, 40, 40, 40, 40, 40, 40, 42, - 40, 40, 40, 40, 40, 43, 40, 40, - 40, 40, 40, 40, 1, 44, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 45, - 1, 46, 1, 1, 1, 1, 47, 1, - 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 1, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 1, 1, 1, - 1, 1, 1, 48, 48, 48, 48, 48, - 49, 48, 48, 48, 48, 48, 50, 48, - 48, 48, 48, 48, 48, 51, 48, 48, - 48, 48, 48, 48, 48, 1, 53, 52, - 55, 54, 56, 56, 56, 56, 56, 56, - 56, 56, 56, 56, 56, 56, 56, 56, - 56, 56, 56, 56, 56, 56, 56, 56, - 56, 56, 56, 56, 54, 54, 55, 54, - 54, 54, 56, 56, 56, 56, 56, 57, - 56, 56, 56, 56, 56, 58, 56, 56, - 56, 56, 56, 56, 59, 56, 56, 56, - 56, 56, 56, 56, 54, 60, 52, 54, - 61, 61, 61, 61, 61, 61, 61, 61, - 61, 61, 1, 62, 1, 1, 1, 1, - 1, 1, 61, 61, 61, 61, 61, 61, - 61, 61, 61, 61, 1, 63, 1, 1, - 1, 64, 1, 1, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 1, 1, - 1, 1, 1, 1, 1, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 1, - 1, 1, 1, 64, 1, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 1, - 63, 1, 1, 1, 64, 1, 1, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 1, 1, 1, 1, 1, 1, 1, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 1, 1, 1, 1, 64, 1, - 65, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 1, 63, 1, 1, 1, 64, - 1, 1, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 1, 1, 1, 1, - 1, 1, 1, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 1, 1, 1, - 1, 64, 1, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 66, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 1, 63, 1, - 1, 1, 64, 1, 1, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 1, - 1, 1, 1, 1, 1, 1, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 1, 1, 1, 1, 64, 1, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 67, 64, 64, 64, 64, 64, 64, 64, - 1, 63, 1, 1, 1, 64, 1, 1, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 1, 1, 1, 1, 1, 1, - 1, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 1, 1, 1, 1, 64, - 1, 64, 64, 64, 64, 68, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 1, 69, 1, 1, 1, - 64, 1, 1, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 1, 1, 1, - 1, 1, 1, 1, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 1, 1, - 1, 1, 64, 1, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 1, 63, - 1, 1, 1, 64, 1, 1, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 1, 1, 1, 1, 1, 1, 1, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 1, 1, 1, 1, 64, 1, 64, - 64, 64, 64, 64, 64, 64, 64, 70, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 71, 64, 64, 64, 64, - 64, 1, 63, 1, 1, 1, 64, 1, - 1, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 1, 1, 1, 1, 1, - 1, 1, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 1, 1, 1, 1, - 64, 1, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 72, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 1, 73, 1, 1, - 1, 64, 1, 1, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 1, 1, - 1, 1, 1, 1, 1, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 1, - 1, 1, 1, 64, 1, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 1, - 63, 1, 1, 1, 64, 1, 1, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 1, 1, 1, 1, 1, 1, 1, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 1, 1, 1, 1, 64, 1, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 70, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 1, 63, 1, 1, 1, 64, - 1, 1, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 1, 1, 1, 1, - 1, 1, 1, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 1, 1, 1, - 1, 64, 1, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 74, 64, 64, 64, - 64, 64, 64, 64, 64, 1, 63, 1, - 1, 1, 64, 1, 1, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 1, - 1, 1, 1, 1, 1, 1, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 1, 1, 1, 1, 64, 1, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 75, 64, 64, 64, 64, 64, - 1, 63, 1, 1, 1, 64, 1, 1, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 1, 1, 1, 1, 1, 1, - 1, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 1, 1, 1, 1, 64, - 1, 64, 64, 64, 64, 76, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 1, 77, 1, 1, 1, - 64, 1, 1, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 1, 1, 1, - 1, 1, 1, 1, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 1, 1, - 1, 1, 64, 1, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 1, 78, - 1, 36, 36, 36, 36, 36, 36, 36, - 36, 36, 36, 1, 35, 1, 79, 80, - 1, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 1, 1, 1, 1, 1, - 1, 1, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 1, 1, 1, 1, - 79, 1, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 1, 79, 80, 1, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 1, 1, 1, 1, 1, 1, - 1, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 1, 1, 1, 1, 79, - 1, 81, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 1, 79, 80, 1, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 1, 1, 1, 1, 1, 1, 1, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 1, 1, 1, 1, 79, 1, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 82, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 1, 79, 80, 1, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 1, 1, 1, 1, 1, 1, 1, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 1, 1, 1, 1, 79, 1, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 83, 79, 79, 79, 79, 79, 79, - 79, 1, 79, 80, 1, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 1, - 1, 1, 1, 1, 1, 1, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 1, 1, 1, 1, 79, 1, 79, 79, - 79, 79, 84, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 1, 79, 85, 1, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 1, 1, - 1, 1, 1, 1, 1, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 1, - 1, 1, 1, 79, 1, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 1, - 79, 80, 1, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 1, 1, 1, - 1, 1, 1, 1, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 1, 1, - 1, 1, 79, 1, 79, 79, 79, 79, - 79, 79, 79, 79, 86, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 87, 79, 79, 79, 79, 79, 1, 79, - 80, 1, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 1, 1, 1, 1, - 1, 1, 1, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 1, 1, 1, - 1, 79, 1, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 88, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 1, 79, 89, - 1, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 1, 1, 1, 1, 1, - 1, 1, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 1, 1, 1, 1, - 79, 1, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 1, 79, 80, 1, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 1, 1, 1, 1, 1, 1, - 1, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 1, 1, 1, 1, 79, - 1, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 86, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 1, 79, 80, 1, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 1, 1, 1, 1, 1, 1, 1, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 1, 1, 1, 1, 79, 1, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 90, 79, 79, 79, 79, 79, 79, - 79, 79, 1, 79, 80, 1, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 1, 1, 1, 1, 1, 1, 1, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 1, 1, 1, 1, 79, 1, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 91, 79, 79, 79, 79, - 79, 1, 79, 80, 1, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 1, - 1, 1, 1, 1, 1, 1, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 1, 1, 1, 1, 79, 1, 79, 79, - 79, 79, 92, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 1, 79, 93, 1, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 1, 1, - 1, 1, 1, 1, 1, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 1, - 1, 1, 1, 79, 1, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 1, - 94, 94, 94, 94, 94, 94, 94, 94, - 94, 94, 1, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 1, 97, 96, - 99, 98, 98, 12, 11, 14, 13, 100, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 101, 1, 102, 103, - 1, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 1, 1, 1, 1, 1, - 1, 1, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 104, 1, 1, 1, - 102, 1, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 1, 105, 54, 54, - 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 106, 54, 55, 54, 107, 108, - 54, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 54, 54, 54, 54, 54, - 54, 54, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 109, 54, 55, 54, - 107, 54, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 54, 107, 108, 54, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 54, 54, 54, 54, 54, 54, - 54, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 109, 54, 55, 54, 107, - 54, 107, 107, 107, 107, 107, 107, 107, - 107, 110, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 54, 107, 108, 54, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 54, 54, 54, 54, 54, 54, 54, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 109, 54, 55, 54, 107, 54, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 111, 107, 107, 107, 107, 107, 107, - 107, 107, 54, 107, 108, 54, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 54, 54, 54, 54, 54, 54, 54, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 109, 54, 55, 54, 107, 54, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 112, 107, 107, 107, 107, 107, 107, - 107, 54, 107, 108, 54, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 54, - 54, 54, 54, 54, 54, 54, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 109, 54, 55, 54, 107, 54, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 113, 107, 107, 107, 107, 107, 107, - 54, 107, 114, 54, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 54, 54, - 54, 54, 54, 54, 54, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 115, - 54, 55, 54, 107, 54, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 54, - 107, 108, 54, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 54, 54, 54, - 54, 54, 54, 54, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 109, 54, - 55, 54, 107, 54, 116, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 54, 107, - 108, 54, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 54, 54, 54, 54, - 54, 54, 54, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 109, 54, 55, - 54, 107, 54, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 117, 107, 107, - 107, 107, 107, 107, 107, 54, 107, 108, - 54, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 54, 54, 54, 54, 54, - 54, 54, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 109, 54, 55, 54, - 107, 54, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 118, 107, 107, - 107, 107, 107, 107, 54, 107, 119, 54, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 54, 54, 54, 54, 54, 54, - 54, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 120, 54, 55, 54, 107, - 54, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 54, 107, 108, 54, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 54, 54, 54, 54, 54, 54, 54, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 109, 54, 55, 54, 107, 54, - 107, 107, 107, 107, 107, 107, 107, 107, - 121, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 54, 107, 108, 54, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 54, 54, 54, 54, 54, 54, 54, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 109, 54, 55, 54, 107, 54, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 122, 54, 107, 108, 54, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 54, - 54, 54, 54, 54, 54, 54, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 109, 54, 55, 54, 107, 54, 107, 107, - 107, 107, 123, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 54, 107, 124, 54, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 54, 54, - 54, 54, 54, 54, 54, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 125, - 54, 55, 54, 107, 54, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 54, - 102, 103, 1, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 1, 1, 1, - 1, 1, 1, 1, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 104, 1, - 1, 1, 102, 1, 102, 102, 102, 102, - 102, 102, 102, 102, 126, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 1, 102, - 103, 1, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 1, 1, 1, 1, - 1, 1, 1, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 104, 1, 1, - 1, 102, 1, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 127, 102, 102, 102, - 102, 102, 102, 102, 102, 1, 102, 103, - 1, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 1, 1, 1, 1, 1, - 1, 1, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 104, 1, 1, 1, - 102, 1, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 128, 102, 102, 102, - 102, 102, 102, 102, 1, 102, 103, 1, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 1, 1, 1, 1, 1, 1, - 1, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 104, 1, 1, 1, 102, - 1, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 129, 102, 102, 102, - 102, 102, 102, 1, 102, 130, 1, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 1, 1, 1, 1, 1, 1, 1, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 131, 1, 1, 1, 102, 1, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 1, 102, 103, 1, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 1, 1, 1, 1, 1, 1, 1, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 104, 1, 1, 1, 102, 1, 132, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 1, 102, 103, 1, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 1, - 1, 1, 1, 1, 1, 1, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 104, 1, 1, 1, 102, 1, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 133, 102, 102, 102, 102, 102, 102, 102, - 1, 102, 103, 1, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 1, 1, - 1, 1, 1, 1, 1, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 104, - 1, 1, 1, 102, 1, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 134, 102, 102, 102, 102, 102, 102, 1, - 102, 135, 1, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 1, 1, 1, - 1, 1, 1, 1, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 136, 1, - 1, 1, 102, 1, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 1, 102, - 103, 1, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 1, 1, 1, 1, - 1, 1, 1, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 104, 1, 1, - 1, 102, 1, 102, 102, 102, 102, 102, - 102, 102, 102, 137, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 1, 102, 103, - 1, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 1, 1, 1, 1, 1, - 1, 1, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 104, 1, 1, 1, - 102, 1, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 138, 1, 102, 103, 1, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 1, 1, 1, 1, 1, 1, - 1, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 104, 1, 1, 1, 102, - 1, 102, 102, 102, 102, 139, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 1, 102, 140, 1, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 1, 1, 1, 1, 1, 1, 1, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 141, 1, 1, 1, 102, 1, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 1, 142, 1, 94, 94, 94, - 94, 94, 94, 94, 94, 94, 94, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 143, 1, 144, 1, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 145, - 1, 146, 147, 1, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 1, 1, - 1, 1, 1, 1, 1, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 148, - 1, 1, 1, 146, 1, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 1, - 99, 98, 146, 147, 1, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 1, - 1, 1, 1, 1, 1, 1, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 148, 1, 1, 1, 146, 1, 149, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 1, 146, 147, 1, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 1, 1, - 1, 1, 1, 1, 1, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 148, - 1, 1, 1, 146, 1, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 150, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 1, - 146, 147, 1, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 1, 1, 1, - 1, 1, 1, 1, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 148, 1, - 1, 1, 146, 1, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 151, 146, - 146, 146, 146, 146, 146, 146, 1, 146, - 147, 1, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 1, 1, 1, 1, - 1, 1, 1, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 148, 1, 1, - 1, 146, 1, 146, 146, 146, 146, 152, - 146, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 1, 146, 153, - 1, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 1, 1, 1, 1, 1, - 1, 1, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 154, 1, 1, 1, - 146, 1, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 1, 146, 147, 1, - 146, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 1, 1, 1, 1, 1, 1, - 1, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 148, 1, 1, 1, 146, - 1, 146, 146, 146, 146, 146, 146, 146, - 146, 155, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 156, 146, 146, - 146, 146, 146, 1, 146, 147, 1, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 146, 1, 1, 1, 1, 1, 1, 1, - 146, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 148, 1, 1, 1, 146, 1, - 146, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 157, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 1, 146, 158, 1, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 1, 1, 1, 1, 1, 1, 1, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 146, 159, 1, 1, 1, 146, 1, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 146, 1, 146, 147, 1, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 1, - 1, 1, 1, 1, 1, 1, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 148, 1, 1, 1, 146, 1, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 146, 155, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 1, 146, 147, 1, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 1, 1, - 1, 1, 1, 1, 1, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 148, - 1, 1, 1, 146, 1, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 160, 146, - 146, 146, 146, 146, 146, 146, 146, 1, - 146, 147, 1, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 1, 1, 1, - 1, 1, 1, 1, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 148, 1, - 1, 1, 146, 1, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 161, 146, 146, 146, 146, 146, 1, 146, - 147, 1, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 1, 1, 1, 1, - 1, 1, 1, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 148, 1, 1, - 1, 146, 1, 146, 146, 146, 146, 162, - 146, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 1, 146, 163, - 1, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 1, 1, 1, 1, 1, - 1, 1, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 164, 1, 1, 1, - 146, 1, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 1, 0 -] - -class << self - attr_accessor :_fsm_trans_targs - private :_fsm_trans_targs, :_fsm_trans_targs= -end -self._fsm_trans_targs = [ - 2, 0, 3, 4, 58, 95, 97, 60, - 99, 104, 108, 2, 63, 3, 64, 5, - 9, 13, 14, 44, 45, 50, 54, 5, - 6, 7, 8, 6, 9, 10, 11, 12, - 10, 14, 15, 16, 42, 17, 18, 19, - 28, 29, 34, 38, 17, 19, 65, 26, - 66, 82, 87, 91, 22, 25, 22, 67, - 68, 69, 74, 78, 67, 27, 65, 65, - 28, 30, 31, 32, 33, 65, 35, 37, - 36, 65, 39, 40, 41, 65, 43, 44, - 43, 46, 47, 48, 49, 43, 51, 53, - 52, 43, 55, 56, 57, 43, 95, 96, - 61, 62, 61, 98, 20, 21, 66, 20, - 21, 23, 24, 68, 23, 24, 70, 71, - 72, 73, 23, 24, 75, 76, 77, 23, - 24, 79, 80, 81, 23, 24, 83, 84, - 85, 86, 20, 21, 88, 89, 90, 20, - 21, 92, 93, 94, 20, 21, 59, 21, - 20, 21, 97, 20, 21, 100, 101, 102, - 103, 20, 21, 105, 107, 106, 20, 21, - 109, 110, 111, 20, 21 -] - -class << self - attr_accessor :_fsm_trans_actions - private :_fsm_trans_actions, :_fsm_trans_actions= -end -self._fsm_trans_actions = [ - 1, 0, 1, 0, 1, 1, 1, 0, - 1, 1, 1, 0, 0, 0, 0, 1, - 1, 1, 1, 1, 1, 1, 1, 0, - 0, 19, 0, 1, 0, 0, 19, 0, - 1, 0, 9, 0, 0, 1, 1, 1, - 1, 1, 1, 1, 0, 0, 9, 0, - 1, 1, 1, 1, 1, 1, 0, 23, - 1, 1, 1, 1, 33, 0, 11, 21, - 0, 0, 0, 0, 0, 17, 0, 0, - 0, 13, 0, 0, 0, 15, 11, 0, - 21, 0, 0, 0, 0, 17, 0, 0, - 0, 13, 0, 0, 0, 15, 0, 0, - 1, 1, 0, 23, 7, 7, 0, 31, - 31, 5, 5, 0, 31, 31, 0, 0, - 0, 0, 25, 25, 0, 0, 0, 27, - 27, 0, 0, 0, 29, 29, 0, 0, - 0, 0, 25, 25, 0, 0, 0, 27, - 27, 0, 0, 0, 29, 29, 0, 9, - 11, 11, 0, 21, 21, 0, 0, 0, - 0, 17, 17, 0, 0, 0, 13, 13, - 0, 0, 0, 15, 15 -] - -class << self - attr_accessor :_fsm_eof_actions - private :_fsm_eof_actions, :_fsm_eof_actions= -end -self._fsm_eof_actions = [ - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 19, - 19, 7, 31, 5, 31, 31, 31, 31, - 31, 25, 31, 31, 31, 27, 31, 31, - 31, 29, 31, 31, 31, 31, 25, 31, - 31, 31, 27, 31, 31, 31, 29, 9, - 11, 21, 3, 21, 21, 21, 21, 17, - 21, 21, 13, 21, 21, 21, 21, 15 -] - -class << self - attr_accessor :fsm_start -end -self.fsm_start = 1; -class << self - attr_accessor :fsm_first_final -end -self.fsm_first_final = 63; -class << self - attr_accessor :fsm_error -end -self.fsm_error = 0; - -class << self - attr_accessor :fsm_en_main -end -self.fsm_en_main = 1; - - -# line 108 "./lib/liquid/parser.rl" - - def self.emit(sym, type, data, tokens) - puts "emitting: #{type} #{sym} -> #{data.inspect}" if $VERBOSE - tokens.push [sym, data] - end - - def self.parse(data, tokens = []) - puts "--> self.parse with #{data.inspect}, #{tokens.inspect}" if $VERBOSE - - eof = data.length - - -# line 1058 "./lib/liquid/parser.rb" -begin - p ||= 0 - pe ||= data.length - cs = fsm_start -end - -# line 120 "./lib/liquid/parser.rl" - -# line 1067 "./lib/liquid/parser.rb" -begin # ragel flat - testEof = false - _slen, _trans, _keys, _inds, _acts, _nacts = nil - _goto_level = 0 - _resume = 10 - _eof_trans = 15 - _again = 20 - _test_eof = 30 - _out = 40 - while true - _trigger_goto = false - if _goto_level <= 0 - if p == pe - _goto_level = _test_eof - next - end - if cs == 0 - _goto_level = _out - next - end - end - if _goto_level <= _resume - _keys = cs << 1 - _inds = _fsm_index_offsets[cs] - _slen = _fsm_key_spans[cs] - _trans = if ( _slen > 0 && - _fsm_trans_keys[_keys] <= data[p].ord && - data[p].ord <= _fsm_trans_keys[_keys + 1] - ) then - _fsm_indicies[ _inds + data[p].ord - _fsm_trans_keys[_keys] ] - else - _fsm_indicies[ _inds + _slen ] - end - cs = _fsm_trans_targs[_trans] - if _fsm_trans_actions[_trans] != 0 - _acts = _fsm_trans_actions[_trans] - _nacts = _fsm_actions[_acts] - _acts += 1 - while _nacts > 0 - _nacts -= 1 - _acts += 1 - case _fsm_actions[_acts - 1] - when 0 then -# line 9 "./lib/liquid/parser.rl" - begin - - mark = p - end - when 2 then -# line 17 "./lib/liquid/parser.rl" - begin - - emit(:call, :instruction, nil, tokens) - end - when 3 then -# line 20 "./lib/liquid/parser.rl" - begin - - emit(:range, :instruction, nil, tokens) - end - when 4 then -# line 39 "./lib/liquid/parser.rl" - begin - emit(:id, :integer, Integer(data[mark..p-1]), tokens) end - when 5 then -# line 41 "./lib/liquid/parser.rl" - begin - emit(:id, :float, Float(data[mark..p-1]), tokens) end - when 6 then -# line 43 "./lib/liquid/parser.rl" - begin - emit(:id, :nil, nil, tokens) end - when 7 then -# line 44 "./lib/liquid/parser.rl" - begin - emit(:id, :bool, true, tokens) end - when 8 then -# line 45 "./lib/liquid/parser.rl" - begin - emit(:id, :bool, false, tokens) end - when 9 then -# line 47 "./lib/liquid/parser.rl" - begin - emit(:id, :string, data[mark+1..p-2], tokens) end - when 10 then -# line 52 "./lib/liquid/parser.rl" - begin - - emit(:id, :label, data[mark..p-1], tokens) - emit(:lookup, :variable, nil, tokens) - end - when 11 then -# line 62 "./lib/liquid/parser.rl" - begin - - self.parse(data[mark..p-1], tokens) - end - when 12 then -# line 77 "./lib/liquid/parser.rl" - begin - - emit(:buildin, :symbol, "first", tokens) - end - when 13 then -# line 81 "./lib/liquid/parser.rl" - begin - - emit(:buildin, :symbol, "last", tokens) - end - when 14 then -# line 85 "./lib/liquid/parser.rl" - begin - - emit(:buildin, :symbol, "size", tokens) - end - when 15 then -# line 89 "./lib/liquid/parser.rl" - begin - - emit(:id, :label, data[mark..p-1], tokens) - emit(:call, :variable, nil, tokens) - end -# line 1190 "./lib/liquid/parser.rb" - end # action switch - end - end - if _trigger_goto - next - end - end - if _goto_level <= _again - if cs == 0 - _goto_level = _out - next - end - p += 1 - if p != pe - _goto_level = _resume - next - end - end - if _goto_level <= _test_eof - if p == eof - begin - __acts = _fsm_eof_actions[cs] - __nacts = _fsm_actions[__acts] - __acts += 1 - while ( __nacts > 0 ) - __nacts -= 1 - __acts += 1 - case ( _fsm_actions[__acts-1] ) - when 1 then -# line 13 "./lib/liquid/parser.rl" - begin - - emit(:lookup, :instruction, nil, tokens) - end - when 2 then -# line 17 "./lib/liquid/parser.rl" - begin - - emit(:call, :instruction, nil, tokens) - end - when 3 then -# line 20 "./lib/liquid/parser.rl" - begin - - emit(:range, :instruction, nil, tokens) - end - when 4 then -# line 39 "./lib/liquid/parser.rl" - begin - emit(:id, :integer, Integer(data[mark..p-1]), tokens) end - when 5 then -# line 41 "./lib/liquid/parser.rl" - begin - emit(:id, :float, Float(data[mark..p-1]), tokens) end - when 6 then -# line 43 "./lib/liquid/parser.rl" - begin - emit(:id, :nil, nil, tokens) end - when 7 then -# line 44 "./lib/liquid/parser.rl" - begin - emit(:id, :bool, true, tokens) end - when 8 then -# line 45 "./lib/liquid/parser.rl" - begin - emit(:id, :bool, false, tokens) end - when 9 then -# line 47 "./lib/liquid/parser.rl" - begin - emit(:id, :string, data[mark+1..p-2], tokens) end - when 10 then -# line 52 "./lib/liquid/parser.rl" - begin - - emit(:id, :label, data[mark..p-1], tokens) - emit(:lookup, :variable, nil, tokens) - end - when 12 then -# line 77 "./lib/liquid/parser.rl" - begin - - emit(:buildin, :symbol, "first", tokens) - end - when 13 then -# line 81 "./lib/liquid/parser.rl" - begin - - emit(:buildin, :symbol, "last", tokens) - end - when 14 then -# line 85 "./lib/liquid/parser.rl" - begin - - emit(:buildin, :symbol, "size", tokens) - end - when 15 then -# line 89 "./lib/liquid/parser.rl" - begin - - emit(:id, :label, data[mark..p-1], tokens) - emit(:call, :variable, nil, tokens) - end -# line 1293 "./lib/liquid/parser.rb" - end - end - if _trigger_goto - next - end - end - end - end - if _goto_level <= _out - break - end - end - end - -# line 121 "./lib/liquid/parser.rl" - - puts "<-- #{tokens.inspect}" if $VERBOSE - return tokens - end - end -end \ No newline at end of file diff --git a/lib/liquid/parser.rl b/lib/liquid/parser.rl deleted file mode 100644 index 16375b6..0000000 --- a/lib/liquid/parser.rl +++ /dev/null @@ -1,126 +0,0 @@ -# Parser for context#[] method. Generated through ragel from parser.rl -# Only modify parser.rl. Run rake ragel afterwards to generate this file. -# -#VERBOSE=true - -%%{ - machine fsm; - - action mark { - mark = p - } - - action lookup { - emit(:lookup, :instruction, nil, tokens) - } - - action call { - emit(:call, :instruction, nil, tokens) - } - action range { - emit(:range, :instruction, nil, tokens) - } - - constants = ( "true" | "false" | "nil" | "null" ); - - # strings - string = "\"" any* "\"" | "'" any* "'"; - - # nothingness - nil = "nil" | "null" ; - - # numbers - integer = ('+'|'-')? digit+; - float = ('+'|'-')? digit+ '.' digit+; - - # simple values - primitive = ( - - integer >mark %{ emit(:id, :integer, Integer(data[mark..p-1]), tokens) } | - - float >mark %{ emit(:id, :float, Float(data[mark..p-1]), tokens) } | - - nil %{ emit(:id, :nil, nil, tokens) } | - "true" %{ emit(:id, :bool, true, tokens) } | - "false" %{ emit(:id, :bool, false, tokens)} | - - string >mark %{ emit(:id, :string, data[mark+1..p-2], tokens) } - - ); - - entity = ( - ((alpha [A-Za-z0-9_\-]*) - (constants)) >mark %{ - emit(:id, :label, data[mark..p-1], tokens) - emit(:lookup, :variable, nil, tokens) - } - ); - - # Because of recursion we cannot immediatly resolve the content of this in - # the current grammar. We simply re-invoke the parser here to descend into - # the substring - recur = ( - (any+ - ']') >mark %{ - self.parse(data[mark..p-1], tokens) - } - ); - - expr = ( - entity | - primitive | - "(" (primitive | entity) ".." (primitive | entity) <: ")" %range | - "[" recur "]" %lookup - ); - - hash_accessors = ( - "[" recur "]" %call | - - ".first" %{ - emit(:buildin, :symbol, "first", tokens) - } | - - ".last" %{ - emit(:buildin, :symbol, "last", tokens) - } | - - ".size" %{ - emit(:buildin, :symbol, "size", tokens) - } | - - "." ((alpha [A-Za-z0-9_\-]*) - ("first"|"last"|"size")) >mark %{ - emit(:id, :label, data[mark..p-1], tokens) - emit(:call, :variable, nil, tokens) - } - ); - - main := ( - - expr <: (hash_accessors)* - - ); - -}%% -# % fix syntax highlighting - - -module Liquid - module Parser - %% write data; - - def self.emit(sym, type, data, tokens) - puts "emitting: #{type} #{sym} -> #{data.inspect}" if $VERBOSE - tokens.push [sym, data] - end - - def self.parse(data, tokens = []) - puts "--> self.parse with #{data.inspect}, #{tokens.inspect}" if $VERBOSE - - eof = data.length - - %% write init; - %% write exec; - - puts "<-- #{tokens.inspect}" if $VERBOSE - return tokens - end - end -end \ No newline at end of file diff --git a/lib/liquid_ext.bundle b/lib/liquid_ext.bundle new file mode 100755 index 0000000000000000000000000000000000000000..e35a56bc9bd018ce625c29d548dbb8bd3b84642f GIT binary patch literal 28680 zcmeHvdvsJq_U=hYAS!Z#yy63i7?hwuAn7Cw9Vg*2bo_+@c{s>p8b|_(h9o8(L{tcq z1n7x*Fg`Bh%qYI`4$j~x2tF|KP|y*gIDjuiMCk)6sHmVw?)O#g(>V$0S>Au{U96Q} z>vWy(>|MKd?b@|#SDj9F{rKgXPKFWI!7z*{TwQSGMH)r~N`5ZJ)j!-YyxvKpr%Y0h zT7IRsgoa?qG$6+4C}gkKm%G3x07Ywg39Nw6bIH0SwslZXB8+lP(cfNgsjqByY4A~N zd56+8$t@hjVL@*6Rpd46M|s}7+=AlV67aQ_7kizqJYQrG!z|68v-Ha@^_Aoo&J~W< z^6nRTc?;W=&lX32bLz$MJRg_+@p|VLIo$3ndC}>blfKUnacg;<6-9q}y#=%Wn|?8<&(C;W z7{pF_?C*s_W8wAAE^YSWv+b9cu9?dn4&jvN^l5T(96Y$Z-mJ{u{?F)9nf9Eu6-po% zK7ylS6*8!oQ&wNYC|9iDqiv#4Dy-R!RNw&aV{g#yQN0*k1rrRT0p<4J8%BCp!?*zV zU{#-g;hPurUx$mdP@e+S@6`tJQaocj>wakJvU|~x`X{d+egDP9|NK=Po<);C3Zsu} zfQ|VKAC6%vF4k41?C=!s!i>RXr6q$4@@Mm!czdZYcix~8gK};M0vVsP>KTXdv}L`b z**9ko%5c^)jH|#!eez%*+Am&kF)%;Z;3A#)G#|8o&It=l_V_>Z)TB*If&0INwaVjv z-Q$m}9ge%|$XDQDp6X~%jcWwy_Xp|oLEp&f<*DiMD?Y7pT@8*M)?$D;W}i`pVfHDf z0VqG?cNsTkOwO1z(Npn7RHpw2Pjx4c|J5a*7_nfhdI4Nd84aBb^WM#s@0e8&0DG!- zn3d1qCaZc(jHh}`^w^ptW9+cwX62oDm|?Dus>#^zo?tHh8({gVbh9=a6TbY^)J2_Y zG9GeYeA|?<{;k$b1mUqYdEsM+edim4O6lQluUR=7Q^u^zi8T!OK(jIh$UVrc9K{lH zE@L^>tnGucA~4$>V=nEETlA?CO+mAYtx?l5rf1B^_X#s>j|0tlb;GkqkYL!)!sOmA z?dRu8>4xopsjlB4fc`h$J44X3;DKXnW`>O&cEYT@2L|I9hq9h z*|b%uGfJ_!<7Sk7ndSf76Tjc%|2Xg|oA$q+;3&V5^HjJRQ|>s6AKx>IpGwx%Es!}Oh5`4ZZJ>``%H?gF#2 zKg5`IuJhQ0SveEPJx5B+!Bssu2WPo2HkbVkw`2WZ*c#r3v;b1N$JLD3?H+0_U5TZ) z{6|dRBDhNVk5d=zsTqMVFn^boj|WbB1pOr&1nn=NNh;C>bBlRG=i*EN~InWoY zVgk(Sp1P>J=yK|(rlw##ur=zg#ldC}auX^qdX-`t;Wch=*~X)LgAE_Si0XzxUkkcf zx2&sb>{-_B&4$sFC($J|`j84j^H*9GXch4V@k|@C6gZ=N0f&8McLYlRQ5AMQO8h+@Q1PSUmP_h9z$O~-Ulbh@*fL)k`VNO2|qS9>Dp!QW1t^_mlHy zwnax=W_uy5vJLw<_cX0`JfyxJxLP%^1)4@BDVHoqn1)tAQ7iv@FJO)VMxKV=p6XQ0 zpd*7xV1-@mnprtiSJ>?6hR6TD^+(QxnkjmAU1%#vzg&9?Ls0j>IapVlm5VTrW?cb< zxci!wb)4JjX5A=wCOQMFvp+jg!|u;!+@r7BL$<{#Hurh+4_HrukmYaCUg~LT$l^M8 zFCLbsUR`!fKk#*z@#C`(^s};W$Hu>wSu_7kX3c`IK(Ao;R-()3-sv9fxvQE6kWpgy zrkzo(1=llaFHW`BH`v}|!S?z#w|BI*CZiE6E4sFHGUQlaoos5V8PP~Q3uc28TGh%= zN7=IuDrWh==YY*0WZVB3h7JnerxiTNfoxXLjv&1iI~^zx!`q6qwYpk{uJ)*-+6xRl z))Is`_cgvKEbA(%$n<|Sr{10qqo8T|aMeFOK@#!6T;IXn*Y_nt+dhwfe^&fgo{F!+ zGi&Y&3+zC^&h&3Zs|yjnpsWvb4Az{-xF*VG`48I47K2@)^DVrUNx16=yA404c2zOf ze4F%~kl;v@m?qSXz&9P~b3{5i(zn`?=tZd@S%b*c$FMuN5n7>x!T#kyUion4FS>sd z?FQQHpLMO>zdvbjd8V7{UzNjK9Q~^YyY#P`x6;33-|PNe?K`V~@7g4@vNL*Q){T_@ zF)3pIPGI85tXKUTtosLxm&21`@prJg!s4a$YiE?PZGIYC4$H=$`+5v%B+ zL%!!)M;=-0^1j2Ytk|mZfU0hAd^GxZ_!z?-Jqh9NF7z_6NmYqlLHDb6{Sk%L8Q#s% zsbkQiih&^|N9)|<0>%0}ht8ODw#L^hcIDEed0UazPgi>t`5{_}aa7YTeFlTbEcJdU zNe?PS+1z|wu=yEU&U7tjyhDzo`8TnL6ob9S+lsWybv14=(R^1&HPyVW_n(?8*5Ed? z2H8f|upi9IV<%Kdlf`@m*Sb=(@@LqP;qq-_EaNL6UY5>HsF3MDtyZd*`N`_8!D#Or zY1a18sZ!;`7!J4B_g-+l<Ubt(fRh-d3c&2}V@ANmtwCsHR6~p9-f)sLllLQUS+CkyXb8# zhHRW2FI01-!RDmil(XwOJmiw*=6dMn{-&FY(ADZ&H)l`SPp*Oh_8Ag z+xev(S1Y~+dFOF15N-KiGHM@1BNI@bOV^#EvrkI)LoZ`Xzh;j=Jm#2=yD{r@$_JC~ zVPaG}9pBuOMzG8`tFA?9kIQ3D_9w|+7mtzVIQ$2BD95KCt6@AIXMDtXyo~2E9{<9v zH3QAJIUbc`oWieH!b`Y+h42L;d^<}B_lWSBO1L@$nM~n^vu{6K;ON_rAe*)2tdG9+ zXNkUzM``zMyOaG*#eRdZpW@<%?fDfB_CGt>|Ek#g3i}&mN8tMgr7ittC;L3b{w>*{ z%wJgg%&IL8_6Pdfy2GR&_rVOVeT>qvH?ITRCM;Yk35Y`y@XD2(ON{F2n1f6aI%#Sy zsee(_$g4O#t6hCiSZm=1a|YS#k@!Xrh_xENgltJLE@SN(x^_M0sMQrqy-jSw^FX>L zK1$*W%%fnCUwFRKUI+OkbEzK+sm*T*d=Z;pv-Uq=uNm2(T_1!8Z`|(Tk=lWuM*Lkpnp2mom&toLb zS|1#a-gOI13E!<;!uW})lZI^q=jB8^*E!Ep4{oi4-*5y*HOqYNsO$zM2Yw9LZf_+L z=HO0oAjYTV&UfGywnv_U6JhmU&pB=&XG>_p-m zO&mhvPPnG+_E98eYT_gk|A@uiZu2cX4_vE>za}x6#0Wzvw39?r6CXjpt(P1%?;-IU z%yJxT*N~V8A_l9j1d3VL9FdXHVN=DguRxz=R+XW|QH4G)O#E667|xIp%THmB?dR!B%O0eO|a5j)_4}kD&ZNEB!_ut44`<)qp6+cqM~&H!Ki1dbu*g6ClB39%3O5 zFytMp9zN*K_oedeGeWne`<^1YslNYASFW7{4cYh8U!X+a-$iNrZGiqH+S?FB-6dr))?!R1$NmJHk6zeQbfdovha8!%-yLRm zx2Ypd3-=hg(MX`m8ngUg$>HkK-cU&`9E;(An5KtO9jcZ9*{V8{y@85d<(B<`R2HWiYR@)Yv<>4H?ML*O>pd5#UVHpM@hsx>=gnsr$8pailz6xSnCOTNni=O>?^|z!T#u8q za2`ljWy86wO?X7F=?JIb46DVWXM4>P9c(wi1b9k$&0w;DeJ|z`CrlGcoBcK?`$ENT z2>WWXW4s$3>{BsAf-&`ZL~FD58M4F4{t7lbkgS9S1OLWLSv_*2F=sGx&!aL%E)~dn z8~t$l2P~9rVcuh1t%pnLY!@-RdFiab9`q(mfNUho=h9U#Ixm-!{hLlj z6>H;P)G$mzQ0AzOgE=^Ahfu|4-{fR3Q0(!-9!qwN+BygOV>l$jsM+WI%VL5SMmF1Q zVeDr=hqpe8VGRezxpdtqI>*5l)SLa#E0O-TqxVj1zybsDg+(lY_+S;m4{hQzBt~oE z77~XdZra3qN&J>)-Tuf$@NDZahS6TEmy@_h6K^2#5rj><=2Q|lYNDIO--3v3b7uS* zoaqK0R}^N(-(!9_;&WftTcYcIsHe_7${kenW2``SFYYDrTdXnY{~QvlNtDFlJ`(q6VpkHA z9W|$txKR^NQ=5ZGq(s7qjLwR28cT6QnCiT&#&Vlb8)6^TO@O9wje)nOlOV zKVixsOVTO;rU2pCJXP+-vTfG=4c~~XRb^yeg)jU3w;lqsYO?ja&$*~*t{)j@J;kTN z@M3DSZ#i61(~v zG!nR1RgA2|z+2;?rER1b5^vMQg(RNlA~wy66IJ zsAc{Gn)hzaQ@Mue8P*6FOB{z)B2BUmehPq~vj(cU7n)UjF^+c7$>O_D`+ep(ObzUi z$OiViSR%E09Hq@Z3`gO?rQ!>&khM!CAGsB5w(FFjTY-l$eYM3dLib?ekFfy4#F6am z6Q4miR=LMMR)dVZ5HCPq1mGZdVDlS!NMHLC4_lB!tptKIARh$ZJ;E13z7>jZH~A1y zi!~qeK=9one39hKSA2gbA3EjHd>s|vNa5>9GhYP?+=7npn722hGl3o0!C+%jJ+n4JW}vqgd>n$UYq5aX2N!EdG&J!8 z68AGBLMHqV9?4^kjiZTcW~j`pGX5hqVx#fv7~dsk?fID4$b_%4_F|7K>261`*e`v4 z{1Dn8>l=s{OJ1Mlj`v;aPG7VK6ZRve^!z>6Ub1L6!Fx5Hjo*%Gq2H$+fj$_$o;s`j z2*|db<9$;sXOTX@yp*?iKclOi)&c23N3|Bo@L{}0kctO!8;p>9FxHHa%u#332*~?} zKubvG)}7vfr;KNJp}oLXB_?vN8h6)B7Baxv#pb{*?U6`gg?n^`{ou5Cx@Al2OX7S@ z+(F`9AkyWBVmdNTJ%lCI4m=Mdz#%l~Y$w%RHUKDcixZkvC4 zl(A1)lW!{#1&$&?km%MQ1bbb&Of#v?{DJ1p{6-~|snllZiulzH;|3kpQS;_so7AGK zdZD;8Si!F=Y}0S`?qmhWV!?dVneS_rmUjC9asO%fLoiBL?6spblEX}-uV!60d@}(m zLrk$|;48>{V~`o4W+W(P-J@j2PW=`JAY@zvS*Dw{m$1Z|)ElMz;PE2dTHPRmzc)aY zRI;F*9(?{C(mOi|{RsK6r^c&)DsylTDy$z9W}W8KinNE>@8-DL4+aSoVA}@AT1F#O zyUHE5&~f#TNM!A}`XP7&!*zxA;I!UC%XZe;NaE$1xPrvPAlfnGChS*r0*5_mr$bPy zb}Nqh7RFEOp&M1yzLaPgFkSUmi;#Pj_!h|9mb8L{TIm-u6f>4ExBHEh}51o z2|^uvjDGLJXZ=4}y?#I`zi#P@XGnC8_Oc%s`T?iJV&oHQs?I-XS-V+Rr8$4XB-d%q zl?YYTNpj4Ks8b!NDhhJ+k*B$|6ckc?YF|ormiB?R8 zF!gpYoqk6%A%Yy0N%ASnc(dwzlo*Y#Wi&+T9#q-~k3!G)>e1ljwUySRk%ks@6y$y> z7w?%6%Cz#;XfUY!0yJUP=7CP-tAM~4p*oo@d}<9GulUl*hsi!e^F=DY;lii(OZ^pJ z4EeBDx-?%$#n(;vIx<)qpwKQSvDIW(F91eYyR_`;0Q54zw{hs|2{oLqFImX=;DmiL z+iS6Zf|TXpp{t0&4naU*q?S^srOb6m(FU8Pb5|}Zj;c?wYLu?}clt@S>oFFhfUY`q zkHfkH-*#B{67&xFKchWd=xU&#bt8pOS@#b(c_U`)_Yh9^oaaHb4 znPz3K-X3&v)W;FKmH2^bxR++)K{FaT-@&AQaBX!4n=Sud%HKk9D#Wd!q0P#^TK+>0 zqf-9v_m%v?7=K5{E~SWtN~T(HfVA`aup+5a5~fort5 z-)M2ac8H@MpCEa$JFuJV;Xz>|TMAoE>VBjIFgkzy4&C~;682AIqPDOlWM8M)Y3-d< zsX4e!BXxxq_8h&h+VwOG=_oZDQPv;nv{*Rr5`d` zo(E%~r{>Po{TSis2c}#KR}aXf3D=POD-ORJ)Wa=XzL(TD6gBcK-STTJ9Njp=Zb;Mo z3x~j8H2V`6IqPx+F}tM!Brej#6(lxd=G(-6B+d=0u^e=VH7_J}q^?>B60A9wg+q-~ zn8LQOec%jS5){Ut>pO%skor9|#yH=ggUKt1vy6sm4n6#_d|@{7@(d$G~^R=*dRokw&SU7t9 zGUBJ*fivI?qz8pP)l%5!q+X_l)oEeNTL~+sF#0$&d!FoH^4=d=3~jAzaj0b5_f`@c zHSrD-3*KrbP9pJHO?(h7Sj+fwLB!4^@qSHY1h5ui^{|N}NxWSX3rKtw#NhH*34;Fn zFpq!6@hpGtN&I6IdM@twlwt{1WPvcqenFL z8>+sO)OWJ_PF3H(Qr~X%eVzJF$9EnZwI<*zj~h(O!@GXGyN-9Myi4NUWZn(n-8|mK z@~)0|Jc!DBn0H+L^Jp0hg7L|!>0N~`XH0DBSBA1aZyRYi+iS|ozqKqs#~44Wq!fRR zUChD&&Mfrh&c%b@6co+!83jc}x0DqdC9?|W<{H_v3JQ!l`6Z=3V|H17K~8?5Q7{Xj zG=E_({#?^AXe54|CDq^`nzIAEK1;(FKD?**bjEj#x--IO;;%l-lMSP*5gzvTlt_x? z)g2c%e;SjKI&j9X&?CIlTA`kTOZi z>!kEZIYG+lQqGaGSjxMl)Y96&+bz&;fp!bDTcF(n?G|XaK)VInEzoX(b_=vypxpxP z7Wn^Rfv#7?Ol7;*rF%V^+!S-oo75jC$kN*cML``KW*MqvEpCJU&X$k8*P7!PyiM?0!TSYo5d4GS2Eox7P}birI9_n0;1PoN z37#hSfMB2CfZ!Uz#|1wj_@rR|Vu|e;8MyG-Cpb#**Mg%3pO0BY{usem3XT=*7TjO( zWWfo73k9bNUM4tQ@G8L`!5amS7yORkDT0p*o+&sYLhF|&xVPY9!O4Ob2p%W6Trl4W zvVY43FA-cX_yNHy1wSizmEeC1UM=`D!D|Jd5xhZgFGMW1*C04S@OHtOf*S?T7Q9dJ z9fA)CzE^NS@Y8~i3w}-TNx>frHb&_2KPfm$a92b|>K83|fZ!OxBL&9_o-Vk*;4;Ap zf@=k*3Vu>>y5I)E9>MPk9xwPC!BYfZfVe~bW(tlIoF_OB)DAga>2_5 zKP?*jYerRxXJ2rd@#q`AE_k)z zKMP(f_+NrI2!2y=gWyAgw+sGRaHHU!cy-72_6Z&=_<&%K;DF#+f{zPcDEOq{djuOJ z4E5n}zbQXT@HWBGg7*uK5&VPTSi#ZAU0J`s;CR6af=38W6+BIFx?rDRkKh`?;{`t< zc#7ax1kV(_PjH^#uLTziJ|DjprhW?qUn#g;uv_qQ!IK5o3oaDAQt&dts|2qSyjt)^ z!D|J-BY1=0qk)mmV% z2R{$A!cVrs&$Yr0t?=Gf*lL9%@xyj!dtF=M-mP$aE4&VxuE+H}u8p`}!1W@omvFs| zYZET!;IH7qCw&9HercUpWAJ4BR-kmSuV{Au;E_c+xq~N^&AuJ~)|tN~7>qreeQU_p z4UYz8|KeJXN=1hEtnHw)0S9YIfno0&+t^&&tlr9h8zZ zBrz0WNZW+O)Ra(!5TX)OhJ~n+;tE9wB`P@~L=9JRC_*Svu27`|MGXz1 zRbnVniAkYqglHpSSSUiMfl5dX(MCdQh%rwHHG&B#A*`DaVrY|7l2Y63AP8-n9fY=x zn4FT>wqJqJwljdxcF&VjLQDe?+O}?TN388G25UPWr{3+mf$sxwW70N|jp`6+k%0*qSQ2iJZiV(_ul7@v)H%X#smj2x$7i#(K zV*8q1Qs~H565H2o^*+L3lJ+&bbxzy9W}lVjW04OLTie&{v)m`Sea&taWRhL&Yj$gs z{FgPm_4dBaJ$&1nbp7g=tG@ka+;OjSGZNI>a8m3y?!0f~ow(z%ybX6eIqN+*Y4#g% U-rMiKd2he