symphony-metronome 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 0c8bd22339d29f682c28b8f752d1b1b883214148
4
+ data.tar.gz: 9752296a5eb0764658b171fb2040a6e5a81ad003
5
+ SHA512:
6
+ metadata.gz: 2aa30250dfa76c1fdeb832da45f7504d8e82d2f8c153c688c8ea71ecafd6f6fc504b6c816eacf8ce4c2797ff8f87a4858b64bb8ae4c4e4a411705b324d3f7aac
7
+ data.tar.gz: 95c92e6276ab7dfe9386bbcb355a7928e775befd6001b1c8ecd2cd21cd714aa8c1568bb6d295d01359bd5454ef94ba4de9bc2220b6730b1e0ca99c39439287f4
data/README.rdoc ADDED
@@ -0,0 +1,198 @@
1
+
2
+ = metronome
3
+
4
+ == Description
5
+
6
+ Metronome is an interval scheduler and task runner. It can be used
7
+ locally as a cron replacement, or as a network-wide job executor.
8
+
9
+ Events are stored via simple database rows, and optionally managed
10
+ via AMQP events. Interval/time values are expressed with intuitive
11
+ English phrases, ie.: 'at 2pm', or 'Starting in 20 minutes, run every 10
12
+ seconds and then finish in 2 days', or 'execute 12 times during the next
13
+ minute'.
14
+
15
+ It includes an executable under bin/:
16
+
17
+ metronome-exp::
18
+ A simple tester for trying out interval expression parsing.
19
+
20
+
21
+ == Synopsis
22
+
23
+ Here's an example of a cron clone:
24
+
25
+ require 'symphony/metronome'
26
+
27
+ Symphony.load_config
28
+
29
+ Symphony::Metronome.run do |opts, id|
30
+ Thread.new do
31
+ pid = fork { exec opts.delete('command') }
32
+ Process.waitpid( pid )
33
+ end
34
+ end
35
+
36
+
37
+ And here's a simplistic AMQP message broadcaster, using existing
38
+ Symphony connection information:
39
+
40
+ require 'symphony/metronome'
41
+
42
+ Symphony.load_config
43
+
44
+ Symphony::Metronome.run do |opts, id|
45
+ key = opts.delete( :routing_key ) or next
46
+ exchange = Symphony::Queue.amqp_exchange
47
+ exchange.publish( 'hi from Metronome!', routing_key: key )
48
+ end
49
+
50
+
51
+ == Adding Actions
52
+
53
+ There are two primary components to Metronome -- getting actions into
54
+ its database, and performing some task with those actions when the time
55
+ is appropriate.
56
+
57
+ By default, Metronome will start up an AMQP listener, attached to your
58
+ Symphony exchange, and wait for new scheduling messages. There are two
59
+ events it will take action on:
60
+
61
+ metronome.create::
62
+ Create a new scheduled event. The payload should be a hash. An
63
+ 'expression' key is required, that provides the interval description.
64
+ Anything additional is serialized to 'options', that are passed to the
65
+ block when the interval fires. You can populate it with anything
66
+ your task requires to execute.
67
+
68
+ metronome.delete::
69
+ The payload is the row ID of the action. Metronome removes it from
70
+ the database.
71
+
72
+
73
+ If you'd prefer not to use the AMQP listener, you can put actions into
74
+ Metronome using any database methodology you please. When the daemon
75
+ starts up or receives a HUP signal, it will re-read and schedule out
76
+ upcoming work.
77
+
78
+
79
+ == Options
80
+
81
+ Metronome uses
82
+ Configurability[https://rubygems.org/gems/configurability] to determine
83
+ behavior. The configuration is a YAML[http://www.yaml.org/] file. It
84
+ shares AMQP configuration with Symphony, and adds metronome specific
85
+ controls in the 'metronome' key.
86
+
87
+ metronome:
88
+ splay: 0
89
+ listen: true
90
+ db: sqlite:///tmp/metronome.db
91
+
92
+
93
+ === splay
94
+
95
+ Randomize all start times for actions by this many seconds on either
96
+ side of the original execution time. Defaults to none.
97
+
98
+ === listen
99
+
100
+ Start up an AMQP listener using Symphony configuration, for remote
101
+ administration of schedule events. Defaults to true.
102
+
103
+ === db
104
+
105
+ A {Sequel}[https://rubygems.org/gems/sequel] connection URI. Currently,
106
+ Metronome is tested under SQLite and PostgreSQL. Defaults to a SQLite
107
+ file at /tmp/metronome.db.
108
+
109
+
110
+ == Scheduling Examples
111
+
112
+ Note that Metronome is designed as an interval scheduler, not a
113
+ calendaring app. It doesn't have any concepts around phrases like "next
114
+ tuesday", or "the 3rd sunday after christmas". If that's what you're
115
+ after, check out the {chronic}[http://rubygems.org/gems/chronic]
116
+ library instead.
117
+
118
+ Here are a small set of example expressions. Feel free to use the
119
+ +metronome-exp+ utility to get a feel for what Metronome anticipates.
120
+
121
+ in 30.5 minutes
122
+ once an hour
123
+ every 15 minutes for 2 days
124
+ at 2014-05-01
125
+ at 2014-04-01 14:00:25
126
+ at 2pm
127
+ starting at 2pm once a day
128
+ start in 1 hour from now run every 5 seconds end at 11:15pm
129
+ every other hour
130
+ run every 7th minute for a day
131
+ once a day ending in 1 week
132
+ run once a minute for an hour starting in 6 days
133
+ 10 times a minute for 2 days
134
+ run 45 times every hour
135
+ 30 times per day
136
+ start at 2010-01-02 run 12 times and end on 2010-01-03
137
+ starting in an hour from now run 6 times a minute for 2 hours
138
+ beginning a day from now, run 30 times per minute and finish in 2 weeks
139
+ execute 12 times during the next 2 minutes
140
+ once a minute beginning in 5 minutes
141
+
142
+ In general, you can use reasonably intuitive phrasings. Capitalization,
143
+ whitespace, and punctuation doesn't matter. When describing numbers,
144
+ use digit/integer form instead of words, ie: '1 hour' instead of 'one
145
+ hour'.
146
+
147
+
148
+ == Installation
149
+
150
+ gem install symphony-metronome
151
+
152
+
153
+ == Contributing
154
+
155
+ You can check out the current development source with Mercurial via its
156
+ {project page}[http://bitbucket.org/mahlon/symphony-metronome].
157
+
158
+ After checking out the source, run:
159
+
160
+ $ rake
161
+
162
+ This task will run the tests/specs and generate the API documentation.
163
+
164
+ If you use {rvm}[http://rvm.io/], entering the project directory will
165
+ install any required development dependencies.
166
+
167
+
168
+ == License
169
+
170
+ Copyright (c) 2014, Mahlon E. Smith
171
+ All rights reserved.
172
+
173
+ Redistribution and use in source and binary forms, with or without
174
+ modification, are permitted provided that the following conditions are met:
175
+
176
+ * Redistributions of source code must retain the above copyright notice,
177
+ this list of conditions and the following disclaimer.
178
+
179
+ * Redistributions in binary form must reproduce the above copyright notice,
180
+ this list of conditions and the following disclaimer in the documentation
181
+ and/or other materials provided with the distribution.
182
+
183
+ * Neither the name of the author/s, nor the names of the project's
184
+ contributors may be used to endorse or promote products derived from this
185
+ software without specific prior written permission.
186
+
187
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
188
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
189
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
190
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
191
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
192
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
193
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
194
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
195
+ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
196
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
197
+
198
+
data/bin/metronome-exp ADDED
@@ -0,0 +1,33 @@
1
+ #!/usr/bin/env ruby
2
+ # vim: set nosta noet ts=4 sw=4:
3
+ #
4
+ # Simplistic interval expression tester.
5
+ #
6
+
7
+ require 'symphony/metronome'
8
+
9
+ loop do
10
+ begin
11
+ exp = gets.chomp
12
+ next if exp.empty?
13
+
14
+ begin
15
+ parsed = Symphony::Metronome::IntervalExpression.parse( exp )
16
+ puts "OK:"
17
+ puts "\tvalid | %s" % [ parsed.valid ]
18
+ puts "\trecurring | %s" % [ parsed.recurring ]
19
+ puts "\tstarting | %s" % [ parsed.starting ]
20
+ puts "\tinterval | %s" % [ parsed.recurring ? parsed.interval : '-' ]
21
+ puts "\tending | %s" %
22
+ [ parsed.ending ? parsed.ending : (parsed.recurring ? 'never' : '-') ]
23
+
24
+ rescue => err
25
+ puts "NOPE: (%s) %s" % [ exp, err.message ]
26
+ end
27
+
28
+ puts
29
+
30
+ rescue Interrupt
31
+ exit 0
32
+ end
33
+ end
@@ -0,0 +1,32 @@
1
+ # vim: set nosta noet ts=4 sw=4:
2
+
3
+ ### The initial Metronome DDL.
4
+ ###
5
+ class Initial < Sequel::Migration
6
+
7
+ def initialize( db )
8
+ @db = db
9
+ end
10
+
11
+ def up
12
+ create_table( :metronome ) do
13
+ case @db.adapter_scheme
14
+ when :postgres
15
+ serial :id, primary_key: true
16
+ timestamptz :created, null: false
17
+ text :expression, null: false
18
+ text :options
19
+ else
20
+ Integer :id, auto_increment: true, primary_key: true
21
+ DateTime :created, null: false
22
+ String :expression, null: false
23
+ String :options
24
+ end
25
+ end
26
+ end
27
+
28
+ def down
29
+ drop_table( :metronome )
30
+ end
31
+ end
32
+
@@ -0,0 +1,79 @@
1
+ #!/usr/bin/env ruby
2
+ # vim: set nosta noet ts=4 sw=4:
3
+
4
+ require 'pathname'
5
+ require 'symphony' unless defined?( Symphony )
6
+
7
+ module Symphony::Metronome
8
+ extend Loggability,
9
+ Configurability
10
+
11
+ # Library version constant
12
+ VERSION = '0.1.0'
13
+
14
+ # Version-control revision constant
15
+ REVISION = %q$Revision: 9a5303d9fec6 $
16
+
17
+ # The name of the environment variable to check for config file overrides
18
+ CONFIG_ENV = 'METRONOME_CONFIG'
19
+
20
+ # The path to the default config file
21
+ DEFAULT_CONFIG_FILE = 'etc/config.yml'
22
+
23
+ # The data directory that contains migration files.
24
+ #
25
+ DATADIR = if ENV['METRONOME_DATADIR']
26
+ Pathname.new( ENV['METRONOME_DATADIR'] )
27
+ elsif Gem.datadir( 'symphony-metronome' )
28
+ Pathname.new( Gem.datadir('symphony-metronome') )
29
+ else
30
+ Pathname.new( __FILE__ ).dirname.parent.parent + 'data/symphony-metronome'
31
+ end
32
+
33
+
34
+ # Loggability API -- use symphony's logger
35
+ log_to :symphony
36
+
37
+ # Configurability API
38
+ config_key :metronome
39
+
40
+
41
+ ### Get the loaded config (a Configurability::Config object)
42
+ def self::config
43
+ Configurability.loaded_config
44
+ end
45
+
46
+
47
+ ### Load the specified +config_file+, install the config in all objects with
48
+ ### Configurability, and call any callbacks registered via #after_configure.
49
+ def self::load_config( config_file=nil, defaults=nil )
50
+ config_file ||= ENV[ CONFIG_ENV ] || DEFAULT_CONFIG_FILE
51
+ defaults ||= Configurability.gather_defaults
52
+ config = Configurability::Config.load( config_file, defaults )
53
+ config.install
54
+ end
55
+
56
+
57
+ # The generic parse exception class.
58
+ class TimeParseError < ArgumentError; end
59
+
60
+ require 'symphony/metronome/scheduler'
61
+ require 'symphony/metronome/intervalexpression'
62
+ require 'symphony/metronome/scheduledevent'
63
+ require 'symphony/tasks/scheduletask'
64
+
65
+
66
+ ###############
67
+ module_function
68
+ ###############
69
+
70
+ ### Convenience method for running the scheduler.
71
+ ###
72
+ def run( &block )
73
+ raise LocalJumpError, "No block provided." unless block_given?
74
+ return Symphony::Metronome::Scheduler.run( &block )
75
+ end
76
+
77
+
78
+ end # Symphony::Metronome
79
+
@@ -0,0 +1,2518 @@
1
+
2
+ # vim: set noet nosta sw=4 ts=4 ft=ragel :
3
+
4
+
5
+
6
+
7
+
8
+ require 'symphony' unless defined?( Symphony )
9
+ require 'symphony/metronome'
10
+ require 'symphony/metronome/mixins'
11
+
12
+ using Symphony::Metronome::TimeRefinements
13
+
14
+
15
+ ### Parse natural English expressions of times and intervals.
16
+ ###
17
+ ### in 30 minutes
18
+ ### once an hour
19
+ ### every 15 minutes for 2 days
20
+ ### at 2014-05-01
21
+ ### at 2014-04-01 14:00:25
22
+ ### at 2pm
23
+ ### starting at 2pm once a day
24
+ ### start in 1 hour from now run every 5 seconds end at 11:15pm
25
+ ### every other hour
26
+ ### once a day ending in 1 week
27
+ ### run once a minute for an hour starting in 6 days
28
+ ### 10 times a minute for 2 days
29
+ ### run 45 times every hour
30
+ ### 30 times per day
31
+ ### start at 2010-01-02 run 12 times and end on 2010-01-03
32
+ ### starting in an hour from now run 6 times a minute for 2 hours
33
+ ### beginning a day from now, run 30 times per minute and finish in 2 weeks
34
+ ### execute 12 times during the next 2 minutes
35
+ ###
36
+ class Symphony::Metronome::IntervalExpression
37
+ include Comparable,
38
+ Symphony::Metronome::TimeFunctions
39
+ extend Loggability
40
+
41
+ log_to :symphony
42
+
43
+ # Ragel accessors are injected as class methods/variables for some reason.
44
+
45
+ class << self
46
+ attr_accessor :_interval_expression_key_offsets
47
+ private :_interval_expression_key_offsets, :_interval_expression_key_offsets=
48
+ end
49
+ self._interval_expression_key_offsets = [
50
+ 0, 0, 10, 15, 19, 20, 21, 22,
51
+ 23, 46, 50, 53, 57, 62, 63, 66,
52
+ 75, 76, 77, 87, 88, 89, 90, 91,
53
+ 96, 114, 121, 127, 130, 134, 136, 138,
54
+ 139, 141, 143, 154, 156, 157, 159, 161,
55
+ 170, 171, 172, 173, 174, 175, 176, 181,
56
+ 199, 206, 212, 215, 219, 221, 223, 224,
57
+ 226, 228, 233, 235, 236, 238, 240, 242,
58
+ 244, 247, 251, 255, 256, 259, 268, 269,
59
+ 270, 271, 272, 273, 275, 277, 278, 279,
60
+ 280, 281, 282, 283, 284, 285, 286, 287,
61
+ 288, 289, 290, 291, 292, 293, 294, 295,
62
+ 296, 301, 302, 307, 311, 316, 322, 324,
63
+ 326, 328, 329, 336, 340, 345, 356, 358,
64
+ 363, 374, 381, 389, 396, 404, 412, 421,
65
+ 430, 438, 447, 457, 468, 476, 485, 496,
66
+ 506, 517, 518, 529, 540, 545, 548, 553,
67
+ 558, 563, 565, 566, 567, 570, 587, 595,
68
+ 603, 611, 619, 623, 624, 625, 626, 627,
69
+ 629, 633, 634, 635, 638, 639, 640, 641,
70
+ 642, 643, 645, 646, 647, 648, 649, 650,
71
+ 651, 652, 653, 654, 655, 656, 657, 659,
72
+ 661, 664, 668, 672, 673, 676, 685, 686,
73
+ 687, 688, 689, 690, 692, 694, 695, 696,
74
+ 697, 698, 699, 700, 701, 702, 703, 704,
75
+ 705, 706, 707, 708, 709, 710, 711, 712,
76
+ 713, 718, 719, 724, 728, 733, 739, 741,
77
+ 743, 745, 746, 753, 757, 762, 773, 775,
78
+ 780, 791, 798, 806, 813, 821, 829, 838,
79
+ 847, 855, 864, 874, 885, 893, 902, 913,
80
+ 923, 934, 935, 946, 957, 962, 965, 970,
81
+ 975, 980, 982, 983, 984, 987, 1004, 1012,
82
+ 1020, 1028, 1036, 1040, 1041, 1042, 1043, 1044,
83
+ 1046, 1047, 1048, 1051, 1055, 1056, 1057, 1058,
84
+ 1059, 1060, 1061, 1066, 1084, 1091, 1097, 1100,
85
+ 1104, 1106, 1108, 1109, 1111, 1113, 1120, 1122,
86
+ 1123, 1125, 1127, 1132, 1133, 1134, 1135, 1136,
87
+ 1141, 1159, 1166, 1172, 1175, 1179, 1181, 1183,
88
+ 1184, 1186, 1188, 1193, 1195, 1196, 1198, 1200,
89
+ 1202, 1204, 1207, 1211, 1215, 1216, 1219, 1228,
90
+ 1229, 1230, 1231, 1232, 1233, 1235, 1237, 1238,
91
+ 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246,
92
+ 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254,
93
+ 1255, 1256, 1261, 1262, 1267, 1271, 1276, 1282,
94
+ 1284, 1286, 1288, 1289, 1296, 1300, 1305, 1316,
95
+ 1318, 1323, 1334, 1341, 1349, 1356, 1364, 1372,
96
+ 1381, 1390, 1398, 1407, 1417, 1428, 1436, 1445,
97
+ 1456, 1466, 1477, 1478, 1489, 1500, 1505, 1508,
98
+ 1513, 1518, 1523, 1525, 1526, 1527, 1530, 1547,
99
+ 1555, 1563, 1571, 1579, 1583, 1584, 1585, 1586,
100
+ 1587, 1589, 1590, 1591, 1594, 1598, 1599, 1600,
101
+ 1601, 1602, 1604, 1606, 1609, 1613, 1617, 1618,
102
+ 1621, 1630, 1631, 1632, 1633, 1634, 1635, 1637,
103
+ 1639, 1640, 1641, 1642, 1643, 1644, 1645, 1646,
104
+ 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1654,
105
+ 1655, 1656, 1657, 1658, 1663, 1664, 1669, 1673,
106
+ 1678, 1684, 1686, 1688, 1690, 1691, 1698, 1702,
107
+ 1707, 1718, 1720, 1725, 1736, 1743, 1751, 1758,
108
+ 1766, 1774, 1783, 1792, 1800, 1809, 1819, 1830,
109
+ 1838, 1847, 1858, 1868, 1879, 1880, 1891, 1902,
110
+ 1907, 1910, 1915, 1920, 1925, 1927, 1928, 1929,
111
+ 1932, 1949, 1957, 1965, 1973, 1981, 1985, 1986,
112
+ 1987, 1988, 1989, 1991, 1995, 1996, 1997, 2000,
113
+ 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009,
114
+ 2010, 2011, 2012, 2013, 2015, 2016, 2017, 2018,
115
+ 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2027,
116
+ 2029, 2030, 2031, 2032, 2033, 2034, 2035, 2036,
117
+ 2037, 2038, 2039, 2040, 2041, 2042, 2043, 2044,
118
+ 2045, 2046, 2047, 2048, 2049, 2057, 2059, 2064,
119
+ 2072, 2079, 2087, 2096, 2104, 2112, 2113, 2121,
120
+ 2125, 2127, 2130, 2131, 2132, 2135, 2152, 2153,
121
+ 2154, 2155, 2156, 2157, 2158, 2159, 2161, 2162,
122
+ 2163, 2166, 2184, 2185, 2186, 2188, 2189, 2192,
123
+ 2197, 2202, 2207, 2209, 2210, 2212, 2214, 2215,
124
+ 2217, 2219, 2231, 2233, 2234, 2236, 2238, 2240,
125
+ 2242, 2244, 2246, 2248, 2249, 2250, 2251, 2252,
126
+ 2253, 2258, 2276, 2283, 2289, 2292, 2296, 2298,
127
+ 2300, 2301, 2303, 2305, 2308, 2319, 2324, 2328,
128
+ 2329, 2330, 2331, 2332, 2354, 2358, 2361, 2365,
129
+ 2370, 2371, 2374, 2383, 2384, 2385, 2386, 2387,
130
+ 2388, 2390, 2392, 2393, 2394, 2395, 2396, 2397,
131
+ 2398, 2399, 2400, 2401, 2402, 2403, 2404, 2405,
132
+ 2406, 2407, 2408, 2409, 2410, 2411, 2412, 2420,
133
+ 2422, 2427, 2435, 2442, 2450, 2459, 2467, 2475,
134
+ 2476, 2484, 2488, 2490, 2493, 2494, 2495, 2498,
135
+ 2515, 2516, 2517, 2518, 2519, 2520, 2521, 2522,
136
+ 2524, 2525, 2526, 2529, 2547, 2548, 2549, 2551,
137
+ 2557, 2562, 2564, 2566, 2570, 2581, 2582, 2585,
138
+ 2590, 2595, 2600, 2602, 2603, 2605, 2607, 2608,
139
+ 2610, 2612, 2623, 2625, 2626, 2628, 2630, 2632,
140
+ 2634, 2636, 2638, 2640, 2641, 2644, 2645, 2646,
141
+ 2650, 2660, 2662, 2663, 2664, 2668, 2669, 2670,
142
+ 2673, 2674, 2675, 2677, 2679, 2682, 2685, 2689,
143
+ 2693, 2694, 2697, 2706, 2707, 2708, 2712, 2715,
144
+ 2716, 2717, 2718, 2720, 2722, 2723, 2724, 2725,
145
+ 2726, 2727, 2728, 2729, 2730, 2731, 2732, 2733,
146
+ 2734, 2735, 2736, 2737, 2738, 2739, 2740, 2741,
147
+ 2746, 2747, 2752, 2756, 2761, 2767, 2769, 2771,
148
+ 2773, 2774, 2781, 2785, 2790, 2801, 2803, 2808,
149
+ 2819, 2826, 2834, 2841, 2849, 2857, 2866, 2875,
150
+ 2883, 2892, 2902, 2913, 2921, 2930, 2941, 2951,
151
+ 2962, 2963, 2974, 2985, 2990, 2993, 2998, 3003,
152
+ 3008, 3010, 3011, 3012, 3015, 3032, 3040, 3048,
153
+ 3056, 3064, 3068, 3069, 3070, 3071, 3072, 3074,
154
+ 3075, 3076, 3079, 3083, 3086, 3087, 3088, 3092,
155
+ 3102, 3104, 3105, 3106, 3110, 3111, 3112, 3115,
156
+ 3116, 3117, 3118, 3119, 3120, 3121, 3124, 3128,
157
+ 3131, 3135, 3138, 3139, 3139, 3140, 3140, 3143,
158
+ 3147, 3150, 3153, 3157, 3160, 3161, 3161, 3162,
159
+ 3162, 3165, 3169, 3172, 3175, 3178, 3182, 3185,
160
+ 3188, 3192, 3195, 3198, 3202
161
+ ]
162
+
163
+ class << self
164
+ attr_accessor :_interval_expression_trans_keys
165
+ private :_interval_expression_trans_keys, :_interval_expression_trans_keys=
166
+ end
167
+ self._interval_expression_trans_keys = [
168
+ 97, 98, 101, 105, 111, 112, 114, 115,
169
+ 48, 57, 32, 9, 13, 48, 57, 32,
170
+ 116, 9, 13, 105, 109, 101, 115, 32,
171
+ 48, 49, 50, 51, 97, 98, 99, 100,
172
+ 101, 102, 104, 109, 111, 112, 115, 117,
173
+ 119, 121, 9, 13, 52, 57, 49, 116,
174
+ 48, 57, 49, 48, 57, 49, 115, 48,
175
+ 57, 49, 115, 116, 48, 57, 116, 32,
176
+ 9, 13, 32, 100, 104, 109, 115, 119,
177
+ 121, 9, 13, 97, 121, 32, 98, 99,
178
+ 100, 101, 102, 115, 117, 9, 13, 101,
179
+ 103, 105, 110, 32, 105, 110, 9, 13,
180
+ 32, 48, 49, 50, 51, 97, 100, 104,
181
+ 105, 109, 111, 115, 119, 121, 9, 13,
182
+ 52, 57, 49, 58, 97, 112, 116, 48,
183
+ 57, 49, 58, 97, 112, 48, 57, 49,
184
+ 48, 57, 45, 49, 48, 57, 48, 57,
185
+ 48, 57, 45, 48, 57, 48, 57, 32,
186
+ 99, 100, 101, 102, 115, 117, 9, 13,
187
+ 48, 57, 48, 57, 58, 48, 57, 48,
188
+ 57, 32, 99, 100, 101, 102, 115, 117,
189
+ 9, 13, 111, 109, 112, 108, 101, 116,
190
+ 32, 101, 105, 9, 13, 32, 48, 49,
191
+ 50, 51, 97, 100, 104, 105, 109, 111,
192
+ 115, 119, 121, 9, 13, 52, 57, 49,
193
+ 58, 97, 112, 116, 48, 57, 49, 58,
194
+ 97, 112, 48, 57, 49, 48, 57, 45,
195
+ 49, 48, 57, 48, 57, 48, 57, 45,
196
+ 48, 57, 48, 57, 32, 9, 13, 48,
197
+ 57, 48, 57, 58, 48, 57, 48, 57,
198
+ 48, 57, 48, 57, 49, 48, 57, 49,
199
+ 115, 48, 57, 49, 116, 48, 57, 104,
200
+ 32, 9, 13, 32, 100, 104, 109, 115,
201
+ 119, 121, 9, 13, 97, 121, 111, 117,
202
+ 114, 105, 111, 108, 110, 108, 105, 115,
203
+ 101, 99, 111, 110, 100, 117, 116, 101,
204
+ 110, 116, 104, 101, 101, 107, 101, 97,
205
+ 49, 115, 116, 48, 57, 116, 45, 49,
206
+ 115, 48, 57, 49, 115, 48, 57, 45,
207
+ 49, 116, 48, 57, 45, 49, 115, 116,
208
+ 48, 57, 48, 57, 48, 57, 97, 112,
209
+ 109, 49, 58, 97, 112, 115, 48, 57,
210
+ 49, 116, 48, 57, 49, 115, 116, 48,
211
+ 57, 32, 46, 49, 58, 97, 112, 115,
212
+ 9, 13, 48, 57, 48, 57, 32, 9,
213
+ 13, 48, 57, 32, 46, 49, 58, 97,
214
+ 112, 116, 9, 13, 48, 57, 32, 46,
215
+ 49, 9, 13, 48, 57, 32, 45, 46,
216
+ 49, 9, 13, 48, 57, 32, 46, 49,
217
+ 9, 13, 48, 57, 32, 46, 49, 115,
218
+ 9, 13, 48, 57, 32, 46, 49, 116,
219
+ 9, 13, 48, 57, 32, 46, 49, 115,
220
+ 116, 9, 13, 48, 57, 32, 45, 46,
221
+ 49, 115, 9, 13, 48, 57, 32, 46,
222
+ 49, 115, 9, 13, 48, 57, 32, 45,
223
+ 46, 49, 116, 9, 13, 48, 57, 32,
224
+ 45, 46, 49, 115, 116, 9, 13, 48,
225
+ 57, 32, 46, 49, 58, 97, 112, 116,
226
+ 9, 13, 48, 57, 32, 46, 49, 116,
227
+ 9, 13, 48, 57, 32, 46, 49, 115,
228
+ 116, 9, 13, 48, 57, 32, 46, 49,
229
+ 58, 97, 110, 112, 9, 13, 48, 57,
230
+ 32, 46, 49, 58, 97, 112, 9, 13,
231
+ 48, 57, 32, 46, 49, 58, 97, 112,
232
+ 115, 9, 13, 48, 57, 100, 32, 46,
233
+ 49, 58, 97, 112, 114, 9, 13, 48,
234
+ 57, 32, 46, 49, 58, 97, 112, 116,
235
+ 9, 13, 48, 57, 32, 110, 116, 9,
236
+ 13, 32, 9, 13, 32, 9, 13, 48,
237
+ 57, 58, 97, 112, 48, 57, 58, 97,
238
+ 112, 48, 57, 48, 57, 45, 110, 32,
239
+ 9, 13, 32, 48, 49, 50, 51, 97,
240
+ 100, 104, 109, 111, 115, 119, 121, 9,
241
+ 13, 52, 57, 32, 46, 49, 115, 9,
242
+ 13, 48, 57, 32, 46, 49, 116, 9,
243
+ 13, 48, 57, 32, 46, 49, 110, 9,
244
+ 13, 48, 57, 32, 46, 49, 114, 9,
245
+ 13, 48, 57, 32, 110, 9, 13, 116,
246
+ 104, 101, 114, 110, 116, 32, 105, 9,
247
+ 13, 110, 103, 32, 9, 13, 117, 114,
248
+ 105, 110, 100, 105, 111, 110, 105, 115,
249
+ 104, 114, 116, 111, 112, 110, 116, 105,
250
+ 108, 48, 57, 48, 57, 49, 48, 57,
251
+ 49, 115, 48, 57, 49, 116, 48, 57,
252
+ 104, 32, 9, 13, 32, 100, 104, 109,
253
+ 115, 119, 121, 9, 13, 97, 121, 111,
254
+ 117, 114, 105, 111, 108, 110, 108, 105,
255
+ 115, 101, 99, 111, 110, 100, 117, 116,
256
+ 101, 110, 116, 104, 101, 101, 107, 101,
257
+ 97, 49, 115, 116, 48, 57, 116, 45,
258
+ 49, 115, 48, 57, 49, 115, 48, 57,
259
+ 45, 49, 116, 48, 57, 45, 49, 115,
260
+ 116, 48, 57, 48, 57, 48, 57, 97,
261
+ 112, 109, 49, 58, 97, 112, 115, 48,
262
+ 57, 49, 116, 48, 57, 49, 115, 116,
263
+ 48, 57, 32, 46, 49, 58, 97, 112,
264
+ 115, 9, 13, 48, 57, 48, 57, 32,
265
+ 9, 13, 48, 57, 32, 46, 49, 58,
266
+ 97, 112, 116, 9, 13, 48, 57, 32,
267
+ 46, 49, 9, 13, 48, 57, 32, 45,
268
+ 46, 49, 9, 13, 48, 57, 32, 46,
269
+ 49, 9, 13, 48, 57, 32, 46, 49,
270
+ 115, 9, 13, 48, 57, 32, 46, 49,
271
+ 116, 9, 13, 48, 57, 32, 46, 49,
272
+ 115, 116, 9, 13, 48, 57, 32, 45,
273
+ 46, 49, 115, 9, 13, 48, 57, 32,
274
+ 46, 49, 115, 9, 13, 48, 57, 32,
275
+ 45, 46, 49, 116, 9, 13, 48, 57,
276
+ 32, 45, 46, 49, 115, 116, 9, 13,
277
+ 48, 57, 32, 46, 49, 58, 97, 112,
278
+ 116, 9, 13, 48, 57, 32, 46, 49,
279
+ 116, 9, 13, 48, 57, 32, 46, 49,
280
+ 115, 116, 9, 13, 48, 57, 32, 46,
281
+ 49, 58, 97, 110, 112, 9, 13, 48,
282
+ 57, 32, 46, 49, 58, 97, 112, 9,
283
+ 13, 48, 57, 32, 46, 49, 58, 97,
284
+ 112, 115, 9, 13, 48, 57, 100, 32,
285
+ 46, 49, 58, 97, 112, 114, 9, 13,
286
+ 48, 57, 32, 46, 49, 58, 97, 112,
287
+ 116, 9, 13, 48, 57, 32, 110, 116,
288
+ 9, 13, 32, 9, 13, 32, 9, 13,
289
+ 48, 57, 58, 97, 112, 48, 57, 58,
290
+ 97, 112, 48, 57, 48, 57, 45, 110,
291
+ 32, 9, 13, 32, 48, 49, 50, 51,
292
+ 97, 100, 104, 109, 111, 115, 119, 121,
293
+ 9, 13, 52, 57, 32, 46, 49, 115,
294
+ 9, 13, 48, 57, 32, 46, 49, 116,
295
+ 9, 13, 48, 57, 32, 46, 49, 110,
296
+ 9, 13, 48, 57, 32, 46, 49, 114,
297
+ 9, 13, 48, 57, 32, 110, 9, 13,
298
+ 116, 104, 101, 114, 110, 116, 110, 103,
299
+ 32, 9, 13, 32, 105, 9, 13, 111,
300
+ 109, 112, 108, 101, 116, 32, 101, 105,
301
+ 9, 13, 32, 48, 49, 50, 51, 97,
302
+ 100, 104, 105, 109, 111, 115, 119, 121,
303
+ 9, 13, 52, 57, 49, 58, 97, 112,
304
+ 116, 48, 57, 49, 58, 97, 112, 48,
305
+ 57, 49, 48, 57, 45, 49, 48, 57,
306
+ 48, 57, 48, 57, 45, 48, 57, 48,
307
+ 57, 32, 98, 115, 9, 13, 48, 57,
308
+ 48, 57, 58, 48, 57, 48, 57, 32,
309
+ 98, 115, 9, 13, 101, 103, 105, 110,
310
+ 32, 105, 110, 9, 13, 32, 48, 49,
311
+ 50, 51, 97, 100, 104, 105, 109, 111,
312
+ 115, 119, 121, 9, 13, 52, 57, 49,
313
+ 58, 97, 112, 116, 48, 57, 49, 58,
314
+ 97, 112, 48, 57, 49, 48, 57, 45,
315
+ 49, 48, 57, 48, 57, 48, 57, 45,
316
+ 48, 57, 48, 57, 32, 9, 13, 48,
317
+ 57, 48, 57, 58, 48, 57, 48, 57,
318
+ 48, 57, 48, 57, 49, 48, 57, 49,
319
+ 115, 48, 57, 49, 116, 48, 57, 104,
320
+ 32, 9, 13, 32, 100, 104, 109, 115,
321
+ 119, 121, 9, 13, 97, 121, 111, 117,
322
+ 114, 105, 111, 108, 110, 108, 105, 115,
323
+ 101, 99, 111, 110, 100, 117, 116, 101,
324
+ 110, 116, 104, 101, 101, 107, 101, 97,
325
+ 49, 115, 116, 48, 57, 116, 45, 49,
326
+ 115, 48, 57, 49, 115, 48, 57, 45,
327
+ 49, 116, 48, 57, 45, 49, 115, 116,
328
+ 48, 57, 48, 57, 48, 57, 97, 112,
329
+ 109, 49, 58, 97, 112, 115, 48, 57,
330
+ 49, 116, 48, 57, 49, 115, 116, 48,
331
+ 57, 32, 46, 49, 58, 97, 112, 115,
332
+ 9, 13, 48, 57, 48, 57, 32, 9,
333
+ 13, 48, 57, 32, 46, 49, 58, 97,
334
+ 112, 116, 9, 13, 48, 57, 32, 46,
335
+ 49, 9, 13, 48, 57, 32, 45, 46,
336
+ 49, 9, 13, 48, 57, 32, 46, 49,
337
+ 9, 13, 48, 57, 32, 46, 49, 115,
338
+ 9, 13, 48, 57, 32, 46, 49, 116,
339
+ 9, 13, 48, 57, 32, 46, 49, 115,
340
+ 116, 9, 13, 48, 57, 32, 45, 46,
341
+ 49, 115, 9, 13, 48, 57, 32, 46,
342
+ 49, 115, 9, 13, 48, 57, 32, 45,
343
+ 46, 49, 116, 9, 13, 48, 57, 32,
344
+ 45, 46, 49, 115, 116, 9, 13, 48,
345
+ 57, 32, 46, 49, 58, 97, 112, 116,
346
+ 9, 13, 48, 57, 32, 46, 49, 116,
347
+ 9, 13, 48, 57, 32, 46, 49, 115,
348
+ 116, 9, 13, 48, 57, 32, 46, 49,
349
+ 58, 97, 110, 112, 9, 13, 48, 57,
350
+ 32, 46, 49, 58, 97, 112, 9, 13,
351
+ 48, 57, 32, 46, 49, 58, 97, 112,
352
+ 115, 9, 13, 48, 57, 100, 32, 46,
353
+ 49, 58, 97, 112, 114, 9, 13, 48,
354
+ 57, 32, 46, 49, 58, 97, 112, 116,
355
+ 9, 13, 48, 57, 32, 110, 116, 9,
356
+ 13, 32, 9, 13, 32, 9, 13, 48,
357
+ 57, 58, 97, 112, 48, 57, 58, 97,
358
+ 112, 48, 57, 48, 57, 45, 110, 32,
359
+ 9, 13, 32, 48, 49, 50, 51, 97,
360
+ 100, 104, 109, 111, 115, 119, 121, 9,
361
+ 13, 52, 57, 32, 46, 49, 115, 9,
362
+ 13, 48, 57, 32, 46, 49, 116, 9,
363
+ 13, 48, 57, 32, 46, 49, 110, 9,
364
+ 13, 48, 57, 32, 46, 49, 114, 9,
365
+ 13, 48, 57, 32, 110, 9, 13, 116,
366
+ 104, 101, 114, 110, 116, 110, 103, 32,
367
+ 9, 13, 32, 105, 9, 13, 116, 97,
368
+ 114, 116, 48, 57, 48, 57, 49, 48,
369
+ 57, 49, 115, 48, 57, 49, 116, 48,
370
+ 57, 104, 32, 9, 13, 32, 100, 104,
371
+ 109, 115, 119, 121, 9, 13, 97, 121,
372
+ 111, 117, 114, 105, 111, 108, 110, 108,
373
+ 105, 115, 101, 99, 111, 110, 100, 117,
374
+ 116, 101, 110, 116, 104, 101, 101, 107,
375
+ 101, 97, 49, 115, 116, 48, 57, 116,
376
+ 45, 49, 115, 48, 57, 49, 115, 48,
377
+ 57, 45, 49, 116, 48, 57, 45, 49,
378
+ 115, 116, 48, 57, 48, 57, 48, 57,
379
+ 97, 112, 109, 49, 58, 97, 112, 115,
380
+ 48, 57, 49, 116, 48, 57, 49, 115,
381
+ 116, 48, 57, 32, 46, 49, 58, 97,
382
+ 112, 115, 9, 13, 48, 57, 48, 57,
383
+ 32, 9, 13, 48, 57, 32, 46, 49,
384
+ 58, 97, 112, 116, 9, 13, 48, 57,
385
+ 32, 46, 49, 9, 13, 48, 57, 32,
386
+ 45, 46, 49, 9, 13, 48, 57, 32,
387
+ 46, 49, 9, 13, 48, 57, 32, 46,
388
+ 49, 115, 9, 13, 48, 57, 32, 46,
389
+ 49, 116, 9, 13, 48, 57, 32, 46,
390
+ 49, 115, 116, 9, 13, 48, 57, 32,
391
+ 45, 46, 49, 115, 9, 13, 48, 57,
392
+ 32, 46, 49, 115, 9, 13, 48, 57,
393
+ 32, 45, 46, 49, 116, 9, 13, 48,
394
+ 57, 32, 45, 46, 49, 115, 116, 9,
395
+ 13, 48, 57, 32, 46, 49, 58, 97,
396
+ 112, 116, 9, 13, 48, 57, 32, 46,
397
+ 49, 116, 9, 13, 48, 57, 32, 46,
398
+ 49, 115, 116, 9, 13, 48, 57, 32,
399
+ 46, 49, 58, 97, 110, 112, 9, 13,
400
+ 48, 57, 32, 46, 49, 58, 97, 112,
401
+ 9, 13, 48, 57, 32, 46, 49, 58,
402
+ 97, 112, 115, 9, 13, 48, 57, 100,
403
+ 32, 46, 49, 58, 97, 112, 114, 9,
404
+ 13, 48, 57, 32, 46, 49, 58, 97,
405
+ 112, 116, 9, 13, 48, 57, 32, 110,
406
+ 116, 9, 13, 32, 9, 13, 32, 9,
407
+ 13, 48, 57, 58, 97, 112, 48, 57,
408
+ 58, 97, 112, 48, 57, 48, 57, 45,
409
+ 110, 32, 9, 13, 32, 48, 49, 50,
410
+ 51, 97, 100, 104, 109, 111, 115, 119,
411
+ 121, 9, 13, 52, 57, 32, 46, 49,
412
+ 115, 9, 13, 48, 57, 32, 46, 49,
413
+ 116, 9, 13, 48, 57, 32, 46, 49,
414
+ 110, 9, 13, 48, 57, 32, 46, 49,
415
+ 114, 9, 13, 48, 57, 32, 110, 9,
416
+ 13, 116, 104, 101, 114, 110, 116, 32,
417
+ 105, 9, 13, 110, 103, 32, 9, 13,
418
+ 117, 114, 105, 110, 100, 105, 111, 110,
419
+ 105, 115, 104, 114, 116, 97, 111, 114,
420
+ 116, 112, 110, 116, 105, 108, 111, 117,
421
+ 114, 105, 111, 108, 110, 108, 105, 115,
422
+ 101, 99, 111, 110, 100, 117, 116, 101,
423
+ 110, 116, 104, 101, 101, 107, 101, 97,
424
+ 104, 32, 46, 49, 115, 9, 13, 48,
425
+ 57, 48, 57, 32, 9, 13, 48, 57,
426
+ 32, 46, 49, 116, 9, 13, 48, 57,
427
+ 32, 46, 49, 9, 13, 48, 57, 32,
428
+ 46, 49, 115, 9, 13, 48, 57, 32,
429
+ 46, 49, 115, 116, 9, 13, 48, 57,
430
+ 32, 46, 49, 116, 9, 13, 48, 57,
431
+ 32, 46, 49, 110, 9, 13, 48, 57,
432
+ 100, 32, 46, 49, 114, 9, 13, 48,
433
+ 57, 32, 110, 9, 13, 97, 117, 97,
434
+ 110, 118, 99, 104, 32, 9, 13, 32,
435
+ 48, 49, 50, 51, 97, 100, 104, 109,
436
+ 111, 115, 119, 121, 9, 13, 52, 57,
437
+ 116, 104, 101, 114, 101, 114, 121, 110,
438
+ 116, 99, 101, 32, 9, 13, 32, 48,
439
+ 49, 50, 51, 97, 100, 104, 109, 111,
440
+ 112, 115, 119, 121, 9, 13, 52, 57,
441
+ 101, 114, 101, 116, 116, 32, 9, 13,
442
+ 32, 9, 13, 48, 57, 58, 97, 112,
443
+ 48, 57, 58, 97, 112, 48, 57, 48,
444
+ 57, 45, 48, 57, 48, 57, 45, 48,
445
+ 57, 48, 57, 32, 98, 99, 100, 101,
446
+ 102, 115, 117, 9, 13, 48, 57, 48,
447
+ 57, 58, 48, 57, 48, 57, 48, 57,
448
+ 48, 57, 48, 57, 48, 57, 97, 112,
449
+ 109, 101, 103, 105, 110, 32, 105, 110,
450
+ 9, 13, 32, 48, 49, 50, 51, 97,
451
+ 100, 104, 105, 109, 111, 115, 119, 121,
452
+ 9, 13, 52, 57, 49, 58, 97, 112,
453
+ 116, 48, 57, 49, 58, 97, 112, 48,
454
+ 57, 49, 48, 57, 45, 49, 48, 57,
455
+ 48, 57, 48, 57, 45, 48, 57, 48,
456
+ 57, 32, 9, 13, 32, 97, 101, 105,
457
+ 111, 112, 114, 9, 13, 48, 57, 32,
458
+ 9, 13, 48, 57, 32, 116, 9, 13,
459
+ 105, 109, 101, 115, 32, 48, 49, 50,
460
+ 51, 97, 99, 100, 101, 102, 104, 109,
461
+ 111, 112, 115, 117, 119, 121, 9, 13,
462
+ 52, 57, 49, 116, 48, 57, 49, 48,
463
+ 57, 49, 115, 48, 57, 49, 115, 116,
464
+ 48, 57, 116, 32, 9, 13, 32, 100,
465
+ 104, 109, 115, 119, 121, 9, 13, 97,
466
+ 121, 111, 117, 114, 105, 111, 108, 110,
467
+ 108, 105, 115, 101, 99, 111, 110, 100,
468
+ 117, 116, 101, 110, 116, 104, 101, 101,
469
+ 107, 101, 97, 104, 32, 46, 49, 115,
470
+ 9, 13, 48, 57, 48, 57, 32, 9,
471
+ 13, 48, 57, 32, 46, 49, 116, 9,
472
+ 13, 48, 57, 32, 46, 49, 9, 13,
473
+ 48, 57, 32, 46, 49, 115, 9, 13,
474
+ 48, 57, 32, 46, 49, 115, 116, 9,
475
+ 13, 48, 57, 32, 46, 49, 116, 9,
476
+ 13, 48, 57, 32, 46, 49, 110, 9,
477
+ 13, 48, 57, 100, 32, 46, 49, 114,
478
+ 9, 13, 48, 57, 32, 110, 9, 13,
479
+ 97, 117, 97, 110, 118, 99, 104, 32,
480
+ 9, 13, 32, 48, 49, 50, 51, 97,
481
+ 100, 104, 109, 111, 115, 119, 121, 9,
482
+ 13, 52, 57, 116, 104, 101, 114, 101,
483
+ 114, 121, 110, 116, 99, 101, 32, 9,
484
+ 13, 32, 48, 49, 50, 51, 97, 100,
485
+ 104, 109, 111, 112, 115, 119, 121, 9,
486
+ 13, 52, 57, 101, 114, 101, 116, 32,
487
+ 58, 9, 13, 48, 57, 32, 9, 13,
488
+ 48, 57, 48, 57, 48, 57, 32, 58,
489
+ 9, 13, 32, 97, 101, 105, 111, 112,
490
+ 114, 9, 13, 48, 57, 116, 32, 9,
491
+ 13, 32, 9, 13, 48, 57, 58, 97,
492
+ 112, 48, 57, 58, 97, 112, 48, 57,
493
+ 48, 57, 45, 48, 57, 48, 57, 45,
494
+ 48, 57, 48, 57, 32, 99, 100, 101,
495
+ 102, 115, 117, 9, 13, 48, 57, 48,
496
+ 57, 58, 48, 57, 48, 57, 48, 57,
497
+ 48, 57, 48, 57, 48, 57, 97, 112,
498
+ 109, 97, 118, 120, 101, 99, 32, 117,
499
+ 9, 13, 32, 97, 101, 105, 111, 112,
500
+ 9, 13, 48, 57, 97, 118, 110, 110,
501
+ 32, 99, 9, 13, 116, 101, 32, 9,
502
+ 13, 117, 110, 48, 57, 48, 57, 32,
503
+ 9, 13, 49, 48, 57, 49, 115, 48,
504
+ 57, 49, 116, 48, 57, 104, 32, 9,
505
+ 13, 32, 100, 104, 109, 115, 119, 121,
506
+ 9, 13, 97, 121, 32, 115, 9, 13,
507
+ 32, 9, 13, 111, 117, 114, 105, 111,
508
+ 108, 110, 108, 105, 115, 101, 99, 111,
509
+ 110, 100, 117, 116, 101, 110, 116, 104,
510
+ 101, 101, 107, 101, 97, 49, 115, 116,
511
+ 48, 57, 116, 45, 49, 115, 48, 57,
512
+ 49, 115, 48, 57, 45, 49, 116, 48,
513
+ 57, 45, 49, 115, 116, 48, 57, 48,
514
+ 57, 48, 57, 97, 112, 109, 49, 58,
515
+ 97, 112, 115, 48, 57, 49, 116, 48,
516
+ 57, 49, 115, 116, 48, 57, 32, 46,
517
+ 49, 58, 97, 112, 115, 9, 13, 48,
518
+ 57, 48, 57, 32, 9, 13, 48, 57,
519
+ 32, 46, 49, 58, 97, 112, 116, 9,
520
+ 13, 48, 57, 32, 46, 49, 9, 13,
521
+ 48, 57, 32, 45, 46, 49, 9, 13,
522
+ 48, 57, 32, 46, 49, 9, 13, 48,
523
+ 57, 32, 46, 49, 115, 9, 13, 48,
524
+ 57, 32, 46, 49, 116, 9, 13, 48,
525
+ 57, 32, 46, 49, 115, 116, 9, 13,
526
+ 48, 57, 32, 45, 46, 49, 115, 9,
527
+ 13, 48, 57, 32, 46, 49, 115, 9,
528
+ 13, 48, 57, 32, 45, 46, 49, 116,
529
+ 9, 13, 48, 57, 32, 45, 46, 49,
530
+ 115, 116, 9, 13, 48, 57, 32, 46,
531
+ 49, 58, 97, 112, 116, 9, 13, 48,
532
+ 57, 32, 46, 49, 116, 9, 13, 48,
533
+ 57, 32, 46, 49, 115, 116, 9, 13,
534
+ 48, 57, 32, 46, 49, 58, 97, 110,
535
+ 112, 9, 13, 48, 57, 32, 46, 49,
536
+ 58, 97, 112, 9, 13, 48, 57, 32,
537
+ 46, 49, 58, 97, 112, 115, 9, 13,
538
+ 48, 57, 100, 32, 46, 49, 58, 97,
539
+ 112, 114, 9, 13, 48, 57, 32, 46,
540
+ 49, 58, 97, 112, 116, 9, 13, 48,
541
+ 57, 32, 110, 116, 9, 13, 32, 9,
542
+ 13, 32, 9, 13, 48, 57, 58, 97,
543
+ 112, 48, 57, 58, 97, 112, 48, 57,
544
+ 48, 57, 45, 110, 32, 9, 13, 32,
545
+ 48, 49, 50, 51, 97, 100, 104, 109,
546
+ 111, 115, 119, 121, 9, 13, 52, 57,
547
+ 32, 46, 49, 115, 9, 13, 48, 57,
548
+ 32, 46, 49, 116, 9, 13, 48, 57,
549
+ 32, 46, 49, 110, 9, 13, 48, 57,
550
+ 32, 46, 49, 114, 9, 13, 48, 57,
551
+ 32, 110, 9, 13, 116, 104, 101, 114,
552
+ 110, 116, 110, 103, 32, 9, 13, 32,
553
+ 105, 9, 13, 97, 118, 120, 101, 99,
554
+ 32, 117, 9, 13, 32, 97, 101, 105,
555
+ 111, 112, 9, 13, 48, 57, 97, 118,
556
+ 110, 110, 32, 99, 9, 13, 116, 101,
557
+ 32, 9, 13, 117, 110, 116, 97, 114,
558
+ 116, 32, 9, 13, 32, 115, 9, 13,
559
+ 32, 9, 13, 32, 58, 9, 13, 32,
560
+ 9, 13, 58, 115, 32, 9, 13, 32,
561
+ 115, 9, 13, 32, 9, 13, 32, 9,
562
+ 13, 32, 58, 9, 13, 32, 9, 13,
563
+ 58, 115, 32, 9, 13, 32, 115, 9,
564
+ 13, 32, 9, 13, 32, 9, 13, 32,
565
+ 9, 13, 32, 58, 9, 13, 32, 9,
566
+ 13, 32, 9, 13, 32, 115, 9, 13,
567
+ 32, 9, 13, 32, 9, 13, 32, 58,
568
+ 9, 13, 32, 9, 13, 0
569
+ ]
570
+
571
+ class << self
572
+ attr_accessor :_interval_expression_single_lengths
573
+ private :_interval_expression_single_lengths, :_interval_expression_single_lengths=
574
+ end
575
+ self._interval_expression_single_lengths = [
576
+ 0, 8, 1, 2, 1, 1, 1, 1,
577
+ 19, 2, 1, 2, 3, 1, 1, 7,
578
+ 1, 1, 8, 1, 1, 1, 1, 3,
579
+ 14, 5, 4, 1, 2, 0, 0, 1,
580
+ 0, 0, 7, 0, 1, 0, 0, 7,
581
+ 1, 1, 1, 1, 1, 1, 3, 14,
582
+ 5, 4, 1, 2, 0, 0, 1, 0,
583
+ 0, 1, 0, 1, 0, 0, 0, 0,
584
+ 1, 2, 2, 1, 1, 7, 1, 1,
585
+ 1, 1, 1, 2, 2, 1, 1, 1,
586
+ 1, 1, 1, 1, 1, 1, 1, 1,
587
+ 1, 1, 1, 1, 1, 1, 1, 1,
588
+ 3, 1, 3, 2, 3, 4, 0, 0,
589
+ 2, 1, 5, 2, 3, 7, 0, 1,
590
+ 7, 3, 4, 3, 4, 4, 5, 5,
591
+ 4, 5, 6, 7, 4, 5, 7, 6,
592
+ 7, 1, 7, 7, 3, 1, 1, 3,
593
+ 3, 0, 1, 1, 1, 13, 4, 4,
594
+ 4, 4, 2, 1, 1, 1, 1, 2,
595
+ 2, 1, 1, 1, 1, 1, 1, 1,
596
+ 1, 2, 1, 1, 1, 1, 1, 1,
597
+ 1, 1, 1, 1, 1, 1, 0, 0,
598
+ 1, 2, 2, 1, 1, 7, 1, 1,
599
+ 1, 1, 1, 2, 2, 1, 1, 1,
600
+ 1, 1, 1, 1, 1, 1, 1, 1,
601
+ 1, 1, 1, 1, 1, 1, 1, 1,
602
+ 3, 1, 3, 2, 3, 4, 0, 0,
603
+ 2, 1, 5, 2, 3, 7, 0, 1,
604
+ 7, 3, 4, 3, 4, 4, 5, 5,
605
+ 4, 5, 6, 7, 4, 5, 7, 6,
606
+ 7, 1, 7, 7, 3, 1, 1, 3,
607
+ 3, 0, 1, 1, 1, 13, 4, 4,
608
+ 4, 4, 2, 1, 1, 1, 1, 2,
609
+ 1, 1, 1, 2, 1, 1, 1, 1,
610
+ 1, 1, 3, 14, 5, 4, 1, 2,
611
+ 0, 0, 1, 0, 0, 3, 0, 1,
612
+ 0, 0, 3, 1, 1, 1, 1, 3,
613
+ 14, 5, 4, 1, 2, 0, 0, 1,
614
+ 0, 0, 1, 0, 1, 0, 0, 0,
615
+ 0, 1, 2, 2, 1, 1, 7, 1,
616
+ 1, 1, 1, 1, 2, 2, 1, 1,
617
+ 1, 1, 1, 1, 1, 1, 1, 1,
618
+ 1, 1, 1, 1, 1, 1, 1, 1,
619
+ 1, 3, 1, 3, 2, 3, 4, 0,
620
+ 0, 2, 1, 5, 2, 3, 7, 0,
621
+ 1, 7, 3, 4, 3, 4, 4, 5,
622
+ 5, 4, 5, 6, 7, 4, 5, 7,
623
+ 6, 7, 1, 7, 7, 3, 1, 1,
624
+ 3, 3, 0, 1, 1, 1, 13, 4,
625
+ 4, 4, 4, 2, 1, 1, 1, 1,
626
+ 2, 1, 1, 1, 2, 1, 1, 1,
627
+ 1, 0, 0, 1, 2, 2, 1, 1,
628
+ 7, 1, 1, 1, 1, 1, 2, 2,
629
+ 1, 1, 1, 1, 1, 1, 1, 1,
630
+ 1, 1, 1, 1, 1, 1, 1, 1,
631
+ 1, 1, 1, 3, 1, 3, 2, 3,
632
+ 4, 0, 0, 2, 1, 5, 2, 3,
633
+ 7, 0, 1, 7, 3, 4, 3, 4,
634
+ 4, 5, 5, 4, 5, 6, 7, 4,
635
+ 5, 7, 6, 7, 1, 7, 7, 3,
636
+ 1, 1, 3, 3, 0, 1, 1, 1,
637
+ 13, 4, 4, 4, 4, 2, 1, 1,
638
+ 1, 1, 2, 2, 1, 1, 1, 1,
639
+ 1, 1, 1, 1, 2, 1, 1, 1,
640
+ 1, 1, 1, 2, 1, 1, 1, 1,
641
+ 1, 1, 1, 1, 1, 1, 2, 2,
642
+ 1, 1, 1, 1, 1, 1, 1, 1,
643
+ 1, 1, 1, 1, 1, 1, 1, 1,
644
+ 1, 1, 1, 1, 4, 0, 1, 4,
645
+ 3, 4, 5, 4, 4, 1, 4, 2,
646
+ 2, 3, 1, 1, 1, 13, 1, 1,
647
+ 1, 1, 1, 1, 1, 2, 1, 1,
648
+ 1, 14, 1, 1, 2, 1, 1, 1,
649
+ 3, 3, 0, 1, 0, 0, 1, 0,
650
+ 0, 8, 0, 1, 0, 0, 0, 0,
651
+ 0, 0, 2, 1, 1, 1, 1, 1,
652
+ 3, 14, 5, 4, 1, 2, 0, 0,
653
+ 1, 0, 0, 1, 7, 1, 2, 1,
654
+ 1, 1, 1, 18, 2, 1, 2, 3,
655
+ 1, 1, 7, 1, 1, 1, 1, 1,
656
+ 2, 2, 1, 1, 1, 1, 1, 1,
657
+ 1, 1, 1, 1, 1, 1, 1, 1,
658
+ 1, 1, 1, 1, 1, 1, 4, 0,
659
+ 1, 4, 3, 4, 5, 4, 4, 1,
660
+ 4, 2, 2, 3, 1, 1, 1, 13,
661
+ 1, 1, 1, 1, 1, 1, 1, 2,
662
+ 1, 1, 1, 14, 1, 1, 2, 2,
663
+ 1, 0, 0, 2, 7, 1, 1, 1,
664
+ 3, 3, 0, 1, 0, 0, 1, 0,
665
+ 0, 7, 0, 1, 0, 0, 0, 0,
666
+ 0, 0, 2, 1, 3, 1, 1, 2,
667
+ 6, 2, 1, 1, 2, 1, 1, 1,
668
+ 1, 1, 0, 0, 1, 1, 2, 2,
669
+ 1, 1, 7, 1, 1, 2, 1, 1,
670
+ 1, 1, 2, 2, 1, 1, 1, 1,
671
+ 1, 1, 1, 1, 1, 1, 1, 1,
672
+ 1, 1, 1, 1, 1, 1, 1, 3,
673
+ 1, 3, 2, 3, 4, 0, 0, 2,
674
+ 1, 5, 2, 3, 7, 0, 1, 7,
675
+ 3, 4, 3, 4, 4, 5, 5, 4,
676
+ 5, 6, 7, 4, 5, 7, 6, 7,
677
+ 1, 7, 7, 3, 1, 1, 3, 3,
678
+ 0, 1, 1, 1, 13, 4, 4, 4,
679
+ 4, 2, 1, 1, 1, 1, 2, 1,
680
+ 1, 1, 2, 3, 1, 1, 2, 6,
681
+ 2, 1, 1, 2, 1, 1, 1, 1,
682
+ 1, 1, 1, 1, 1, 1, 2, 1,
683
+ 2, 1, 1, 0, 1, 0, 1, 2,
684
+ 1, 1, 2, 1, 1, 0, 1, 0,
685
+ 1, 2, 1, 1, 1, 2, 1, 1,
686
+ 2, 1, 1, 2, 1
687
+ ]
688
+
689
+ class << self
690
+ attr_accessor :_interval_expression_range_lengths
691
+ private :_interval_expression_range_lengths, :_interval_expression_range_lengths=
692
+ end
693
+ self._interval_expression_range_lengths = [
694
+ 0, 1, 2, 1, 0, 0, 0, 0,
695
+ 2, 1, 1, 1, 1, 0, 1, 1,
696
+ 0, 0, 1, 0, 0, 0, 0, 1,
697
+ 2, 1, 1, 1, 1, 1, 1, 0,
698
+ 1, 1, 2, 1, 0, 1, 1, 1,
699
+ 0, 0, 0, 0, 0, 0, 1, 2,
700
+ 1, 1, 1, 1, 1, 1, 0, 1,
701
+ 1, 2, 1, 0, 1, 1, 1, 1,
702
+ 1, 1, 1, 0, 1, 1, 0, 0,
703
+ 0, 0, 0, 0, 0, 0, 0, 0,
704
+ 0, 0, 0, 0, 0, 0, 0, 0,
705
+ 0, 0, 0, 0, 0, 0, 0, 0,
706
+ 1, 0, 1, 1, 1, 1, 1, 1,
707
+ 0, 0, 1, 1, 1, 2, 1, 2,
708
+ 2, 2, 2, 2, 2, 2, 2, 2,
709
+ 2, 2, 2, 2, 2, 2, 2, 2,
710
+ 2, 0, 2, 2, 1, 1, 2, 1,
711
+ 1, 1, 0, 0, 1, 2, 2, 2,
712
+ 2, 2, 1, 0, 0, 0, 0, 0,
713
+ 1, 0, 0, 1, 0, 0, 0, 0,
714
+ 0, 0, 0, 0, 0, 0, 0, 0,
715
+ 0, 0, 0, 0, 0, 0, 1, 1,
716
+ 1, 1, 1, 0, 1, 1, 0, 0,
717
+ 0, 0, 0, 0, 0, 0, 0, 0,
718
+ 0, 0, 0, 0, 0, 0, 0, 0,
719
+ 0, 0, 0, 0, 0, 0, 0, 0,
720
+ 1, 0, 1, 1, 1, 1, 1, 1,
721
+ 0, 0, 1, 1, 1, 2, 1, 2,
722
+ 2, 2, 2, 2, 2, 2, 2, 2,
723
+ 2, 2, 2, 2, 2, 2, 2, 2,
724
+ 2, 0, 2, 2, 1, 1, 2, 1,
725
+ 1, 1, 0, 0, 1, 2, 2, 2,
726
+ 2, 2, 1, 0, 0, 0, 0, 0,
727
+ 0, 0, 1, 1, 0, 0, 0, 0,
728
+ 0, 0, 1, 2, 1, 1, 1, 1,
729
+ 1, 1, 0, 1, 1, 2, 1, 0,
730
+ 1, 1, 1, 0, 0, 0, 0, 1,
731
+ 2, 1, 1, 1, 1, 1, 1, 0,
732
+ 1, 1, 2, 1, 0, 1, 1, 1,
733
+ 1, 1, 1, 1, 0, 1, 1, 0,
734
+ 0, 0, 0, 0, 0, 0, 0, 0,
735
+ 0, 0, 0, 0, 0, 0, 0, 0,
736
+ 0, 0, 0, 0, 0, 0, 0, 0,
737
+ 0, 1, 0, 1, 1, 1, 1, 1,
738
+ 1, 0, 0, 1, 1, 1, 2, 1,
739
+ 2, 2, 2, 2, 2, 2, 2, 2,
740
+ 2, 2, 2, 2, 2, 2, 2, 2,
741
+ 2, 2, 0, 2, 2, 1, 1, 2,
742
+ 1, 1, 1, 0, 0, 1, 2, 2,
743
+ 2, 2, 2, 1, 0, 0, 0, 0,
744
+ 0, 0, 0, 1, 1, 0, 0, 0,
745
+ 0, 1, 1, 1, 1, 1, 0, 1,
746
+ 1, 0, 0, 0, 0, 0, 0, 0,
747
+ 0, 0, 0, 0, 0, 0, 0, 0,
748
+ 0, 0, 0, 0, 0, 0, 0, 0,
749
+ 0, 0, 0, 1, 0, 1, 1, 1,
750
+ 1, 1, 1, 0, 0, 1, 1, 1,
751
+ 2, 1, 2, 2, 2, 2, 2, 2,
752
+ 2, 2, 2, 2, 2, 2, 2, 2,
753
+ 2, 2, 2, 2, 0, 2, 2, 1,
754
+ 1, 2, 1, 1, 1, 0, 0, 1,
755
+ 2, 2, 2, 2, 2, 1, 0, 0,
756
+ 0, 0, 0, 1, 0, 0, 1, 0,
757
+ 0, 0, 0, 0, 0, 0, 0, 0,
758
+ 0, 0, 0, 0, 0, 0, 0, 0,
759
+ 0, 0, 0, 0, 0, 0, 0, 0,
760
+ 0, 0, 0, 0, 0, 0, 0, 0,
761
+ 0, 0, 0, 0, 0, 0, 0, 0,
762
+ 0, 0, 0, 0, 2, 1, 2, 2,
763
+ 2, 2, 2, 2, 2, 0, 2, 1,
764
+ 0, 0, 0, 0, 1, 2, 0, 0,
765
+ 0, 0, 0, 0, 0, 0, 0, 0,
766
+ 1, 2, 0, 0, 0, 0, 1, 2,
767
+ 1, 1, 1, 0, 1, 1, 0, 1,
768
+ 1, 2, 1, 0, 1, 1, 1, 1,
769
+ 1, 1, 0, 0, 0, 0, 0, 0,
770
+ 1, 2, 1, 1, 1, 1, 1, 1,
771
+ 0, 1, 1, 1, 2, 2, 1, 0,
772
+ 0, 0, 0, 2, 1, 1, 1, 1,
773
+ 0, 1, 1, 0, 0, 0, 0, 0,
774
+ 0, 0, 0, 0, 0, 0, 0, 0,
775
+ 0, 0, 0, 0, 0, 0, 0, 0,
776
+ 0, 0, 0, 0, 0, 0, 2, 1,
777
+ 2, 2, 2, 2, 2, 2, 2, 0,
778
+ 2, 1, 0, 0, 0, 0, 1, 2,
779
+ 0, 0, 0, 0, 0, 0, 0, 0,
780
+ 0, 0, 1, 2, 0, 0, 0, 2,
781
+ 2, 1, 1, 1, 2, 0, 1, 2,
782
+ 1, 1, 1, 0, 1, 1, 0, 1,
783
+ 1, 2, 1, 0, 1, 1, 1, 1,
784
+ 1, 1, 0, 0, 0, 0, 0, 1,
785
+ 2, 0, 0, 0, 1, 0, 0, 1,
786
+ 0, 0, 1, 1, 1, 1, 1, 1,
787
+ 0, 1, 1, 0, 0, 1, 1, 0,
788
+ 0, 0, 0, 0, 0, 0, 0, 0,
789
+ 0, 0, 0, 0, 0, 0, 0, 0,
790
+ 0, 0, 0, 0, 0, 0, 0, 1,
791
+ 0, 1, 1, 1, 1, 1, 1, 0,
792
+ 0, 1, 1, 1, 2, 1, 2, 2,
793
+ 2, 2, 2, 2, 2, 2, 2, 2,
794
+ 2, 2, 2, 2, 2, 2, 2, 2,
795
+ 0, 2, 2, 1, 1, 2, 1, 1,
796
+ 1, 0, 0, 1, 2, 2, 2, 2,
797
+ 2, 1, 0, 0, 0, 0, 0, 0,
798
+ 0, 1, 1, 0, 0, 0, 1, 2,
799
+ 0, 0, 0, 1, 0, 0, 1, 0,
800
+ 0, 0, 0, 0, 0, 1, 1, 1,
801
+ 1, 1, 0, 0, 0, 0, 1, 1,
802
+ 1, 1, 1, 1, 0, 0, 0, 0,
803
+ 1, 1, 1, 1, 1, 1, 1, 1,
804
+ 1, 1, 1, 1, 1
805
+ ]
806
+
807
+ class << self
808
+ attr_accessor :_interval_expression_index_offsets
809
+ private :_interval_expression_index_offsets, :_interval_expression_index_offsets=
810
+ end
811
+ self._interval_expression_index_offsets = [
812
+ 0, 0, 10, 14, 18, 20, 22, 24,
813
+ 26, 48, 52, 55, 59, 64, 66, 69,
814
+ 78, 80, 82, 92, 94, 96, 98, 100,
815
+ 105, 122, 129, 135, 138, 142, 144, 146,
816
+ 148, 150, 152, 162, 164, 166, 168, 170,
817
+ 179, 181, 183, 185, 187, 189, 191, 196,
818
+ 213, 220, 226, 229, 233, 235, 237, 239,
819
+ 241, 243, 247, 249, 251, 253, 255, 257,
820
+ 259, 262, 266, 270, 272, 275, 284, 286,
821
+ 288, 290, 292, 294, 297, 300, 302, 304,
822
+ 306, 308, 310, 312, 314, 316, 318, 320,
823
+ 322, 324, 326, 328, 330, 332, 334, 336,
824
+ 338, 343, 345, 350, 354, 359, 365, 367,
825
+ 369, 372, 374, 381, 385, 390, 400, 402,
826
+ 406, 416, 422, 429, 435, 442, 449, 457,
827
+ 465, 472, 480, 489, 499, 506, 514, 524,
828
+ 533, 543, 545, 555, 565, 570, 573, 577,
829
+ 582, 587, 589, 591, 593, 596, 612, 619,
830
+ 626, 633, 640, 644, 646, 648, 650, 652,
831
+ 655, 659, 661, 663, 666, 668, 670, 672,
832
+ 674, 676, 679, 681, 683, 685, 687, 689,
833
+ 691, 693, 695, 697, 699, 701, 703, 705,
834
+ 707, 710, 714, 718, 720, 723, 732, 734,
835
+ 736, 738, 740, 742, 745, 748, 750, 752,
836
+ 754, 756, 758, 760, 762, 764, 766, 768,
837
+ 770, 772, 774, 776, 778, 780, 782, 784,
838
+ 786, 791, 793, 798, 802, 807, 813, 815,
839
+ 817, 820, 822, 829, 833, 838, 848, 850,
840
+ 854, 864, 870, 877, 883, 890, 897, 905,
841
+ 913, 920, 928, 937, 947, 954, 962, 972,
842
+ 981, 991, 993, 1003, 1013, 1018, 1021, 1025,
843
+ 1030, 1035, 1037, 1039, 1041, 1044, 1060, 1067,
844
+ 1074, 1081, 1088, 1092, 1094, 1096, 1098, 1100,
845
+ 1103, 1105, 1107, 1110, 1114, 1116, 1118, 1120,
846
+ 1122, 1124, 1126, 1131, 1148, 1155, 1161, 1164,
847
+ 1168, 1170, 1172, 1174, 1176, 1178, 1184, 1186,
848
+ 1188, 1190, 1192, 1197, 1199, 1201, 1203, 1205,
849
+ 1210, 1227, 1234, 1240, 1243, 1247, 1249, 1251,
850
+ 1253, 1255, 1257, 1261, 1263, 1265, 1267, 1269,
851
+ 1271, 1273, 1276, 1280, 1284, 1286, 1289, 1298,
852
+ 1300, 1302, 1304, 1306, 1308, 1311, 1314, 1316,
853
+ 1318, 1320, 1322, 1324, 1326, 1328, 1330, 1332,
854
+ 1334, 1336, 1338, 1340, 1342, 1344, 1346, 1348,
855
+ 1350, 1352, 1357, 1359, 1364, 1368, 1373, 1379,
856
+ 1381, 1383, 1386, 1388, 1395, 1399, 1404, 1414,
857
+ 1416, 1420, 1430, 1436, 1443, 1449, 1456, 1463,
858
+ 1471, 1479, 1486, 1494, 1503, 1513, 1520, 1528,
859
+ 1538, 1547, 1557, 1559, 1569, 1579, 1584, 1587,
860
+ 1591, 1596, 1601, 1603, 1605, 1607, 1610, 1626,
861
+ 1633, 1640, 1647, 1654, 1658, 1660, 1662, 1664,
862
+ 1666, 1669, 1671, 1673, 1676, 1680, 1682, 1684,
863
+ 1686, 1688, 1690, 1692, 1695, 1699, 1703, 1705,
864
+ 1708, 1717, 1719, 1721, 1723, 1725, 1727, 1730,
865
+ 1733, 1735, 1737, 1739, 1741, 1743, 1745, 1747,
866
+ 1749, 1751, 1753, 1755, 1757, 1759, 1761, 1763,
867
+ 1765, 1767, 1769, 1771, 1776, 1778, 1783, 1787,
868
+ 1792, 1798, 1800, 1802, 1805, 1807, 1814, 1818,
869
+ 1823, 1833, 1835, 1839, 1849, 1855, 1862, 1868,
870
+ 1875, 1882, 1890, 1898, 1905, 1913, 1922, 1932,
871
+ 1939, 1947, 1957, 1966, 1976, 1978, 1988, 1998,
872
+ 2003, 2006, 2010, 2015, 2020, 2022, 2024, 2026,
873
+ 2029, 2045, 2052, 2059, 2066, 2073, 2077, 2079,
874
+ 2081, 2083, 2085, 2088, 2092, 2094, 2096, 2099,
875
+ 2101, 2103, 2105, 2107, 2109, 2112, 2114, 2116,
876
+ 2118, 2120, 2122, 2124, 2127, 2129, 2131, 2133,
877
+ 2135, 2137, 2139, 2141, 2143, 2145, 2147, 2150,
878
+ 2153, 2155, 2157, 2159, 2161, 2163, 2165, 2167,
879
+ 2169, 2171, 2173, 2175, 2177, 2179, 2181, 2183,
880
+ 2185, 2187, 2189, 2191, 2193, 2200, 2202, 2206,
881
+ 2213, 2219, 2226, 2234, 2241, 2248, 2250, 2257,
882
+ 2261, 2264, 2268, 2270, 2272, 2275, 2291, 2293,
883
+ 2295, 2297, 2299, 2301, 2303, 2305, 2308, 2310,
884
+ 2312, 2315, 2332, 2334, 2336, 2339, 2341, 2344,
885
+ 2348, 2353, 2358, 2360, 2362, 2364, 2366, 2368,
886
+ 2370, 2372, 2383, 2385, 2387, 2389, 2391, 2393,
887
+ 2395, 2397, 2399, 2402, 2404, 2406, 2408, 2410,
888
+ 2412, 2417, 2434, 2441, 2447, 2450, 2454, 2456,
889
+ 2458, 2460, 2462, 2464, 2467, 2477, 2481, 2485,
890
+ 2487, 2489, 2491, 2493, 2514, 2518, 2521, 2525,
891
+ 2530, 2532, 2535, 2544, 2546, 2548, 2550, 2552,
892
+ 2554, 2557, 2560, 2562, 2564, 2566, 2568, 2570,
893
+ 2572, 2574, 2576, 2578, 2580, 2582, 2584, 2586,
894
+ 2588, 2590, 2592, 2594, 2596, 2598, 2600, 2607,
895
+ 2609, 2613, 2620, 2626, 2633, 2641, 2648, 2655,
896
+ 2657, 2664, 2668, 2671, 2675, 2677, 2679, 2682,
897
+ 2698, 2700, 2702, 2704, 2706, 2708, 2710, 2712,
898
+ 2715, 2717, 2719, 2722, 2739, 2741, 2743, 2746,
899
+ 2751, 2755, 2757, 2759, 2763, 2773, 2775, 2778,
900
+ 2782, 2787, 2792, 2794, 2796, 2798, 2800, 2802,
901
+ 2804, 2806, 2816, 2818, 2820, 2822, 2824, 2826,
902
+ 2828, 2830, 2832, 2835, 2837, 2841, 2843, 2845,
903
+ 2849, 2858, 2861, 2863, 2865, 2869, 2871, 2873,
904
+ 2876, 2878, 2880, 2882, 2884, 2887, 2890, 2894,
905
+ 2898, 2900, 2903, 2912, 2914, 2916, 2920, 2923,
906
+ 2925, 2927, 2929, 2932, 2935, 2937, 2939, 2941,
907
+ 2943, 2945, 2947, 2949, 2951, 2953, 2955, 2957,
908
+ 2959, 2961, 2963, 2965, 2967, 2969, 2971, 2973,
909
+ 2978, 2980, 2985, 2989, 2994, 3000, 3002, 3004,
910
+ 3007, 3009, 3016, 3020, 3025, 3035, 3037, 3041,
911
+ 3051, 3057, 3064, 3070, 3077, 3084, 3092, 3100,
912
+ 3107, 3115, 3124, 3134, 3141, 3149, 3159, 3168,
913
+ 3178, 3180, 3190, 3200, 3205, 3208, 3212, 3217,
914
+ 3222, 3224, 3226, 3228, 3231, 3247, 3254, 3261,
915
+ 3268, 3275, 3279, 3281, 3283, 3285, 3287, 3290,
916
+ 3292, 3294, 3297, 3301, 3305, 3307, 3309, 3313,
917
+ 3322, 3325, 3327, 3329, 3333, 3335, 3337, 3340,
918
+ 3342, 3344, 3346, 3348, 3350, 3352, 3355, 3359,
919
+ 3362, 3366, 3369, 3371, 3372, 3374, 3375, 3378,
920
+ 3382, 3385, 3388, 3392, 3395, 3397, 3398, 3400,
921
+ 3401, 3404, 3408, 3411, 3414, 3417, 3421, 3424,
922
+ 3427, 3431, 3434, 3437, 3441
923
+ ]
924
+
925
+ class << self
926
+ attr_accessor :_interval_expression_trans_targs
927
+ private :_interval_expression_trans_targs, :_interval_expression_trans_targs=
928
+ end
929
+ self._interval_expression_trans_targs = [
930
+ 581, 604, 835, 841, 842, 578, 847, 849,
931
+ 2, 0, 3, 3, 2, 0, 3, 4,
932
+ 3, 0, 5, 0, 6, 0, 7, 0,
933
+ 853, 0, 8, 9, 548, 556, 558, 559,
934
+ 19, 268, 560, 561, 508, 523, 526, 573,
935
+ 578, 580, 519, 542, 545, 8, 551, 0,
936
+ 11, 547, 10, 0, 11, 10, 0, 12,
937
+ 13, 9, 0, 12, 13, 547, 9, 0,
938
+ 14, 0, 15, 15, 0, 15, 16, 523,
939
+ 526, 531, 542, 545, 15, 0, 17, 0,
940
+ 854, 0, 18, 19, 268, 503, 506, 508,
941
+ 514, 519, 18, 0, 20, 0, 21, 0,
942
+ 22, 0, 23, 0, 24, 264, 267, 24,
943
+ 0, 24, 25, 221, 238, 242, 244, 182,
944
+ 184, 251, 187, 263, 192, 203, 206, 24,
945
+ 243, 0, 218, 214, 217, 217, 179, 26,
946
+ 0, 211, 214, 217, 217, 27, 0, 210,
947
+ 28, 0, 29, 177, 176, 0, 30, 0,
948
+ 31, 0, 32, 0, 33, 0, 855, 0,
949
+ 34, 40, 156, 159, 161, 167, 170, 34,
950
+ 35, 0, 36, 0, 37, 0, 38, 0,
951
+ 856, 0, 39, 40, 156, 159, 161, 167,
952
+ 170, 39, 0, 41, 0, 42, 0, 43,
953
+ 0, 44, 0, 45, 0, 46, 0, 47,
954
+ 152, 153, 47, 0, 47, 48, 109, 126,
955
+ 130, 132, 70, 72, 139, 75, 151, 80,
956
+ 91, 94, 47, 131, 0, 106, 102, 105,
957
+ 105, 67, 49, 0, 99, 102, 105, 105,
958
+ 50, 0, 98, 51, 0, 52, 65, 64,
959
+ 0, 53, 0, 54, 0, 55, 0, 56,
960
+ 0, 857, 0, 57, 57, 58, 0, 59,
961
+ 0, 60, 0, 61, 0, 858, 0, 63,
962
+ 0, 859, 0, 65, 64, 0, 96, 97,
963
+ 66, 0, 65, 67, 64, 0, 68, 0,
964
+ 69, 69, 0, 69, 70, 72, 75, 80,
965
+ 91, 94, 69, 0, 71, 0, 860, 0,
966
+ 73, 0, 74, 0, 860, 0, 76, 88,
967
+ 0, 77, 85, 0, 78, 0, 79, 0,
968
+ 80, 0, 81, 0, 82, 0, 83, 0,
969
+ 84, 0, 860, 0, 86, 0, 87, 0,
970
+ 860, 0, 89, 0, 90, 0, 860, 0,
971
+ 92, 0, 93, 0, 860, 0, 95, 0,
972
+ 74, 0, 96, 97, 67, 66, 0, 68,
973
+ 0, 52, 96, 97, 66, 0, 101, 97,
974
+ 100, 0, 52, 65, 67, 64, 0, 52,
975
+ 96, 97, 67, 66, 0, 103, 0, 104,
976
+ 0, 105, 105, 0, 859, 0, 108, 102,
977
+ 105, 105, 97, 107, 0, 98, 67, 51,
978
+ 0, 101, 97, 67, 100, 0, 69, 110,
979
+ 123, 102, 105, 105, 97, 69, 112, 0,
980
+ 111, 0, 69, 69, 111, 0, 69, 110,
981
+ 120, 102, 105, 105, 67, 69, 113, 0,
982
+ 69, 110, 119, 69, 114, 0, 69, 52,
983
+ 110, 116, 69, 115, 0, 69, 110, 116,
984
+ 69, 115, 0, 69, 110, 118, 97, 69,
985
+ 117, 0, 69, 110, 116, 67, 69, 115,
986
+ 0, 69, 110, 118, 97, 67, 69, 117,
987
+ 0, 69, 52, 110, 118, 97, 69, 117,
988
+ 0, 69, 110, 122, 97, 69, 121, 0,
989
+ 69, 52, 110, 116, 67, 69, 115, 0,
990
+ 69, 52, 110, 118, 97, 67, 69, 117,
991
+ 0, 69, 110, 125, 102, 105, 105, 67,
992
+ 69, 124, 0, 69, 110, 119, 67, 69,
993
+ 114, 0, 69, 110, 122, 97, 67, 69,
994
+ 121, 0, 69, 110, 128, 102, 105, 129,
995
+ 105, 69, 127, 0, 69, 110, 120, 102,
996
+ 105, 105, 69, 113, 0, 69, 110, 125,
997
+ 102, 105, 105, 97, 69, 124, 0, 68,
998
+ 0, 69, 110, 128, 102, 105, 105, 129,
999
+ 69, 127, 0, 69, 110, 128, 102, 105,
1000
+ 105, 67, 69, 127, 0, 69, 68, 133,
1001
+ 69, 0, 134, 134, 0, 134, 134, 135,
1002
+ 0, 102, 105, 105, 136, 0, 102, 105,
1003
+ 105, 137, 0, 138, 0, 52, 0, 140,
1004
+ 0, 141, 141, 0, 141, 66, 142, 144,
1005
+ 145, 146, 70, 72, 75, 147, 80, 91,
1006
+ 94, 141, 117, 0, 69, 110, 143, 97,
1007
+ 69, 117, 0, 69, 110, 118, 67, 69,
1008
+ 117, 0, 69, 110, 116, 129, 69, 115,
1009
+ 0, 69, 110, 116, 129, 69, 115, 0,
1010
+ 69, 68, 69, 0, 148, 0, 149, 0,
1011
+ 150, 0, 68, 0, 133, 148, 0, 47,
1012
+ 153, 47, 0, 154, 0, 155, 0, 47,
1013
+ 47, 0, 157, 0, 158, 0, 153, 0,
1014
+ 160, 0, 152, 0, 162, 166, 0, 163,
1015
+ 0, 164, 0, 165, 0, 152, 0, 155,
1016
+ 0, 168, 0, 169, 0, 152, 0, 171,
1017
+ 0, 172, 0, 173, 0, 155, 0, 175,
1018
+ 0, 862, 0, 177, 176, 0, 208, 209,
1019
+ 178, 0, 177, 179, 176, 0, 180, 0,
1020
+ 181, 181, 0, 181, 182, 184, 187, 192,
1021
+ 203, 206, 181, 0, 183, 0, 863, 0,
1022
+ 185, 0, 186, 0, 863, 0, 188, 200,
1023
+ 0, 189, 197, 0, 190, 0, 191, 0,
1024
+ 192, 0, 193, 0, 194, 0, 195, 0,
1025
+ 196, 0, 863, 0, 198, 0, 199, 0,
1026
+ 863, 0, 201, 0, 202, 0, 863, 0,
1027
+ 204, 0, 205, 0, 863, 0, 207, 0,
1028
+ 186, 0, 208, 209, 179, 178, 0, 180,
1029
+ 0, 29, 208, 209, 178, 0, 213, 209,
1030
+ 212, 0, 29, 177, 179, 176, 0, 29,
1031
+ 208, 209, 179, 178, 0, 215, 0, 216,
1032
+ 0, 217, 217, 0, 862, 0, 220, 214,
1033
+ 217, 217, 209, 219, 0, 210, 179, 28,
1034
+ 0, 213, 209, 179, 212, 0, 181, 222,
1035
+ 235, 214, 217, 217, 209, 181, 224, 0,
1036
+ 223, 0, 181, 181, 223, 0, 181, 222,
1037
+ 232, 214, 217, 217, 179, 181, 225, 0,
1038
+ 181, 222, 231, 181, 226, 0, 181, 29,
1039
+ 222, 228, 181, 227, 0, 181, 222, 228,
1040
+ 181, 227, 0, 181, 222, 230, 209, 181,
1041
+ 229, 0, 181, 222, 228, 179, 181, 227,
1042
+ 0, 181, 222, 230, 209, 179, 181, 229,
1043
+ 0, 181, 29, 222, 230, 209, 181, 229,
1044
+ 0, 181, 222, 234, 209, 181, 233, 0,
1045
+ 181, 29, 222, 228, 179, 181, 227, 0,
1046
+ 181, 29, 222, 230, 209, 179, 181, 229,
1047
+ 0, 181, 222, 237, 214, 217, 217, 179,
1048
+ 181, 236, 0, 181, 222, 231, 179, 181,
1049
+ 226, 0, 181, 222, 234, 209, 179, 181,
1050
+ 233, 0, 181, 222, 240, 214, 217, 241,
1051
+ 217, 181, 239, 0, 181, 222, 232, 214,
1052
+ 217, 217, 181, 225, 0, 181, 222, 237,
1053
+ 214, 217, 217, 209, 181, 236, 0, 180,
1054
+ 0, 181, 222, 240, 214, 217, 217, 241,
1055
+ 181, 239, 0, 181, 222, 240, 214, 217,
1056
+ 217, 179, 181, 239, 0, 181, 180, 245,
1057
+ 181, 0, 246, 246, 0, 246, 246, 247,
1058
+ 0, 214, 217, 217, 248, 0, 214, 217,
1059
+ 217, 249, 0, 250, 0, 29, 0, 252,
1060
+ 0, 253, 253, 0, 253, 178, 254, 256,
1061
+ 257, 258, 182, 184, 187, 259, 192, 203,
1062
+ 206, 253, 229, 0, 181, 222, 255, 209,
1063
+ 181, 229, 0, 181, 222, 230, 179, 181,
1064
+ 229, 0, 181, 222, 228, 241, 181, 227,
1065
+ 0, 181, 222, 228, 241, 181, 227, 0,
1066
+ 181, 180, 181, 0, 260, 0, 261, 0,
1067
+ 262, 0, 180, 0, 245, 260, 0, 265,
1068
+ 0, 266, 0, 24, 24, 0, 24, 264,
1069
+ 24, 0, 269, 0, 270, 0, 271, 0,
1070
+ 272, 0, 273, 0, 274, 0, 275, 499,
1071
+ 500, 275, 0, 275, 276, 456, 473, 477,
1072
+ 479, 417, 419, 486, 422, 498, 427, 438,
1073
+ 441, 275, 478, 0, 453, 449, 452, 452,
1074
+ 414, 277, 0, 446, 449, 452, 452, 278,
1075
+ 0, 445, 279, 0, 280, 412, 411, 0,
1076
+ 281, 0, 282, 0, 283, 0, 284, 0,
1077
+ 865, 0, 285, 291, 405, 285, 286, 0,
1078
+ 287, 0, 288, 0, 289, 0, 866, 0,
1079
+ 290, 291, 405, 290, 0, 292, 0, 293,
1080
+ 0, 294, 0, 295, 0, 296, 401, 404,
1081
+ 296, 0, 296, 297, 358, 375, 379, 381,
1082
+ 319, 321, 388, 324, 400, 329, 340, 343,
1083
+ 296, 380, 0, 355, 351, 354, 354, 316,
1084
+ 298, 0, 348, 351, 354, 354, 299, 0,
1085
+ 347, 300, 0, 301, 314, 313, 0, 302,
1086
+ 0, 303, 0, 304, 0, 305, 0, 867,
1087
+ 0, 306, 306, 307, 0, 308, 0, 309,
1088
+ 0, 310, 0, 868, 0, 312, 0, 869,
1089
+ 0, 314, 313, 0, 345, 346, 315, 0,
1090
+ 314, 316, 313, 0, 317, 0, 318, 318,
1091
+ 0, 318, 319, 321, 324, 329, 340, 343,
1092
+ 318, 0, 320, 0, 870, 0, 322, 0,
1093
+ 323, 0, 870, 0, 325, 337, 0, 326,
1094
+ 334, 0, 327, 0, 328, 0, 329, 0,
1095
+ 330, 0, 331, 0, 332, 0, 333, 0,
1096
+ 870, 0, 335, 0, 336, 0, 870, 0,
1097
+ 338, 0, 339, 0, 870, 0, 341, 0,
1098
+ 342, 0, 870, 0, 344, 0, 323, 0,
1099
+ 345, 346, 316, 315, 0, 317, 0, 301,
1100
+ 345, 346, 315, 0, 350, 346, 349, 0,
1101
+ 301, 314, 316, 313, 0, 301, 345, 346,
1102
+ 316, 315, 0, 352, 0, 353, 0, 354,
1103
+ 354, 0, 869, 0, 357, 351, 354, 354,
1104
+ 346, 356, 0, 347, 316, 300, 0, 350,
1105
+ 346, 316, 349, 0, 318, 359, 372, 351,
1106
+ 354, 354, 346, 318, 361, 0, 360, 0,
1107
+ 318, 318, 360, 0, 318, 359, 369, 351,
1108
+ 354, 354, 316, 318, 362, 0, 318, 359,
1109
+ 368, 318, 363, 0, 318, 301, 359, 365,
1110
+ 318, 364, 0, 318, 359, 365, 318, 364,
1111
+ 0, 318, 359, 367, 346, 318, 366, 0,
1112
+ 318, 359, 365, 316, 318, 364, 0, 318,
1113
+ 359, 367, 346, 316, 318, 366, 0, 318,
1114
+ 301, 359, 367, 346, 318, 366, 0, 318,
1115
+ 359, 371, 346, 318, 370, 0, 318, 301,
1116
+ 359, 365, 316, 318, 364, 0, 318, 301,
1117
+ 359, 367, 346, 316, 318, 366, 0, 318,
1118
+ 359, 374, 351, 354, 354, 316, 318, 373,
1119
+ 0, 318, 359, 368, 316, 318, 363, 0,
1120
+ 318, 359, 371, 346, 316, 318, 370, 0,
1121
+ 318, 359, 377, 351, 354, 378, 354, 318,
1122
+ 376, 0, 318, 359, 369, 351, 354, 354,
1123
+ 318, 362, 0, 318, 359, 374, 351, 354,
1124
+ 354, 346, 318, 373, 0, 317, 0, 318,
1125
+ 359, 377, 351, 354, 354, 378, 318, 376,
1126
+ 0, 318, 359, 377, 351, 354, 354, 316,
1127
+ 318, 376, 0, 318, 317, 382, 318, 0,
1128
+ 383, 383, 0, 383, 383, 384, 0, 351,
1129
+ 354, 354, 385, 0, 351, 354, 354, 386,
1130
+ 0, 387, 0, 301, 0, 389, 0, 390,
1131
+ 390, 0, 390, 315, 391, 393, 394, 395,
1132
+ 319, 321, 324, 396, 329, 340, 343, 390,
1133
+ 366, 0, 318, 359, 392, 346, 318, 366,
1134
+ 0, 318, 359, 367, 316, 318, 366, 0,
1135
+ 318, 359, 365, 378, 318, 364, 0, 318,
1136
+ 359, 365, 378, 318, 364, 0, 318, 317,
1137
+ 318, 0, 397, 0, 398, 0, 399, 0,
1138
+ 317, 0, 382, 397, 0, 402, 0, 403,
1139
+ 0, 296, 296, 0, 296, 401, 296, 0,
1140
+ 406, 0, 407, 0, 408, 0, 404, 0,
1141
+ 410, 0, 872, 0, 412, 411, 0, 443,
1142
+ 444, 413, 0, 412, 414, 411, 0, 415,
1143
+ 0, 416, 416, 0, 416, 417, 419, 422,
1144
+ 427, 438, 441, 416, 0, 418, 0, 873,
1145
+ 0, 420, 0, 421, 0, 873, 0, 423,
1146
+ 435, 0, 424, 432, 0, 425, 0, 426,
1147
+ 0, 427, 0, 428, 0, 429, 0, 430,
1148
+ 0, 431, 0, 873, 0, 433, 0, 434,
1149
+ 0, 873, 0, 436, 0, 437, 0, 873,
1150
+ 0, 439, 0, 440, 0, 873, 0, 442,
1151
+ 0, 421, 0, 443, 444, 414, 413, 0,
1152
+ 415, 0, 280, 443, 444, 413, 0, 448,
1153
+ 444, 447, 0, 280, 412, 414, 411, 0,
1154
+ 280, 443, 444, 414, 413, 0, 450, 0,
1155
+ 451, 0, 452, 452, 0, 872, 0, 455,
1156
+ 449, 452, 452, 444, 454, 0, 445, 414,
1157
+ 279, 0, 448, 444, 414, 447, 0, 416,
1158
+ 457, 470, 449, 452, 452, 444, 416, 459,
1159
+ 0, 458, 0, 416, 416, 458, 0, 416,
1160
+ 457, 467, 449, 452, 452, 414, 416, 460,
1161
+ 0, 416, 457, 466, 416, 461, 0, 416,
1162
+ 280, 457, 463, 416, 462, 0, 416, 457,
1163
+ 463, 416, 462, 0, 416, 457, 465, 444,
1164
+ 416, 464, 0, 416, 457, 463, 414, 416,
1165
+ 462, 0, 416, 457, 465, 444, 414, 416,
1166
+ 464, 0, 416, 280, 457, 465, 444, 416,
1167
+ 464, 0, 416, 457, 469, 444, 416, 468,
1168
+ 0, 416, 280, 457, 463, 414, 416, 462,
1169
+ 0, 416, 280, 457, 465, 444, 414, 416,
1170
+ 464, 0, 416, 457, 472, 449, 452, 452,
1171
+ 414, 416, 471, 0, 416, 457, 466, 414,
1172
+ 416, 461, 0, 416, 457, 469, 444, 414,
1173
+ 416, 468, 0, 416, 457, 475, 449, 452,
1174
+ 476, 452, 416, 474, 0, 416, 457, 467,
1175
+ 449, 452, 452, 416, 460, 0, 416, 457,
1176
+ 472, 449, 452, 452, 444, 416, 471, 0,
1177
+ 415, 0, 416, 457, 475, 449, 452, 452,
1178
+ 476, 416, 474, 0, 416, 457, 475, 449,
1179
+ 452, 452, 414, 416, 474, 0, 416, 415,
1180
+ 480, 416, 0, 481, 481, 0, 481, 481,
1181
+ 482, 0, 449, 452, 452, 483, 0, 449,
1182
+ 452, 452, 484, 0, 485, 0, 280, 0,
1183
+ 487, 0, 488, 488, 0, 488, 413, 489,
1184
+ 491, 492, 493, 417, 419, 422, 494, 427,
1185
+ 438, 441, 488, 464, 0, 416, 457, 490,
1186
+ 444, 416, 464, 0, 416, 457, 465, 414,
1187
+ 416, 464, 0, 416, 457, 463, 476, 416,
1188
+ 462, 0, 416, 457, 463, 476, 416, 462,
1189
+ 0, 416, 415, 416, 0, 495, 0, 496,
1190
+ 0, 497, 0, 415, 0, 480, 495, 0,
1191
+ 275, 500, 275, 0, 501, 0, 502, 0,
1192
+ 275, 275, 0, 504, 0, 505, 0, 500,
1193
+ 0, 507, 0, 499, 0, 509, 513, 0,
1194
+ 510, 0, 511, 0, 512, 0, 499, 0,
1195
+ 502, 0, 515, 0, 516, 518, 0, 517,
1196
+ 0, 267, 0, 499, 0, 520, 0, 521,
1197
+ 0, 522, 0, 502, 0, 524, 0, 525,
1198
+ 0, 854, 0, 527, 539, 0, 528, 536,
1199
+ 0, 529, 0, 530, 0, 531, 0, 532,
1200
+ 0, 533, 0, 534, 0, 535, 0, 854,
1201
+ 0, 537, 0, 538, 0, 854, 0, 540,
1202
+ 0, 541, 0, 854, 0, 543, 0, 544,
1203
+ 0, 854, 0, 546, 0, 525, 0, 14,
1204
+ 0, 15, 549, 555, 13, 15, 551, 0,
1205
+ 550, 0, 15, 15, 550, 0, 15, 549,
1206
+ 553, 547, 15, 552, 0, 15, 549, 553,
1207
+ 15, 552, 0, 15, 549, 554, 13, 15,
1208
+ 551, 0, 15, 549, 554, 13, 547, 15,
1209
+ 551, 0, 15, 549, 554, 547, 15, 551,
1210
+ 0, 15, 549, 553, 557, 15, 552, 0,
1211
+ 14, 0, 15, 549, 553, 557, 15, 552,
1212
+ 0, 15, 14, 15, 0, 17, 504, 0,
1213
+ 562, 507, 570, 0, 563, 0, 564, 0,
1214
+ 565, 565, 0, 565, 9, 548, 556, 558,
1215
+ 559, 16, 523, 526, 566, 531, 542, 545,
1216
+ 565, 551, 0, 567, 0, 568, 0, 569,
1217
+ 0, 14, 0, 571, 0, 572, 0, 564,
1218
+ 0, 574, 567, 0, 575, 0, 576, 0,
1219
+ 577, 565, 0, 565, 9, 548, 556, 558,
1220
+ 559, 16, 523, 526, 566, 578, 531, 542,
1221
+ 545, 565, 551, 0, 579, 0, 564, 0,
1222
+ 532, 515, 0, 582, 0, 583, 583, 0,
1223
+ 583, 583, 584, 0, 600, 603, 603, 585,
1224
+ 0, 600, 603, 603, 586, 0, 587, 0,
1225
+ 588, 0, 589, 0, 590, 0, 591, 0,
1226
+ 592, 0, 876, 0, 593, 19, 268, 503,
1227
+ 506, 508, 514, 519, 593, 594, 0, 595,
1228
+ 0, 596, 0, 597, 0, 877, 0, 599,
1229
+ 0, 878, 0, 601, 0, 602, 0, 603,
1230
+ 603, 0, 878, 0, 605, 0, 606, 0,
1231
+ 607, 0, 608, 0, 609, 831, 834, 609,
1232
+ 0, 609, 610, 788, 805, 809, 811, 747,
1233
+ 751, 818, 754, 830, 759, 770, 773, 609,
1234
+ 810, 0, 785, 781, 784, 784, 744, 611,
1235
+ 0, 778, 781, 784, 784, 612, 0, 777,
1236
+ 613, 0, 614, 742, 741, 0, 615, 0,
1237
+ 616, 0, 617, 0, 618, 0, 619, 0,
1238
+ 620, 620, 0, 620, 701, 724, 730, 731,
1239
+ 692, 736, 620, 621, 0, 622, 622, 695,
1240
+ 0, 622, 623, 622, 0, 624, 0, 625,
1241
+ 0, 626, 0, 879, 0, 627, 628, 662,
1242
+ 670, 672, 673, 40, 674, 675, 161, 637,
1243
+ 640, 687, 692, 694, 170, 656, 659, 627,
1244
+ 665, 0, 630, 661, 629, 0, 630, 629,
1245
+ 0, 631, 632, 628, 0, 631, 632, 661,
1246
+ 628, 0, 633, 0, 634, 634, 0, 634,
1247
+ 635, 637, 640, 645, 656, 659, 634, 0,
1248
+ 636, 0, 880, 0, 638, 0, 639, 0,
1249
+ 880, 0, 641, 653, 0, 642, 650, 0,
1250
+ 643, 0, 644, 0, 645, 0, 646, 0,
1251
+ 647, 0, 648, 0, 649, 0, 880, 0,
1252
+ 651, 0, 652, 0, 880, 0, 654, 0,
1253
+ 655, 0, 880, 0, 657, 0, 658, 0,
1254
+ 880, 0, 660, 0, 639, 0, 633, 0,
1255
+ 634, 663, 669, 632, 634, 665, 0, 664,
1256
+ 0, 634, 634, 664, 0, 634, 663, 667,
1257
+ 661, 634, 666, 0, 634, 663, 667, 634,
1258
+ 666, 0, 634, 663, 668, 632, 634, 665,
1259
+ 0, 634, 663, 668, 632, 661, 634, 665,
1260
+ 0, 634, 663, 668, 661, 634, 665, 0,
1261
+ 634, 663, 667, 671, 634, 666, 0, 633,
1262
+ 0, 634, 663, 667, 671, 634, 666, 0,
1263
+ 634, 633, 634, 0, 636, 157, 0, 676,
1264
+ 160, 684, 0, 677, 0, 678, 0, 679,
1265
+ 679, 0, 679, 628, 662, 670, 672, 673,
1266
+ 635, 637, 640, 680, 645, 656, 659, 679,
1267
+ 665, 0, 681, 0, 682, 0, 683, 0,
1268
+ 633, 0, 685, 0, 686, 0, 678, 0,
1269
+ 688, 681, 0, 689, 0, 690, 0, 691,
1270
+ 679, 0, 679, 628, 662, 670, 672, 673,
1271
+ 635, 637, 640, 680, 692, 645, 656, 659,
1272
+ 679, 665, 0, 693, 0, 678, 0, 646,
1273
+ 168, 0, 622, 697, 622, 696, 0, 622,
1274
+ 622, 696, 0, 698, 0, 699, 0, 700,
1275
+ 738, 700, 0, 700, 701, 724, 730, 731,
1276
+ 692, 736, 700, 696, 0, 702, 0, 703,
1277
+ 703, 0, 703, 703, 704, 0, 720, 723,
1278
+ 723, 705, 0, 720, 723, 723, 706, 0,
1279
+ 707, 0, 708, 0, 709, 0, 710, 0,
1280
+ 711, 0, 712, 0, 882, 0, 713, 40,
1281
+ 156, 159, 161, 167, 170, 713, 714, 0,
1282
+ 715, 0, 716, 0, 717, 0, 883, 0,
1283
+ 719, 0, 884, 0, 721, 0, 722, 0,
1284
+ 723, 723, 0, 884, 0, 676, 684, 725,
1285
+ 0, 726, 0, 727, 0, 728, 733, 728,
1286
+ 0, 728, 701, 729, 730, 731, 692, 728,
1287
+ 696, 0, 676, 684, 0, 678, 0, 732,
1288
+ 0, 703, 689, 703, 0, 734, 0, 735,
1289
+ 0, 728, 728, 0, 737, 0, 735, 0,
1290
+ 739, 0, 740, 0, 700, 700, 0, 742,
1291
+ 741, 0, 775, 776, 743, 0, 742, 744,
1292
+ 741, 0, 745, 0, 746, 746, 0, 746,
1293
+ 747, 751, 754, 759, 770, 773, 746, 0,
1294
+ 748, 0, 749, 0, 700, 750, 700, 0,
1295
+ 700, 700, 0, 752, 0, 753, 0, 749,
1296
+ 0, 755, 767, 0, 756, 764, 0, 757,
1297
+ 0, 758, 0, 759, 0, 760, 0, 761,
1298
+ 0, 762, 0, 763, 0, 749, 0, 765,
1299
+ 0, 766, 0, 749, 0, 768, 0, 769,
1300
+ 0, 749, 0, 771, 0, 772, 0, 749,
1301
+ 0, 774, 0, 753, 0, 775, 776, 744,
1302
+ 743, 0, 745, 0, 614, 775, 776, 743,
1303
+ 0, 780, 776, 779, 0, 614, 742, 744,
1304
+ 741, 0, 614, 775, 776, 744, 743, 0,
1305
+ 782, 0, 783, 0, 784, 784, 0, 740,
1306
+ 0, 787, 781, 784, 784, 776, 786, 0,
1307
+ 777, 744, 613, 0, 780, 776, 744, 779,
1308
+ 0, 746, 789, 802, 781, 784, 784, 776,
1309
+ 746, 791, 0, 790, 0, 746, 746, 790,
1310
+ 0, 746, 789, 799, 781, 784, 784, 744,
1311
+ 746, 792, 0, 746, 789, 798, 746, 793,
1312
+ 0, 746, 614, 789, 795, 746, 794, 0,
1313
+ 746, 789, 795, 746, 794, 0, 746, 789,
1314
+ 797, 776, 746, 796, 0, 746, 789, 795,
1315
+ 744, 746, 794, 0, 746, 789, 797, 776,
1316
+ 744, 746, 796, 0, 746, 614, 789, 797,
1317
+ 776, 746, 796, 0, 746, 789, 801, 776,
1318
+ 746, 800, 0, 746, 614, 789, 795, 744,
1319
+ 746, 794, 0, 746, 614, 789, 797, 776,
1320
+ 744, 746, 796, 0, 746, 789, 804, 781,
1321
+ 784, 784, 744, 746, 803, 0, 746, 789,
1322
+ 798, 744, 746, 793, 0, 746, 789, 801,
1323
+ 776, 744, 746, 800, 0, 746, 789, 807,
1324
+ 781, 784, 808, 784, 746, 806, 0, 746,
1325
+ 789, 799, 781, 784, 784, 746, 792, 0,
1326
+ 746, 789, 804, 781, 784, 784, 776, 746,
1327
+ 803, 0, 745, 0, 746, 789, 807, 781,
1328
+ 784, 784, 808, 746, 806, 0, 746, 789,
1329
+ 807, 781, 784, 784, 744, 746, 806, 0,
1330
+ 746, 745, 812, 746, 0, 813, 813, 0,
1331
+ 813, 813, 814, 0, 781, 784, 784, 815,
1332
+ 0, 781, 784, 784, 816, 0, 817, 0,
1333
+ 614, 0, 819, 0, 820, 820, 0, 820,
1334
+ 743, 821, 823, 824, 825, 747, 751, 754,
1335
+ 826, 759, 770, 773, 820, 796, 0, 746,
1336
+ 789, 822, 776, 746, 796, 0, 746, 789,
1337
+ 797, 744, 746, 796, 0, 746, 789, 795,
1338
+ 808, 746, 794, 0, 746, 789, 795, 808,
1339
+ 746, 794, 0, 746, 745, 746, 0, 827,
1340
+ 0, 828, 0, 829, 0, 745, 0, 812,
1341
+ 827, 0, 832, 0, 833, 0, 609, 609,
1342
+ 0, 609, 831, 609, 0, 562, 570, 836,
1343
+ 0, 837, 0, 838, 0, 839, 844, 839,
1344
+ 0, 839, 581, 840, 841, 842, 578, 839,
1345
+ 2, 0, 562, 570, 0, 564, 0, 843,
1346
+ 0, 583, 575, 583, 0, 845, 0, 846,
1347
+ 0, 839, 839, 0, 848, 0, 846, 0,
1348
+ 850, 0, 851, 0, 852, 0, 834, 0,
1349
+ 8, 8, 0, 18, 875, 18, 0, 34,
1350
+ 34, 0, 39, 174, 39, 0, 57, 57,
1351
+ 0, 62, 0, 0, 861, 0, 0, 39,
1352
+ 39, 0, 39, 864, 39, 0, 39, 39,
1353
+ 0, 285, 285, 0, 290, 409, 290, 0,
1354
+ 306, 306, 0, 311, 0, 0, 871, 0,
1355
+ 0, 290, 290, 0, 290, 874, 290, 0,
1356
+ 290, 290, 0, 18, 18, 0, 593, 593,
1357
+ 0, 18, 598, 18, 0, 18, 18, 0,
1358
+ 627, 627, 0, 39, 881, 39, 0, 39,
1359
+ 39, 0, 713, 713, 0, 39, 718, 39,
1360
+ 0, 39, 39, 0, 0
1361
+ ]
1362
+
1363
+ class << self
1364
+ attr_accessor :_interval_expression_trans_actions
1365
+ private :_interval_expression_trans_actions, :_interval_expression_trans_actions=
1366
+ end
1367
+ self._interval_expression_trans_actions = [
1368
+ 0, 0, 0, 0, 0, 0, 0, 0,
1369
+ 2, 1, 0, 0, 0, 1, 0, 0,
1370
+ 0, 1, 0, 1, 0, 1, 0, 1,
1371
+ 3, 1, 0, 2, 2, 2, 2, 2,
1372
+ 0, 0, 2, 0, 0, 2, 2, 2,
1373
+ 0, 2, 0, 2, 2, 0, 2, 1,
1374
+ 0, 0, 0, 1, 0, 0, 1, 0,
1375
+ 0, 0, 1, 0, 0, 0, 0, 1,
1376
+ 0, 1, 0, 0, 1, 0, 0, 0,
1377
+ 0, 0, 0, 0, 0, 1, 0, 1,
1378
+ 0, 1, 0, 0, 0, 0, 0, 0,
1379
+ 0, 0, 0, 1, 0, 1, 0, 1,
1380
+ 0, 1, 0, 1, 0, 0, 0, 0,
1381
+ 1, 0, 2, 2, 2, 2, 2, 2,
1382
+ 2, 0, 2, 2, 2, 2, 2, 0,
1383
+ 2, 1, 0, 0, 0, 0, 0, 0,
1384
+ 1, 0, 0, 0, 0, 0, 1, 0,
1385
+ 0, 1, 0, 0, 0, 1, 0, 1,
1386
+ 0, 1, 0, 1, 0, 1, 0, 1,
1387
+ 0, 0, 0, 0, 0, 0, 0, 0,
1388
+ 0, 1, 0, 1, 0, 1, 0, 1,
1389
+ 0, 1, 0, 0, 0, 0, 0, 0,
1390
+ 0, 0, 1, 0, 1, 0, 1, 0,
1391
+ 1, 0, 1, 0, 1, 0, 1, 0,
1392
+ 0, 0, 0, 1, 0, 2, 2, 2,
1393
+ 2, 2, 2, 2, 0, 2, 2, 2,
1394
+ 2, 2, 0, 2, 1, 0, 0, 0,
1395
+ 0, 0, 0, 1, 0, 0, 0, 0,
1396
+ 0, 1, 0, 0, 1, 0, 0, 0,
1397
+ 1, 0, 1, 0, 1, 0, 1, 0,
1398
+ 1, 0, 1, 0, 0, 0, 1, 0,
1399
+ 1, 0, 1, 0, 1, 0, 1, 0,
1400
+ 1, 0, 1, 0, 0, 1, 0, 0,
1401
+ 0, 1, 0, 0, 0, 1, 0, 1,
1402
+ 0, 0, 1, 0, 0, 0, 0, 0,
1403
+ 0, 0, 0, 1, 0, 1, 0, 1,
1404
+ 0, 1, 0, 1, 0, 1, 0, 0,
1405
+ 1, 0, 0, 1, 0, 1, 0, 1,
1406
+ 0, 1, 0, 1, 0, 1, 0, 1,
1407
+ 0, 1, 0, 1, 0, 1, 0, 1,
1408
+ 0, 1, 0, 1, 0, 1, 0, 1,
1409
+ 0, 1, 0, 1, 0, 1, 0, 1,
1410
+ 0, 1, 0, 0, 0, 0, 1, 0,
1411
+ 1, 0, 0, 0, 0, 1, 0, 0,
1412
+ 0, 1, 0, 0, 0, 0, 1, 0,
1413
+ 0, 0, 0, 0, 1, 0, 1, 0,
1414
+ 1, 0, 0, 1, 0, 1, 0, 0,
1415
+ 0, 0, 0, 0, 1, 0, 0, 0,
1416
+ 1, 0, 0, 0, 0, 1, 0, 0,
1417
+ 0, 0, 0, 0, 0, 0, 0, 1,
1418
+ 0, 1, 0, 0, 0, 1, 0, 0,
1419
+ 0, 0, 0, 0, 0, 0, 0, 1,
1420
+ 0, 0, 0, 0, 0, 1, 0, 0,
1421
+ 0, 0, 0, 0, 1, 0, 0, 0,
1422
+ 0, 0, 1, 0, 0, 0, 0, 0,
1423
+ 0, 1, 0, 0, 0, 0, 0, 0,
1424
+ 1, 0, 0, 0, 0, 0, 0, 0,
1425
+ 1, 0, 0, 0, 0, 0, 0, 0,
1426
+ 1, 0, 0, 0, 0, 0, 0, 1,
1427
+ 0, 0, 0, 0, 0, 0, 0, 1,
1428
+ 0, 0, 0, 0, 0, 0, 0, 0,
1429
+ 1, 0, 0, 0, 0, 0, 0, 0,
1430
+ 0, 0, 1, 0, 0, 0, 0, 0,
1431
+ 0, 1, 0, 0, 0, 0, 0, 0,
1432
+ 0, 1, 0, 0, 0, 0, 0, 0,
1433
+ 0, 0, 0, 1, 0, 0, 0, 0,
1434
+ 0, 0, 0, 0, 1, 0, 0, 0,
1435
+ 0, 0, 0, 0, 0, 0, 1, 0,
1436
+ 1, 0, 0, 0, 0, 0, 0, 0,
1437
+ 0, 0, 1, 0, 0, 0, 0, 0,
1438
+ 0, 0, 0, 0, 1, 0, 0, 0,
1439
+ 0, 1, 0, 0, 1, 0, 0, 2,
1440
+ 1, 0, 0, 0, 0, 1, 0, 0,
1441
+ 0, 0, 1, 0, 1, 0, 1, 0,
1442
+ 1, 0, 0, 1, 0, 2, 2, 2,
1443
+ 2, 2, 2, 2, 2, 2, 2, 2,
1444
+ 2, 0, 2, 1, 0, 0, 0, 0,
1445
+ 0, 0, 1, 0, 0, 0, 0, 0,
1446
+ 0, 1, 0, 0, 0, 0, 0, 0,
1447
+ 1, 0, 0, 0, 0, 0, 0, 1,
1448
+ 0, 0, 0, 1, 0, 1, 0, 1,
1449
+ 0, 1, 0, 1, 0, 0, 1, 0,
1450
+ 0, 0, 1, 0, 1, 0, 1, 0,
1451
+ 0, 1, 0, 1, 0, 1, 0, 1,
1452
+ 0, 1, 0, 1, 0, 0, 1, 0,
1453
+ 1, 0, 1, 0, 1, 0, 1, 0,
1454
+ 1, 0, 1, 0, 1, 0, 1, 0,
1455
+ 1, 0, 1, 0, 1, 0, 1, 0,
1456
+ 1, 0, 1, 0, 0, 1, 0, 0,
1457
+ 0, 1, 0, 0, 0, 1, 0, 1,
1458
+ 0, 0, 1, 0, 0, 0, 0, 0,
1459
+ 0, 0, 0, 1, 0, 1, 0, 1,
1460
+ 0, 1, 0, 1, 0, 1, 0, 0,
1461
+ 1, 0, 0, 1, 0, 1, 0, 1,
1462
+ 0, 1, 0, 1, 0, 1, 0, 1,
1463
+ 0, 1, 0, 1, 0, 1, 0, 1,
1464
+ 0, 1, 0, 1, 0, 1, 0, 1,
1465
+ 0, 1, 0, 1, 0, 1, 0, 1,
1466
+ 0, 1, 0, 0, 0, 0, 1, 0,
1467
+ 1, 0, 0, 0, 0, 1, 0, 0,
1468
+ 0, 1, 0, 0, 0, 0, 1, 0,
1469
+ 0, 0, 0, 0, 1, 0, 1, 0,
1470
+ 1, 0, 0, 1, 0, 1, 0, 0,
1471
+ 0, 0, 0, 0, 1, 0, 0, 0,
1472
+ 1, 0, 0, 0, 0, 1, 0, 0,
1473
+ 0, 0, 0, 0, 0, 0, 0, 1,
1474
+ 0, 1, 0, 0, 0, 1, 0, 0,
1475
+ 0, 0, 0, 0, 0, 0, 0, 1,
1476
+ 0, 0, 0, 0, 0, 1, 0, 0,
1477
+ 0, 0, 0, 0, 1, 0, 0, 0,
1478
+ 0, 0, 1, 0, 0, 0, 0, 0,
1479
+ 0, 1, 0, 0, 0, 0, 0, 0,
1480
+ 1, 0, 0, 0, 0, 0, 0, 0,
1481
+ 1, 0, 0, 0, 0, 0, 0, 0,
1482
+ 1, 0, 0, 0, 0, 0, 0, 1,
1483
+ 0, 0, 0, 0, 0, 0, 0, 1,
1484
+ 0, 0, 0, 0, 0, 0, 0, 0,
1485
+ 1, 0, 0, 0, 0, 0, 0, 0,
1486
+ 0, 0, 1, 0, 0, 0, 0, 0,
1487
+ 0, 1, 0, 0, 0, 0, 0, 0,
1488
+ 0, 1, 0, 0, 0, 0, 0, 0,
1489
+ 0, 0, 0, 1, 0, 0, 0, 0,
1490
+ 0, 0, 0, 0, 1, 0, 0, 0,
1491
+ 0, 0, 0, 0, 0, 0, 1, 0,
1492
+ 1, 0, 0, 0, 0, 0, 0, 0,
1493
+ 0, 0, 1, 0, 0, 0, 0, 0,
1494
+ 0, 0, 0, 0, 1, 0, 0, 0,
1495
+ 0, 1, 0, 0, 1, 0, 0, 2,
1496
+ 1, 0, 0, 0, 0, 1, 0, 0,
1497
+ 0, 0, 1, 0, 1, 0, 1, 0,
1498
+ 1, 0, 0, 1, 0, 2, 2, 2,
1499
+ 2, 2, 2, 2, 2, 2, 2, 2,
1500
+ 2, 0, 2, 1, 0, 0, 0, 0,
1501
+ 0, 0, 1, 0, 0, 0, 0, 0,
1502
+ 0, 1, 0, 0, 0, 0, 0, 0,
1503
+ 1, 0, 0, 0, 0, 0, 0, 1,
1504
+ 0, 0, 0, 1, 0, 1, 0, 1,
1505
+ 0, 1, 0, 1, 0, 0, 1, 0,
1506
+ 1, 0, 1, 0, 0, 1, 0, 0,
1507
+ 0, 1, 0, 1, 0, 1, 0, 1,
1508
+ 0, 1, 0, 1, 0, 1, 0, 0,
1509
+ 0, 0, 1, 0, 2, 2, 2, 2,
1510
+ 2, 2, 2, 0, 2, 2, 2, 2,
1511
+ 2, 0, 2, 1, 0, 0, 0, 0,
1512
+ 0, 0, 1, 0, 0, 0, 0, 0,
1513
+ 1, 0, 0, 1, 0, 0, 0, 1,
1514
+ 0, 1, 0, 1, 0, 1, 0, 1,
1515
+ 0, 1, 0, 0, 0, 0, 0, 1,
1516
+ 0, 1, 0, 1, 0, 1, 0, 1,
1517
+ 0, 0, 0, 0, 1, 0, 1, 0,
1518
+ 1, 0, 1, 0, 1, 0, 0, 0,
1519
+ 0, 1, 0, 2, 2, 2, 2, 2,
1520
+ 2, 2, 0, 2, 2, 2, 2, 2,
1521
+ 0, 2, 1, 0, 0, 0, 0, 0,
1522
+ 0, 1, 0, 0, 0, 0, 0, 1,
1523
+ 0, 0, 1, 0, 0, 0, 1, 0,
1524
+ 1, 0, 1, 0, 1, 0, 1, 0,
1525
+ 1, 0, 0, 0, 1, 0, 1, 0,
1526
+ 1, 0, 1, 0, 1, 0, 1, 0,
1527
+ 1, 0, 0, 1, 0, 0, 0, 1,
1528
+ 0, 0, 0, 1, 0, 1, 0, 0,
1529
+ 1, 0, 0, 0, 0, 0, 0, 0,
1530
+ 0, 1, 0, 1, 0, 1, 0, 1,
1531
+ 0, 1, 0, 1, 0, 0, 1, 0,
1532
+ 0, 1, 0, 1, 0, 1, 0, 1,
1533
+ 0, 1, 0, 1, 0, 1, 0, 1,
1534
+ 0, 1, 0, 1, 0, 1, 0, 1,
1535
+ 0, 1, 0, 1, 0, 1, 0, 1,
1536
+ 0, 1, 0, 1, 0, 1, 0, 1,
1537
+ 0, 0, 0, 0, 1, 0, 1, 0,
1538
+ 0, 0, 0, 1, 0, 0, 0, 1,
1539
+ 0, 0, 0, 0, 1, 0, 0, 0,
1540
+ 0, 0, 1, 0, 1, 0, 1, 0,
1541
+ 0, 1, 0, 1, 0, 0, 0, 0,
1542
+ 0, 0, 1, 0, 0, 0, 1, 0,
1543
+ 0, 0, 0, 1, 0, 0, 0, 0,
1544
+ 0, 0, 0, 0, 0, 1, 0, 1,
1545
+ 0, 0, 0, 1, 0, 0, 0, 0,
1546
+ 0, 0, 0, 0, 0, 1, 0, 0,
1547
+ 0, 0, 0, 1, 0, 0, 0, 0,
1548
+ 0, 0, 1, 0, 0, 0, 0, 0,
1549
+ 1, 0, 0, 0, 0, 0, 0, 1,
1550
+ 0, 0, 0, 0, 0, 0, 1, 0,
1551
+ 0, 0, 0, 0, 0, 0, 1, 0,
1552
+ 0, 0, 0, 0, 0, 0, 1, 0,
1553
+ 0, 0, 0, 0, 0, 1, 0, 0,
1554
+ 0, 0, 0, 0, 0, 1, 0, 0,
1555
+ 0, 0, 0, 0, 0, 0, 1, 0,
1556
+ 0, 0, 0, 0, 0, 0, 0, 0,
1557
+ 1, 0, 0, 0, 0, 0, 0, 1,
1558
+ 0, 0, 0, 0, 0, 0, 0, 1,
1559
+ 0, 0, 0, 0, 0, 0, 0, 0,
1560
+ 0, 1, 0, 0, 0, 0, 0, 0,
1561
+ 0, 0, 1, 0, 0, 0, 0, 0,
1562
+ 0, 0, 0, 0, 1, 0, 1, 0,
1563
+ 0, 0, 0, 0, 0, 0, 0, 0,
1564
+ 1, 0, 0, 0, 0, 0, 0, 0,
1565
+ 0, 0, 1, 0, 0, 0, 0, 1,
1566
+ 0, 0, 1, 0, 0, 2, 1, 0,
1567
+ 0, 0, 0, 1, 0, 0, 0, 0,
1568
+ 1, 0, 1, 0, 1, 0, 1, 0,
1569
+ 0, 1, 0, 2, 2, 2, 2, 2,
1570
+ 2, 2, 2, 2, 2, 2, 2, 0,
1571
+ 2, 1, 0, 0, 0, 0, 0, 0,
1572
+ 1, 0, 0, 0, 0, 0, 0, 1,
1573
+ 0, 0, 0, 0, 0, 0, 1, 0,
1574
+ 0, 0, 0, 0, 0, 1, 0, 0,
1575
+ 0, 1, 0, 1, 0, 1, 0, 1,
1576
+ 0, 1, 0, 0, 1, 0, 1, 0,
1577
+ 1, 0, 0, 1, 0, 0, 0, 1,
1578
+ 0, 1, 0, 1, 0, 1, 0, 1,
1579
+ 0, 1, 0, 1, 0, 0, 1, 0,
1580
+ 0, 0, 1, 0, 0, 0, 1, 0,
1581
+ 1, 0, 0, 1, 0, 0, 0, 0,
1582
+ 0, 0, 0, 0, 1, 0, 1, 0,
1583
+ 1, 0, 1, 0, 1, 0, 1, 0,
1584
+ 0, 1, 0, 0, 1, 0, 1, 0,
1585
+ 1, 0, 1, 0, 1, 0, 1, 0,
1586
+ 1, 0, 1, 0, 1, 0, 1, 0,
1587
+ 1, 0, 1, 0, 1, 0, 1, 0,
1588
+ 1, 0, 1, 0, 1, 0, 1, 0,
1589
+ 1, 0, 1, 0, 0, 0, 0, 1,
1590
+ 0, 1, 0, 0, 0, 0, 1, 0,
1591
+ 0, 0, 1, 0, 0, 0, 0, 1,
1592
+ 0, 0, 0, 0, 0, 1, 0, 1,
1593
+ 0, 1, 0, 0, 1, 0, 1, 0,
1594
+ 0, 0, 0, 0, 0, 1, 0, 0,
1595
+ 0, 1, 0, 0, 0, 0, 1, 0,
1596
+ 0, 0, 0, 0, 0, 0, 0, 0,
1597
+ 1, 0, 1, 0, 0, 0, 1, 0,
1598
+ 0, 0, 0, 0, 0, 0, 0, 0,
1599
+ 1, 0, 0, 0, 0, 0, 1, 0,
1600
+ 0, 0, 0, 0, 0, 1, 0, 0,
1601
+ 0, 0, 0, 1, 0, 0, 0, 0,
1602
+ 0, 0, 1, 0, 0, 0, 0, 0,
1603
+ 0, 1, 0, 0, 0, 0, 0, 0,
1604
+ 0, 1, 0, 0, 0, 0, 0, 0,
1605
+ 0, 1, 0, 0, 0, 0, 0, 0,
1606
+ 1, 0, 0, 0, 0, 0, 0, 0,
1607
+ 1, 0, 0, 0, 0, 0, 0, 0,
1608
+ 0, 1, 0, 0, 0, 0, 0, 0,
1609
+ 0, 0, 0, 1, 0, 0, 0, 0,
1610
+ 0, 0, 1, 0, 0, 0, 0, 0,
1611
+ 0, 0, 1, 0, 0, 0, 0, 0,
1612
+ 0, 0, 0, 0, 1, 0, 0, 0,
1613
+ 0, 0, 0, 0, 0, 1, 0, 0,
1614
+ 0, 0, 0, 0, 0, 0, 0, 1,
1615
+ 0, 1, 0, 0, 0, 0, 0, 0,
1616
+ 0, 0, 0, 1, 0, 0, 0, 0,
1617
+ 0, 0, 0, 0, 0, 1, 0, 0,
1618
+ 0, 0, 1, 0, 0, 1, 0, 0,
1619
+ 2, 1, 0, 0, 0, 0, 1, 0,
1620
+ 0, 0, 0, 1, 0, 1, 0, 1,
1621
+ 0, 1, 0, 0, 1, 0, 2, 2,
1622
+ 2, 2, 2, 2, 2, 2, 2, 2,
1623
+ 2, 2, 0, 2, 1, 0, 0, 0,
1624
+ 0, 0, 0, 1, 0, 0, 0, 0,
1625
+ 0, 0, 1, 0, 0, 0, 0, 0,
1626
+ 0, 1, 0, 0, 0, 0, 0, 0,
1627
+ 1, 0, 0, 0, 1, 0, 1, 0,
1628
+ 1, 0, 1, 0, 1, 0, 0, 1,
1629
+ 0, 0, 0, 1, 0, 1, 0, 1,
1630
+ 0, 0, 1, 0, 1, 0, 1, 0,
1631
+ 1, 0, 1, 0, 1, 0, 0, 1,
1632
+ 0, 1, 0, 1, 0, 1, 0, 1,
1633
+ 0, 1, 0, 1, 0, 0, 1, 0,
1634
+ 1, 0, 1, 0, 1, 0, 1, 0,
1635
+ 1, 0, 1, 0, 1, 0, 1, 0,
1636
+ 1, 0, 1, 0, 0, 1, 0, 0,
1637
+ 1, 0, 1, 0, 1, 0, 1, 0,
1638
+ 1, 0, 1, 0, 1, 0, 1, 0,
1639
+ 1, 0, 1, 0, 1, 0, 1, 0,
1640
+ 1, 0, 1, 0, 1, 0, 1, 0,
1641
+ 1, 0, 1, 0, 1, 0, 1, 0,
1642
+ 1, 0, 0, 0, 0, 0, 0, 1,
1643
+ 0, 1, 0, 0, 0, 1, 0, 0,
1644
+ 0, 0, 0, 0, 1, 0, 0, 0,
1645
+ 0, 0, 1, 0, 0, 0, 0, 0,
1646
+ 0, 1, 0, 0, 0, 0, 0, 0,
1647
+ 0, 1, 0, 0, 0, 0, 0, 0,
1648
+ 1, 0, 0, 0, 0, 0, 0, 1,
1649
+ 0, 1, 0, 0, 0, 0, 0, 0,
1650
+ 1, 0, 0, 0, 1, 0, 0, 1,
1651
+ 0, 0, 0, 1, 0, 1, 3, 1,
1652
+ 0, 0, 1, 0, 2, 2, 2, 2,
1653
+ 2, 2, 2, 2, 2, 2, 2, 2,
1654
+ 0, 2, 1, 0, 1, 0, 1, 0,
1655
+ 1, 0, 1, 0, 1, 0, 1, 3,
1656
+ 1, 0, 0, 1, 0, 1, 3, 1,
1657
+ 0, 0, 1, 0, 2, 2, 2, 2,
1658
+ 2, 2, 2, 2, 2, 0, 2, 2,
1659
+ 2, 0, 2, 1, 0, 1, 3, 1,
1660
+ 0, 0, 1, 0, 1, 0, 0, 1,
1661
+ 0, 0, 2, 1, 0, 0, 0, 0,
1662
+ 1, 0, 0, 0, 0, 1, 0, 1,
1663
+ 0, 1, 0, 1, 0, 1, 0, 1,
1664
+ 0, 1, 0, 1, 0, 0, 0, 0,
1665
+ 0, 0, 0, 0, 0, 0, 1, 0,
1666
+ 1, 0, 1, 0, 1, 0, 1, 0,
1667
+ 1, 0, 1, 0, 1, 0, 1, 0,
1668
+ 0, 1, 0, 1, 0, 1, 0, 1,
1669
+ 0, 1, 0, 1, 0, 0, 0, 0,
1670
+ 1, 0, 2, 2, 2, 2, 2, 2,
1671
+ 2, 0, 2, 2, 2, 2, 2, 0,
1672
+ 2, 1, 0, 0, 0, 0, 0, 0,
1673
+ 1, 0, 0, 0, 0, 0, 1, 0,
1674
+ 0, 1, 0, 0, 0, 1, 0, 1,
1675
+ 0, 1, 0, 1, 0, 1, 0, 1,
1676
+ 4, 4, 1, 0, 0, 0, 0, 0,
1677
+ 0, 0, 0, 2, 1, 0, 0, 0,
1678
+ 1, 0, 0, 0, 1, 0, 1, 0,
1679
+ 1, 0, 1, 3, 1, 0, 2, 2,
1680
+ 2, 2, 2, 0, 2, 0, 0, 2,
1681
+ 2, 2, 0, 2, 0, 2, 2, 0,
1682
+ 2, 1, 0, 0, 0, 1, 0, 0,
1683
+ 1, 0, 0, 0, 1, 0, 0, 0,
1684
+ 0, 1, 0, 1, 0, 0, 1, 0,
1685
+ 0, 0, 0, 0, 0, 0, 0, 1,
1686
+ 0, 1, 0, 1, 0, 1, 0, 1,
1687
+ 0, 1, 0, 0, 1, 0, 0, 1,
1688
+ 0, 1, 0, 1, 0, 1, 0, 1,
1689
+ 0, 1, 0, 1, 0, 1, 0, 1,
1690
+ 0, 1, 0, 1, 0, 1, 0, 1,
1691
+ 0, 1, 0, 1, 0, 1, 0, 1,
1692
+ 0, 1, 0, 1, 0, 1, 0, 1,
1693
+ 0, 0, 0, 0, 0, 0, 1, 0,
1694
+ 1, 0, 0, 0, 1, 0, 0, 0,
1695
+ 0, 0, 0, 1, 0, 0, 0, 0,
1696
+ 0, 1, 0, 0, 0, 0, 0, 0,
1697
+ 1, 0, 0, 0, 0, 0, 0, 0,
1698
+ 1, 0, 0, 0, 0, 0, 0, 1,
1699
+ 0, 0, 0, 0, 0, 0, 1, 0,
1700
+ 1, 0, 0, 0, 0, 0, 0, 1,
1701
+ 0, 0, 0, 1, 0, 0, 1, 0,
1702
+ 0, 0, 1, 0, 1, 3, 1, 0,
1703
+ 0, 1, 0, 2, 2, 2, 2, 2,
1704
+ 2, 2, 2, 2, 2, 2, 2, 0,
1705
+ 2, 1, 0, 1, 0, 1, 0, 1,
1706
+ 0, 1, 0, 1, 0, 1, 3, 1,
1707
+ 0, 0, 1, 0, 1, 3, 1, 0,
1708
+ 0, 1, 0, 2, 2, 2, 2, 2,
1709
+ 2, 2, 2, 2, 0, 2, 2, 2,
1710
+ 0, 2, 1, 0, 1, 3, 1, 0,
1711
+ 0, 1, 0, 0, 0, 0, 1, 0,
1712
+ 0, 0, 1, 0, 1, 0, 1, 4,
1713
+ 0, 4, 1, 0, 0, 0, 0, 0,
1714
+ 0, 0, 0, 2, 1, 0, 1, 0,
1715
+ 0, 1, 0, 0, 2, 1, 0, 0,
1716
+ 0, 0, 1, 0, 0, 0, 0, 1,
1717
+ 0, 1, 0, 1, 0, 1, 0, 1,
1718
+ 0, 1, 0, 1, 0, 1, 0, 0,
1719
+ 0, 0, 0, 0, 0, 0, 0, 1,
1720
+ 0, 1, 0, 1, 0, 1, 0, 1,
1721
+ 0, 1, 0, 1, 0, 1, 0, 1,
1722
+ 0, 0, 1, 0, 1, 0, 0, 0,
1723
+ 1, 0, 1, 0, 1, 0, 0, 0,
1724
+ 1, 0, 0, 0, 0, 0, 0, 0,
1725
+ 2, 1, 0, 0, 1, 0, 1, 0,
1726
+ 1, 0, 0, 0, 1, 0, 1, 0,
1727
+ 1, 0, 0, 1, 0, 1, 0, 1,
1728
+ 0, 1, 0, 1, 4, 4, 1, 0,
1729
+ 0, 1, 0, 0, 0, 1, 0, 0,
1730
+ 0, 1, 0, 1, 0, 0, 1, 0,
1731
+ 0, 0, 0, 0, 0, 0, 0, 1,
1732
+ 0, 1, 0, 1, 5, 0, 5, 1,
1733
+ 5, 5, 1, 0, 1, 0, 1, 0,
1734
+ 1, 0, 0, 1, 0, 0, 1, 0,
1735
+ 1, 0, 1, 0, 1, 0, 1, 0,
1736
+ 1, 0, 1, 0, 1, 0, 1, 0,
1737
+ 1, 0, 1, 0, 1, 0, 1, 0,
1738
+ 1, 0, 1, 0, 1, 0, 1, 0,
1739
+ 1, 0, 1, 0, 1, 0, 0, 0,
1740
+ 0, 1, 0, 1, 0, 0, 0, 0,
1741
+ 1, 0, 0, 0, 1, 0, 0, 0,
1742
+ 0, 1, 0, 0, 0, 0, 0, 1,
1743
+ 0, 1, 0, 1, 0, 0, 1, 0,
1744
+ 1, 0, 0, 0, 0, 0, 0, 1,
1745
+ 0, 0, 0, 1, 0, 0, 0, 0,
1746
+ 1, 0, 0, 0, 0, 0, 0, 0,
1747
+ 0, 0, 1, 0, 1, 0, 0, 0,
1748
+ 1, 0, 0, 0, 0, 0, 0, 0,
1749
+ 0, 0, 1, 0, 0, 0, 0, 0,
1750
+ 1, 0, 0, 0, 0, 0, 0, 1,
1751
+ 0, 0, 0, 0, 0, 1, 0, 0,
1752
+ 0, 0, 0, 0, 1, 0, 0, 0,
1753
+ 0, 0, 0, 1, 0, 0, 0, 0,
1754
+ 0, 0, 0, 1, 0, 0, 0, 0,
1755
+ 0, 0, 0, 1, 0, 0, 0, 0,
1756
+ 0, 0, 1, 0, 0, 0, 0, 0,
1757
+ 0, 0, 1, 0, 0, 0, 0, 0,
1758
+ 0, 0, 0, 1, 0, 0, 0, 0,
1759
+ 0, 0, 0, 0, 0, 1, 0, 0,
1760
+ 0, 0, 0, 0, 1, 0, 0, 0,
1761
+ 0, 0, 0, 0, 1, 0, 0, 0,
1762
+ 0, 0, 0, 0, 0, 0, 1, 0,
1763
+ 0, 0, 0, 0, 0, 0, 0, 1,
1764
+ 0, 0, 0, 0, 0, 0, 0, 0,
1765
+ 0, 1, 0, 1, 0, 0, 0, 0,
1766
+ 0, 0, 0, 0, 0, 1, 0, 0,
1767
+ 0, 0, 0, 0, 0, 0, 0, 1,
1768
+ 0, 0, 0, 0, 1, 0, 0, 1,
1769
+ 0, 0, 2, 1, 0, 0, 0, 0,
1770
+ 1, 0, 0, 0, 0, 1, 0, 1,
1771
+ 0, 1, 0, 1, 0, 0, 1, 0,
1772
+ 2, 2, 2, 2, 2, 2, 2, 2,
1773
+ 2, 2, 2, 2, 0, 2, 1, 0,
1774
+ 0, 0, 0, 0, 0, 1, 0, 0,
1775
+ 0, 0, 0, 0, 1, 0, 0, 0,
1776
+ 0, 0, 0, 1, 0, 0, 0, 0,
1777
+ 0, 0, 1, 0, 0, 0, 1, 0,
1778
+ 1, 0, 1, 0, 1, 0, 1, 0,
1779
+ 0, 1, 0, 1, 0, 1, 0, 0,
1780
+ 1, 0, 0, 0, 1, 0, 0, 0,
1781
+ 1, 0, 1, 0, 1, 0, 0, 0,
1782
+ 1, 0, 0, 0, 0, 0, 0, 0,
1783
+ 2, 1, 0, 0, 1, 0, 1, 0,
1784
+ 1, 0, 0, 0, 1, 0, 1, 0,
1785
+ 1, 0, 0, 1, 0, 1, 0, 1,
1786
+ 0, 1, 0, 1, 0, 1, 0, 1,
1787
+ 7, 7, 0, 9, 0, 9, 0, 4,
1788
+ 4, 0, 4, 0, 4, 0, 0, 0,
1789
+ 0, 0, 0, 0, 0, 0, 0, 4,
1790
+ 4, 0, 5, 0, 5, 0, 5, 5,
1791
+ 0, 14, 14, 0, 14, 0, 14, 0,
1792
+ 0, 0, 0, 0, 0, 0, 0, 0,
1793
+ 0, 14, 14, 0, 15, 0, 15, 0,
1794
+ 15, 15, 0, 9, 9, 0, 0, 0,
1795
+ 0, 0, 0, 0, 0, 0, 0, 0,
1796
+ 7, 7, 0, 9, 0, 9, 0, 9,
1797
+ 9, 0, 0, 0, 0, 0, 0, 0,
1798
+ 0, 0, 0, 0, 0
1799
+ ]
1800
+
1801
+ class << self
1802
+ attr_accessor :_interval_expression_eof_actions
1803
+ private :_interval_expression_eof_actions, :_interval_expression_eof_actions=
1804
+ end
1805
+ self._interval_expression_eof_actions = [
1806
+ 0, 1, 1, 1, 1, 1, 1, 1,
1807
+ 1, 1, 1, 1, 1, 1, 1, 1,
1808
+ 1, 1, 1, 1, 1, 1, 1, 1,
1809
+ 1, 1, 1, 1, 1, 1, 1, 1,
1810
+ 1, 1, 1, 1, 1, 1, 1, 1,
1811
+ 1, 1, 1, 1, 1, 1, 1, 1,
1812
+ 1, 1, 1, 1, 1, 1, 1, 1,
1813
+ 1, 1, 1, 1, 1, 1, 1, 1,
1814
+ 1, 1, 1, 1, 1, 1, 1, 1,
1815
+ 1, 1, 1, 1, 1, 1, 1, 1,
1816
+ 1, 1, 1, 1, 1, 1, 1, 1,
1817
+ 1, 1, 1, 1, 1, 1, 1, 1,
1818
+ 1, 1, 1, 1, 1, 1, 1, 1,
1819
+ 1, 1, 1, 1, 1, 1, 1, 1,
1820
+ 1, 1, 1, 1, 1, 1, 1, 1,
1821
+ 1, 1, 1, 1, 1, 1, 1, 1,
1822
+ 1, 1, 1, 1, 1, 1, 1, 1,
1823
+ 1, 1, 1, 1, 1, 1, 1, 1,
1824
+ 1, 1, 1, 1, 1, 1, 1, 1,
1825
+ 1, 1, 1, 1, 1, 1, 1, 1,
1826
+ 1, 1, 1, 1, 1, 1, 1, 1,
1827
+ 1, 1, 1, 1, 1, 1, 1, 1,
1828
+ 1, 1, 1, 1, 1, 1, 1, 1,
1829
+ 1, 1, 1, 1, 1, 1, 1, 1,
1830
+ 1, 1, 1, 1, 1, 1, 1, 1,
1831
+ 1, 1, 1, 1, 1, 1, 1, 1,
1832
+ 1, 1, 1, 1, 1, 1, 1, 1,
1833
+ 1, 1, 1, 1, 1, 1, 1, 1,
1834
+ 1, 1, 1, 1, 1, 1, 1, 1,
1835
+ 1, 1, 1, 1, 1, 1, 1, 1,
1836
+ 1, 1, 1, 1, 1, 1, 1, 1,
1837
+ 1, 1, 1, 1, 1, 1, 1, 1,
1838
+ 1, 1, 1, 1, 1, 1, 1, 1,
1839
+ 1, 1, 1, 1, 1, 1, 1, 1,
1840
+ 1, 1, 1, 1, 1, 1, 1, 1,
1841
+ 1, 1, 1, 1, 1, 1, 1, 1,
1842
+ 1, 1, 1, 1, 1, 1, 1, 1,
1843
+ 1, 1, 1, 1, 1, 1, 1, 1,
1844
+ 1, 1, 1, 1, 1, 1, 1, 1,
1845
+ 1, 1, 1, 1, 1, 1, 1, 1,
1846
+ 1, 1, 1, 1, 1, 1, 1, 1,
1847
+ 1, 1, 1, 1, 1, 1, 1, 1,
1848
+ 1, 1, 1, 1, 1, 1, 1, 1,
1849
+ 1, 1, 1, 1, 1, 1, 1, 1,
1850
+ 1, 1, 1, 1, 1, 1, 1, 1,
1851
+ 1, 1, 1, 1, 1, 1, 1, 1,
1852
+ 1, 1, 1, 1, 1, 1, 1, 1,
1853
+ 1, 1, 1, 1, 1, 1, 1, 1,
1854
+ 1, 1, 1, 1, 1, 1, 1, 1,
1855
+ 1, 1, 1, 1, 1, 1, 1, 1,
1856
+ 1, 1, 1, 1, 1, 1, 1, 1,
1857
+ 1, 1, 1, 1, 1, 1, 1, 1,
1858
+ 1, 1, 1, 1, 1, 1, 1, 1,
1859
+ 1, 1, 1, 1, 1, 1, 1, 1,
1860
+ 1, 1, 1, 1, 1, 1, 1, 1,
1861
+ 1, 1, 1, 1, 1, 1, 1, 1,
1862
+ 1, 1, 1, 1, 1, 1, 1, 1,
1863
+ 1, 1, 1, 1, 1, 1, 1, 1,
1864
+ 1, 1, 1, 1, 1, 1, 1, 1,
1865
+ 1, 1, 1, 1, 1, 1, 1, 1,
1866
+ 1, 1, 1, 1, 1, 1, 1, 1,
1867
+ 1, 1, 1, 1, 1, 1, 1, 1,
1868
+ 1, 1, 1, 1, 1, 1, 1, 1,
1869
+ 1, 1, 1, 1, 1, 1, 1, 1,
1870
+ 1, 1, 1, 1, 1, 1, 1, 1,
1871
+ 1, 1, 1, 1, 1, 1, 1, 1,
1872
+ 1, 1, 1, 1, 1, 1, 1, 1,
1873
+ 1, 1, 1, 1, 1, 1, 1, 1,
1874
+ 1, 1, 1, 1, 1, 1, 1, 1,
1875
+ 1, 1, 1, 1, 1, 1, 1, 1,
1876
+ 1, 1, 1, 1, 1, 1, 1, 1,
1877
+ 1, 1, 1, 1, 1, 1, 1, 1,
1878
+ 1, 1, 1, 1, 1, 1, 1, 1,
1879
+ 1, 1, 1, 1, 1, 1, 1, 1,
1880
+ 1, 1, 1, 1, 1, 1, 1, 1,
1881
+ 1, 1, 1, 1, 1, 1, 1, 1,
1882
+ 1, 1, 1, 1, 1, 1, 1, 1,
1883
+ 1, 1, 1, 1, 1, 1, 1, 1,
1884
+ 1, 1, 1, 1, 1, 1, 1, 1,
1885
+ 1, 1, 1, 1, 1, 1, 1, 1,
1886
+ 1, 1, 1, 1, 1, 1, 1, 1,
1887
+ 1, 1, 1, 1, 1, 1, 1, 1,
1888
+ 1, 1, 1, 1, 1, 1, 1, 1,
1889
+ 1, 1, 1, 1, 1, 1, 1, 1,
1890
+ 1, 1, 1, 1, 1, 1, 1, 1,
1891
+ 1, 1, 1, 1, 1, 1, 1, 1,
1892
+ 1, 1, 1, 1, 1, 1, 1, 1,
1893
+ 1, 1, 1, 1, 1, 1, 1, 1,
1894
+ 1, 1, 1, 1, 1, 1, 1, 1,
1895
+ 1, 1, 1, 1, 1, 1, 1, 1,
1896
+ 1, 1, 1, 1, 1, 1, 1, 1,
1897
+ 1, 1, 1, 1, 1, 1, 1, 1,
1898
+ 1, 1, 1, 1, 1, 1, 1, 1,
1899
+ 1, 1, 1, 1, 1, 1, 1, 1,
1900
+ 1, 1, 1, 1, 1, 1, 1, 1,
1901
+ 1, 1, 1, 1, 1, 1, 1, 1,
1902
+ 1, 1, 1, 1, 1, 1, 1, 1,
1903
+ 1, 1, 1, 1, 1, 1, 1, 1,
1904
+ 1, 1, 1, 1, 1, 1, 1, 1,
1905
+ 1, 1, 1, 1, 1, 1, 1, 1,
1906
+ 1, 1, 1, 1, 1, 1, 1, 1,
1907
+ 1, 1, 1, 1, 1, 1, 1, 1,
1908
+ 1, 1, 1, 1, 1, 1, 1, 1,
1909
+ 1, 1, 1, 1, 1, 1, 1, 1,
1910
+ 1, 1, 1, 1, 1, 1, 1, 1,
1911
+ 1, 1, 1, 1, 1, 1, 1, 1,
1912
+ 1, 1, 1, 1, 1, 6, 8, 10,
1913
+ 10, 11, 11, 11, 12, 12, 10, 13,
1914
+ 13, 11, 11, 10, 10, 10, 13, 13,
1915
+ 11, 12, 12, 8, 16, 16, 16, 6,
1916
+ 8, 8, 16, 16, 16
1917
+ ]
1918
+
1919
+ class << self
1920
+ attr_accessor :interval_expression_start
1921
+ end
1922
+ self.interval_expression_start = 1;
1923
+ class << self
1924
+ attr_accessor :interval_expression_first_final
1925
+ end
1926
+ self.interval_expression_first_final = 853;
1927
+ class << self
1928
+ attr_accessor :interval_expression_error
1929
+ end
1930
+ self.interval_expression_error = 0;
1931
+
1932
+ class << self
1933
+ attr_accessor :interval_expression_en_main
1934
+ end
1935
+ self.interval_expression_en_main = 1;
1936
+
1937
+
1938
+
1939
+ # Words/phrases in the expression that we'll strip/ignore before parsing.
1940
+ COMMON_DECORATORS = [ 'and', 'then', /\s+from now/, 'the next' ];
1941
+
1942
+
1943
+ ########################################################################
1944
+ ### C L A S S M E T H O D S
1945
+ ########################################################################
1946
+
1947
+ ### Parse a schedule expression +exp+.
1948
+ ###
1949
+ ### Parsing defaults to Time.now(), but if passed a +time+ object,
1950
+ ### all contexual times (2pm) are relative to it. If you know when
1951
+ ### an expression was generated, you can 'reconstitute' an interval
1952
+ ### object this way.
1953
+ ###
1954
+ def self::parse( exp, time=nil )
1955
+
1956
+ # Normalize the expression before parsing
1957
+ #
1958
+ exp = exp.downcase.
1959
+ gsub( /(?:[^[a-z][0-9][\.\-:]\s]+)/, '' ). # . : - a-z 0-9 only
1960
+ gsub( Regexp.union(COMMON_DECORATORS), '' ). # remove common decorator words
1961
+ gsub( /\s+/, ' ' ). # collapse whitespace
1962
+ gsub( /([:\-])+/, '\1' ). # collapse multiple - or : chars
1963
+ gsub( /\.+$/, '' ) # trailing periods
1964
+
1965
+ event = new( exp, time || Time.now )
1966
+ data = event.instance_variable_get( :@data )
1967
+
1968
+ # Ragel interface variables
1969
+ #
1970
+ key = ''
1971
+ mark = 0
1972
+
1973
+ begin
1974
+ p ||= 0
1975
+ pe ||= data.length
1976
+ cs = interval_expression_start
1977
+ end
1978
+
1979
+ eof = pe
1980
+
1981
+ begin
1982
+ testEof = false
1983
+ _klen, _trans, _keys = nil
1984
+ _goto_level = 0
1985
+ _resume = 10
1986
+ _eof_trans = 15
1987
+ _again = 20
1988
+ _test_eof = 30
1989
+ _out = 40
1990
+ while true
1991
+ if _goto_level <= 0
1992
+ if p == pe
1993
+ _goto_level = _test_eof
1994
+ next
1995
+ end
1996
+ if cs == 0
1997
+ _goto_level = _out
1998
+ next
1999
+ end
2000
+ end
2001
+ if _goto_level <= _resume
2002
+ _keys = _interval_expression_key_offsets[cs]
2003
+ _trans = _interval_expression_index_offsets[cs]
2004
+ _klen = _interval_expression_single_lengths[cs]
2005
+ _break_match = false
2006
+
2007
+ begin
2008
+ if _klen > 0
2009
+ _lower = _keys
2010
+ _upper = _keys + _klen - 1
2011
+
2012
+ loop do
2013
+ break if _upper < _lower
2014
+ _mid = _lower + ( (_upper - _lower) >> 1 )
2015
+
2016
+ if data[p].ord < _interval_expression_trans_keys[_mid]
2017
+ _upper = _mid - 1
2018
+ elsif data[p].ord > _interval_expression_trans_keys[_mid]
2019
+ _lower = _mid + 1
2020
+ else
2021
+ _trans += (_mid - _keys)
2022
+ _break_match = true
2023
+ break
2024
+ end
2025
+ end # loop
2026
+ break if _break_match
2027
+ _keys += _klen
2028
+ _trans += _klen
2029
+ end
2030
+ _klen = _interval_expression_range_lengths[cs]
2031
+ if _klen > 0
2032
+ _lower = _keys
2033
+ _upper = _keys + (_klen << 1) - 2
2034
+ loop do
2035
+ break if _upper < _lower
2036
+ _mid = _lower + (((_upper-_lower) >> 1) & ~1)
2037
+ if data[p].ord < _interval_expression_trans_keys[_mid]
2038
+ _upper = _mid - 2
2039
+ elsif data[p].ord > _interval_expression_trans_keys[_mid+1]
2040
+ _lower = _mid + 2
2041
+ else
2042
+ _trans += ((_mid - _keys) >> 1)
2043
+ _break_match = true
2044
+ break
2045
+ end
2046
+ end # loop
2047
+ break if _break_match
2048
+ _trans += _klen
2049
+ end
2050
+ end while false
2051
+ cs = _interval_expression_trans_targs[_trans];
2052
+
2053
+ if _interval_expression_trans_actions[_trans] != 0
2054
+
2055
+ case _interval_expression_trans_actions[_trans]
2056
+ when 2 then
2057
+ begin
2058
+ mark = p end
2059
+ when 1 then
2060
+ begin
2061
+ event.instance_variable_set( :@valid, false ) end
2062
+ when 3 then
2063
+ begin
2064
+ event.instance_variable_set( :@recurring, true ) end
2065
+ when 4 then
2066
+ begin
2067
+
2068
+ time = event.send( :extract, mark, p - mark )
2069
+ event.send( :set_starting, time, :time )
2070
+ end
2071
+ when 5 then
2072
+ begin
2073
+
2074
+ interval = event.send( :extract, mark, p - mark )
2075
+ event.send( :set_starting, interval, :interval )
2076
+ end
2077
+ when 9 then
2078
+ begin
2079
+
2080
+ interval = event.send( :extract, mark, p - mark )
2081
+ event.send( :set_interval, interval, :interval )
2082
+ end
2083
+ when 7 then
2084
+ begin
2085
+
2086
+ multiplier = event.send( :extract, mark, p - mark ).sub( / times/, '' )
2087
+ event.instance_variable_set( :@multiplier, multiplier.to_i )
2088
+ end
2089
+ when 14 then
2090
+ begin
2091
+
2092
+ time = event.send( :extract, mark, p - mark )
2093
+ event.send( :set_ending, time, :time )
2094
+ end
2095
+ when 15 then
2096
+ begin
2097
+
2098
+ interval = event.send( :extract, mark, p - mark )
2099
+ event.send( :set_ending, interval, :interval )
2100
+ end
2101
+ end # action switch
2102
+ end
2103
+
2104
+ end
2105
+ if _goto_level <= _again
2106
+ if cs == 0
2107
+ _goto_level = _out
2108
+ next
2109
+ end
2110
+ p += 1
2111
+ if p != pe
2112
+ _goto_level = _resume
2113
+ next
2114
+ end
2115
+ end
2116
+ if _goto_level <= _test_eof
2117
+ if p == eof
2118
+ begin
2119
+ case ( _interval_expression_eof_actions[cs] )
2120
+ when 1 then
2121
+ begin
2122
+ event.instance_variable_set( :@valid, false ) end
2123
+ when 10 then
2124
+ begin
2125
+
2126
+ time = event.send( :extract, mark, p - mark )
2127
+ event.send( :set_starting, time, :time )
2128
+ end
2129
+ begin
2130
+ event.instance_variable_set( :@valid, true ) end
2131
+ when 13 then
2132
+ begin
2133
+
2134
+ interval = event.send( :extract, mark, p - mark )
2135
+ event.send( :set_starting, interval, :interval )
2136
+ end
2137
+ begin
2138
+ event.instance_variable_set( :@valid, true ) end
2139
+ when 16 then
2140
+ begin
2141
+
2142
+ time = event.send( :extract, mark, p - mark )
2143
+ event.send( :set_interval, time, :time )
2144
+ end
2145
+ begin
2146
+ event.instance_variable_set( :@valid, true ) end
2147
+ when 8 then
2148
+ begin
2149
+
2150
+ interval = event.send( :extract, mark, p - mark )
2151
+ event.send( :set_interval, interval, :interval )
2152
+ end
2153
+ begin
2154
+ event.instance_variable_set( :@valid, true ) end
2155
+ when 6 then
2156
+ begin
2157
+
2158
+ multiplier = event.send( :extract, mark, p - mark ).sub( / times/, '' )
2159
+ event.instance_variable_set( :@multiplier, multiplier.to_i )
2160
+ end
2161
+ begin
2162
+ event.instance_variable_set( :@valid, true ) end
2163
+ when 11 then
2164
+ begin
2165
+
2166
+ time = event.send( :extract, mark, p - mark )
2167
+ event.send( :set_ending, time, :time )
2168
+ end
2169
+ begin
2170
+ event.instance_variable_set( :@valid, true ) end
2171
+ when 12 then
2172
+ begin
2173
+
2174
+ interval = event.send( :extract, mark, p - mark )
2175
+ event.send( :set_ending, interval, :interval )
2176
+ end
2177
+ begin
2178
+ event.instance_variable_set( :@valid, true ) end
2179
+ end
2180
+ end
2181
+ end
2182
+
2183
+ end
2184
+ if _goto_level <= _out
2185
+ break
2186
+ end
2187
+ end
2188
+ end
2189
+
2190
+
2191
+ # Attach final time logic and sanity checks.
2192
+ event.send( :finalize )
2193
+
2194
+ return event
2195
+ end
2196
+
2197
+
2198
+ ########################################################################
2199
+ ### I N S T A N C E M E T H O D S
2200
+ ########################################################################
2201
+
2202
+ ### Instantiate a new TimeExpression, provided an +expression+ string
2203
+ ### that describes when this event will take place in natural english,
2204
+ ### and a +base+ Time to perform calculations against.
2205
+ ###
2206
+ private_class_method :new
2207
+ def initialize( expression, base ) # :nodoc:
2208
+ @exp = expression
2209
+ @data = expression.to_s.unpack( 'c*' )
2210
+ @base = base
2211
+
2212
+ @valid = false
2213
+ @recurring = false
2214
+ @starting = nil
2215
+ @interval = nil
2216
+ @multiplier = nil
2217
+ @ending = nil
2218
+ end
2219
+
2220
+
2221
+ ######
2222
+ public
2223
+ ######
2224
+
2225
+ # Is the schedule expression parsable?
2226
+ attr_reader :valid
2227
+
2228
+ # Does this event repeat?
2229
+ attr_reader :recurring
2230
+
2231
+ # The valid start time for the schedule (for recurring events)
2232
+ attr_reader :starting
2233
+
2234
+ # The valid end time for the schedule (for recurring events)
2235
+ attr_reader :ending
2236
+
2237
+ # The interval to wait before the event should be acted on.
2238
+ attr_reader :interval
2239
+
2240
+ # An optional interval multipler for expressing counts.
2241
+ attr_reader :multiplier
2242
+
2243
+
2244
+ ### If this interval is on a stack somewhere and ready to
2245
+ ### fire, is it okay to do so based on the specified
2246
+ ### expression criteria?
2247
+ ###
2248
+ ### Returns +true+ if it should fire, +false+ if it should not
2249
+ ### but could at a later attempt, and +nil+ if the interval has
2250
+ ### expired.
2251
+ ###
2252
+ def fire?
2253
+ now = Time.now
2254
+
2255
+ # Interval has expired.
2256
+ return nil if self.ending && now > self.ending
2257
+
2258
+ # Interval is not yet in its current time window.
2259
+ return false if self.starting - now > 0
2260
+
2261
+ # Looking good.
2262
+ return true
2263
+ end
2264
+
2265
+
2266
+ ### Just return the original event expression.
2267
+ ###
2268
+ def to_s
2269
+ return @exp
2270
+ end
2271
+
2272
+
2273
+ ### Inspection string.
2274
+ ###
2275
+ def inspect
2276
+ return ( "<%s:0x%08x valid:%s recur:%s expression:%p " +
2277
+ "starting:%p interval:%p ending:%p>" ) % [
2278
+ self.class.name,
2279
+ self.object_id * 2,
2280
+ self.valid,
2281
+ self.recurring,
2282
+ self.to_s,
2283
+ self.starting,
2284
+ self.interval,
2285
+ self.ending
2286
+ ]
2287
+ end
2288
+
2289
+
2290
+ ### Comparable interface, order by interval, 'soonest' first.
2291
+ ###
2292
+ def <=>( other )
2293
+ return self.interval <=> other.interval
2294
+ end
2295
+
2296
+
2297
+ #########
2298
+ protected
2299
+ #########
2300
+
2301
+ ### Given a +start+ and +ending+ scanner position,
2302
+ ### return an ascii representation of the data slice.
2303
+ ###
2304
+ def extract( start, ending )
2305
+ slice = @data[ start, ending ]
2306
+ return '' unless slice
2307
+ return slice.pack( 'c*' )
2308
+ end
2309
+
2310
+
2311
+ ### Parse and set the starting attribute, given a +time_arg+
2312
+ ### string and the +type+ of string (interval or exact time)
2313
+ ###
2314
+ def set_starting( time_arg, type )
2315
+ start = self.get_time( time_arg, type )
2316
+ @starting = start
2317
+
2318
+ # If start time is expressed as a post-conditional (we've
2319
+ # already got an end time) we need to recalculate the end
2320
+ # as an offset from the start. The original parsed ending
2321
+ # arguments should have already been cached when it was
2322
+ # previously set.
2323
+ #
2324
+ if self.ending && self.recurring
2325
+ self.set_ending( *@ending_args )
2326
+ end
2327
+
2328
+ return @starting
2329
+ end
2330
+
2331
+
2332
+ ### Parse and set the interval attribute, given a +time_arg+
2333
+ ### string and the +type+ of string (interval or exact time)
2334
+ ###
2335
+ ### Perform consistency and sanity checks before returning an
2336
+ ### integer representing the amount of time needed to sleep before
2337
+ ### firing the event.
2338
+ ###
2339
+ def set_interval( time_arg, type )
2340
+ interval = nil
2341
+ if self.starting && type == :time
2342
+ raise Symphony::Metronome::TimeParseError, "That doesn't make sense, just use 'at [datetime]' instead"
2343
+ else
2344
+ interval = self.get_time( time_arg, type )
2345
+ interval = interval - @base
2346
+ end
2347
+
2348
+ @interval = interval
2349
+ return @interval
2350
+ end
2351
+
2352
+
2353
+ ### Parse and set the ending attribute, given a +time_arg+
2354
+ ### string and the +type+ of string (interval or exact time)
2355
+ ###
2356
+ ### Perform consistency and sanity checks before returning a
2357
+ ### Time object.
2358
+ ###
2359
+ def set_ending( time_arg, type )
2360
+ ending = nil
2361
+
2362
+ # Ending dates only make sense for recurring events.
2363
+ #
2364
+ if self.recurring
2365
+ @ending_args = [ time_arg, type ] # squirrel away for post-set starts
2366
+
2367
+ # Make the interval an offset of the start time, instead of now.
2368
+ #
2369
+ # This is the contextual difference between:
2370
+ # every minute until 6 hours from now (ending based on NOW)
2371
+ # and
2372
+ # starting in a year run every minute for 1 month (ending based on start time)
2373
+ #
2374
+ if self.starting && type == :interval
2375
+ diff = self.parse_interval( time_arg )
2376
+ ending = self.starting + diff
2377
+
2378
+ # (offset from now)
2379
+ #
2380
+ else
2381
+ ending = self.get_time( time_arg, type )
2382
+ end
2383
+
2384
+ # Check the end time is after the start time.
2385
+ #
2386
+ if self.starting && ending < self.starting
2387
+ raise Symphony::Metronome::TimeParseError, "recurring event ends before it begins"
2388
+ end
2389
+
2390
+ else
2391
+ self.log.debug "Ignoring ending date, event is not recurring."
2392
+ end
2393
+
2394
+ @ending = ending
2395
+ return @ending
2396
+ end
2397
+
2398
+
2399
+ ### Perform finishing logic and final sanity checks before returning
2400
+ ### a parsed object.
2401
+ ###
2402
+ def finalize
2403
+ raise Symphony::Metronome::TimeParseError, "unable to parse expression" unless self.valid
2404
+
2405
+ # Ensure start time is populated.
2406
+ #
2407
+ unless self.starting
2408
+ if self.recurring
2409
+ @starting = @base
2410
+ else
2411
+ raise Symphony::Metronome::TimeParseError, "non-deterministic expression" if self.interval.nil?
2412
+ @starting = @base + self.interval
2413
+ end
2414
+ end
2415
+
2416
+ # Alter the interval if a multiplier was specified.
2417
+ #
2418
+ if self.multiplier
2419
+ if self.ending
2420
+
2421
+ # Regular 'count' style multipler with end date.
2422
+ # (run 10 times a minute for 2 days)
2423
+ # Just divide the current interval by the count.
2424
+ #
2425
+ if self.interval
2426
+ @interval = self.interval.to_f / self.multiplier
2427
+
2428
+ # Timeboxed multiplier (start [date] run 10 times end [date])
2429
+ # Evenly spread the interval out over the time window.
2430
+ #
2431
+ else
2432
+ diff = self.ending - self.starting
2433
+ @interval = diff.to_f / self.multiplier
2434
+ end
2435
+
2436
+ # Regular 'count' style multipler (run 10 times a minute)
2437
+ # Just divide the current interval by the count.
2438
+ #
2439
+ else
2440
+ raise Symphony::Metronome::TimeParseError, "An end date or interval is required" unless self.interval
2441
+ @interval = self.interval.to_f / self.multiplier
2442
+ end
2443
+ end
2444
+ end
2445
+
2446
+
2447
+ ### Given a +time_arg+ string and a type (:interval or :time),
2448
+ ### dispatch to the appropriate parser.
2449
+ ###
2450
+ def get_time( time_arg, type )
2451
+ time = nil
2452
+
2453
+ if type == :interval
2454
+ secs = self.parse_interval( time_arg )
2455
+ time = @base + secs if secs
2456
+ end
2457
+
2458
+ if type == :time
2459
+ time = self.parse_time( time_arg )
2460
+ end
2461
+
2462
+ raise Symphony::Metronome::TimeParseError, "unable to parse time" if time.nil?
2463
+ return time
2464
+ end
2465
+
2466
+
2467
+ ### Parse a +time_arg+ string (anything parsable buy Time.parse())
2468
+ ### into a Time object.
2469
+ ###
2470
+ def parse_time( time_arg )
2471
+ time = Time.parse( time_arg, @base ) rescue nil
2472
+
2473
+ # Generated date is in the past.
2474
+ #
2475
+ if time && @base > time
2476
+
2477
+ # Ensure future dates for ambiguous times (2pm)
2478
+ time = time + 1.day if time_arg.length < 8
2479
+
2480
+ # Still in the past, abandon all hope.
2481
+ raise Symphony::Metronome::TimeParseError, "attempt to schedule in the past" if @base > time
2482
+ end
2483
+
2484
+ self.log.debug "Parsed %p (time) to: %p" % [ time_arg, time ]
2485
+ return time
2486
+ end
2487
+
2488
+
2489
+ ### Parse a +time_arg+ interval string ("30 seconds") into an
2490
+ ### Integer.
2491
+ ###
2492
+ def parse_interval( interval_arg )
2493
+ duration, span = interval_arg.split( /\s+/ )
2494
+
2495
+ # catch the 'a' or 'an' case (ex: "an hour")
2496
+ duration = 1 if duration.index( 'a' ) == 0
2497
+
2498
+ # catch the 'other' case, ie: 'every other hour'
2499
+ duration = 2 if duration == 'other'
2500
+
2501
+ # catch the singular case (ex: "hour")
2502
+ unless span
2503
+ span = duration
2504
+ duration = 1
2505
+ end
2506
+
2507
+ use_milliseconds = span.sub!( 'milli', '' )
2508
+ interval = calculate_seconds( duration.to_f, span.to_sym )
2509
+
2510
+ # milliseconds
2511
+ interval = duration.to_f / 1000 if use_milliseconds
2512
+
2513
+ self.log.debug "Parsed %p (interval) to: %p" % [ interval_arg, interval ]
2514
+ return interval
2515
+ end
2516
+
2517
+ end # class TimeExpression
2518
+