diff options
Diffstat (limited to 'src/libjin-lua/scripts/ai')
-rw-r--r-- | src/libjin-lua/scripts/ai/ai.lua | 4 | ||||
-rw-r--r-- | src/libjin-lua/scripts/ai/ai.lua.h | 7 | ||||
-rw-r--r-- | src/libjin-lua/scripts/ai/state_machine.lua | 222 | ||||
-rw-r--r-- | src/libjin-lua/scripts/ai/state_machine.lua.h | 382 |
4 files changed, 297 insertions, 318 deletions
diff --git a/src/libjin-lua/scripts/ai/ai.lua b/src/libjin-lua/scripts/ai/ai.lua index 7afe7d8..3ce7a12 100644 --- a/src/libjin-lua/scripts/ai/ai.lua +++ b/src/libjin-lua/scripts/ai/ai.lua @@ -3,6 +3,6 @@ jin.ai = jin.ai or {} local ja = jin.ai --ja.StateMachineType = { --- STEPWISE = 1, --- ITERATIVE = 2, +-- STEPWISE = 1, +-- ITERATIVE = 2, --} diff --git a/src/libjin-lua/scripts/ai/ai.lua.h b/src/libjin-lua/scripts/ai/ai.lua.h index 90aa889..6ef9b73 100644 --- a/src/libjin-lua/scripts/ai/ai.lua.h +++ b/src/libjin-lua/scripts/ai/ai.lua.h @@ -3,9 +3,8 @@ static char ai_lua[] = { 106,105,110,46,97,105,32,61,32,106,105,110,46,97,105,32,111,114,32,123, 125,32,13,10,13,10,108,111,99,97,108,32,106,97,32,61,32,106,105,110, 46,97,105,13,10,13,10,45,45,106,97,46,83,116,97,116,101,77,97,99, -104,105,110,101,84,121,112,101,32,61,32,123,13,10,45,45,32,32,32,32, -83,84,69,80,87,73,83,69,32,61,32,49,44,32,13,10,45,45,32,32, -32,32,73,84,69,82,65,84,73,86,69,32,61,32,50,44,13,10,45,45, -125,13,10,0 +104,105,110,101,84,121,112,101,32,61,32,123,13,10,45,45,32,32,83,84, +69,80,87,73,83,69,32,61,32,49,44,32,13,10,45,45,32,32,73,84, +69,82,65,84,73,86,69,32,61,32,50,44,13,10,45,45,125,13,10,0 }; diff --git a/src/libjin-lua/scripts/ai/state_machine.lua b/src/libjin-lua/scripts/ai/state_machine.lua index 423576a..82d7297 100644 --- a/src/libjin-lua/scripts/ai/state_machine.lua +++ b/src/libjin-lua/scripts/ai/state_machine.lua @@ -11,149 +11,149 @@ local NONE = "none" local ASYNC = "async" local function call_handler(handler, params) - if handler then - return handler(unpack(params)) - end + if handler then + return handler(unpack(params)) + end end local function create_transition(name) - local can, to, from, params - - local function transition(self, ...) - if self.asyncState == NONE then - can, to = self:can(name) - from = self.current - params = { self, name, from, to, ...} - - if not can then return false end - self.currentTransitioningEvent = name - - local beforeReturn = call_handler(self["onbefore" .. name], params) - local leaveReturn = call_handler(self["onleave" .. from], params) - - if beforeReturn == false or leaveReturn == false then - return false - end - - self.asyncState = name .. "WaitingOnLeave" - - if leaveReturn ~= ASYNC then - transition(self, ...) - end - - return true - elseif self.asyncState == name .. "WaitingOnLeave" then - self.current = to - - local enterReturn = call_handler(self["onenter" .. to] or self["on" .. to], params) - - self.asyncState = name .. "WaitingOnEnter" - - if enterReturn ~= ASYNC then - transition(self, ...) - end - - return true - elseif self.asyncState == name .. "WaitingOnEnter" then - call_handler(self["onafter" .. name] or self["on" .. name], params) - call_handler(self["onstatechange"], params) - self.asyncState = NONE - self.currentTransitioningEvent = nil - return true - else - if string.find(self.asyncState, "WaitingOnLeave") or string.find(self.asyncState, "WaitingOnEnter") then - self.asyncState = NONE - transition(self, ...) - return true - end - end - - self.currentTransitioningEvent = nil + local can, to, from, params + + local function transition(self, ...) + if self.asyncState == NONE then + can, to = self:can(name) + from = self.current + params = { self, name, from, to, ...} + + if not can then return false end + self.currentTransitioningEvent = name + + local beforeReturn = call_handler(self["onbefore" .. name], params) + local leaveReturn = call_handler(self["onleave" .. from], params) + + if beforeReturn == false or leaveReturn == false then return false + end + + self.asyncState = name .. "WaitingOnLeave" + + if leaveReturn ~= ASYNC then + transition(self, ...) + end + + return true + elseif self.asyncState == name .. "WaitingOnLeave" then + self.current = to + + local enterReturn = call_handler(self["onenter" .. to] or self["on" .. to], params) + + self.asyncState = name .. "WaitingOnEnter" + + if enterReturn ~= ASYNC then + transition(self, ...) + end + + return true + elseif self.asyncState == name .. "WaitingOnEnter" then + call_handler(self["onafter" .. name] or self["on" .. name], params) + call_handler(self["onstatechange"], params) + self.asyncState = NONE + self.currentTransitioningEvent = nil + return true + else + if string.find(self.asyncState, "WaitingOnLeave") or string.find(self.asyncState, "WaitingOnEnter") then + self.asyncState = NONE + transition(self, ...) + return true + end end - return transition + self.currentTransitioningEvent = nil + return false + end + + return transition end local function add_to_map(map, event) - if type(event.from) == 'string' then - map[event.from] = event.to - else - for _, from in ipairs(event.from) do - map[from] = event.to - end + if type(event.from) == 'string' then + map[event.from] = event.to + else + for _, from in ipairs(event.from) do + map[from] = event.to end + end end function machine.create(options) - assert(options.events) - - local fsm = {} - setmetatable(fsm, machine) - - fsm.options = options - fsm.current = options.initial or 'none' - fsm.asyncState = NONE - fsm.events = {} - - for _, event in ipairs(options.events or {}) do - local name = event.name - fsm[name] = fsm[name] or create_transition(name) - fsm.events[name] = fsm.events[name] or { map = {} } - add_to_map(fsm.events[name].map, event) - end - - for name, callback in pairs(options.callbacks or {}) do - fsm[name] = callback - end - - return fsm + assert(options.events) + + local fsm = {} + setmetatable(fsm, machine) + + fsm.options = options + fsm.current = options.initial or 'none' + fsm.asyncState = NONE + fsm.events = {} + + for _, event in ipairs(options.events or {}) do + local name = event.name + fsm[name] = fsm[name] or create_transition(name) + fsm.events[name] = fsm.events[name] or { map = {} } + add_to_map(fsm.events[name].map, event) + end + + for name, callback in pairs(options.callbacks or {}) do + fsm[name] = callback + end + + return fsm end function machine:is(state) - return self.current == state + return self.current == state end function machine:can(e) - local event = self.events[e] - local to = event and event.map[self.current] or event.map['*'] - return to ~= nil, to + local event = self.events[e] + local to = event and event.map[self.current] or event.map['*'] + return to ~= nil, to end function machine:cannot(e) - return not self:can(e) + return not self:can(e) end function machine:todot(filename) - local dotfile = io.open(filename,'w') - dotfile:write('digraph {\n') - local transition = function(event,from,to) - dotfile:write(string.format('%s -> %s [label=%s];\n',from,to,event)) - end - for _, event in pairs(self.options.events) do - if type(event.from) == 'table' then - for _, from in ipairs(event.from) do - transition(event.name,from,event.to) - end - else - transition(event.name,event.from,event.to) - end + local dotfile = io.open(filename,'w') + dotfile:write('digraph {\n') + local transition = function(event,from,to) + dotfile:write(string.format('%s -> %s [label=%s];\n',from,to,event)) + end + for _, event in pairs(self.options.events) do + if type(event.from) == 'table' then + for _, from in ipairs(event.from) do + transition(event.name,from,event.to) + end + else + transition(event.name,event.from,event.to) end - dotfile:write('}\n') - dotfile:close() + end + dotfile:write('}\n') + dotfile:close() end function machine:transition(event) - if self.currentTransitioningEvent == event then - return self[self.currentTransitioningEvent](self) - end + if self.currentTransitioningEvent == event then + return self[self.currentTransitioningEvent](self) + end end function machine:cancelTransition(event) - if self.currentTransitioningEvent == event then - self.asyncState = NONE - self.currentTransitioningEvent = nil - end + if self.currentTransitioningEvent == event then + self.asyncState = NONE + self.currentTransitioningEvent = nil + end end machine.NONE = NONE diff --git a/src/libjin-lua/scripts/ai/state_machine.lua.h b/src/libjin-lua/scripts/ai/state_machine.lua.h index 93a1a9a..4d70378 100644 --- a/src/libjin-lua/scripts/ai/state_machine.lua.h +++ b/src/libjin-lua/scripts/ai/state_machine.lua.h @@ -22,229 +22,209 @@ static char state_machine_lua[] = { 13,10,108,111,99,97,108,32,65,83,89,78,67,32,61,32,34,97,115,121, 110,99,34,13,10,13,10,108,111,99,97,108,32,102,117,110,99,116,105,111, 110,32,99,97,108,108,95,104,97,110,100,108,101,114,40,104,97,110,100,108, -101,114,44,32,112,97,114,97,109,115,41,13,10,32,32,32,32,105,102,32, -104,97,110,100,108,101,114,32,116,104,101,110,13,10,32,32,32,32,32,32, -32,32,114,101,116,117,114,110,32,104,97,110,100,108,101,114,40,117,110,112, -97,99,107,40,112,97,114,97,109,115,41,41,13,10,32,32,32,32,101,110, -100,13,10,101,110,100,13,10,13,10,108,111,99,97,108,32,102,117,110,99, -116,105,111,110,32,99,114,101,97,116,101,95,116,114,97,110,115,105,116,105, -111,110,40,110,97,109,101,41,13,10,32,32,32,32,108,111,99,97,108,32, -99,97,110,44,32,116,111,44,32,102,114,111,109,44,32,112,97,114,97,109, -115,13,10,13,10,32,32,32,32,108,111,99,97,108,32,102,117,110,99,116, -105,111,110,32,116,114,97,110,115,105,116,105,111,110,40,115,101,108,102,44, -32,46,46,46,41,13,10,32,32,32,32,32,32,32,32,105,102,32,115,101, -108,102,46,97,115,121,110,99,83,116,97,116,101,32,61,61,32,78,79,78, -69,32,116,104,101,110,13,10,32,32,32,32,32,32,32,32,32,32,32,32, -99,97,110,44,32,116,111,32,61,32,115,101,108,102,58,99,97,110,40,110, -97,109,101,41,13,10,32,32,32,32,32,32,32,32,32,32,32,32,102,114, -111,109,32,61,32,115,101,108,102,46,99,117,114,114,101,110,116,13,10,32, -32,32,32,32,32,32,32,32,32,32,32,112,97,114,97,109,115,32,61,32, -123,32,115,101,108,102,44,32,110,97,109,101,44,32,102,114,111,109,44,32, -116,111,44,32,46,46,46,125,13,10,13,10,32,32,32,32,32,32,32,32, +101,114,44,32,112,97,114,97,109,115,41,13,10,32,32,105,102,32,104,97, +110,100,108,101,114,32,116,104,101,110,13,10,32,32,32,32,114,101,116,117, +114,110,32,104,97,110,100,108,101,114,40,117,110,112,97,99,107,40,112,97, +114,97,109,115,41,41,13,10,32,32,101,110,100,13,10,101,110,100,13,10, +13,10,108,111,99,97,108,32,102,117,110,99,116,105,111,110,32,99,114,101, +97,116,101,95,116,114,97,110,115,105,116,105,111,110,40,110,97,109,101,41, +13,10,32,32,108,111,99,97,108,32,99,97,110,44,32,116,111,44,32,102, +114,111,109,44,32,112,97,114,97,109,115,13,10,13,10,32,32,108,111,99, +97,108,32,102,117,110,99,116,105,111,110,32,116,114,97,110,115,105,116,105, +111,110,40,115,101,108,102,44,32,46,46,46,41,13,10,32,32,32,32,105, +102,32,115,101,108,102,46,97,115,121,110,99,83,116,97,116,101,32,61,61, +32,78,79,78,69,32,116,104,101,110,13,10,32,32,32,32,32,32,99,97, +110,44,32,116,111,32,61,32,115,101,108,102,58,99,97,110,40,110,97,109, +101,41,13,10,32,32,32,32,32,32,102,114,111,109,32,61,32,115,101,108, +102,46,99,117,114,114,101,110,116,13,10,32,32,32,32,32,32,112,97,114, +97,109,115,32,61,32,123,32,115,101,108,102,44,32,110,97,109,101,44,32, +102,114,111,109,44,32,116,111,44,32,46,46,46,125,13,10,13,10,32,32, 32,32,32,32,105,102,32,110,111,116,32,99,97,110,32,116,104,101,110,32, 114,101,116,117,114,110,32,102,97,108,115,101,32,101,110,100,13,10,32,32, -32,32,32,32,32,32,32,32,32,32,115,101,108,102,46,99,117,114,114,101, -110,116,84,114,97,110,115,105,116,105,111,110,105,110,103,69,118,101,110,116, -32,61,32,110,97,109,101,13,10,13,10,32,32,32,32,32,32,32,32,32, -32,32,32,108,111,99,97,108,32,98,101,102,111,114,101,82,101,116,117,114, -110,32,61,32,99,97,108,108,95,104,97,110,100,108,101,114,40,115,101,108, -102,91,34,111,110,98,101,102,111,114,101,34,32,46,46,32,110,97,109,101, -93,44,32,112,97,114,97,109,115,41,13,10,32,32,32,32,32,32,32,32, -32,32,32,32,108,111,99,97,108,32,108,101,97,118,101,82,101,116,117,114, -110,32,61,32,99,97,108,108,95,104,97,110,100,108,101,114,40,115,101,108, -102,91,34,111,110,108,101,97,118,101,34,32,46,46,32,102,114,111,109,93, -44,32,112,97,114,97,109,115,41,13,10,13,10,32,32,32,32,32,32,32, -32,32,32,32,32,105,102,32,98,101,102,111,114,101,82,101,116,117,114,110, -32,61,61,32,102,97,108,115,101,32,111,114,32,108,101,97,118,101,82,101, -116,117,114,110,32,61,61,32,102,97,108,115,101,32,116,104,101,110,13,10, -32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,114,101,116,117, -114,110,32,102,97,108,115,101,13,10,32,32,32,32,32,32,32,32,32,32, -32,32,101,110,100,13,10,13,10,32,32,32,32,32,32,32,32,32,32,32, -32,115,101,108,102,46,97,115,121,110,99,83,116,97,116,101,32,61,32,110, -97,109,101,32,46,46,32,34,87,97,105,116,105,110,103,79,110,76,101,97, -118,101,34,13,10,13,10,32,32,32,32,32,32,32,32,32,32,32,32,105, -102,32,108,101,97,118,101,82,101,116,117,114,110,32,126,61,32,65,83,89, -78,67,32,116,104,101,110,13,10,32,32,32,32,32,32,32,32,32,32,32, -32,32,32,32,32,116,114,97,110,115,105,116,105,111,110,40,115,101,108,102, -44,32,46,46,46,41,13,10,32,32,32,32,32,32,32,32,32,32,32,32, -101,110,100,13,10,32,32,32,32,32,32,32,32,32,32,32,32,13,10,32, -32,32,32,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,116,114, -117,101,13,10,32,32,32,32,32,32,32,32,101,108,115,101,105,102,32,115, +32,32,32,32,115,101,108,102,46,99,117,114,114,101,110,116,84,114,97,110, +115,105,116,105,111,110,105,110,103,69,118,101,110,116,32,61,32,110,97,109, +101,13,10,13,10,32,32,32,32,32,32,108,111,99,97,108,32,98,101,102, +111,114,101,82,101,116,117,114,110,32,61,32,99,97,108,108,95,104,97,110, +100,108,101,114,40,115,101,108,102,91,34,111,110,98,101,102,111,114,101,34, +32,46,46,32,110,97,109,101,93,44,32,112,97,114,97,109,115,41,13,10, +32,32,32,32,32,32,108,111,99,97,108,32,108,101,97,118,101,82,101,116, +117,114,110,32,61,32,99,97,108,108,95,104,97,110,100,108,101,114,40,115, +101,108,102,91,34,111,110,108,101,97,118,101,34,32,46,46,32,102,114,111, +109,93,44,32,112,97,114,97,109,115,41,13,10,13,10,32,32,32,32,32, +32,105,102,32,98,101,102,111,114,101,82,101,116,117,114,110,32,61,61,32, +102,97,108,115,101,32,111,114,32,108,101,97,118,101,82,101,116,117,114,110, +32,61,61,32,102,97,108,115,101,32,116,104,101,110,13,10,32,32,32,32, +32,32,32,32,114,101,116,117,114,110,32,102,97,108,115,101,13,10,32,32, +32,32,32,32,101,110,100,13,10,13,10,32,32,32,32,32,32,115,101,108, +102,46,97,115,121,110,99,83,116,97,116,101,32,61,32,110,97,109,101,32, +46,46,32,34,87,97,105,116,105,110,103,79,110,76,101,97,118,101,34,13, +10,13,10,32,32,32,32,32,32,105,102,32,108,101,97,118,101,82,101,116, +117,114,110,32,126,61,32,65,83,89,78,67,32,116,104,101,110,13,10,32, +32,32,32,32,32,32,32,116,114,97,110,115,105,116,105,111,110,40,115,101, +108,102,44,32,46,46,46,41,13,10,32,32,32,32,32,32,101,110,100,13, +10,32,32,32,32,32,32,13,10,32,32,32,32,32,32,114,101,116,117,114, +110,32,116,114,117,101,13,10,32,32,32,32,101,108,115,101,105,102,32,115, 101,108,102,46,97,115,121,110,99,83,116,97,116,101,32,61,61,32,110,97, 109,101,32,46,46,32,34,87,97,105,116,105,110,103,79,110,76,101,97,118, -101,34,32,116,104,101,110,13,10,32,32,32,32,32,32,32,32,32,32,32, -32,115,101,108,102,46,99,117,114,114,101,110,116,32,61,32,116,111,13,10, -13,10,32,32,32,32,32,32,32,32,32,32,32,32,108,111,99,97,108,32, -101,110,116,101,114,82,101,116,117,114,110,32,61,32,99,97,108,108,95,104, -97,110,100,108,101,114,40,115,101,108,102,91,34,111,110,101,110,116,101,114, -34,32,46,46,32,116,111,93,32,111,114,32,115,101,108,102,91,34,111,110, -34,32,46,46,32,116,111,93,44,32,112,97,114,97,109,115,41,13,10,13, -10,32,32,32,32,32,32,32,32,32,32,32,32,115,101,108,102,46,97,115, -121,110,99,83,116,97,116,101,32,61,32,110,97,109,101,32,46,46,32,34, -87,97,105,116,105,110,103,79,110,69,110,116,101,114,34,13,10,13,10,32, -32,32,32,32,32,32,32,32,32,32,32,105,102,32,101,110,116,101,114,82, -101,116,117,114,110,32,126,61,32,65,83,89,78,67,32,116,104,101,110,13, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,116,114,97, -110,115,105,116,105,111,110,40,115,101,108,102,44,32,46,46,46,41,13,10, -32,32,32,32,32,32,32,32,32,32,32,32,101,110,100,13,10,32,32,32, -32,32,32,32,32,32,32,32,32,13,10,32,32,32,32,32,32,32,32,32, -32,32,32,114,101,116,117,114,110,32,116,114,117,101,13,10,32,32,32,32, -32,32,32,32,101,108,115,101,105,102,32,115,101,108,102,46,97,115,121,110, -99,83,116,97,116,101,32,61,61,32,110,97,109,101,32,46,46,32,34,87, -97,105,116,105,110,103,79,110,69,110,116,101,114,34,32,116,104,101,110,13, -10,32,32,32,32,32,32,32,32,32,32,32,32,99,97,108,108,95,104,97, +101,34,32,116,104,101,110,13,10,32,32,32,32,32,32,115,101,108,102,46, +99,117,114,114,101,110,116,32,61,32,116,111,13,10,13,10,32,32,32,32, +32,32,108,111,99,97,108,32,101,110,116,101,114,82,101,116,117,114,110,32, +61,32,99,97,108,108,95,104,97,110,100,108,101,114,40,115,101,108,102,91, +34,111,110,101,110,116,101,114,34,32,46,46,32,116,111,93,32,111,114,32, +115,101,108,102,91,34,111,110,34,32,46,46,32,116,111,93,44,32,112,97, +114,97,109,115,41,13,10,13,10,32,32,32,32,32,32,115,101,108,102,46, +97,115,121,110,99,83,116,97,116,101,32,61,32,110,97,109,101,32,46,46, +32,34,87,97,105,116,105,110,103,79,110,69,110,116,101,114,34,13,10,13, +10,32,32,32,32,32,32,105,102,32,101,110,116,101,114,82,101,116,117,114, +110,32,126,61,32,65,83,89,78,67,32,116,104,101,110,13,10,32,32,32, +32,32,32,32,32,116,114,97,110,115,105,116,105,111,110,40,115,101,108,102, +44,32,46,46,46,41,13,10,32,32,32,32,32,32,101,110,100,13,10,32, +32,32,32,32,32,13,10,32,32,32,32,32,32,114,101,116,117,114,110,32, +116,114,117,101,13,10,32,32,32,32,101,108,115,101,105,102,32,115,101,108, +102,46,97,115,121,110,99,83,116,97,116,101,32,61,61,32,110,97,109,101, +32,46,46,32,34,87,97,105,116,105,110,103,79,110,69,110,116,101,114,34, +32,116,104,101,110,13,10,32,32,32,32,32,32,99,97,108,108,95,104,97, 110,100,108,101,114,40,115,101,108,102,91,34,111,110,97,102,116,101,114,34, 32,46,46,32,110,97,109,101,93,32,111,114,32,115,101,108,102,91,34,111, 110,34,32,46,46,32,110,97,109,101,93,44,32,112,97,114,97,109,115,41, -13,10,32,32,32,32,32,32,32,32,32,32,32,32,99,97,108,108,95,104, -97,110,100,108,101,114,40,115,101,108,102,91,34,111,110,115,116,97,116,101, -99,104,97,110,103,101,34,93,44,32,112,97,114,97,109,115,41,13,10,32, -32,32,32,32,32,32,32,32,32,32,32,115,101,108,102,46,97,115,121,110, -99,83,116,97,116,101,32,61,32,78,79,78,69,13,10,32,32,32,32,32, -32,32,32,32,32,32,32,115,101,108,102,46,99,117,114,114,101,110,116,84, -114,97,110,115,105,116,105,111,110,105,110,103,69,118,101,110,116,32,61,32, -110,105,108,13,10,32,32,32,32,32,32,32,32,32,32,32,32,114,101,116, -117,114,110,32,116,114,117,101,13,10,32,32,32,32,32,32,32,32,101,108, -115,101,13,10,32,32,32,32,32,32,32,32,9,105,102,32,115,116,114,105, -110,103,46,102,105,110,100,40,115,101,108,102,46,97,115,121,110,99,83,116, -97,116,101,44,32,34,87,97,105,116,105,110,103,79,110,76,101,97,118,101, -34,41,32,111,114,32,115,116,114,105,110,103,46,102,105,110,100,40,115,101, -108,102,46,97,115,121,110,99,83,116,97,116,101,44,32,34,87,97,105,116, -105,110,103,79,110,69,110,116,101,114,34,41,32,116,104,101,110,13,10,32, -32,32,32,32,32,32,32,9,9,115,101,108,102,46,97,115,121,110,99,83, -116,97,116,101,32,61,32,78,79,78,69,13,10,32,32,32,32,32,32,32, +13,10,32,32,32,32,32,32,99,97,108,108,95,104,97,110,100,108,101,114, +40,115,101,108,102,91,34,111,110,115,116,97,116,101,99,104,97,110,103,101, +34,93,44,32,112,97,114,97,109,115,41,13,10,32,32,32,32,32,32,115, +101,108,102,46,97,115,121,110,99,83,116,97,116,101,32,61,32,78,79,78, +69,13,10,32,32,32,32,32,32,115,101,108,102,46,99,117,114,114,101,110, +116,84,114,97,110,115,105,116,105,111,110,105,110,103,69,118,101,110,116,32, +61,32,110,105,108,13,10,32,32,32,32,32,32,114,101,116,117,114,110,32, +116,114,117,101,13,10,32,32,32,32,101,108,115,101,13,10,32,32,32,32, +9,105,102,32,115,116,114,105,110,103,46,102,105,110,100,40,115,101,108,102, +46,97,115,121,110,99,83,116,97,116,101,44,32,34,87,97,105,116,105,110, +103,79,110,76,101,97,118,101,34,41,32,111,114,32,115,116,114,105,110,103, +46,102,105,110,100,40,115,101,108,102,46,97,115,121,110,99,83,116,97,116, +101,44,32,34,87,97,105,116,105,110,103,79,110,69,110,116,101,114,34,41, +32,116,104,101,110,13,10,32,32,32,32,9,9,115,101,108,102,46,97,115, +121,110,99,83,116,97,116,101,32,61,32,78,79,78,69,13,10,32,32,32, 32,9,9,116,114,97,110,115,105,116,105,111,110,40,115,101,108,102,44,32, -46,46,46,41,13,10,32,32,32,32,32,32,32,32,9,9,114,101,116,117, -114,110,32,116,114,117,101,13,10,32,32,32,32,32,32,32,32,9,101,110, -100,13,10,32,32,32,32,32,32,32,32,101,110,100,13,10,13,10,32,32, -32,32,32,32,32,32,115,101,108,102,46,99,117,114,114,101,110,116,84,114, -97,110,115,105,116,105,111,110,105,110,103,69,118,101,110,116,32,61,32,110, -105,108,13,10,32,32,32,32,32,32,32,32,114,101,116,117,114,110,32,102, -97,108,115,101,13,10,32,32,32,32,101,110,100,13,10,13,10,32,32,32, -32,114,101,116,117,114,110,32,116,114,97,110,115,105,116,105,111,110,13,10, -101,110,100,13,10,13,10,108,111,99,97,108,32,102,117,110,99,116,105,111, -110,32,97,100,100,95,116,111,95,109,97,112,40,109,97,112,44,32,101,118, -101,110,116,41,13,10,32,32,32,32,105,102,32,116,121,112,101,40,101,118, -101,110,116,46,102,114,111,109,41,32,61,61,32,39,115,116,114,105,110,103, -39,32,116,104,101,110,13,10,32,32,32,32,32,32,32,32,109,97,112,91, -101,118,101,110,116,46,102,114,111,109,93,32,61,32,101,118,101,110,116,46, -116,111,13,10,32,32,32,32,101,108,115,101,13,10,32,32,32,32,32,32, -32,32,102,111,114,32,95,44,32,102,114,111,109,32,105,110,32,105,112,97, -105,114,115,40,101,118,101,110,116,46,102,114,111,109,41,32,100,111,13,10, -32,32,32,32,32,32,32,32,32,32,32,32,109,97,112,91,102,114,111,109, -93,32,61,32,101,118,101,110,116,46,116,111,13,10,32,32,32,32,32,32, -32,32,101,110,100,13,10,32,32,32,32,101,110,100,13,10,101,110,100,13, -10,13,10,102,117,110,99,116,105,111,110,32,109,97,99,104,105,110,101,46, -99,114,101,97,116,101,40,111,112,116,105,111,110,115,41,13,10,32,32,32, -32,97,115,115,101,114,116,40,111,112,116,105,111,110,115,46,101,118,101,110, -116,115,41,13,10,13,10,32,32,32,32,108,111,99,97,108,32,102,115,109, -32,61,32,123,125,13,10,32,32,32,32,115,101,116,109,101,116,97,116,97, -98,108,101,40,102,115,109,44,32,109,97,99,104,105,110,101,41,13,10,13, -10,32,32,32,32,102,115,109,46,111,112,116,105,111,110,115,32,61,32,111, -112,116,105,111,110,115,13,10,32,32,32,32,102,115,109,46,99,117,114,114, -101,110,116,32,61,32,111,112,116,105,111,110,115,46,105,110,105,116,105,97, -108,32,111,114,32,39,110,111,110,101,39,13,10,32,32,32,32,102,115,109, +46,46,46,41,13,10,32,32,32,32,9,9,114,101,116,117,114,110,32,116, +114,117,101,13,10,32,32,32,32,9,101,110,100,13,10,32,32,32,32,101, +110,100,13,10,13,10,32,32,32,32,115,101,108,102,46,99,117,114,114,101, +110,116,84,114,97,110,115,105,116,105,111,110,105,110,103,69,118,101,110,116, +32,61,32,110,105,108,13,10,32,32,32,32,114,101,116,117,114,110,32,102, +97,108,115,101,13,10,32,32,101,110,100,13,10,13,10,32,32,114,101,116, +117,114,110,32,116,114,97,110,115,105,116,105,111,110,13,10,101,110,100,13, +10,13,10,108,111,99,97,108,32,102,117,110,99,116,105,111,110,32,97,100, +100,95,116,111,95,109,97,112,40,109,97,112,44,32,101,118,101,110,116,41, +13,10,32,32,105,102,32,116,121,112,101,40,101,118,101,110,116,46,102,114, +111,109,41,32,61,61,32,39,115,116,114,105,110,103,39,32,116,104,101,110, +13,10,32,32,32,32,109,97,112,91,101,118,101,110,116,46,102,114,111,109, +93,32,61,32,101,118,101,110,116,46,116,111,13,10,32,32,101,108,115,101, +13,10,32,32,32,32,102,111,114,32,95,44,32,102,114,111,109,32,105,110, +32,105,112,97,105,114,115,40,101,118,101,110,116,46,102,114,111,109,41,32, +100,111,13,10,32,32,32,32,32,32,109,97,112,91,102,114,111,109,93,32, +61,32,101,118,101,110,116,46,116,111,13,10,32,32,32,32,101,110,100,13, +10,32,32,101,110,100,13,10,101,110,100,13,10,13,10,102,117,110,99,116, +105,111,110,32,109,97,99,104,105,110,101,46,99,114,101,97,116,101,40,111, +112,116,105,111,110,115,41,13,10,32,32,97,115,115,101,114,116,40,111,112, +116,105,111,110,115,46,101,118,101,110,116,115,41,13,10,13,10,32,32,108, +111,99,97,108,32,102,115,109,32,61,32,123,125,13,10,32,32,115,101,116, +109,101,116,97,116,97,98,108,101,40,102,115,109,44,32,109,97,99,104,105, +110,101,41,13,10,13,10,32,32,102,115,109,46,111,112,116,105,111,110,115, +32,61,32,111,112,116,105,111,110,115,13,10,32,32,102,115,109,46,99,117, +114,114,101,110,116,32,61,32,111,112,116,105,111,110,115,46,105,110,105,116, +105,97,108,32,111,114,32,39,110,111,110,101,39,13,10,32,32,102,115,109, 46,97,115,121,110,99,83,116,97,116,101,32,61,32,78,79,78,69,13,10, -32,32,32,32,102,115,109,46,101,118,101,110,116,115,32,61,32,123,125,13, -10,13,10,32,32,32,32,102,111,114,32,95,44,32,101,118,101,110,116,32, -105,110,32,105,112,97,105,114,115,40,111,112,116,105,111,110,115,46,101,118, -101,110,116,115,32,111,114,32,123,125,41,32,100,111,13,10,32,32,32,32, -32,32,32,32,108,111,99,97,108,32,110,97,109,101,32,61,32,101,118,101, -110,116,46,110,97,109,101,13,10,32,32,32,32,32,32,32,32,102,115,109, -91,110,97,109,101,93,32,61,32,102,115,109,91,110,97,109,101,93,32,111, -114,32,99,114,101,97,116,101,95,116,114,97,110,115,105,116,105,111,110,40, -110,97,109,101,41,13,10,32,32,32,32,32,32,32,32,102,115,109,46,101, -118,101,110,116,115,91,110,97,109,101,93,32,61,32,102,115,109,46,101,118, -101,110,116,115,91,110,97,109,101,93,32,111,114,32,123,32,109,97,112,32, -61,32,123,125,32,125,13,10,32,32,32,32,32,32,32,32,97,100,100,95, +32,32,102,115,109,46,101,118,101,110,116,115,32,61,32,123,125,13,10,13, +10,32,32,102,111,114,32,95,44,32,101,118,101,110,116,32,105,110,32,105, +112,97,105,114,115,40,111,112,116,105,111,110,115,46,101,118,101,110,116,115, +32,111,114,32,123,125,41,32,100,111,13,10,32,32,32,32,108,111,99,97, +108,32,110,97,109,101,32,61,32,101,118,101,110,116,46,110,97,109,101,13, +10,32,32,32,32,102,115,109,91,110,97,109,101,93,32,61,32,102,115,109, +91,110,97,109,101,93,32,111,114,32,99,114,101,97,116,101,95,116,114,97, +110,115,105,116,105,111,110,40,110,97,109,101,41,13,10,32,32,32,32,102, +115,109,46,101,118,101,110,116,115,91,110,97,109,101,93,32,61,32,102,115, +109,46,101,118,101,110,116,115,91,110,97,109,101,93,32,111,114,32,123,32, +109,97,112,32,61,32,123,125,32,125,13,10,32,32,32,32,97,100,100,95, 116,111,95,109,97,112,40,102,115,109,46,101,118,101,110,116,115,91,110,97, -109,101,93,46,109,97,112,44,32,101,118,101,110,116,41,13,10,32,32,32, -32,101,110,100,13,10,32,32,32,32,13,10,32,32,32,32,102,111,114,32, -110,97,109,101,44,32,99,97,108,108,98,97,99,107,32,105,110,32,112,97, -105,114,115,40,111,112,116,105,111,110,115,46,99,97,108,108,98,97,99,107, -115,32,111,114,32,123,125,41,32,100,111,13,10,32,32,32,32,32,32,32, -32,102,115,109,91,110,97,109,101,93,32,61,32,99,97,108,108,98,97,99, -107,13,10,32,32,32,32,101,110,100,13,10,13,10,32,32,32,32,114,101, -116,117,114,110,32,102,115,109,13,10,101,110,100,13,10,13,10,102,117,110, -99,116,105,111,110,32,109,97,99,104,105,110,101,58,105,115,40,115,116,97, -116,101,41,13,10,32,32,32,32,114,101,116,117,114,110,32,115,101,108,102, -46,99,117,114,114,101,110,116,32,61,61,32,115,116,97,116,101,13,10,101, -110,100,13,10,13,10,102,117,110,99,116,105,111,110,32,109,97,99,104,105, -110,101,58,99,97,110,40,101,41,13,10,32,32,32,32,108,111,99,97,108, -32,101,118,101,110,116,32,61,32,115,101,108,102,46,101,118,101,110,116,115, -91,101,93,13,10,32,32,32,32,108,111,99,97,108,32,116,111,32,61,32, +109,101,93,46,109,97,112,44,32,101,118,101,110,116,41,13,10,32,32,101, +110,100,13,10,32,32,13,10,32,32,102,111,114,32,110,97,109,101,44,32, +99,97,108,108,98,97,99,107,32,105,110,32,112,97,105,114,115,40,111,112, +116,105,111,110,115,46,99,97,108,108,98,97,99,107,115,32,111,114,32,123, +125,41,32,100,111,13,10,32,32,32,32,102,115,109,91,110,97,109,101,93, +32,61,32,99,97,108,108,98,97,99,107,13,10,32,32,101,110,100,13,10, +13,10,32,32,114,101,116,117,114,110,32,102,115,109,13,10,101,110,100,13, +10,13,10,102,117,110,99,116,105,111,110,32,109,97,99,104,105,110,101,58, +105,115,40,115,116,97,116,101,41,13,10,32,32,114,101,116,117,114,110,32, +115,101,108,102,46,99,117,114,114,101,110,116,32,61,61,32,115,116,97,116, +101,13,10,101,110,100,13,10,13,10,102,117,110,99,116,105,111,110,32,109, +97,99,104,105,110,101,58,99,97,110,40,101,41,13,10,32,32,108,111,99, +97,108,32,101,118,101,110,116,32,61,32,115,101,108,102,46,101,118,101,110, +116,115,91,101,93,13,10,32,32,108,111,99,97,108,32,116,111,32,61,32, 101,118,101,110,116,32,97,110,100,32,101,118,101,110,116,46,109,97,112,91, 115,101,108,102,46,99,117,114,114,101,110,116,93,32,111,114,32,101,118,101, -110,116,46,109,97,112,91,39,42,39,93,13,10,32,32,32,32,114,101,116, -117,114,110,32,116,111,32,126,61,32,110,105,108,44,32,116,111,13,10,101, -110,100,13,10,13,10,102,117,110,99,116,105,111,110,32,109,97,99,104,105, -110,101,58,99,97,110,110,111,116,40,101,41,13,10,32,32,32,32,114,101, -116,117,114,110,32,110,111,116,32,115,101,108,102,58,99,97,110,40,101,41, -13,10,101,110,100,13,10,13,10,102,117,110,99,116,105,111,110,32,109,97, -99,104,105,110,101,58,116,111,100,111,116,40,102,105,108,101,110,97,109,101, -41,13,10,32,32,32,32,108,111,99,97,108,32,100,111,116,102,105,108,101, -32,61,32,105,111,46,111,112,101,110,40,102,105,108,101,110,97,109,101,44, -39,119,39,41,13,10,32,32,32,32,100,111,116,102,105,108,101,58,119,114, -105,116,101,40,39,100,105,103,114,97,112,104,32,123,92,110,39,41,13,10, -32,32,32,32,108,111,99,97,108,32,116,114,97,110,115,105,116,105,111,110, -32,61,32,102,117,110,99,116,105,111,110,40,101,118,101,110,116,44,102,114, -111,109,44,116,111,41,13,10,32,32,32,32,32,32,32,32,100,111,116,102, -105,108,101,58,119,114,105,116,101,40,115,116,114,105,110,103,46,102,111,114, -109,97,116,40,39,37,115,32,45,62,32,37,115,32,91,108,97,98,101,108, -61,37,115,93,59,92,110,39,44,102,114,111,109,44,116,111,44,101,118,101, -110,116,41,41,13,10,32,32,32,32,101,110,100,13,10,32,32,32,32,102, -111,114,32,95,44,32,101,118,101,110,116,32,105,110,32,112,97,105,114,115, -40,115,101,108,102,46,111,112,116,105,111,110,115,46,101,118,101,110,116,115, -41,32,100,111,13,10,32,32,32,32,32,32,32,32,105,102,32,116,121,112, -101,40,101,118,101,110,116,46,102,114,111,109,41,32,61,61,32,39,116,97, -98,108,101,39,32,116,104,101,110,13,10,32,32,32,32,32,32,32,32,32, -32,32,32,102,111,114,32,95,44,32,102,114,111,109,32,105,110,32,105,112, -97,105,114,115,40,101,118,101,110,116,46,102,114,111,109,41,32,100,111,13, -10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,116,114,97, -110,115,105,116,105,111,110,40,101,118,101,110,116,46,110,97,109,101,44,102, -114,111,109,44,101,118,101,110,116,46,116,111,41,13,10,32,32,32,32,32, -32,32,32,32,32,32,32,101,110,100,13,10,32,32,32,32,32,32,32,32, -101,108,115,101,13,10,32,32,32,32,32,32,32,32,32,32,32,32,116,114, -97,110,115,105,116,105,111,110,40,101,118,101,110,116,46,110,97,109,101,44, -101,118,101,110,116,46,102,114,111,109,44,101,118,101,110,116,46,116,111,41, -13,10,32,32,32,32,32,32,32,32,101,110,100,13,10,32,32,32,32,101, -110,100,13,10,32,32,32,32,100,111,116,102,105,108,101,58,119,114,105,116, -101,40,39,125,92,110,39,41,13,10,32,32,32,32,100,111,116,102,105,108, -101,58,99,108,111,115,101,40,41,13,10,101,110,100,13,10,13,10,102,117, -110,99,116,105,111,110,32,109,97,99,104,105,110,101,58,116,114,97,110,115, -105,116,105,111,110,40,101,118,101,110,116,41,13,10,32,32,32,32,105,102, -32,115,101,108,102,46,99,117,114,114,101,110,116,84,114,97,110,115,105,116, -105,111,110,105,110,103,69,118,101,110,116,32,61,61,32,101,118,101,110,116, -32,116,104,101,110,13,10,32,32,32,32,32,32,32,32,114,101,116,117,114, -110,32,115,101,108,102,91,115,101,108,102,46,99,117,114,114,101,110,116,84, -114,97,110,115,105,116,105,111,110,105,110,103,69,118,101,110,116,93,40,115, -101,108,102,41,13,10,32,32,32,32,101,110,100,13,10,101,110,100,13,10, -13,10,102,117,110,99,116,105,111,110,32,109,97,99,104,105,110,101,58,99, -97,110,99,101,108,84,114,97,110,115,105,116,105,111,110,40,101,118,101,110, -116,41,13,10,32,32,32,32,105,102,32,115,101,108,102,46,99,117,114,114, -101,110,116,84,114,97,110,115,105,116,105,111,110,105,110,103,69,118,101,110, -116,32,61,61,32,101,118,101,110,116,32,116,104,101,110,13,10,32,32,32, -32,32,32,32,32,115,101,108,102,46,97,115,121,110,99,83,116,97,116,101, -32,61,32,78,79,78,69,13,10,32,32,32,32,32,32,32,32,115,101,108, +110,116,46,109,97,112,91,39,42,39,93,13,10,32,32,114,101,116,117,114, +110,32,116,111,32,126,61,32,110,105,108,44,32,116,111,13,10,101,110,100, +13,10,13,10,102,117,110,99,116,105,111,110,32,109,97,99,104,105,110,101, +58,99,97,110,110,111,116,40,101,41,13,10,32,32,114,101,116,117,114,110, +32,110,111,116,32,115,101,108,102,58,99,97,110,40,101,41,13,10,101,110, +100,13,10,13,10,102,117,110,99,116,105,111,110,32,109,97,99,104,105,110, +101,58,116,111,100,111,116,40,102,105,108,101,110,97,109,101,41,13,10,32, +32,108,111,99,97,108,32,100,111,116,102,105,108,101,32,61,32,105,111,46, +111,112,101,110,40,102,105,108,101,110,97,109,101,44,39,119,39,41,13,10, +32,32,100,111,116,102,105,108,101,58,119,114,105,116,101,40,39,100,105,103, +114,97,112,104,32,123,92,110,39,41,13,10,32,32,108,111,99,97,108,32, +116,114,97,110,115,105,116,105,111,110,32,61,32,102,117,110,99,116,105,111, +110,40,101,118,101,110,116,44,102,114,111,109,44,116,111,41,13,10,32,32, +32,32,100,111,116,102,105,108,101,58,119,114,105,116,101,40,115,116,114,105, +110,103,46,102,111,114,109,97,116,40,39,37,115,32,45,62,32,37,115,32, +91,108,97,98,101,108,61,37,115,93,59,92,110,39,44,102,114,111,109,44, +116,111,44,101,118,101,110,116,41,41,13,10,32,32,101,110,100,13,10,32, +32,102,111,114,32,95,44,32,101,118,101,110,116,32,105,110,32,112,97,105, +114,115,40,115,101,108,102,46,111,112,116,105,111,110,115,46,101,118,101,110, +116,115,41,32,100,111,13,10,32,32,32,32,105,102,32,116,121,112,101,40, +101,118,101,110,116,46,102,114,111,109,41,32,61,61,32,39,116,97,98,108, +101,39,32,116,104,101,110,13,10,32,32,32,32,32,32,102,111,114,32,95, +44,32,102,114,111,109,32,105,110,32,105,112,97,105,114,115,40,101,118,101, +110,116,46,102,114,111,109,41,32,100,111,13,10,32,32,32,32,32,32,32, +32,116,114,97,110,115,105,116,105,111,110,40,101,118,101,110,116,46,110,97, +109,101,44,102,114,111,109,44,101,118,101,110,116,46,116,111,41,13,10,32, +32,32,32,32,32,101,110,100,13,10,32,32,32,32,101,108,115,101,13,10, +32,32,32,32,32,32,116,114,97,110,115,105,116,105,111,110,40,101,118,101, +110,116,46,110,97,109,101,44,101,118,101,110,116,46,102,114,111,109,44,101, +118,101,110,116,46,116,111,41,13,10,32,32,32,32,101,110,100,13,10,32, +32,101,110,100,13,10,32,32,100,111,116,102,105,108,101,58,119,114,105,116, +101,40,39,125,92,110,39,41,13,10,32,32,100,111,116,102,105,108,101,58, +99,108,111,115,101,40,41,13,10,101,110,100,13,10,13,10,102,117,110,99, +116,105,111,110,32,109,97,99,104,105,110,101,58,116,114,97,110,115,105,116, +105,111,110,40,101,118,101,110,116,41,13,10,32,32,105,102,32,115,101,108, +102,46,99,117,114,114,101,110,116,84,114,97,110,115,105,116,105,111,110,105, +110,103,69,118,101,110,116,32,61,61,32,101,118,101,110,116,32,116,104,101, +110,13,10,32,32,32,32,114,101,116,117,114,110,32,115,101,108,102,91,115, +101,108,102,46,99,117,114,114,101,110,116,84,114,97,110,115,105,116,105,111, +110,105,110,103,69,118,101,110,116,93,40,115,101,108,102,41,13,10,32,32, +101,110,100,13,10,101,110,100,13,10,13,10,102,117,110,99,116,105,111,110, +32,109,97,99,104,105,110,101,58,99,97,110,99,101,108,84,114,97,110,115, +105,116,105,111,110,40,101,118,101,110,116,41,13,10,32,32,105,102,32,115, +101,108,102,46,99,117,114,114,101,110,116,84,114,97,110,115,105,116,105,111, +110,105,110,103,69,118,101,110,116,32,61,61,32,101,118,101,110,116,32,116, +104,101,110,13,10,32,32,32,32,115,101,108,102,46,97,115,121,110,99,83, +116,97,116,101,32,61,32,78,79,78,69,13,10,32,32,32,32,115,101,108, 102,46,99,117,114,114,101,110,116,84,114,97,110,115,105,116,105,111,110,105, -110,103,69,118,101,110,116,32,61,32,110,105,108,13,10,32,32,32,32,101, -110,100,13,10,101,110,100,13,10,13,10,109,97,99,104,105,110,101,46,78, -79,78,69,32,61,32,78,79,78,69,13,10,109,97,99,104,105,110,101,46, -65,83,89,78,67,32,61,32,65,83,89,78,67,13,10,13,10,45,45,45, +110,103,69,118,101,110,116,32,61,32,110,105,108,13,10,32,32,101,110,100, +13,10,101,110,100,13,10,13,10,109,97,99,104,105,110,101,46,78,79,78, +69,32,61,32,78,79,78,69,13,10,109,97,99,104,105,110,101,46,65,83, +89,78,67,32,61,32,65,83,89,78,67,13,10,13,10,45,45,45,45,45, 45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45, 45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45, 45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45, 45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45, 45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45, -45,45,45,45,45,45,45,45,45,45,45,13,10,45,45,32,69,120,112,111, -114,116,32,116,111,32,74,105,110,46,32,13,10,45,45,45,45,45,45,45, +45,45,45,45,45,45,45,45,45,13,10,45,45,32,69,120,112,111,114,116, +32,116,111,32,74,105,110,46,32,13,10,45,45,45,45,45,45,45,45,45, 45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45, 45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45, 45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45, 45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45, 45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45, -45,45,45,45,45,45,45,13,10,13,10,106,105,110,46,97,105,46,110,101, -119,83,116,97,116,101,77,97,99,104,105,110,101,32,61,32,109,97,99,104, -105,110,101,46,99,114,101,97,116,101,13,10,0 +45,45,45,45,45,13,10,13,10,106,105,110,46,97,105,46,110,101,119,83, +116,97,116,101,77,97,99,104,105,110,101,32,61,32,109,97,99,104,105,110, +101,46,99,114,101,97,116,101,13,10,0 }; |