diff --git a/headers/modsecurity/anchored_set_variable.h b/headers/modsecurity/anchored_set_variable.h index 45035084..582ddc82 100644 --- a/headers/modsecurity/anchored_set_variable.h +++ b/headers/modsecurity/anchored_set_variable.h @@ -41,6 +41,9 @@ class Transaction; namespace Utils { class Regex; } +namespace Variables { +class KeyExclusions; +} struct MyEqual { @@ -82,6 +85,8 @@ class AnchoredSetVariable : public std::unordered_multimap *l); + void resolve(std::vector *l, + Variables::KeyExclusions &ke); void resolve(const std::string &key, std::vector *l); @@ -89,6 +94,10 @@ class AnchoredSetVariable : public std::unordered_multimap *l); + void resolveRegularExpression(Utils::Regex *r, + std::vector *l, + Variables::KeyExclusions &ke); + std::unique_ptr resolveFirst(const std::string &key); Transaction *m_transaction; diff --git a/headers/modsecurity/collection/collection.h b/headers/modsecurity/collection/collection.h index 46c2f684..fa28bbc7 100644 --- a/headers/modsecurity/collection/collection.h +++ b/headers/modsecurity/collection/collection.h @@ -37,11 +37,14 @@ typedef struct Variable_t Variables; #ifdef __cplusplus namespace modsecurity { +namespace Variables { +class KeyExclusions; +} namespace collection { class Collection { public: - Collection(std::string a) : m_name(a) { } + explicit Collection(std::string a) : m_name(a) { } virtual ~Collection() { } virtual void store(std::string key, std::string value) = 0; @@ -59,9 +62,11 @@ class Collection { virtual void resolveSingleMatch(const std::string& var, std::vector *l) = 0; virtual void resolveMultiMatches(const std::string& var, - std::vector *l) = 0; + std::vector *l, + Variables::KeyExclusions &ke) = 0; virtual void resolveRegularExpression(const std::string& var, - std::vector *l) = 0; + std::vector *l, + Variables::KeyExclusions &ke) = 0; /* store */ @@ -157,33 +162,36 @@ class Collection { /* resolveMultiMatches */ virtual void resolveMultiMatches(const std::string& var, - std::string compartment, std::vector *l) { + std::string compartment, std::vector *l, + Variables::KeyExclusions &ke) { std::string nkey = compartment + "::" + var; - resolveMultiMatches(nkey, l); + resolveMultiMatches(nkey, l, ke); } virtual void resolveMultiMatches(const std::string& var, std::string compartment, std::string compartment2, - std::vector *l) { + std::vector *l, + Variables::KeyExclusions &ke) { std::string nkey = compartment + "::" + compartment2 + "::" + var; - resolveMultiMatches(nkey, l); + resolveMultiMatches(nkey, l, ke); } /* resolveRegularExpression */ virtual void resolveRegularExpression(const std::string& var, - std::string compartment, std::vector *l) { + std::string compartment, std::vector *l, + Variables::KeyExclusions &ke) { std::string nkey = compartment + "::" + var; - resolveRegularExpression(nkey, l); + resolveRegularExpression(nkey, l, ke); } virtual void resolveRegularExpression(const std::string& var, std::string compartment, std::string compartment2, - std::vector *l) { + std::vector *l, Variables::KeyExclusions &ke) { std::string nkey = compartment + "::" + compartment2 + "::" + var; - resolveRegularExpression(nkey, l); + resolveRegularExpression(nkey, l, ke); } std::string m_name; diff --git a/headers/modsecurity/rules_properties.h b/headers/modsecurity/rules_properties.h index c19d2837..9b0524e6 100644 --- a/headers/modsecurity/rules_properties.h +++ b/headers/modsecurity/rules_properties.h @@ -371,8 +371,9 @@ class RulesProperties { from->m_responseBodyTypeToBeInspected.m_value.clear(); } else { for (std::set::iterator - it = from->m_responseBodyTypeToBeInspected.m_value.begin(); - it != from->m_responseBodyTypeToBeInspected.m_value.end(); ++it) { + it = from->m_responseBodyTypeToBeInspected.m_value.begin(); + it != from->m_responseBodyTypeToBeInspected.m_value.end(); + ++it) { to->m_responseBodyTypeToBeInspected.m_value.insert(*it); } } @@ -433,7 +434,7 @@ class RulesProperties { for (int i = 0; i < modsecurity::Phases::NUMBER_OF_PHASES; i++) { std::vector *rules_to = to+i; std::vector *rules_from = from+i; - // TODO: std::vector could be replaced with something more efficient. + // FIXME: std::vector could be replaced with something more efficient. std::vector v; v.reserve(rules_to->size()); for (size_t z = 0; z < rules_to->size(); z++) { @@ -443,11 +444,11 @@ class RulesProperties { } v.push_back(rule_ckc->m_ruleId); } - std::sort (v.begin(), v.end()); + std::sort(v.begin(), v.end()); for (size_t j = 0; j < rules_from->size(); j++) { Rule *rule = rules_from->at(j); - if (std::binary_search (v.begin(), v.end(), rule->m_ruleId)) { + if (std::binary_search(v.begin(), v.end(), rule->m_ruleId)) { if (err != NULL) { *err << "Rule id: " \ << std::to_string(rule->m_ruleId) \ diff --git a/headers/modsecurity/transaction.h b/headers/modsecurity/transaction.h index 5dd6542d..d3a26876 100644 --- a/headers/modsecurity/transaction.h +++ b/headers/modsecurity/transaction.h @@ -40,8 +40,8 @@ typedef struct Transaction_t Transaction; typedef struct Rules_t Rules; #endif -#include "anchored_set_variable.h" -#include "anchored_variable.h" +#include "modsecurity/anchored_set_variable.h" +#include "modsecurity/anchored_variable.h" #include "modsecurity/intervention.h" #include "modsecurity/collection/collections.h" #include "modsecurity/variable_value.h" diff --git a/headers/modsecurity/variable_value.h b/headers/modsecurity/variable_value.h index 02bcbc9d..6896a859 100644 --- a/headers/modsecurity/variable_value.h +++ b/headers/modsecurity/variable_value.h @@ -24,8 +24,8 @@ #include "modsecurity/variable_origin.h" -#ifndef HEADERS_MODSECURITY_VARIABLE_H_ -#define HEADERS_MODSECURITY_VARIABLE_H_ +#ifndef HEADERS_MODSECURITY_VARIABLE_VALUE_H_ +#define HEADERS_MODSECURITY_VARIABLE_VALUE_H_ #ifndef __cplusplus typedef struct Variable_t VariableValue; @@ -37,42 +37,44 @@ namespace modsecurity { class Collection; class VariableValue { public: - explicit VariableValue(const std::string *key) : - m_key(""), + explicit VariableValue(const std::string *key) + : m_key(""), m_value("") { m_key.assign(*key); m_keyWithCollection = std::make_shared(*key); } - VariableValue(const std::string *key, const std::string *value) : - m_key(""), + VariableValue(const std::string *key, const std::string *value) + : m_key(""), m_value("") { m_key.assign(*key); m_value.assign(*value); m_keyWithCollection = std::make_shared(*key); } - VariableValue() : - m_key(""), + VariableValue() + : m_key(""), m_value("") { m_keyWithCollection = std::make_shared(m_key); } - VariableValue(const std::string *a, const std::string *b, const std::string *c) : - m_key(*a + ":" + *b), + VariableValue(const std::string *a, const std::string *b, + const std::string *c) + : m_key(*a + ":" + *b), m_value(*c) { m_keyWithCollection = std::make_shared(*a + ":" + *b); } - VariableValue(std::shared_ptr fullName) : - m_key(""), + explicit VariableValue(std::shared_ptr fullName) + : m_key(""), m_value("") { m_keyWithCollection = fullName; m_key.assign(*fullName.get()); } - VariableValue(std::shared_ptr fullName, const std::string *value) : - m_key(""), + VariableValue(std::shared_ptr fullName, + const std::string *value) + : m_key(""), m_value("") { m_value.assign(*value); m_keyWithCollection = fullName; @@ -106,4 +108,4 @@ class VariableValue { } // namespace modsecurity #endif -#endif // HEADERS_MODSECURITY_VARIABLE_H_ +#endif // HEADERS_MODSECURITY_VARIABLE_VALUE_H_ diff --git a/src/actions/set_var.cc b/src/actions/set_var.cc index 63d91354..7c04202c 100644 --- a/src/actions/set_var.cc +++ b/src/actions/set_var.cc @@ -52,12 +52,18 @@ bool SetVar::evaluate(Rule *rule, Transaction *t) { std::vector l; auto *v = m_variable.get(); - Variables::Tx_DynamicElement *tx = dynamic_cast (v); - Variables::Session_DynamicElement *session = dynamic_cast (v); - Variables::Ip_DynamicElement *ip = dynamic_cast (v); - Variables::Resource_DynamicElement *resource = dynamic_cast (v); - Variables::Global_DynamicElement *global = dynamic_cast (v); - Variables::User_DynamicElement *user = dynamic_cast (v); + Variables::Tx_DynamicElement *tx = dynamic_cast< + Variables::Tx_DynamicElement *> (v); + Variables::Session_DynamicElement *session = dynamic_cast< + Variables::Session_DynamicElement *> (v); + Variables::Ip_DynamicElement *ip = dynamic_cast< + Variables::Ip_DynamicElement *> (v); + Variables::Resource_DynamicElement *resource = dynamic_cast< + Variables::Resource_DynamicElement *> (v); + Variables::Global_DynamicElement *global = dynamic_cast< + Variables::Global_DynamicElement *> (v); + Variables::User_DynamicElement *user = dynamic_cast< + Variables::User_DynamicElement *> (v); if (tx) { m_variableNameExpanded = tx->m_string->evaluate(t); } else if (session) { diff --git a/src/actions/set_var.h b/src/actions/set_var.h index 074cf050..b399f720 100644 --- a/src/actions/set_var.h +++ b/src/actions/set_var.h @@ -13,7 +13,9 @@ * */ +#include #include +#include #include "modsecurity/actions/action.h" #include "src/run_time_string.h" diff --git a/src/anchored_set_variable.cc b/src/anchored_set_variable.cc index 38acd1c6..04ed2e70 100644 --- a/src/anchored_set_variable.cc +++ b/src/anchored_set_variable.cc @@ -23,6 +23,7 @@ #include "modsecurity/modsecurity.h" #include "modsecurity/transaction.h" #include "src/utils/regex.h" +#include "src/variables/variable.h" namespace modsecurity { @@ -52,7 +53,8 @@ void AnchoredSetVariable::set(const std::string &key, const std::string &value, size_t offset, size_t len) { std::unique_ptr origin(new VariableOrigin()); std::string *v = new std::string(value); - VariableValue *var = new VariableValue(std::make_shared(m_name + ":" + key), v); + VariableValue *var = new VariableValue(std::make_shared( + m_name + ":" + key), v); delete v; origin->m_offset = offset; @@ -67,7 +69,8 @@ void AnchoredSetVariable::set(const std::string &key, const std::string &value, size_t offset) { std::unique_ptr origin(new VariableOrigin()); std::string *v = new std::string(value); - VariableValue *var = new VariableValue(std::make_shared(m_name + ":" + key), v); + VariableValue *var = new VariableValue(std::make_shared( + m_name + ":" + key), v); delete v; origin->m_offset = offset; @@ -86,6 +89,20 @@ void AnchoredSetVariable::resolve( } +void AnchoredSetVariable::resolve( + std::vector *l, + Variables::KeyExclusions &ke) { + for (const auto& x : *this) { + if (!ke.toOmit(x.first)) { + l->insert(l->begin(), new VariableValue(x.second)); + } else { + m_transaction->debug(7, "Excluding key: " + x.first + + " from target value."); + } + } +} + + void AnchoredSetVariable::resolve(const std::string &key, std::vector *l) { auto range = this->equal_range(key); @@ -119,4 +136,22 @@ void AnchoredSetVariable::resolveRegularExpression(Utils::Regex *r, } +void AnchoredSetVariable::resolveRegularExpression(Utils::Regex *r, + std::vector *l, + Variables::KeyExclusions &ke) { + for (const auto& x : *this) { + int ret = Utils::regex_search(x.first, *r); + if (ret <= 0) { + continue; + } + if (!ke.toOmit(x.first)) { + l->insert(l->begin(), new VariableValue(x.second)); + } else { + m_transaction->debug(7, "Excluding key: " + x.first + + " from target value."); + } + } +} + + } // namespace modsecurity diff --git a/src/collection/backend/in_memory-per_process.cc b/src/collection/backend/in_memory-per_process.cc index f627aaef..1035977c 100644 --- a/src/collection/backend/in_memory-per_process.cc +++ b/src/collection/backend/in_memory-per_process.cc @@ -96,25 +96,33 @@ void InMemoryPerProcess::resolveSingleMatch(const std::string& var, void InMemoryPerProcess::resolveMultiMatches(const std::string& var, - std::vector *l) { + std::vector *l, Variables::KeyExclusions &ke) { size_t keySize = var.size(); l->reserve(15); if (keySize == 0) { for (auto &i : *this) { - l->insert(l->begin(), new VariableValue(&m_name, &i.first, &i.second)); + if (ke.toOmit(i.first)) { + continue; + } + l->insert(l->begin(), new VariableValue(&m_name, &i.first, + &i.second)); } } else { auto range = this->equal_range(var); for (auto it = range.first; it != range.second; ++it) { - l->insert(l->begin(), new VariableValue(&m_name, &var, &it->second)); + if (ke.toOmit(var)) { + continue; + } + l->insert(l->begin(), new VariableValue(&m_name, &var, + &it->second)); } } } void InMemoryPerProcess::resolveRegularExpression(const std::string& var, - std::vector *l) { + std::vector *l, Variables::KeyExclusions &ke) { //if (var.find(":") == std::string::npos) { // return; @@ -144,7 +152,9 @@ void InMemoryPerProcess::resolveRegularExpression(const std::string& var, if (ret <= 0) { continue; } - + if (ke.toOmit(x.first)) { + continue; + } l->insert(l->begin(), new VariableValue(&m_name, &x.first, &x.second)); } } diff --git a/src/collection/backend/in_memory-per_process.h b/src/collection/backend/in_memory-per_process.h index 0b0330c6..c6c3bf76 100644 --- a/src/collection/backend/in_memory-per_process.h +++ b/src/collection/backend/in_memory-per_process.h @@ -27,6 +27,7 @@ #include "modsecurity/variable_value.h" #include "modsecurity/collection/collection.h" +#include "src/variables/variable.h" #ifndef SRC_COLLECTION_BACKEND_IN_MEMORY_PER_PROCESS_H_ #define SRC_COLLECTION_BACKEND_IN_MEMORY_PER_PROCESS_H_ @@ -71,7 +72,7 @@ class InMemoryPerProcess : /*std::hash*/MyHash, MyEqual>, public Collection { public: - InMemoryPerProcess(std::string name); + explicit InMemoryPerProcess(std::string name); ~InMemoryPerProcess(); void store(std::string key, std::string value) override; @@ -88,9 +89,11 @@ class InMemoryPerProcess : void resolveSingleMatch(const std::string& var, std::vector *l) override; void resolveMultiMatches(const std::string& var, - std::vector *l) override; + std::vector *l, + Variables::KeyExclusions &ke) override; void resolveRegularExpression(const std::string& var, - std::vector *l) override; + std::vector *l, + Variables::KeyExclusions &ke) override; private: pthread_mutex_t m_lock; diff --git a/src/collection/backend/lmdb.cc b/src/collection/backend/lmdb.cc index 64e532a5..9a814875 100644 --- a/src/collection/backend/lmdb.cc +++ b/src/collection/backend/lmdb.cc @@ -24,6 +24,7 @@ #include "modsecurity/variable_value.h" #include "src/utils/regex.h" +#include "src/variables/variable.h" #undef LMDB_STDOUT_COUT @@ -465,7 +466,8 @@ end_txn: void LMDB::resolveMultiMatches(const std::string& var, - std::vector *l) { + std::vector *l, + Variables::KeyExclusions &ke) { MDB_val key, data; MDB_txn *txn = NULL; MDB_dbi dbi; @@ -495,24 +497,22 @@ void LMDB::resolveMultiMatches(const std::string& var, if (keySize == 0) { while ((rc = mdb_cursor_get(cursor, &key, &data, MDB_NEXT)) == 0) { l->insert(l->begin(), new VariableValue( - &m_name, + &m_name, new std::string(reinterpret_cast(key.mv_data), key.mv_size), new std::string(reinterpret_cast(data.mv_data), - data.mv_size)) - ); + data.mv_size))); } } else { while ((rc = mdb_cursor_get(cursor, &key, &data, MDB_NEXT)) == 0) { char *a = reinterpret_cast(key.mv_data); if (strncmp(var.c_str(), a, keySize) == 0) { l->insert(l->begin(), new VariableValue( - &m_name, + &m_name, new std::string(reinterpret_cast(key.mv_data), key.mv_size), new std::string(reinterpret_cast(data.mv_data), - data.mv_size)) - ); + data.mv_size))); } } } @@ -528,7 +528,8 @@ end_txn: void LMDB::resolveRegularExpression(const std::string& var, - std::vector *l) { + std::vector *l, + Variables::KeyExclusions &ke) { MDB_val key, data; MDB_txn *txn = NULL; MDB_dbi dbi; @@ -563,6 +564,11 @@ void LMDB::resolveRegularExpression(const std::string& var, if (ret <= 0) { continue; } + if (ke.toOmit(std::string(reinterpret_cast(key.mv_data), + key.mv_size))) { + continue; + } + VariableValue *v = new VariableValue( new std::string(reinterpret_cast(key.mv_data), key.mv_size), diff --git a/src/collection/backend/lmdb.h b/src/collection/backend/lmdb.h index edd4de7b..51c91895 100644 --- a/src/collection/backend/lmdb.h +++ b/src/collection/backend/lmdb.h @@ -36,6 +36,7 @@ #include "modsecurity/variable_value.h" #include "modsecurity/collection/collection.h" +#include "src/variables/variable.h" #ifndef SRC_COLLECTION_BACKEND_LMDB_H_ #define SRC_COLLECTION_BACKEND_LMDB_H_ @@ -50,7 +51,7 @@ namespace backend { class LMDB : public Collection { public: - LMDB(std::string name); + explicit LMDB(std::string name); ~LMDB(); void store(std::string key, std::string value) override; @@ -67,9 +68,11 @@ class LMDB : void resolveSingleMatch(const std::string& var, std::vector *l) override; void resolveMultiMatches(const std::string& var, - std::vector *l) override; + std::vector *l, + Variables::KeyExclusions &ke) override; void resolveRegularExpression(const std::string& var, - std::vector *l) override; + std::vector *l, + Variables::KeyExclusions &ke) override; private: void string2val(const std::string& str, MDB_val *val); diff --git a/src/modsecurity.cc b/src/modsecurity.cc index b079d018..7ccfdcb1 100644 --- a/src/modsecurity.cc +++ b/src/modsecurity.cc @@ -71,8 +71,10 @@ ModSecurity::ModSecurity() #else m_global_collection(new collection::backend::InMemoryPerProcess("GLOBAL")), m_ip_collection(new collection::backend::InMemoryPerProcess("IP")), - m_resource_collection(new collection::backend::InMemoryPerProcess("RESOURCE")), - m_session_collection(new collection::backend::InMemoryPerProcess("SESSION")), + m_resource_collection( + new collection::backend::InMemoryPerProcess("RESOURCE")), + m_session_collection( + new collection::backend::InMemoryPerProcess("SESSION")), m_user_collection(new collection::backend::InMemoryPerProcess("USER")), #endif m_logCb(NULL) { diff --git a/src/operators/ip_match_from_file.cc b/src/operators/ip_match_from_file.cc index 3984df5f..7b0bccc3 100644 --- a/src/operators/ip_match_from_file.cc +++ b/src/operators/ip_match_from_file.cc @@ -16,10 +16,10 @@ #include "src/operators/ip_match_from_file.h" #include "src/utils/system.h" -#include - #include +#include + #include "src/operators/operator.h" namespace modsecurity { diff --git a/src/parser/seclang-parser.cc b/src/parser/seclang-parser.cc index 536fc525..11fbea5a 100644 --- a/src/parser/seclang-parser.cc +++ b/src/parser/seclang-parser.cc @@ -445,21 +445,22 @@ namespace yy { value.copy< std::unique_ptr > (that.value); break; - case 353: // run_time_string + case 354: // run_time_string value.copy< std::unique_ptr > (that.value); break; - case 350: // var + case 351: // var value.copy< std::unique_ptr > (that.value); break; - case 351: // act - case 352: // setvar_action + case 352: // act + case 353: // setvar_action value.copy< std::unique_ptr > (that.value); break; case 348: // variables - case 349: // variables_may_be_quoted + case 349: // variables_pre_process + case 350: // variables_may_be_quoted value.copy< std::unique_ptr > > > (that.value); break; @@ -682,21 +683,22 @@ namespace yy { value.move< std::unique_ptr > (that.value); break; - case 353: // run_time_string + case 354: // run_time_string value.move< std::unique_ptr > (that.value); break; - case 350: // var + case 351: // var value.move< std::unique_ptr > (that.value); break; - case 351: // act - case 352: // setvar_action + case 352: // act + case 353: // setvar_action value.move< std::unique_ptr > (that.value); break; case 348: // variables - case 349: // variables_may_be_quoted + case 349: // variables_pre_process + case 350: // variables_may_be_quoted value.move< std::unique_ptr > > > (that.value); break; @@ -922,21 +924,22 @@ namespace yy { value.copy< std::unique_ptr > (that.value); break; - case 353: // run_time_string + case 354: // run_time_string value.copy< std::unique_ptr > (that.value); break; - case 350: // var + case 351: // var value.copy< std::unique_ptr > (that.value); break; - case 351: // act - case 352: // setvar_action + case 352: // act + case 353: // setvar_action value.copy< std::unique_ptr > (that.value); break; case 348: // variables - case 349: // variables_may_be_quoted + case 349: // variables_pre_process + case 350: // variables_may_be_quoted value.copy< std::unique_ptr > > > (that.value); break; @@ -1088,7 +1091,7 @@ namespace yy { yyla.location.begin.filename = yyla.location.end.filename = &driver.file; } -#line 1092 "seclang-parser.cc" // lalr1.cc:737 +#line 1095 "seclang-parser.cc" // lalr1.cc:737 /* Initialize the stack. The initial state will be set in yynewstate, since the latter expects the semantical and the @@ -1381,21 +1384,22 @@ namespace yy { yylhs.value.build< std::unique_ptr > (); break; - case 353: // run_time_string + case 354: // run_time_string yylhs.value.build< std::unique_ptr > (); break; - case 350: // var + case 351: // var yylhs.value.build< std::unique_ptr > (); break; - case 351: // act - case 352: // setvar_action + case 352: // act + case 353: // setvar_action yylhs.value.build< std::unique_ptr > (); break; case 348: // variables - case 349: // variables_may_be_quoted + case 349: // variables_pre_process + case 350: // variables_may_be_quoted yylhs.value.build< std::unique_ptr > > > (); break; @@ -1427,7 +1431,7 @@ namespace yy { { return 0; } -#line 1431 "seclang-parser.cc" // lalr1.cc:856 +#line 1435 "seclang-parser.cc" // lalr1.cc:856 break; case 6: @@ -1435,7 +1439,7 @@ namespace yy { { driver.m_auditLog->setStorageDirMode(strtol(yystack_[0].value.as< std::string > ().c_str(), NULL, 8)); } -#line 1439 "seclang-parser.cc" // lalr1.cc:856 +#line 1443 "seclang-parser.cc" // lalr1.cc:856 break; case 7: @@ -1443,7 +1447,7 @@ namespace yy { { driver.m_auditLog->setStorageDir(yystack_[0].value.as< std::string > ()); } -#line 1447 "seclang-parser.cc" // lalr1.cc:856 +#line 1451 "seclang-parser.cc" // lalr1.cc:856 break; case 8: @@ -1451,7 +1455,7 @@ namespace yy { { driver.m_auditLog->setStatus(modsecurity::audit_log::AuditLog::RelevantOnlyAuditLogStatus); } -#line 1455 "seclang-parser.cc" // lalr1.cc:856 +#line 1459 "seclang-parser.cc" // lalr1.cc:856 break; case 9: @@ -1459,7 +1463,7 @@ namespace yy { { driver.m_auditLog->setStatus(modsecurity::audit_log::AuditLog::OffAuditLogStatus); } -#line 1463 "seclang-parser.cc" // lalr1.cc:856 +#line 1467 "seclang-parser.cc" // lalr1.cc:856 break; case 10: @@ -1467,7 +1471,7 @@ namespace yy { { driver.m_auditLog->setStatus(modsecurity::audit_log::AuditLog::OnAuditLogStatus); } -#line 1471 "seclang-parser.cc" // lalr1.cc:856 +#line 1475 "seclang-parser.cc" // lalr1.cc:856 break; case 11: @@ -1475,7 +1479,7 @@ namespace yy { { driver.m_auditLog->setFileMode(strtol(yystack_[0].value.as< std::string > ().c_str(), NULL, 8)); } -#line 1479 "seclang-parser.cc" // lalr1.cc:856 +#line 1483 "seclang-parser.cc" // lalr1.cc:856 break; case 12: @@ -1483,7 +1487,7 @@ namespace yy { { driver.m_auditLog->setFilePath2(yystack_[0].value.as< std::string > ()); } -#line 1487 "seclang-parser.cc" // lalr1.cc:856 +#line 1491 "seclang-parser.cc" // lalr1.cc:856 break; case 13: @@ -1491,7 +1495,7 @@ namespace yy { { driver.m_auditLog->setParts(yystack_[0].value.as< std::string > ()); } -#line 1495 "seclang-parser.cc" // lalr1.cc:856 +#line 1499 "seclang-parser.cc" // lalr1.cc:856 break; case 14: @@ -1499,7 +1503,7 @@ namespace yy { { driver.m_auditLog->setFilePath1(yystack_[0].value.as< std::string > ()); } -#line 1503 "seclang-parser.cc" // lalr1.cc:856 +#line 1507 "seclang-parser.cc" // lalr1.cc:856 break; case 15: @@ -1507,7 +1511,7 @@ namespace yy { { driver.m_auditLog->setFormat(modsecurity::audit_log::AuditLog::JSONAuditLogFormat); } -#line 1511 "seclang-parser.cc" // lalr1.cc:856 +#line 1515 "seclang-parser.cc" // lalr1.cc:856 break; case 16: @@ -1515,7 +1519,7 @@ namespace yy { { driver.m_auditLog->setFormat(modsecurity::audit_log::AuditLog::NativeAuditLogFormat); } -#line 1519 "seclang-parser.cc" // lalr1.cc:856 +#line 1523 "seclang-parser.cc" // lalr1.cc:856 break; case 17: @@ -1524,7 +1528,7 @@ namespace yy { std::string relevant_status(yystack_[0].value.as< std::string > ()); driver.m_auditLog->setRelevantStatus(relevant_status); } -#line 1528 "seclang-parser.cc" // lalr1.cc:856 +#line 1532 "seclang-parser.cc" // lalr1.cc:856 break; case 18: @@ -1532,7 +1536,7 @@ namespace yy { { driver.m_auditLog->setType(modsecurity::audit_log::AuditLog::SerialAuditLogType); } -#line 1536 "seclang-parser.cc" // lalr1.cc:856 +#line 1540 "seclang-parser.cc" // lalr1.cc:856 break; case 19: @@ -1540,7 +1544,7 @@ namespace yy { { driver.m_auditLog->setType(modsecurity::audit_log::AuditLog::ParallelAuditLogType); } -#line 1544 "seclang-parser.cc" // lalr1.cc:856 +#line 1548 "seclang-parser.cc" // lalr1.cc:856 break; case 20: @@ -1548,7 +1552,7 @@ namespace yy { { driver.m_auditLog->setType(modsecurity::audit_log::AuditLog::HttpsAuditLogType); } -#line 1552 "seclang-parser.cc" // lalr1.cc:856 +#line 1556 "seclang-parser.cc" // lalr1.cc:856 break; case 21: @@ -1556,7 +1560,7 @@ namespace yy { { driver.m_uploadKeepFiles = modsecurity::RulesProperties::TrueConfigBoolean; } -#line 1560 "seclang-parser.cc" // lalr1.cc:856 +#line 1564 "seclang-parser.cc" // lalr1.cc:856 break; case 22: @@ -1564,7 +1568,7 @@ namespace yy { { driver.m_uploadKeepFiles = modsecurity::RulesProperties::FalseConfigBoolean; } -#line 1568 "seclang-parser.cc" // lalr1.cc:856 +#line 1572 "seclang-parser.cc" // lalr1.cc:856 break; case 23: @@ -1573,7 +1577,7 @@ namespace yy { driver.error(yystack_[2].location, "SecUploadKeepFiles RelevantOnly is not currently supported. Accepted values are On or Off"); YYERROR; } -#line 1577 "seclang-parser.cc" // lalr1.cc:856 +#line 1581 "seclang-parser.cc" // lalr1.cc:856 break; case 24: @@ -1582,7 +1586,7 @@ namespace yy { driver.m_uploadFileLimit.m_set = true; driver.m_uploadFileLimit.m_value = strtol(yystack_[0].value.as< std::string > ().c_str(), NULL, 10); } -#line 1586 "seclang-parser.cc" // lalr1.cc:856 +#line 1590 "seclang-parser.cc" // lalr1.cc:856 break; case 25: @@ -1591,7 +1595,7 @@ namespace yy { driver.m_uploadFileMode.m_set = true; driver.m_uploadFileMode.m_value = strtol(yystack_[0].value.as< std::string > ().c_str(), NULL, 8); } -#line 1595 "seclang-parser.cc" // lalr1.cc:856 +#line 1599 "seclang-parser.cc" // lalr1.cc:856 break; case 26: @@ -1600,7 +1604,7 @@ namespace yy { driver.m_uploadDirectory.m_set = true; driver.m_uploadDirectory.m_value = yystack_[0].value.as< std::string > (); } -#line 1604 "seclang-parser.cc" // lalr1.cc:856 +#line 1608 "seclang-parser.cc" // lalr1.cc:856 break; case 27: @@ -1608,7 +1612,7 @@ namespace yy { { driver.m_tmpSaveUploadedFiles = modsecurity::RulesProperties::TrueConfigBoolean; } -#line 1612 "seclang-parser.cc" // lalr1.cc:856 +#line 1616 "seclang-parser.cc" // lalr1.cc:856 break; case 28: @@ -1616,7 +1620,7 @@ namespace yy { { driver.m_tmpSaveUploadedFiles = modsecurity::RulesProperties::FalseConfigBoolean; } -#line 1620 "seclang-parser.cc" // lalr1.cc:856 +#line 1624 "seclang-parser.cc" // lalr1.cc:856 break; case 29: @@ -1624,7 +1628,7 @@ namespace yy { { yylhs.value.as< std::unique_ptr > > > () = std::move(yystack_[1].value.as< std::unique_ptr > > > ()); } -#line 1628 "seclang-parser.cc" // lalr1.cc:856 +#line 1632 "seclang-parser.cc" // lalr1.cc:856 break; case 30: @@ -1632,7 +1636,7 @@ namespace yy { { yylhs.value.as< std::unique_ptr > > > () = std::move(yystack_[0].value.as< std::unique_ptr > > > ()); } -#line 1636 "seclang-parser.cc" // lalr1.cc:856 +#line 1640 "seclang-parser.cc" // lalr1.cc:856 break; case 31: @@ -1642,7 +1646,7 @@ namespace yy { yystack_[2].value.as< std::unique_ptr > > > ()->push_back(std::move(yystack_[0].value.as< std::unique_ptr > ())); yylhs.value.as< std::unique_ptr > > > () = std::move(yystack_[2].value.as< std::unique_ptr > > > ()); } -#line 1646 "seclang-parser.cc" // lalr1.cc:856 +#line 1650 "seclang-parser.cc" // lalr1.cc:856 break; case 32: @@ -1653,7 +1657,7 @@ namespace yy { b->push_back(std::move(yystack_[0].value.as< std::unique_ptr > ())); yylhs.value.as< std::unique_ptr > > > () = std::move(b); } -#line 1657 "seclang-parser.cc" // lalr1.cc:856 +#line 1661 "seclang-parser.cc" // lalr1.cc:856 break; case 33: @@ -1666,7 +1670,7 @@ namespace yy { YYERROR; } } -#line 1670 "seclang-parser.cc" // lalr1.cc:856 +#line 1674 "seclang-parser.cc" // lalr1.cc:856 break; case 34: @@ -1680,7 +1684,7 @@ namespace yy { YYERROR; } } -#line 1684 "seclang-parser.cc" // lalr1.cc:856 +#line 1688 "seclang-parser.cc" // lalr1.cc:856 break; case 35: @@ -1693,7 +1697,7 @@ namespace yy { YYERROR; } } -#line 1697 "seclang-parser.cc" // lalr1.cc:856 +#line 1701 "seclang-parser.cc" // lalr1.cc:856 break; case 36: @@ -1707,7 +1711,7 @@ namespace yy { YYERROR; } } -#line 1711 "seclang-parser.cc" // lalr1.cc:856 +#line 1715 "seclang-parser.cc" // lalr1.cc:856 break; case 37: @@ -1715,7 +1719,7 @@ namespace yy { { OPERATOR_CONTAINER(yylhs.value.as< std::unique_ptr > (), new operators::UnconditionalMatch()); } -#line 1719 "seclang-parser.cc" // lalr1.cc:856 +#line 1723 "seclang-parser.cc" // lalr1.cc:856 break; case 38: @@ -1723,7 +1727,7 @@ namespace yy { { OPERATOR_CONTAINER(yylhs.value.as< std::unique_ptr > (), new operators::DetectSQLi()); } -#line 1727 "seclang-parser.cc" // lalr1.cc:856 +#line 1731 "seclang-parser.cc" // lalr1.cc:856 break; case 39: @@ -1731,7 +1735,7 @@ namespace yy { { OPERATOR_CONTAINER(yylhs.value.as< std::unique_ptr > (), new operators::DetectXSS()); } -#line 1735 "seclang-parser.cc" // lalr1.cc:856 +#line 1739 "seclang-parser.cc" // lalr1.cc:856 break; case 40: @@ -1739,7 +1743,7 @@ namespace yy { { OPERATOR_CONTAINER(yylhs.value.as< std::unique_ptr > (), new operators::ValidateUrlEncoding()); } -#line 1743 "seclang-parser.cc" // lalr1.cc:856 +#line 1747 "seclang-parser.cc" // lalr1.cc:856 break; case 41: @@ -1747,7 +1751,7 @@ namespace yy { { OPERATOR_CONTAINER(yylhs.value.as< std::unique_ptr > (), new operators::ValidateUtf8Encoding()); } -#line 1751 "seclang-parser.cc" // lalr1.cc:856 +#line 1755 "seclang-parser.cc" // lalr1.cc:856 break; case 42: @@ -1755,7 +1759,7 @@ namespace yy { { OPERATOR_CONTAINER(yylhs.value.as< std::unique_ptr > (), new operators::InspectFile(std::move(yystack_[0].value.as< std::unique_ptr > ()))); } -#line 1759 "seclang-parser.cc" // lalr1.cc:856 +#line 1763 "seclang-parser.cc" // lalr1.cc:856 break; case 43: @@ -1763,7 +1767,7 @@ namespace yy { { OPERATOR_CONTAINER(yylhs.value.as< std::unique_ptr > (), new operators::FuzzyHash(std::move(yystack_[0].value.as< std::unique_ptr > ()))); } -#line 1767 "seclang-parser.cc" // lalr1.cc:856 +#line 1771 "seclang-parser.cc" // lalr1.cc:856 break; case 44: @@ -1771,7 +1775,7 @@ namespace yy { { OPERATOR_CONTAINER(yylhs.value.as< std::unique_ptr > (), new operators::ValidateByteRange(std::move(yystack_[0].value.as< std::unique_ptr > ()))); } -#line 1775 "seclang-parser.cc" // lalr1.cc:856 +#line 1779 "seclang-parser.cc" // lalr1.cc:856 break; case 45: @@ -1779,7 +1783,7 @@ namespace yy { { OPERATOR_CONTAINER(yylhs.value.as< std::unique_ptr > (), new operators::ValidateDTD(std::move(yystack_[0].value.as< std::unique_ptr > ()))); } -#line 1783 "seclang-parser.cc" // lalr1.cc:856 +#line 1787 "seclang-parser.cc" // lalr1.cc:856 break; case 46: @@ -1788,7 +1792,7 @@ namespace yy { /* $$ = new operators::ValidateHash($1); */ OPERATOR_NOT_SUPPORTED("ValidateHash", yystack_[2].location); } -#line 1792 "seclang-parser.cc" // lalr1.cc:856 +#line 1796 "seclang-parser.cc" // lalr1.cc:856 break; case 47: @@ -1796,7 +1800,7 @@ namespace yy { { OPERATOR_CONTAINER(yylhs.value.as< std::unique_ptr > (), new operators::ValidateSchema(std::move(yystack_[0].value.as< std::unique_ptr > ()))); } -#line 1800 "seclang-parser.cc" // lalr1.cc:856 +#line 1804 "seclang-parser.cc" // lalr1.cc:856 break; case 48: @@ -1804,7 +1808,7 @@ namespace yy { { OPERATOR_CONTAINER(yylhs.value.as< std::unique_ptr > (), new operators::VerifyCC(std::move(yystack_[0].value.as< std::unique_ptr > ()))); } -#line 1808 "seclang-parser.cc" // lalr1.cc:856 +#line 1812 "seclang-parser.cc" // lalr1.cc:856 break; case 49: @@ -1812,7 +1816,7 @@ namespace yy { { OPERATOR_CONTAINER(yylhs.value.as< std::unique_ptr > (), new operators::VerifyCPF(std::move(yystack_[0].value.as< std::unique_ptr > ()))); } -#line 1816 "seclang-parser.cc" // lalr1.cc:856 +#line 1820 "seclang-parser.cc" // lalr1.cc:856 break; case 50: @@ -1820,7 +1824,7 @@ namespace yy { { OPERATOR_CONTAINER(yylhs.value.as< std::unique_ptr > (), new operators::VerifySSN(std::move(yystack_[0].value.as< std::unique_ptr > ()))); } -#line 1824 "seclang-parser.cc" // lalr1.cc:856 +#line 1828 "seclang-parser.cc" // lalr1.cc:856 break; case 51: @@ -1829,7 +1833,7 @@ namespace yy { /* $$ = new operators::GsbLookup($1); */ OPERATOR_NOT_SUPPORTED("GsbLookup", yystack_[2].location); } -#line 1833 "seclang-parser.cc" // lalr1.cc:856 +#line 1837 "seclang-parser.cc" // lalr1.cc:856 break; case 52: @@ -1838,7 +1842,7 @@ namespace yy { /* $$ = new operators::Rsub($1); */ OPERATOR_NOT_SUPPORTED("Rsub", yystack_[2].location); } -#line 1842 "seclang-parser.cc" // lalr1.cc:856 +#line 1846 "seclang-parser.cc" // lalr1.cc:856 break; case 53: @@ -1846,7 +1850,7 @@ namespace yy { { OPERATOR_CONTAINER(yylhs.value.as< std::unique_ptr > (), new operators::Within(std::move(yystack_[0].value.as< std::unique_ptr > ()))); } -#line 1850 "seclang-parser.cc" // lalr1.cc:856 +#line 1854 "seclang-parser.cc" // lalr1.cc:856 break; case 54: @@ -1854,7 +1858,7 @@ namespace yy { { OPERATOR_CONTAINER(yylhs.value.as< std::unique_ptr > (), new operators::ContainsWord(std::move(yystack_[0].value.as< std::unique_ptr > ()))); } -#line 1858 "seclang-parser.cc" // lalr1.cc:856 +#line 1862 "seclang-parser.cc" // lalr1.cc:856 break; case 55: @@ -1862,7 +1866,7 @@ namespace yy { { OPERATOR_CONTAINER(yylhs.value.as< std::unique_ptr > (), new operators::Contains(std::move(yystack_[0].value.as< std::unique_ptr > ()))); } -#line 1866 "seclang-parser.cc" // lalr1.cc:856 +#line 1870 "seclang-parser.cc" // lalr1.cc:856 break; case 56: @@ -1870,7 +1874,7 @@ namespace yy { { OPERATOR_CONTAINER(yylhs.value.as< std::unique_ptr > (), new operators::EndsWith(std::move(yystack_[0].value.as< std::unique_ptr > ()))); } -#line 1874 "seclang-parser.cc" // lalr1.cc:856 +#line 1878 "seclang-parser.cc" // lalr1.cc:856 break; case 57: @@ -1878,7 +1882,7 @@ namespace yy { { OPERATOR_CONTAINER(yylhs.value.as< std::unique_ptr > (), new operators::Eq(std::move(yystack_[0].value.as< std::unique_ptr > ()))); } -#line 1882 "seclang-parser.cc" // lalr1.cc:856 +#line 1886 "seclang-parser.cc" // lalr1.cc:856 break; case 58: @@ -1886,7 +1890,7 @@ namespace yy { { OPERATOR_CONTAINER(yylhs.value.as< std::unique_ptr > (), new operators::Ge(std::move(yystack_[0].value.as< std::unique_ptr > ()))); } -#line 1890 "seclang-parser.cc" // lalr1.cc:856 +#line 1894 "seclang-parser.cc" // lalr1.cc:856 break; case 59: @@ -1894,7 +1898,7 @@ namespace yy { { OPERATOR_CONTAINER(yylhs.value.as< std::unique_ptr > (), new operators::Gt(std::move(yystack_[0].value.as< std::unique_ptr > ()))); } -#line 1898 "seclang-parser.cc" // lalr1.cc:856 +#line 1902 "seclang-parser.cc" // lalr1.cc:856 break; case 60: @@ -1902,7 +1906,7 @@ namespace yy { { OPERATOR_CONTAINER(yylhs.value.as< std::unique_ptr > (), new operators::IpMatchF(std::move(yystack_[0].value.as< std::unique_ptr > ()))); } -#line 1906 "seclang-parser.cc" // lalr1.cc:856 +#line 1910 "seclang-parser.cc" // lalr1.cc:856 break; case 61: @@ -1910,7 +1914,7 @@ namespace yy { { OPERATOR_CONTAINER(yylhs.value.as< std::unique_ptr > (), new operators::IpMatch(std::move(yystack_[0].value.as< std::unique_ptr > ()))); } -#line 1914 "seclang-parser.cc" // lalr1.cc:856 +#line 1918 "seclang-parser.cc" // lalr1.cc:856 break; case 62: @@ -1918,7 +1922,7 @@ namespace yy { { OPERATOR_CONTAINER(yylhs.value.as< std::unique_ptr > (), new operators::Le(std::move(yystack_[0].value.as< std::unique_ptr > ()))); } -#line 1922 "seclang-parser.cc" // lalr1.cc:856 +#line 1926 "seclang-parser.cc" // lalr1.cc:856 break; case 63: @@ -1926,7 +1930,7 @@ namespace yy { { OPERATOR_CONTAINER(yylhs.value.as< std::unique_ptr > (), new operators::Lt(std::move(yystack_[0].value.as< std::unique_ptr > ()))); } -#line 1930 "seclang-parser.cc" // lalr1.cc:856 +#line 1934 "seclang-parser.cc" // lalr1.cc:856 break; case 64: @@ -1934,7 +1938,7 @@ namespace yy { { OPERATOR_CONTAINER(yylhs.value.as< std::unique_ptr > (), new operators::PmFromFile(std::move(yystack_[0].value.as< std::unique_ptr > ()))); } -#line 1938 "seclang-parser.cc" // lalr1.cc:856 +#line 1942 "seclang-parser.cc" // lalr1.cc:856 break; case 65: @@ -1942,7 +1946,7 @@ namespace yy { { OPERATOR_CONTAINER(yylhs.value.as< std::unique_ptr > (), new operators::Pm(std::move(yystack_[0].value.as< std::unique_ptr > ()))); } -#line 1946 "seclang-parser.cc" // lalr1.cc:856 +#line 1950 "seclang-parser.cc" // lalr1.cc:856 break; case 66: @@ -1950,7 +1954,7 @@ namespace yy { { OPERATOR_CONTAINER(yylhs.value.as< std::unique_ptr > (), new operators::Rbl(std::move(yystack_[0].value.as< std::unique_ptr > ()))); } -#line 1954 "seclang-parser.cc" // lalr1.cc:856 +#line 1958 "seclang-parser.cc" // lalr1.cc:856 break; case 67: @@ -1958,7 +1962,7 @@ namespace yy { { OPERATOR_CONTAINER(yylhs.value.as< std::unique_ptr > (), new operators::Rx(std::move(yystack_[0].value.as< std::unique_ptr > ()))); } -#line 1962 "seclang-parser.cc" // lalr1.cc:856 +#line 1966 "seclang-parser.cc" // lalr1.cc:856 break; case 68: @@ -1966,7 +1970,7 @@ namespace yy { { OPERATOR_CONTAINER(yylhs.value.as< std::unique_ptr > (), new operators::StrEq(std::move(yystack_[0].value.as< std::unique_ptr > ()))); } -#line 1970 "seclang-parser.cc" // lalr1.cc:856 +#line 1974 "seclang-parser.cc" // lalr1.cc:856 break; case 69: @@ -1974,7 +1978,7 @@ namespace yy { { OPERATOR_CONTAINER(yylhs.value.as< std::unique_ptr > (), new operators::StrMatch(std::move(yystack_[0].value.as< std::unique_ptr > ()))); } -#line 1978 "seclang-parser.cc" // lalr1.cc:856 +#line 1982 "seclang-parser.cc" // lalr1.cc:856 break; case 70: @@ -1982,7 +1986,7 @@ namespace yy { { OPERATOR_CONTAINER(yylhs.value.as< std::unique_ptr > (), new operators::BeginsWith(std::move(yystack_[0].value.as< std::unique_ptr > ()))); } -#line 1986 "seclang-parser.cc" // lalr1.cc:856 +#line 1990 "seclang-parser.cc" // lalr1.cc:856 break; case 71: @@ -1997,7 +2001,7 @@ namespace yy { YYERROR; #endif // WITH_GEOIP } -#line 2001 "seclang-parser.cc" // lalr1.cc:856 +#line 2005 "seclang-parser.cc" // lalr1.cc:856 break; case 73: @@ -2025,7 +2029,7 @@ namespace yy { YYERROR; } } -#line 2029 "seclang-parser.cc" // lalr1.cc:856 +#line 2033 "seclang-parser.cc" // lalr1.cc:856 break; case 74: @@ -2048,7 +2052,7 @@ namespace yy { YYERROR; } } -#line 2052 "seclang-parser.cc" // lalr1.cc:856 +#line 2056 "seclang-parser.cc" // lalr1.cc:856 break; case 75: @@ -2067,7 +2071,7 @@ namespace yy { ); driver.addSecAction(rule); } -#line 2071 "seclang-parser.cc" // lalr1.cc:856 +#line 2075 "seclang-parser.cc" // lalr1.cc:856 break; case 76: @@ -2095,7 +2099,7 @@ namespace yy { YYERROR; } } -#line 2099 "seclang-parser.cc" // lalr1.cc:856 +#line 2103 "seclang-parser.cc" // lalr1.cc:856 break; case 77: @@ -2155,7 +2159,7 @@ namespace yy { delete actions; } -#line 2159 "seclang-parser.cc" // lalr1.cc:856 +#line 2163 "seclang-parser.cc" // lalr1.cc:856 break; case 78: @@ -2163,7 +2167,7 @@ namespace yy { { driver.addSecMarker(modsecurity::utils::string::removeBracketsIfNeeded(yystack_[0].value.as< std::string > ())); } -#line 2167 "seclang-parser.cc" // lalr1.cc:856 +#line 2171 "seclang-parser.cc" // lalr1.cc:856 break; case 79: @@ -2171,7 +2175,7 @@ namespace yy { { driver.m_secRuleEngine = modsecurity::Rules::DisabledRuleEngine; } -#line 2175 "seclang-parser.cc" // lalr1.cc:856 +#line 2179 "seclang-parser.cc" // lalr1.cc:856 break; case 80: @@ -2179,7 +2183,7 @@ namespace yy { { driver.m_secRuleEngine = modsecurity::Rules::EnabledRuleEngine; } -#line 2183 "seclang-parser.cc" // lalr1.cc:856 +#line 2187 "seclang-parser.cc" // lalr1.cc:856 break; case 81: @@ -2187,7 +2191,7 @@ namespace yy { { driver.m_secRuleEngine = modsecurity::Rules::DetectionOnlyRuleEngine; } -#line 2191 "seclang-parser.cc" // lalr1.cc:856 +#line 2195 "seclang-parser.cc" // lalr1.cc:856 break; case 82: @@ -2195,7 +2199,7 @@ namespace yy { { driver.m_secRequestBodyAccess = modsecurity::RulesProperties::TrueConfigBoolean; } -#line 2199 "seclang-parser.cc" // lalr1.cc:856 +#line 2203 "seclang-parser.cc" // lalr1.cc:856 break; case 83: @@ -2203,7 +2207,7 @@ namespace yy { { driver.m_secRequestBodyAccess = modsecurity::RulesProperties::FalseConfigBoolean; } -#line 2207 "seclang-parser.cc" // lalr1.cc:856 +#line 2211 "seclang-parser.cc" // lalr1.cc:856 break; case 84: @@ -2211,7 +2215,7 @@ namespace yy { { driver.m_secResponseBodyAccess = modsecurity::RulesProperties::TrueConfigBoolean; } -#line 2215 "seclang-parser.cc" // lalr1.cc:856 +#line 2219 "seclang-parser.cc" // lalr1.cc:856 break; case 85: @@ -2219,7 +2223,7 @@ namespace yy { { driver.m_secResponseBodyAccess = modsecurity::RulesProperties::FalseConfigBoolean; } -#line 2223 "seclang-parser.cc" // lalr1.cc:856 +#line 2227 "seclang-parser.cc" // lalr1.cc:856 break; case 86: @@ -2232,7 +2236,7 @@ namespace yy { driver.m_secArgumentSeparator.m_value = yystack_[0].value.as< std::string > (); driver.m_secArgumentSeparator.m_set = true; } -#line 2236 "seclang-parser.cc" // lalr1.cc:856 +#line 2240 "seclang-parser.cc" // lalr1.cc:856 break; case 87: @@ -2240,7 +2244,7 @@ namespace yy { { driver.m_components.push_back(yystack_[0].value.as< std::string > ()); } -#line 2244 "seclang-parser.cc" // lalr1.cc:856 +#line 2248 "seclang-parser.cc" // lalr1.cc:856 break; case 88: @@ -2249,14 +2253,14 @@ namespace yy { driver.error(yystack_[2].location, "SecConnEngine is not yet supported."); YYERROR; } -#line 2253 "seclang-parser.cc" // lalr1.cc:856 +#line 2257 "seclang-parser.cc" // lalr1.cc:856 break; case 89: #line 1285 "seclang-parser.yy" // lalr1.cc:856 { } -#line 2260 "seclang-parser.cc" // lalr1.cc:856 +#line 2264 "seclang-parser.cc" // lalr1.cc:856 break; case 90: @@ -2265,7 +2269,7 @@ namespace yy { driver.m_secWebAppId.m_value = yystack_[0].value.as< std::string > (); driver.m_secWebAppId.m_set = true; } -#line 2269 "seclang-parser.cc" // lalr1.cc:856 +#line 2273 "seclang-parser.cc" // lalr1.cc:856 break; case 91: @@ -2274,7 +2278,7 @@ namespace yy { driver.error(yystack_[1].location, "SecServerSignature is not supported."); YYERROR; } -#line 2278 "seclang-parser.cc" // lalr1.cc:856 +#line 2282 "seclang-parser.cc" // lalr1.cc:856 break; case 92: @@ -2283,7 +2287,7 @@ namespace yy { driver.error(yystack_[1].location, "SecCacheTransformations is not supported."); YYERROR; } -#line 2287 "seclang-parser.cc" // lalr1.cc:856 +#line 2291 "seclang-parser.cc" // lalr1.cc:856 break; case 93: @@ -2292,14 +2296,14 @@ namespace yy { driver.error(yystack_[2].location, "SecDisableBackendCompression is not supported."); YYERROR; } -#line 2296 "seclang-parser.cc" // lalr1.cc:856 +#line 2300 "seclang-parser.cc" // lalr1.cc:856 break; case 94: #line 1308 "seclang-parser.yy" // lalr1.cc:856 { } -#line 2303 "seclang-parser.cc" // lalr1.cc:856 +#line 2307 "seclang-parser.cc" // lalr1.cc:856 break; case 95: @@ -2308,14 +2312,14 @@ namespace yy { driver.error(yystack_[2].location, "SecContentInjection is not yet supported."); YYERROR; } -#line 2312 "seclang-parser.cc" // lalr1.cc:856 +#line 2316 "seclang-parser.cc" // lalr1.cc:856 break; case 96: #line 1316 "seclang-parser.yy" // lalr1.cc:856 { } -#line 2319 "seclang-parser.cc" // lalr1.cc:856 +#line 2323 "seclang-parser.cc" // lalr1.cc:856 break; case 97: @@ -2324,7 +2328,7 @@ namespace yy { driver.error(yystack_[1].location, "SecChrootDir is not supported."); YYERROR; } -#line 2328 "seclang-parser.cc" // lalr1.cc:856 +#line 2332 "seclang-parser.cc" // lalr1.cc:856 break; case 98: @@ -2333,14 +2337,14 @@ namespace yy { driver.error(yystack_[2].location, "SecHashEngine is not yet supported."); YYERROR; } -#line 2337 "seclang-parser.cc" // lalr1.cc:856 +#line 2341 "seclang-parser.cc" // lalr1.cc:856 break; case 99: #line 1329 "seclang-parser.yy" // lalr1.cc:856 { } -#line 2344 "seclang-parser.cc" // lalr1.cc:856 +#line 2348 "seclang-parser.cc" // lalr1.cc:856 break; case 100: @@ -2349,7 +2353,7 @@ namespace yy { driver.error(yystack_[1].location, "SecHashKey is not yet supported."); YYERROR; } -#line 2353 "seclang-parser.cc" // lalr1.cc:856 +#line 2357 "seclang-parser.cc" // lalr1.cc:856 break; case 101: @@ -2358,7 +2362,7 @@ namespace yy { driver.error(yystack_[1].location, "SecHashParam is not yet supported."); YYERROR; } -#line 2362 "seclang-parser.cc" // lalr1.cc:856 +#line 2366 "seclang-parser.cc" // lalr1.cc:856 break; case 102: @@ -2367,7 +2371,7 @@ namespace yy { driver.error(yystack_[1].location, "SecHashMethodRx is not yet supported."); YYERROR; } -#line 2371 "seclang-parser.cc" // lalr1.cc:856 +#line 2375 "seclang-parser.cc" // lalr1.cc:856 break; case 103: @@ -2376,7 +2380,7 @@ namespace yy { driver.error(yystack_[1].location, "SecHashMethodPm is not yet supported."); YYERROR; } -#line 2380 "seclang-parser.cc" // lalr1.cc:856 +#line 2384 "seclang-parser.cc" // lalr1.cc:856 break; case 104: @@ -2385,7 +2389,7 @@ namespace yy { driver.error(yystack_[1].location, "SecGsbLookupDb is not supported."); YYERROR; } -#line 2389 "seclang-parser.cc" // lalr1.cc:856 +#line 2393 "seclang-parser.cc" // lalr1.cc:856 break; case 105: @@ -2394,7 +2398,7 @@ namespace yy { driver.error(yystack_[1].location, "SecGuardianLog is not supported."); YYERROR; } -#line 2398 "seclang-parser.cc" // lalr1.cc:856 +#line 2402 "seclang-parser.cc" // lalr1.cc:856 break; case 106: @@ -2403,14 +2407,14 @@ namespace yy { driver.error(yystack_[2].location, "SecInterceptOnError is not yet supported."); YYERROR; } -#line 2407 "seclang-parser.cc" // lalr1.cc:856 +#line 2411 "seclang-parser.cc" // lalr1.cc:856 break; case 107: #line 1367 "seclang-parser.yy" // lalr1.cc:856 { } -#line 2414 "seclang-parser.cc" // lalr1.cc:856 +#line 2418 "seclang-parser.cc" // lalr1.cc:856 break; case 108: @@ -2419,7 +2423,7 @@ namespace yy { driver.error(yystack_[1].location, "SecConnReadStateLimit is not yet supported."); YYERROR; } -#line 2423 "seclang-parser.cc" // lalr1.cc:856 +#line 2427 "seclang-parser.cc" // lalr1.cc:856 break; case 109: @@ -2428,7 +2432,7 @@ namespace yy { driver.error(yystack_[1].location, "SecConnWriteStateLimit is not yet supported."); YYERROR; } -#line 2432 "seclang-parser.cc" // lalr1.cc:856 +#line 2436 "seclang-parser.cc" // lalr1.cc:856 break; case 110: @@ -2437,7 +2441,7 @@ namespace yy { driver.error(yystack_[1].location, "SecSensorId is not yet supported."); YYERROR; } -#line 2441 "seclang-parser.cc" // lalr1.cc:856 +#line 2445 "seclang-parser.cc" // lalr1.cc:856 break; case 111: @@ -2446,14 +2450,14 @@ namespace yy { driver.error(yystack_[2].location, "SecRuleInheritance is not yet supported."); YYERROR; } -#line 2450 "seclang-parser.cc" // lalr1.cc:856 +#line 2454 "seclang-parser.cc" // lalr1.cc:856 break; case 112: #line 1390 "seclang-parser.yy" // lalr1.cc:856 { } -#line 2457 "seclang-parser.cc" // lalr1.cc:856 +#line 2461 "seclang-parser.cc" // lalr1.cc:856 break; case 113: @@ -2462,7 +2466,7 @@ namespace yy { driver.error(yystack_[1].location, "SecRulePerfTime is not yet supported."); YYERROR; } -#line 2466 "seclang-parser.cc" // lalr1.cc:856 +#line 2470 "seclang-parser.cc" // lalr1.cc:856 break; case 114: @@ -2471,7 +2475,7 @@ namespace yy { driver.error(yystack_[1].location, "SecStreamInBodyInspection is not supported."); YYERROR; } -#line 2475 "seclang-parser.cc" // lalr1.cc:856 +#line 2479 "seclang-parser.cc" // lalr1.cc:856 break; case 115: @@ -2480,7 +2484,7 @@ namespace yy { driver.error(yystack_[1].location, "SecStreamOutBodyInspection is not supported."); YYERROR; } -#line 2484 "seclang-parser.cc" // lalr1.cc:856 +#line 2488 "seclang-parser.cc" // lalr1.cc:856 break; case 116: @@ -2497,7 +2501,7 @@ namespace yy { YYERROR; } } -#line 2501 "seclang-parser.cc" // lalr1.cc:856 +#line 2505 "seclang-parser.cc" // lalr1.cc:856 break; case 117: @@ -2514,7 +2518,7 @@ namespace yy { YYERROR; } } -#line 2518 "seclang-parser.cc" // lalr1.cc:856 +#line 2522 "seclang-parser.cc" // lalr1.cc:856 break; case 118: @@ -2531,7 +2535,7 @@ namespace yy { YYERROR; } } -#line 2535 "seclang-parser.cc" // lalr1.cc:856 +#line 2539 "seclang-parser.cc" // lalr1.cc:856 break; case 119: @@ -2548,7 +2552,7 @@ namespace yy { YYERROR; } } -#line 2552 "seclang-parser.cc" // lalr1.cc:856 +#line 2556 "seclang-parser.cc" // lalr1.cc:856 break; case 120: @@ -2565,7 +2569,7 @@ namespace yy { YYERROR; } } -#line 2569 "seclang-parser.cc" // lalr1.cc:856 +#line 2573 "seclang-parser.cc" // lalr1.cc:856 break; case 121: @@ -2595,7 +2599,7 @@ namespace yy { YYERROR; } } -#line 2599 "seclang-parser.cc" // lalr1.cc:856 +#line 2603 "seclang-parser.cc" // lalr1.cc:856 break; case 122: @@ -2624,7 +2628,7 @@ namespace yy { driver.error(yystack_[2].location, "SecRuleUpdateActionById is not yet supported"); YYERROR; } -#line 2628 "seclang-parser.cc" // lalr1.cc:856 +#line 2632 "seclang-parser.cc" // lalr1.cc:856 break; case 123: @@ -2640,7 +2644,7 @@ namespace yy { YYERROR; } } -#line 2644 "seclang-parser.cc" // lalr1.cc:856 +#line 2648 "seclang-parser.cc" // lalr1.cc:856 break; case 124: @@ -2663,7 +2667,7 @@ namespace yy { YYERROR; } } -#line 2667 "seclang-parser.cc" // lalr1.cc:856 +#line 2671 "seclang-parser.cc" // lalr1.cc:856 break; case 125: @@ -2694,7 +2698,7 @@ namespace yy { YYERROR; #endif // WITH_GEOIP } -#line 2698 "seclang-parser.cc" // lalr1.cc:856 +#line 2702 "seclang-parser.cc" // lalr1.cc:856 break; case 126: @@ -2703,7 +2707,7 @@ namespace yy { driver.m_requestBodyLimit.m_set = true; driver.m_requestBodyLimit.m_value = atoi(yystack_[0].value.as< std::string > ().c_str()); } -#line 2707 "seclang-parser.cc" // lalr1.cc:856 +#line 2711 "seclang-parser.cc" // lalr1.cc:856 break; case 127: @@ -2712,7 +2716,7 @@ namespace yy { driver.m_requestBodyNoFilesLimit.m_set = true; driver.m_requestBodyNoFilesLimit.m_value = atoi(yystack_[0].value.as< std::string > ().c_str()); } -#line 2716 "seclang-parser.cc" // lalr1.cc:856 +#line 2720 "seclang-parser.cc" // lalr1.cc:856 break; case 128: @@ -2725,7 +2729,7 @@ namespace yy { driver.error(yystack_[1].location, ss.str()); YYERROR; } -#line 2729 "seclang-parser.cc" // lalr1.cc:856 +#line 2733 "seclang-parser.cc" // lalr1.cc:856 break; case 129: @@ -2734,7 +2738,7 @@ namespace yy { driver.m_responseBodyLimit.m_set = true; driver.m_responseBodyLimit.m_value = atoi(yystack_[0].value.as< std::string > ().c_str()); } -#line 2738 "seclang-parser.cc" // lalr1.cc:856 +#line 2742 "seclang-parser.cc" // lalr1.cc:856 break; case 130: @@ -2742,7 +2746,7 @@ namespace yy { { driver.m_requestBodyLimitAction = modsecurity::Rules::BodyLimitAction::ProcessPartialBodyLimitAction; } -#line 2746 "seclang-parser.cc" // lalr1.cc:856 +#line 2750 "seclang-parser.cc" // lalr1.cc:856 break; case 131: @@ -2750,7 +2754,7 @@ namespace yy { { driver.m_requestBodyLimitAction = modsecurity::Rules::BodyLimitAction::RejectBodyLimitAction; } -#line 2754 "seclang-parser.cc" // lalr1.cc:856 +#line 2758 "seclang-parser.cc" // lalr1.cc:856 break; case 132: @@ -2758,7 +2762,7 @@ namespace yy { { driver.m_responseBodyLimitAction = modsecurity::Rules::BodyLimitAction::ProcessPartialBodyLimitAction; } -#line 2762 "seclang-parser.cc" // lalr1.cc:856 +#line 2766 "seclang-parser.cc" // lalr1.cc:856 break; case 133: @@ -2766,7 +2770,7 @@ namespace yy { { driver.m_responseBodyLimitAction = modsecurity::Rules::BodyLimitAction::RejectBodyLimitAction; } -#line 2770 "seclang-parser.cc" // lalr1.cc:856 +#line 2774 "seclang-parser.cc" // lalr1.cc:856 break; case 134: @@ -2774,7 +2778,7 @@ namespace yy { { driver.m_remoteRulesActionOnFailed = Rules::OnFailedRemoteRulesAction::AbortOnFailedRemoteRulesAction; } -#line 2778 "seclang-parser.cc" // lalr1.cc:856 +#line 2782 "seclang-parser.cc" // lalr1.cc:856 break; case 135: @@ -2782,7 +2786,7 @@ namespace yy { { driver.m_remoteRulesActionOnFailed = Rules::OnFailedRemoteRulesAction::WarnOnFailedRemoteRulesAction; } -#line 2786 "seclang-parser.cc" // lalr1.cc:856 +#line 2790 "seclang-parser.cc" // lalr1.cc:856 break; case 138: @@ -2798,7 +2802,7 @@ namespace yy { driver.m_responseBodyTypeToBeInspected.m_value.insert(*it); } } -#line 2802 "seclang-parser.cc" // lalr1.cc:856 +#line 2806 "seclang-parser.cc" // lalr1.cc:856 break; case 139: @@ -2808,7 +2812,7 @@ namespace yy { driver.m_responseBodyTypeToBeInspected.m_clear = true; driver.m_responseBodyTypeToBeInspected.m_value.clear(); } -#line 2812 "seclang-parser.cc" // lalr1.cc:856 +#line 2816 "seclang-parser.cc" // lalr1.cc:856 break; case 140: @@ -2816,7 +2820,7 @@ namespace yy { { driver.m_secXMLExternalEntity = modsecurity::RulesProperties::FalseConfigBoolean; } -#line 2820 "seclang-parser.cc" // lalr1.cc:856 +#line 2824 "seclang-parser.cc" // lalr1.cc:856 break; case 141: @@ -2824,7 +2828,7 @@ namespace yy { { driver.m_secXMLExternalEntity = modsecurity::RulesProperties::TrueConfigBoolean; } -#line 2828 "seclang-parser.cc" // lalr1.cc:856 +#line 2832 "seclang-parser.cc" // lalr1.cc:856 break; case 142: @@ -2839,7 +2843,7 @@ namespace yy { YYERROR; */ } -#line 2843 "seclang-parser.cc" // lalr1.cc:856 +#line 2847 "seclang-parser.cc" // lalr1.cc:856 break; case 145: @@ -2850,7 +2854,7 @@ namespace yy { YYERROR; } } -#line 2854 "seclang-parser.cc" // lalr1.cc:856 +#line 2858 "seclang-parser.cc" // lalr1.cc:856 break; case 146: @@ -2859,7 +2863,7 @@ namespace yy { driver.error(yystack_[1].location, "SecCookieV0Separator is not yet supported."); YYERROR; } -#line 2863 "seclang-parser.cc" // lalr1.cc:856 +#line 2867 "seclang-parser.cc" // lalr1.cc:856 break; case 149: @@ -2870,7 +2874,7 @@ namespace yy { YYERROR; */ } -#line 2874 "seclang-parser.cc" // lalr1.cc:856 +#line 2878 "seclang-parser.cc" // lalr1.cc:856 break; case 150: @@ -2879,2364 +2883,2402 @@ namespace yy { driver.m_httpblKey.m_set = true; driver.m_httpblKey.m_value = yystack_[0].value.as< std::string > (); } -#line 2883 "seclang-parser.cc" // lalr1.cc:856 +#line 2887 "seclang-parser.cc" // lalr1.cc:856 break; case 151: #line 1727 "seclang-parser.yy" // lalr1.cc:856 { - yylhs.value.as< std::unique_ptr > > > () = std::move(yystack_[0].value.as< std::unique_ptr > > > ()); + std::unique_ptr > > originalList = std::move(yystack_[0].value.as< std::unique_ptr > > > ()); + std::unique_ptr>> newList(new std::vector>()); + std::unique_ptr>> newNewList(new std::vector>()); + std::unique_ptr>> exclusionVars(new std::vector>()); + while (!originalList->empty()) { + std::unique_ptr var = std::move(originalList->back()); + originalList->pop_back(); + if (var->m_isExclusion) { + exclusionVars->push_back(std::move(var)); + } else { + newList->push_back(std::move(var)); + } + } + + while (!newList->empty()) { + bool doNotAdd = false; + std::unique_ptr var = std::move(newList->back()); + newList->pop_back(); + for (auto &i : *exclusionVars) { + if (*var == *i) { + doNotAdd = true; + } + if (i->belongsToCollection(var.get())) { + var->addsKeyExclusion(i.get()); + } + } + if (!doNotAdd) { + newNewList->push_back(std::move(var)); + } + } + yylhs.value.as< std::unique_ptr > > > () = std::move(newNewList); } -#line 2891 "seclang-parser.cc" // lalr1.cc:856 +#line 2925 "seclang-parser.cc" // lalr1.cc:856 break; case 152: -#line 1731 "seclang-parser.yy" // lalr1.cc:856 +#line 1764 "seclang-parser.yy" // lalr1.cc:856 { - yylhs.value.as< std::unique_ptr > > > () = std::move(yystack_[1].value.as< std::unique_ptr > > > ()); + yylhs.value.as< std::unique_ptr > > > () = std::move(yystack_[0].value.as< std::unique_ptr > > > ()); } -#line 2899 "seclang-parser.cc" // lalr1.cc:856 +#line 2933 "seclang-parser.cc" // lalr1.cc:856 break; case 153: -#line 1738 "seclang-parser.yy" // lalr1.cc:856 +#line 1768 "seclang-parser.yy" // lalr1.cc:856 + { + yylhs.value.as< std::unique_ptr > > > () = std::move(yystack_[1].value.as< std::unique_ptr > > > ()); + } +#line 2941 "seclang-parser.cc" // lalr1.cc:856 + break; + + case 154: +#line 1775 "seclang-parser.yy" // lalr1.cc:856 { yystack_[2].value.as< std::unique_ptr > > > ()->push_back(std::move(yystack_[0].value.as< std::unique_ptr > ())); yylhs.value.as< std::unique_ptr > > > () = std::move(yystack_[2].value.as< std::unique_ptr > > > ()); } -#line 2908 "seclang-parser.cc" // lalr1.cc:856 +#line 2950 "seclang-parser.cc" // lalr1.cc:856 break; - case 154: -#line 1743 "seclang-parser.yy" // lalr1.cc:856 + case 155: +#line 1780 "seclang-parser.yy" // lalr1.cc:856 { std::unique_ptr c(new VariableModificatorExclusion(std::move(yystack_[0].value.as< std::unique_ptr > ()))); yystack_[3].value.as< std::unique_ptr > > > ()->push_back(std::move(c)); yylhs.value.as< std::unique_ptr > > > () = std::move(yystack_[3].value.as< std::unique_ptr > > > ()); } -#line 2918 "seclang-parser.cc" // lalr1.cc:856 +#line 2960 "seclang-parser.cc" // lalr1.cc:856 break; - case 155: -#line 1749 "seclang-parser.yy" // lalr1.cc:856 + case 156: +#line 1786 "seclang-parser.yy" // lalr1.cc:856 { std::unique_ptr c(new VariableModificatorCount(std::move(yystack_[0].value.as< std::unique_ptr > ()))); yystack_[3].value.as< std::unique_ptr > > > ()->push_back(std::move(c)); yylhs.value.as< std::unique_ptr > > > () = std::move(yystack_[3].value.as< std::unique_ptr > > > ()); } -#line 2928 "seclang-parser.cc" // lalr1.cc:856 +#line 2970 "seclang-parser.cc" // lalr1.cc:856 break; - case 156: -#line 1755 "seclang-parser.yy" // lalr1.cc:856 + case 157: +#line 1792 "seclang-parser.yy" // lalr1.cc:856 { std::unique_ptr>> b(new std::vector>()); b->push_back(std::move(yystack_[0].value.as< std::unique_ptr > ())); yylhs.value.as< std::unique_ptr > > > () = std::move(b); } -#line 2938 "seclang-parser.cc" // lalr1.cc:856 +#line 2980 "seclang-parser.cc" // lalr1.cc:856 break; - case 157: -#line 1761 "seclang-parser.yy" // lalr1.cc:856 + case 158: +#line 1798 "seclang-parser.yy" // lalr1.cc:856 { std::unique_ptr>> b(new std::vector>()); std::unique_ptr c(new VariableModificatorExclusion(std::move(yystack_[0].value.as< std::unique_ptr > ()))); b->push_back(std::move(c)); yylhs.value.as< std::unique_ptr > > > () = std::move(b); } -#line 2949 "seclang-parser.cc" // lalr1.cc:856 +#line 2991 "seclang-parser.cc" // lalr1.cc:856 break; - case 158: -#line 1768 "seclang-parser.yy" // lalr1.cc:856 + case 159: +#line 1805 "seclang-parser.yy" // lalr1.cc:856 { std::unique_ptr>> b(new std::vector>()); std::unique_ptr c(new VariableModificatorCount(std::move(yystack_[0].value.as< std::unique_ptr > ()))); b->push_back(std::move(c)); yylhs.value.as< std::unique_ptr > > > () = std::move(b); } -#line 2960 "seclang-parser.cc" // lalr1.cc:856 - break; - - case 159: -#line 1778 "seclang-parser.yy" // lalr1.cc:856 - { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::Args_DictElement(yystack_[0].value.as< std::string > ())); - } -#line 2968 "seclang-parser.cc" // lalr1.cc:856 +#line 3002 "seclang-parser.cc" // lalr1.cc:856 break; case 160: -#line 1782 "seclang-parser.yy" // lalr1.cc:856 +#line 1815 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::Args_DictElementRegexp(yystack_[0].value.as< std::string > ())); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::Args_DictElement(yystack_[0].value.as< std::string > ())); } -#line 2976 "seclang-parser.cc" // lalr1.cc:856 +#line 3010 "seclang-parser.cc" // lalr1.cc:856 break; case 161: -#line 1786 "seclang-parser.yy" // lalr1.cc:856 +#line 1819 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::Args_NoDictElement()); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::Args_DictElementRegexp(yystack_[0].value.as< std::string > ())); } -#line 2984 "seclang-parser.cc" // lalr1.cc:856 +#line 3018 "seclang-parser.cc" // lalr1.cc:856 break; case 162: -#line 1790 "seclang-parser.yy" // lalr1.cc:856 +#line 1823 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::ArgsPost_DictElement(yystack_[0].value.as< std::string > ())); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::Args_NoDictElement()); } -#line 2992 "seclang-parser.cc" // lalr1.cc:856 +#line 3026 "seclang-parser.cc" // lalr1.cc:856 break; case 163: -#line 1794 "seclang-parser.yy" // lalr1.cc:856 +#line 1827 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::ArgsPost_DictElementRegexp(yystack_[0].value.as< std::string > ())); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::ArgsPost_DictElement(yystack_[0].value.as< std::string > ())); } -#line 3000 "seclang-parser.cc" // lalr1.cc:856 +#line 3034 "seclang-parser.cc" // lalr1.cc:856 break; case 164: -#line 1798 "seclang-parser.yy" // lalr1.cc:856 +#line 1831 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::ArgsPost_NoDictElement()); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::ArgsPost_DictElementRegexp(yystack_[0].value.as< std::string > ())); } -#line 3008 "seclang-parser.cc" // lalr1.cc:856 +#line 3042 "seclang-parser.cc" // lalr1.cc:856 break; case 165: -#line 1802 "seclang-parser.yy" // lalr1.cc:856 +#line 1835 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::ArgsGet_DictElement(yystack_[0].value.as< std::string > ())); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::ArgsPost_NoDictElement()); } -#line 3016 "seclang-parser.cc" // lalr1.cc:856 +#line 3050 "seclang-parser.cc" // lalr1.cc:856 break; case 166: -#line 1806 "seclang-parser.yy" // lalr1.cc:856 +#line 1839 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::ArgsGet_DictElementRegexp(yystack_[0].value.as< std::string > ())); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::ArgsGet_DictElement(yystack_[0].value.as< std::string > ())); } -#line 3024 "seclang-parser.cc" // lalr1.cc:856 +#line 3058 "seclang-parser.cc" // lalr1.cc:856 break; case 167: -#line 1810 "seclang-parser.yy" // lalr1.cc:856 +#line 1843 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::ArgsGet_NoDictElement()); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::ArgsGet_DictElementRegexp(yystack_[0].value.as< std::string > ())); } -#line 3032 "seclang-parser.cc" // lalr1.cc:856 +#line 3066 "seclang-parser.cc" // lalr1.cc:856 break; case 168: -#line 1814 "seclang-parser.yy" // lalr1.cc:856 +#line 1847 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::FilesSizes_DictElement(yystack_[0].value.as< std::string > ())); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::ArgsGet_NoDictElement()); } -#line 3040 "seclang-parser.cc" // lalr1.cc:856 +#line 3074 "seclang-parser.cc" // lalr1.cc:856 break; case 169: -#line 1818 "seclang-parser.yy" // lalr1.cc:856 +#line 1851 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::FilesSizes_DictElementRegexp(yystack_[0].value.as< std::string > ())); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::FilesSizes_DictElement(yystack_[0].value.as< std::string > ())); } -#line 3048 "seclang-parser.cc" // lalr1.cc:856 +#line 3082 "seclang-parser.cc" // lalr1.cc:856 break; case 170: -#line 1822 "seclang-parser.yy" // lalr1.cc:856 +#line 1855 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::FilesSizes_NoDictElement()); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::FilesSizes_DictElementRegexp(yystack_[0].value.as< std::string > ())); } -#line 3056 "seclang-parser.cc" // lalr1.cc:856 +#line 3090 "seclang-parser.cc" // lalr1.cc:856 break; case 171: -#line 1826 "seclang-parser.yy" // lalr1.cc:856 +#line 1859 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::FilesNames_DictElement(yystack_[0].value.as< std::string > ())); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::FilesSizes_NoDictElement()); } -#line 3064 "seclang-parser.cc" // lalr1.cc:856 +#line 3098 "seclang-parser.cc" // lalr1.cc:856 break; case 172: -#line 1830 "seclang-parser.yy" // lalr1.cc:856 +#line 1863 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::FilesNames_DictElementRegexp(yystack_[0].value.as< std::string > ())); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::FilesNames_DictElement(yystack_[0].value.as< std::string > ())); } -#line 3072 "seclang-parser.cc" // lalr1.cc:856 +#line 3106 "seclang-parser.cc" // lalr1.cc:856 break; case 173: -#line 1834 "seclang-parser.yy" // lalr1.cc:856 +#line 1867 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::FilesNames_NoDictElement()); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::FilesNames_DictElementRegexp(yystack_[0].value.as< std::string > ())); } -#line 3080 "seclang-parser.cc" // lalr1.cc:856 +#line 3114 "seclang-parser.cc" // lalr1.cc:856 break; case 174: -#line 1838 "seclang-parser.yy" // lalr1.cc:856 +#line 1871 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::FilesTmpContent_DictElement(yystack_[0].value.as< std::string > ())); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::FilesNames_NoDictElement()); } -#line 3088 "seclang-parser.cc" // lalr1.cc:856 +#line 3122 "seclang-parser.cc" // lalr1.cc:856 break; case 175: -#line 1842 "seclang-parser.yy" // lalr1.cc:856 +#line 1875 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::FilesTmpContent_DictElementRegexp(yystack_[0].value.as< std::string > ())); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::FilesTmpContent_DictElement(yystack_[0].value.as< std::string > ())); } -#line 3096 "seclang-parser.cc" // lalr1.cc:856 +#line 3130 "seclang-parser.cc" // lalr1.cc:856 break; case 176: -#line 1846 "seclang-parser.yy" // lalr1.cc:856 +#line 1879 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::FilesTmpContent_NoDictElement()); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::FilesTmpContent_DictElementRegexp(yystack_[0].value.as< std::string > ())); } -#line 3104 "seclang-parser.cc" // lalr1.cc:856 +#line 3138 "seclang-parser.cc" // lalr1.cc:856 break; case 177: -#line 1850 "seclang-parser.yy" // lalr1.cc:856 +#line 1883 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::MultiPartFileName_DictElement(yystack_[0].value.as< std::string > ())); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::FilesTmpContent_NoDictElement()); } -#line 3112 "seclang-parser.cc" // lalr1.cc:856 +#line 3146 "seclang-parser.cc" // lalr1.cc:856 break; case 178: -#line 1854 "seclang-parser.yy" // lalr1.cc:856 +#line 1887 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::MultiPartFileName_DictElementRegexp(yystack_[0].value.as< std::string > ())); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::MultiPartFileName_DictElement(yystack_[0].value.as< std::string > ())); } -#line 3120 "seclang-parser.cc" // lalr1.cc:856 +#line 3154 "seclang-parser.cc" // lalr1.cc:856 break; case 179: -#line 1858 "seclang-parser.yy" // lalr1.cc:856 +#line 1891 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::MultiPartFileName_NoDictElement()); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::MultiPartFileName_DictElementRegexp(yystack_[0].value.as< std::string > ())); } -#line 3128 "seclang-parser.cc" // lalr1.cc:856 +#line 3162 "seclang-parser.cc" // lalr1.cc:856 break; case 180: -#line 1862 "seclang-parser.yy" // lalr1.cc:856 +#line 1895 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::MultiPartName_DictElement(yystack_[0].value.as< std::string > ())); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::MultiPartFileName_NoDictElement()); } -#line 3136 "seclang-parser.cc" // lalr1.cc:856 +#line 3170 "seclang-parser.cc" // lalr1.cc:856 break; case 181: -#line 1866 "seclang-parser.yy" // lalr1.cc:856 +#line 1899 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::MultiPartName_DictElementRegexp(yystack_[0].value.as< std::string > ())); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::MultiPartName_DictElement(yystack_[0].value.as< std::string > ())); } -#line 3144 "seclang-parser.cc" // lalr1.cc:856 +#line 3178 "seclang-parser.cc" // lalr1.cc:856 break; case 182: -#line 1870 "seclang-parser.yy" // lalr1.cc:856 +#line 1903 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::MultiPartName_NoDictElement()); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::MultiPartName_DictElementRegexp(yystack_[0].value.as< std::string > ())); } -#line 3152 "seclang-parser.cc" // lalr1.cc:856 +#line 3186 "seclang-parser.cc" // lalr1.cc:856 break; case 183: -#line 1874 "seclang-parser.yy" // lalr1.cc:856 +#line 1907 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::MatchedVarsNames_DictElement(yystack_[0].value.as< std::string > ())); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::MultiPartName_NoDictElement()); } -#line 3160 "seclang-parser.cc" // lalr1.cc:856 +#line 3194 "seclang-parser.cc" // lalr1.cc:856 break; case 184: -#line 1878 "seclang-parser.yy" // lalr1.cc:856 +#line 1911 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::MatchedVarsNames_DictElementRegexp(yystack_[0].value.as< std::string > ())); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::MatchedVarsNames_DictElement(yystack_[0].value.as< std::string > ())); } -#line 3168 "seclang-parser.cc" // lalr1.cc:856 +#line 3202 "seclang-parser.cc" // lalr1.cc:856 break; case 185: -#line 1882 "seclang-parser.yy" // lalr1.cc:856 +#line 1915 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::MatchedVarsNames_NoDictElement()); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::MatchedVarsNames_DictElementRegexp(yystack_[0].value.as< std::string > ())); } -#line 3176 "seclang-parser.cc" // lalr1.cc:856 +#line 3210 "seclang-parser.cc" // lalr1.cc:856 break; case 186: -#line 1886 "seclang-parser.yy" // lalr1.cc:856 +#line 1919 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::MatchedVars_DictElement(yystack_[0].value.as< std::string > ())); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::MatchedVarsNames_NoDictElement()); } -#line 3184 "seclang-parser.cc" // lalr1.cc:856 +#line 3218 "seclang-parser.cc" // lalr1.cc:856 break; case 187: -#line 1890 "seclang-parser.yy" // lalr1.cc:856 +#line 1923 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::MatchedVars_DictElementRegexp(yystack_[0].value.as< std::string > ())); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::MatchedVars_DictElement(yystack_[0].value.as< std::string > ())); } -#line 3192 "seclang-parser.cc" // lalr1.cc:856 +#line 3226 "seclang-parser.cc" // lalr1.cc:856 break; case 188: -#line 1894 "seclang-parser.yy" // lalr1.cc:856 +#line 1927 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::MatchedVars_NoDictElement()); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::MatchedVars_DictElementRegexp(yystack_[0].value.as< std::string > ())); } -#line 3200 "seclang-parser.cc" // lalr1.cc:856 +#line 3234 "seclang-parser.cc" // lalr1.cc:856 break; case 189: -#line 1898 "seclang-parser.yy" // lalr1.cc:856 +#line 1931 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::Files_DictElement(yystack_[0].value.as< std::string > ())); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::MatchedVars_NoDictElement()); } -#line 3208 "seclang-parser.cc" // lalr1.cc:856 +#line 3242 "seclang-parser.cc" // lalr1.cc:856 break; case 190: -#line 1902 "seclang-parser.yy" // lalr1.cc:856 +#line 1935 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::Files_DictElementRegexp(yystack_[0].value.as< std::string > ())); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::Files_DictElement(yystack_[0].value.as< std::string > ())); } -#line 3216 "seclang-parser.cc" // lalr1.cc:856 +#line 3250 "seclang-parser.cc" // lalr1.cc:856 break; case 191: -#line 1906 "seclang-parser.yy" // lalr1.cc:856 +#line 1939 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::Files_NoDictElement()); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::Files_DictElementRegexp(yystack_[0].value.as< std::string > ())); } -#line 3224 "seclang-parser.cc" // lalr1.cc:856 +#line 3258 "seclang-parser.cc" // lalr1.cc:856 break; case 192: -#line 1910 "seclang-parser.yy" // lalr1.cc:856 +#line 1943 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::RequestCookies_DictElement(yystack_[0].value.as< std::string > ())); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::Files_NoDictElement()); } -#line 3232 "seclang-parser.cc" // lalr1.cc:856 +#line 3266 "seclang-parser.cc" // lalr1.cc:856 break; case 193: -#line 1914 "seclang-parser.yy" // lalr1.cc:856 +#line 1947 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::RequestCookies_DictElementRegexp(yystack_[0].value.as< std::string > ())); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::RequestCookies_DictElement(yystack_[0].value.as< std::string > ())); } -#line 3240 "seclang-parser.cc" // lalr1.cc:856 +#line 3274 "seclang-parser.cc" // lalr1.cc:856 break; case 194: -#line 1918 "seclang-parser.yy" // lalr1.cc:856 +#line 1951 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::RequestCookies_NoDictElement()); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::RequestCookies_DictElementRegexp(yystack_[0].value.as< std::string > ())); } -#line 3248 "seclang-parser.cc" // lalr1.cc:856 +#line 3282 "seclang-parser.cc" // lalr1.cc:856 break; case 195: -#line 1922 "seclang-parser.yy" // lalr1.cc:856 +#line 1955 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::RequestHeaders_DictElement(yystack_[0].value.as< std::string > ())); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::RequestCookies_NoDictElement()); } -#line 3256 "seclang-parser.cc" // lalr1.cc:856 +#line 3290 "seclang-parser.cc" // lalr1.cc:856 break; case 196: -#line 1926 "seclang-parser.yy" // lalr1.cc:856 +#line 1959 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::RequestHeaders_DictElementRegexp(yystack_[0].value.as< std::string > ())); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::RequestHeaders_DictElement(yystack_[0].value.as< std::string > ())); } -#line 3264 "seclang-parser.cc" // lalr1.cc:856 +#line 3298 "seclang-parser.cc" // lalr1.cc:856 break; case 197: -#line 1930 "seclang-parser.yy" // lalr1.cc:856 +#line 1963 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::RequestHeaders_NoDictElement()); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::RequestHeaders_DictElementRegexp(yystack_[0].value.as< std::string > ())); } -#line 3272 "seclang-parser.cc" // lalr1.cc:856 +#line 3306 "seclang-parser.cc" // lalr1.cc:856 break; case 198: -#line 1934 "seclang-parser.yy" // lalr1.cc:856 +#line 1967 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::ResponseHeaders_DictElement(yystack_[0].value.as< std::string > ())); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::RequestHeaders_NoDictElement()); } -#line 3280 "seclang-parser.cc" // lalr1.cc:856 +#line 3314 "seclang-parser.cc" // lalr1.cc:856 break; case 199: -#line 1938 "seclang-parser.yy" // lalr1.cc:856 +#line 1971 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::ResponseHeaders_DictElementRegexp(yystack_[0].value.as< std::string > ())); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::ResponseHeaders_DictElement(yystack_[0].value.as< std::string > ())); } -#line 3288 "seclang-parser.cc" // lalr1.cc:856 +#line 3322 "seclang-parser.cc" // lalr1.cc:856 break; case 200: -#line 1942 "seclang-parser.yy" // lalr1.cc:856 +#line 1975 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::ResponseHeaders_NoDictElement()); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::ResponseHeaders_DictElementRegexp(yystack_[0].value.as< std::string > ())); } -#line 3296 "seclang-parser.cc" // lalr1.cc:856 +#line 3330 "seclang-parser.cc" // lalr1.cc:856 break; case 201: -#line 1946 "seclang-parser.yy" // lalr1.cc:856 +#line 1979 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::Geo_DictElement(yystack_[0].value.as< std::string > ())); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::ResponseHeaders_NoDictElement()); } -#line 3304 "seclang-parser.cc" // lalr1.cc:856 +#line 3338 "seclang-parser.cc" // lalr1.cc:856 break; case 202: -#line 1950 "seclang-parser.yy" // lalr1.cc:856 +#line 1983 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::Geo_DictElementRegexp(yystack_[0].value.as< std::string > ())); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::Geo_DictElement(yystack_[0].value.as< std::string > ())); } -#line 3312 "seclang-parser.cc" // lalr1.cc:856 +#line 3346 "seclang-parser.cc" // lalr1.cc:856 break; case 203: -#line 1954 "seclang-parser.yy" // lalr1.cc:856 +#line 1987 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::Geo_NoDictElement()); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::Geo_DictElementRegexp(yystack_[0].value.as< std::string > ())); } -#line 3320 "seclang-parser.cc" // lalr1.cc:856 +#line 3354 "seclang-parser.cc" // lalr1.cc:856 break; case 204: -#line 1958 "seclang-parser.yy" // lalr1.cc:856 +#line 1991 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::RequestCookiesNames_DictElement(yystack_[0].value.as< std::string > ())); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::Geo_NoDictElement()); } -#line 3328 "seclang-parser.cc" // lalr1.cc:856 +#line 3362 "seclang-parser.cc" // lalr1.cc:856 break; case 205: -#line 1962 "seclang-parser.yy" // lalr1.cc:856 +#line 1995 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::RequestCookiesNames_DictElementRegexp(yystack_[0].value.as< std::string > ())); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::RequestCookiesNames_DictElement(yystack_[0].value.as< std::string > ())); } -#line 3336 "seclang-parser.cc" // lalr1.cc:856 +#line 3370 "seclang-parser.cc" // lalr1.cc:856 break; case 206: -#line 1966 "seclang-parser.yy" // lalr1.cc:856 +#line 1999 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::RequestCookiesNames_NoDictElement()); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::RequestCookiesNames_DictElementRegexp(yystack_[0].value.as< std::string > ())); } -#line 3344 "seclang-parser.cc" // lalr1.cc:856 +#line 3378 "seclang-parser.cc" // lalr1.cc:856 break; case 207: -#line 1970 "seclang-parser.yy" // lalr1.cc:856 +#line 2003 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::Rule_DictElement(yystack_[0].value.as< std::string > ())); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::RequestCookiesNames_NoDictElement()); } -#line 3352 "seclang-parser.cc" // lalr1.cc:856 +#line 3386 "seclang-parser.cc" // lalr1.cc:856 break; case 208: -#line 1974 "seclang-parser.yy" // lalr1.cc:856 +#line 2007 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::Rule_DictElementRegexp(yystack_[0].value.as< std::string > ())); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::Rule_DictElement(yystack_[0].value.as< std::string > ())); } -#line 3360 "seclang-parser.cc" // lalr1.cc:856 +#line 3394 "seclang-parser.cc" // lalr1.cc:856 break; case 209: -#line 1978 "seclang-parser.yy" // lalr1.cc:856 +#line 2011 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::Rule_NoDictElement()); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::Rule_DictElementRegexp(yystack_[0].value.as< std::string > ())); } -#line 3368 "seclang-parser.cc" // lalr1.cc:856 +#line 3402 "seclang-parser.cc" // lalr1.cc:856 break; case 210: -#line 1982 "seclang-parser.yy" // lalr1.cc:856 +#line 2015 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::Env("ENV:" + yystack_[0].value.as< std::string > ())); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::Rule_NoDictElement()); } -#line 3376 "seclang-parser.cc" // lalr1.cc:856 +#line 3410 "seclang-parser.cc" // lalr1.cc:856 break; case 211: -#line 1986 "seclang-parser.yy" // lalr1.cc:856 +#line 2019 "seclang-parser.yy" // lalr1.cc:856 { VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::Env("ENV:" + yystack_[0].value.as< std::string > ())); } -#line 3384 "seclang-parser.cc" // lalr1.cc:856 +#line 3418 "seclang-parser.cc" // lalr1.cc:856 break; case 212: -#line 1990 "seclang-parser.yy" // lalr1.cc:856 +#line 2023 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::Env("ENV")); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::Env("ENV:" + yystack_[0].value.as< std::string > ())); } -#line 3392 "seclang-parser.cc" // lalr1.cc:856 +#line 3426 "seclang-parser.cc" // lalr1.cc:856 break; case 213: -#line 1994 "seclang-parser.yy" // lalr1.cc:856 +#line 2027 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::XML("XML:" + yystack_[0].value.as< std::string > ())); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::Env("ENV")); } -#line 3400 "seclang-parser.cc" // lalr1.cc:856 +#line 3434 "seclang-parser.cc" // lalr1.cc:856 break; case 214: -#line 1998 "seclang-parser.yy" // lalr1.cc:856 +#line 2031 "seclang-parser.yy" // lalr1.cc:856 { VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::XML("XML:" + yystack_[0].value.as< std::string > ())); } -#line 3408 "seclang-parser.cc" // lalr1.cc:856 +#line 3442 "seclang-parser.cc" // lalr1.cc:856 break; case 215: -#line 2002 "seclang-parser.yy" // lalr1.cc:856 +#line 2035 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::XML_NoDictElement()); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::XML("XML:" + yystack_[0].value.as< std::string > ())); } -#line 3416 "seclang-parser.cc" // lalr1.cc:856 +#line 3450 "seclang-parser.cc" // lalr1.cc:856 break; case 216: -#line 2006 "seclang-parser.yy" // lalr1.cc:856 +#line 2039 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::FilesTmpNames_DictElement(yystack_[0].value.as< std::string > ())); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::XML_NoDictElement()); } -#line 3424 "seclang-parser.cc" // lalr1.cc:856 +#line 3458 "seclang-parser.cc" // lalr1.cc:856 break; case 217: -#line 2010 "seclang-parser.yy" // lalr1.cc:856 +#line 2043 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::FilesTmpNames_DictElementRegexp(yystack_[0].value.as< std::string > ())); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::FilesTmpNames_DictElement(yystack_[0].value.as< std::string > ())); } -#line 3432 "seclang-parser.cc" // lalr1.cc:856 +#line 3466 "seclang-parser.cc" // lalr1.cc:856 break; case 218: -#line 2014 "seclang-parser.yy" // lalr1.cc:856 +#line 2047 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::FilesTmpNames_NoDictElement()); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::FilesTmpNames_DictElementRegexp(yystack_[0].value.as< std::string > ())); } -#line 3440 "seclang-parser.cc" // lalr1.cc:856 +#line 3474 "seclang-parser.cc" // lalr1.cc:856 break; case 219: -#line 2018 "seclang-parser.yy" // lalr1.cc:856 +#line 2051 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::Resource_DynamicElement(std::move(yystack_[0].value.as< std::unique_ptr > ()))); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::FilesTmpNames_NoDictElement()); } -#line 3448 "seclang-parser.cc" // lalr1.cc:856 +#line 3482 "seclang-parser.cc" // lalr1.cc:856 break; case 220: -#line 2022 "seclang-parser.yy" // lalr1.cc:856 +#line 2055 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::Resource_DictElement(yystack_[0].value.as< std::string > ())); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::Resource_DynamicElement(std::move(yystack_[0].value.as< std::unique_ptr > ()))); } -#line 3456 "seclang-parser.cc" // lalr1.cc:856 +#line 3490 "seclang-parser.cc" // lalr1.cc:856 break; case 221: -#line 2026 "seclang-parser.yy" // lalr1.cc:856 +#line 2059 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::Resource_DictElementRegexp(yystack_[0].value.as< std::string > ())); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::Resource_DictElement(yystack_[0].value.as< std::string > ())); } -#line 3464 "seclang-parser.cc" // lalr1.cc:856 +#line 3498 "seclang-parser.cc" // lalr1.cc:856 break; case 222: -#line 2030 "seclang-parser.yy" // lalr1.cc:856 +#line 2063 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::Resource_NoDictElement()); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::Resource_DictElementRegexp(yystack_[0].value.as< std::string > ())); } -#line 3472 "seclang-parser.cc" // lalr1.cc:856 +#line 3506 "seclang-parser.cc" // lalr1.cc:856 break; case 223: -#line 2034 "seclang-parser.yy" // lalr1.cc:856 +#line 2067 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::Ip_DynamicElement(std::move(yystack_[0].value.as< std::unique_ptr > ()))); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::Resource_NoDictElement()); } -#line 3480 "seclang-parser.cc" // lalr1.cc:856 +#line 3514 "seclang-parser.cc" // lalr1.cc:856 break; case 224: -#line 2038 "seclang-parser.yy" // lalr1.cc:856 +#line 2071 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::Ip_DictElement(yystack_[0].value.as< std::string > ())); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::Ip_DynamicElement(std::move(yystack_[0].value.as< std::unique_ptr > ()))); } -#line 3488 "seclang-parser.cc" // lalr1.cc:856 +#line 3522 "seclang-parser.cc" // lalr1.cc:856 break; case 225: -#line 2042 "seclang-parser.yy" // lalr1.cc:856 +#line 2075 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::Ip_DictElementRegexp(yystack_[0].value.as< std::string > ())); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::Ip_DictElement(yystack_[0].value.as< std::string > ())); } -#line 3496 "seclang-parser.cc" // lalr1.cc:856 +#line 3530 "seclang-parser.cc" // lalr1.cc:856 break; case 226: -#line 2046 "seclang-parser.yy" // lalr1.cc:856 +#line 2079 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::Ip_NoDictElement()); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::Ip_DictElementRegexp(yystack_[0].value.as< std::string > ())); } -#line 3504 "seclang-parser.cc" // lalr1.cc:856 +#line 3538 "seclang-parser.cc" // lalr1.cc:856 break; case 227: -#line 2050 "seclang-parser.yy" // lalr1.cc:856 +#line 2083 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::Global_DynamicElement(std::move(yystack_[0].value.as< std::unique_ptr > ()))); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::Ip_NoDictElement()); } -#line 3512 "seclang-parser.cc" // lalr1.cc:856 +#line 3546 "seclang-parser.cc" // lalr1.cc:856 break; case 228: -#line 2054 "seclang-parser.yy" // lalr1.cc:856 +#line 2087 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::Global_DictElement(yystack_[0].value.as< std::string > ())); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::Global_DynamicElement(std::move(yystack_[0].value.as< std::unique_ptr > ()))); } -#line 3520 "seclang-parser.cc" // lalr1.cc:856 +#line 3554 "seclang-parser.cc" // lalr1.cc:856 break; case 229: -#line 2058 "seclang-parser.yy" // lalr1.cc:856 +#line 2091 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::Global_DictElementRegexp(yystack_[0].value.as< std::string > ())); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::Global_DictElement(yystack_[0].value.as< std::string > ())); } -#line 3528 "seclang-parser.cc" // lalr1.cc:856 +#line 3562 "seclang-parser.cc" // lalr1.cc:856 break; case 230: -#line 2062 "seclang-parser.yy" // lalr1.cc:856 +#line 2095 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::Global_NoDictElement()); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::Global_DictElementRegexp(yystack_[0].value.as< std::string > ())); } -#line 3536 "seclang-parser.cc" // lalr1.cc:856 +#line 3570 "seclang-parser.cc" // lalr1.cc:856 break; case 231: -#line 2066 "seclang-parser.yy" // lalr1.cc:856 +#line 2099 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::User_DynamicElement(std::move(yystack_[0].value.as< std::unique_ptr > ()))); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::Global_NoDictElement()); } -#line 3544 "seclang-parser.cc" // lalr1.cc:856 +#line 3578 "seclang-parser.cc" // lalr1.cc:856 break; case 232: -#line 2070 "seclang-parser.yy" // lalr1.cc:856 +#line 2103 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::User_DictElement(yystack_[0].value.as< std::string > ())); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::User_DynamicElement(std::move(yystack_[0].value.as< std::unique_ptr > ()))); } -#line 3552 "seclang-parser.cc" // lalr1.cc:856 +#line 3586 "seclang-parser.cc" // lalr1.cc:856 break; case 233: -#line 2074 "seclang-parser.yy" // lalr1.cc:856 +#line 2107 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::User_DictElementRegexp(yystack_[0].value.as< std::string > ())); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::User_DictElement(yystack_[0].value.as< std::string > ())); } -#line 3560 "seclang-parser.cc" // lalr1.cc:856 +#line 3594 "seclang-parser.cc" // lalr1.cc:856 break; case 234: -#line 2078 "seclang-parser.yy" // lalr1.cc:856 +#line 2111 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::User_NoDictElement()); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::User_DictElementRegexp(yystack_[0].value.as< std::string > ())); } -#line 3568 "seclang-parser.cc" // lalr1.cc:856 +#line 3602 "seclang-parser.cc" // lalr1.cc:856 break; case 235: -#line 2082 "seclang-parser.yy" // lalr1.cc:856 +#line 2115 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::Tx_DynamicElement(std::move(yystack_[0].value.as< std::unique_ptr > ()))); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::User_NoDictElement()); } -#line 3576 "seclang-parser.cc" // lalr1.cc:856 +#line 3610 "seclang-parser.cc" // lalr1.cc:856 break; case 236: -#line 2086 "seclang-parser.yy" // lalr1.cc:856 +#line 2119 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::Tx_DictElement(yystack_[0].value.as< std::string > ())); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::Tx_DynamicElement(std::move(yystack_[0].value.as< std::unique_ptr > ()))); } -#line 3584 "seclang-parser.cc" // lalr1.cc:856 +#line 3618 "seclang-parser.cc" // lalr1.cc:856 break; case 237: -#line 2090 "seclang-parser.yy" // lalr1.cc:856 +#line 2123 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::Tx_DictElementRegexp(yystack_[0].value.as< std::string > ())); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::Tx_DictElement(yystack_[0].value.as< std::string > ())); } -#line 3592 "seclang-parser.cc" // lalr1.cc:856 +#line 3626 "seclang-parser.cc" // lalr1.cc:856 break; case 238: -#line 2094 "seclang-parser.yy" // lalr1.cc:856 +#line 2127 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::Tx_NoDictElement()); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::Tx_DictElementRegexp(yystack_[0].value.as< std::string > ())); } -#line 3600 "seclang-parser.cc" // lalr1.cc:856 +#line 3634 "seclang-parser.cc" // lalr1.cc:856 break; case 239: -#line 2098 "seclang-parser.yy" // lalr1.cc:856 +#line 2131 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::Session_DynamicElement(std::move(yystack_[0].value.as< std::unique_ptr > ()))); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::Tx_NoDictElement()); } -#line 3608 "seclang-parser.cc" // lalr1.cc:856 +#line 3642 "seclang-parser.cc" // lalr1.cc:856 break; case 240: -#line 2102 "seclang-parser.yy" // lalr1.cc:856 +#line 2135 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::Session_DictElement(yystack_[0].value.as< std::string > ())); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::Session_DynamicElement(std::move(yystack_[0].value.as< std::unique_ptr > ()))); } -#line 3616 "seclang-parser.cc" // lalr1.cc:856 +#line 3650 "seclang-parser.cc" // lalr1.cc:856 break; case 241: -#line 2106 "seclang-parser.yy" // lalr1.cc:856 +#line 2139 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::Session_DictElementRegexp(yystack_[0].value.as< std::string > ())); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::Session_DictElement(yystack_[0].value.as< std::string > ())); } -#line 3624 "seclang-parser.cc" // lalr1.cc:856 +#line 3658 "seclang-parser.cc" // lalr1.cc:856 break; case 242: -#line 2110 "seclang-parser.yy" // lalr1.cc:856 +#line 2143 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::Session_NoDictElement()); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::Session_DictElementRegexp(yystack_[0].value.as< std::string > ())); } -#line 3632 "seclang-parser.cc" // lalr1.cc:856 +#line 3666 "seclang-parser.cc" // lalr1.cc:856 break; case 243: -#line 2114 "seclang-parser.yy" // lalr1.cc:856 +#line 2147 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::ArgsNames_DictElement(yystack_[0].value.as< std::string > ())); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::Session_NoDictElement()); } -#line 3640 "seclang-parser.cc" // lalr1.cc:856 +#line 3674 "seclang-parser.cc" // lalr1.cc:856 break; case 244: -#line 2118 "seclang-parser.yy" // lalr1.cc:856 +#line 2151 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::ArgsNames_DictElementRegexp(yystack_[0].value.as< std::string > ())); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::ArgsNames_DictElement(yystack_[0].value.as< std::string > ())); } -#line 3648 "seclang-parser.cc" // lalr1.cc:856 +#line 3682 "seclang-parser.cc" // lalr1.cc:856 break; case 245: -#line 2122 "seclang-parser.yy" // lalr1.cc:856 +#line 2155 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::ArgsNames_NoDictElement()); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::ArgsNames_DictElementRegexp(yystack_[0].value.as< std::string > ())); } -#line 3656 "seclang-parser.cc" // lalr1.cc:856 +#line 3690 "seclang-parser.cc" // lalr1.cc:856 break; case 246: -#line 2126 "seclang-parser.yy" // lalr1.cc:856 +#line 2159 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::ArgsGetNames_DictElement(yystack_[0].value.as< std::string > ())); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::ArgsNames_NoDictElement()); } -#line 3664 "seclang-parser.cc" // lalr1.cc:856 +#line 3698 "seclang-parser.cc" // lalr1.cc:856 break; case 247: -#line 2130 "seclang-parser.yy" // lalr1.cc:856 +#line 2163 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::ArgsGetNames_DictElementRegexp(yystack_[0].value.as< std::string > ())); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::ArgsGetNames_DictElement(yystack_[0].value.as< std::string > ())); } -#line 3672 "seclang-parser.cc" // lalr1.cc:856 +#line 3706 "seclang-parser.cc" // lalr1.cc:856 break; case 248: -#line 2134 "seclang-parser.yy" // lalr1.cc:856 +#line 2167 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::ArgsGetNames_NoDictElement()); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::ArgsGetNames_DictElementRegexp(yystack_[0].value.as< std::string > ())); } -#line 3680 "seclang-parser.cc" // lalr1.cc:856 +#line 3714 "seclang-parser.cc" // lalr1.cc:856 break; case 249: -#line 2139 "seclang-parser.yy" // lalr1.cc:856 +#line 2171 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::ArgsPostNames_DictElement(yystack_[0].value.as< std::string > ())); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::ArgsGetNames_NoDictElement()); } -#line 3688 "seclang-parser.cc" // lalr1.cc:856 +#line 3722 "seclang-parser.cc" // lalr1.cc:856 break; case 250: -#line 2143 "seclang-parser.yy" // lalr1.cc:856 +#line 2176 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::ArgsPostNames_DictElementRegexp(yystack_[0].value.as< std::string > ())); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::ArgsPostNames_DictElement(yystack_[0].value.as< std::string > ())); } -#line 3696 "seclang-parser.cc" // lalr1.cc:856 +#line 3730 "seclang-parser.cc" // lalr1.cc:856 break; case 251: -#line 2147 "seclang-parser.yy" // lalr1.cc:856 +#line 2180 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::ArgsPostNames_NoDictElement()); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::ArgsPostNames_DictElementRegexp(yystack_[0].value.as< std::string > ())); } -#line 3704 "seclang-parser.cc" // lalr1.cc:856 +#line 3738 "seclang-parser.cc" // lalr1.cc:856 break; case 252: -#line 2152 "seclang-parser.yy" // lalr1.cc:856 +#line 2184 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::RequestHeadersNames_DictElement(yystack_[0].value.as< std::string > ())); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::ArgsPostNames_NoDictElement()); } -#line 3712 "seclang-parser.cc" // lalr1.cc:856 +#line 3746 "seclang-parser.cc" // lalr1.cc:856 break; case 253: -#line 2156 "seclang-parser.yy" // lalr1.cc:856 +#line 2189 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::RequestHeadersNames_DictElementRegexp(yystack_[0].value.as< std::string > ())); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::RequestHeadersNames_DictElement(yystack_[0].value.as< std::string > ())); } -#line 3720 "seclang-parser.cc" // lalr1.cc:856 +#line 3754 "seclang-parser.cc" // lalr1.cc:856 break; case 254: -#line 2160 "seclang-parser.yy" // lalr1.cc:856 +#line 2193 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::RequestHeadersNames_NoDictElement()); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::RequestHeadersNames_DictElementRegexp(yystack_[0].value.as< std::string > ())); } -#line 3728 "seclang-parser.cc" // lalr1.cc:856 +#line 3762 "seclang-parser.cc" // lalr1.cc:856 break; case 255: -#line 2165 "seclang-parser.yy" // lalr1.cc:856 +#line 2197 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::ResponseContentType()); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::RequestHeadersNames_NoDictElement()); } -#line 3736 "seclang-parser.cc" // lalr1.cc:856 +#line 3770 "seclang-parser.cc" // lalr1.cc:856 break; case 256: -#line 2170 "seclang-parser.yy" // lalr1.cc:856 +#line 2202 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::ResponseHeadersNames_DictElement(yystack_[0].value.as< std::string > ())); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::ResponseContentType()); } -#line 3744 "seclang-parser.cc" // lalr1.cc:856 +#line 3778 "seclang-parser.cc" // lalr1.cc:856 break; case 257: -#line 2174 "seclang-parser.yy" // lalr1.cc:856 +#line 2207 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::ResponseHeadersNames_DictElementRegexp(yystack_[0].value.as< std::string > ())); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::ResponseHeadersNames_DictElement(yystack_[0].value.as< std::string > ())); } -#line 3752 "seclang-parser.cc" // lalr1.cc:856 +#line 3786 "seclang-parser.cc" // lalr1.cc:856 break; case 258: -#line 2178 "seclang-parser.yy" // lalr1.cc:856 +#line 2211 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::ResponseHeadersNames_NoDictElement()); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::ResponseHeadersNames_DictElementRegexp(yystack_[0].value.as< std::string > ())); } -#line 3760 "seclang-parser.cc" // lalr1.cc:856 +#line 3794 "seclang-parser.cc" // lalr1.cc:856 break; case 259: -#line 2182 "seclang-parser.yy" // lalr1.cc:856 +#line 2215 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::ArgsCombinedSize()); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::ResponseHeadersNames_NoDictElement()); } -#line 3768 "seclang-parser.cc" // lalr1.cc:856 +#line 3802 "seclang-parser.cc" // lalr1.cc:856 break; case 260: -#line 2186 "seclang-parser.yy" // lalr1.cc:856 +#line 2219 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::AuthType()); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::ArgsCombinedSize()); } -#line 3776 "seclang-parser.cc" // lalr1.cc:856 +#line 3810 "seclang-parser.cc" // lalr1.cc:856 break; case 261: -#line 2190 "seclang-parser.yy" // lalr1.cc:856 +#line 2223 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::FilesCombinedSize()); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::AuthType()); } -#line 3784 "seclang-parser.cc" // lalr1.cc:856 +#line 3818 "seclang-parser.cc" // lalr1.cc:856 break; case 262: -#line 2194 "seclang-parser.yy" // lalr1.cc:856 +#line 2227 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::FullRequest()); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::FilesCombinedSize()); } -#line 3792 "seclang-parser.cc" // lalr1.cc:856 +#line 3826 "seclang-parser.cc" // lalr1.cc:856 break; case 263: -#line 2198 "seclang-parser.yy" // lalr1.cc:856 +#line 2231 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::FullRequestLength()); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::FullRequest()); } -#line 3800 "seclang-parser.cc" // lalr1.cc:856 +#line 3834 "seclang-parser.cc" // lalr1.cc:856 break; case 264: -#line 2202 "seclang-parser.yy" // lalr1.cc:856 +#line 2235 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::InboundDataError()); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::FullRequestLength()); } -#line 3808 "seclang-parser.cc" // lalr1.cc:856 +#line 3842 "seclang-parser.cc" // lalr1.cc:856 break; case 265: -#line 2206 "seclang-parser.yy" // lalr1.cc:856 +#line 2239 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::MatchedVar()); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::InboundDataError()); } -#line 3816 "seclang-parser.cc" // lalr1.cc:856 +#line 3850 "seclang-parser.cc" // lalr1.cc:856 break; case 266: -#line 2210 "seclang-parser.yy" // lalr1.cc:856 +#line 2243 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::MatchedVarName()); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::MatchedVar()); } -#line 3824 "seclang-parser.cc" // lalr1.cc:856 +#line 3858 "seclang-parser.cc" // lalr1.cc:856 break; case 267: -#line 2214 "seclang-parser.yy" // lalr1.cc:856 +#line 2247 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::MultipartBoundaryQuoted()); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::MatchedVarName()); } -#line 3832 "seclang-parser.cc" // lalr1.cc:856 +#line 3866 "seclang-parser.cc" // lalr1.cc:856 break; case 268: -#line 2218 "seclang-parser.yy" // lalr1.cc:856 +#line 2251 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::MultipartBoundaryWhiteSpace()); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::MultipartBoundaryQuoted()); } -#line 3840 "seclang-parser.cc" // lalr1.cc:856 +#line 3874 "seclang-parser.cc" // lalr1.cc:856 break; case 269: -#line 2222 "seclang-parser.yy" // lalr1.cc:856 +#line 2255 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::MultipartCrlfLFLines()); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::MultipartBoundaryWhiteSpace()); } -#line 3848 "seclang-parser.cc" // lalr1.cc:856 +#line 3882 "seclang-parser.cc" // lalr1.cc:856 break; case 270: -#line 2226 "seclang-parser.yy" // lalr1.cc:856 +#line 2259 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::MultipartDateAfter()); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::MultipartCrlfLFLines()); } -#line 3856 "seclang-parser.cc" // lalr1.cc:856 +#line 3890 "seclang-parser.cc" // lalr1.cc:856 break; case 271: -#line 2230 "seclang-parser.yy" // lalr1.cc:856 +#line 2263 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::MultipartDateBefore()); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::MultipartDateAfter()); } -#line 3864 "seclang-parser.cc" // lalr1.cc:856 +#line 3898 "seclang-parser.cc" // lalr1.cc:856 break; case 272: -#line 2234 "seclang-parser.yy" // lalr1.cc:856 +#line 2267 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::MultipartFileLimitExceeded()); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::MultipartDateBefore()); } -#line 3872 "seclang-parser.cc" // lalr1.cc:856 +#line 3906 "seclang-parser.cc" // lalr1.cc:856 break; case 273: -#line 2238 "seclang-parser.yy" // lalr1.cc:856 +#line 2271 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::MultipartHeaderFolding()); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::MultipartFileLimitExceeded()); } -#line 3880 "seclang-parser.cc" // lalr1.cc:856 +#line 3914 "seclang-parser.cc" // lalr1.cc:856 break; case 274: -#line 2242 "seclang-parser.yy" // lalr1.cc:856 +#line 2275 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::MultipartInvalidHeaderFolding()); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::MultipartHeaderFolding()); } -#line 3888 "seclang-parser.cc" // lalr1.cc:856 +#line 3922 "seclang-parser.cc" // lalr1.cc:856 break; case 275: -#line 2246 "seclang-parser.yy" // lalr1.cc:856 +#line 2279 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::MultipartInvalidPart()); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::MultipartInvalidHeaderFolding()); } -#line 3896 "seclang-parser.cc" // lalr1.cc:856 +#line 3930 "seclang-parser.cc" // lalr1.cc:856 break; case 276: -#line 2250 "seclang-parser.yy" // lalr1.cc:856 +#line 2283 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::MultipartInvalidQuoting()); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::MultipartInvalidPart()); } -#line 3904 "seclang-parser.cc" // lalr1.cc:856 +#line 3938 "seclang-parser.cc" // lalr1.cc:856 break; case 277: -#line 2254 "seclang-parser.yy" // lalr1.cc:856 +#line 2287 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::MultipartLFLine()); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::MultipartInvalidQuoting()); } -#line 3912 "seclang-parser.cc" // lalr1.cc:856 +#line 3946 "seclang-parser.cc" // lalr1.cc:856 break; case 278: -#line 2258 "seclang-parser.yy" // lalr1.cc:856 +#line 2291 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::MultipartMissingSemicolon()); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::MultipartLFLine()); } -#line 3920 "seclang-parser.cc" // lalr1.cc:856 +#line 3954 "seclang-parser.cc" // lalr1.cc:856 break; case 279: -#line 2262 "seclang-parser.yy" // lalr1.cc:856 +#line 2295 "seclang-parser.yy" // lalr1.cc:856 { VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::MultipartMissingSemicolon()); } -#line 3928 "seclang-parser.cc" // lalr1.cc:856 +#line 3962 "seclang-parser.cc" // lalr1.cc:856 break; case 280: -#line 2266 "seclang-parser.yy" // lalr1.cc:856 +#line 2299 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::MultipartStrictError()); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::MultipartMissingSemicolon()); } -#line 3936 "seclang-parser.cc" // lalr1.cc:856 +#line 3970 "seclang-parser.cc" // lalr1.cc:856 break; case 281: -#line 2270 "seclang-parser.yy" // lalr1.cc:856 +#line 2303 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::MultipartUnmatchedBoundary()); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::MultipartStrictError()); } -#line 3944 "seclang-parser.cc" // lalr1.cc:856 +#line 3978 "seclang-parser.cc" // lalr1.cc:856 break; case 282: -#line 2274 "seclang-parser.yy" // lalr1.cc:856 +#line 2307 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::OutboundDataError()); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::MultipartUnmatchedBoundary()); } -#line 3952 "seclang-parser.cc" // lalr1.cc:856 +#line 3986 "seclang-parser.cc" // lalr1.cc:856 break; case 283: -#line 2278 "seclang-parser.yy" // lalr1.cc:856 +#line 2311 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::PathInfo()); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::OutboundDataError()); } -#line 3960 "seclang-parser.cc" // lalr1.cc:856 +#line 3994 "seclang-parser.cc" // lalr1.cc:856 break; case 284: -#line 2282 "seclang-parser.yy" // lalr1.cc:856 +#line 2315 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::QueryString()); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::PathInfo()); } -#line 3968 "seclang-parser.cc" // lalr1.cc:856 +#line 4002 "seclang-parser.cc" // lalr1.cc:856 break; case 285: -#line 2286 "seclang-parser.yy" // lalr1.cc:856 +#line 2319 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::RemoteAddr()); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::QueryString()); } -#line 3976 "seclang-parser.cc" // lalr1.cc:856 +#line 4010 "seclang-parser.cc" // lalr1.cc:856 break; case 286: -#line 2290 "seclang-parser.yy" // lalr1.cc:856 +#line 2323 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::RemoteHost()); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::RemoteAddr()); } -#line 3984 "seclang-parser.cc" // lalr1.cc:856 +#line 4018 "seclang-parser.cc" // lalr1.cc:856 break; case 287: -#line 2294 "seclang-parser.yy" // lalr1.cc:856 +#line 2327 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::RemotePort()); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::RemoteHost()); } -#line 3992 "seclang-parser.cc" // lalr1.cc:856 +#line 4026 "seclang-parser.cc" // lalr1.cc:856 break; case 288: -#line 2298 "seclang-parser.yy" // lalr1.cc:856 +#line 2331 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::ReqbodyError()); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::RemotePort()); } -#line 4000 "seclang-parser.cc" // lalr1.cc:856 +#line 4034 "seclang-parser.cc" // lalr1.cc:856 break; case 289: -#line 2302 "seclang-parser.yy" // lalr1.cc:856 +#line 2335 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::ReqbodyErrorMsg()); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::ReqbodyError()); } -#line 4008 "seclang-parser.cc" // lalr1.cc:856 +#line 4042 "seclang-parser.cc" // lalr1.cc:856 break; case 290: -#line 2306 "seclang-parser.yy" // lalr1.cc:856 +#line 2339 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::ReqbodyProcessor()); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::ReqbodyErrorMsg()); } -#line 4016 "seclang-parser.cc" // lalr1.cc:856 +#line 4050 "seclang-parser.cc" // lalr1.cc:856 break; case 291: -#line 2310 "seclang-parser.yy" // lalr1.cc:856 +#line 2343 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::ReqbodyProcessorError()); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::ReqbodyProcessor()); } -#line 4024 "seclang-parser.cc" // lalr1.cc:856 +#line 4058 "seclang-parser.cc" // lalr1.cc:856 break; case 292: -#line 2314 "seclang-parser.yy" // lalr1.cc:856 +#line 2347 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::ReqbodyProcessorErrorMsg()); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::ReqbodyProcessorError()); } -#line 4032 "seclang-parser.cc" // lalr1.cc:856 +#line 4066 "seclang-parser.cc" // lalr1.cc:856 break; case 293: -#line 2318 "seclang-parser.yy" // lalr1.cc:856 +#line 2351 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::RequestBasename()); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::ReqbodyProcessorErrorMsg()); } -#line 4040 "seclang-parser.cc" // lalr1.cc:856 +#line 4074 "seclang-parser.cc" // lalr1.cc:856 break; case 294: -#line 2322 "seclang-parser.yy" // lalr1.cc:856 +#line 2355 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::RequestBody()); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::RequestBasename()); } -#line 4048 "seclang-parser.cc" // lalr1.cc:856 +#line 4082 "seclang-parser.cc" // lalr1.cc:856 break; case 295: -#line 2326 "seclang-parser.yy" // lalr1.cc:856 +#line 2359 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::RequestBodyLength()); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::RequestBody()); } -#line 4056 "seclang-parser.cc" // lalr1.cc:856 +#line 4090 "seclang-parser.cc" // lalr1.cc:856 break; case 296: -#line 2330 "seclang-parser.yy" // lalr1.cc:856 +#line 2363 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::RequestFilename()); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::RequestBodyLength()); } -#line 4064 "seclang-parser.cc" // lalr1.cc:856 +#line 4098 "seclang-parser.cc" // lalr1.cc:856 break; case 297: -#line 2334 "seclang-parser.yy" // lalr1.cc:856 +#line 2367 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::RequestLine()); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::RequestFilename()); } -#line 4072 "seclang-parser.cc" // lalr1.cc:856 +#line 4106 "seclang-parser.cc" // lalr1.cc:856 break; case 298: -#line 2338 "seclang-parser.yy" // lalr1.cc:856 +#line 2371 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::RequestMethod()); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::RequestLine()); } -#line 4080 "seclang-parser.cc" // lalr1.cc:856 +#line 4114 "seclang-parser.cc" // lalr1.cc:856 break; case 299: -#line 2342 "seclang-parser.yy" // lalr1.cc:856 +#line 2375 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::RequestProtocol()); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::RequestMethod()); } -#line 4088 "seclang-parser.cc" // lalr1.cc:856 +#line 4122 "seclang-parser.cc" // lalr1.cc:856 break; case 300: -#line 2346 "seclang-parser.yy" // lalr1.cc:856 +#line 2379 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::RequestURI()); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::RequestProtocol()); } -#line 4096 "seclang-parser.cc" // lalr1.cc:856 +#line 4130 "seclang-parser.cc" // lalr1.cc:856 break; case 301: -#line 2350 "seclang-parser.yy" // lalr1.cc:856 +#line 2383 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::RequestURIRaw()); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::RequestURI()); } -#line 4104 "seclang-parser.cc" // lalr1.cc:856 +#line 4138 "seclang-parser.cc" // lalr1.cc:856 break; case 302: -#line 2354 "seclang-parser.yy" // lalr1.cc:856 +#line 2387 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::ResponseBody()); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::RequestURIRaw()); } -#line 4112 "seclang-parser.cc" // lalr1.cc:856 +#line 4146 "seclang-parser.cc" // lalr1.cc:856 break; case 303: -#line 2358 "seclang-parser.yy" // lalr1.cc:856 +#line 2391 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::ResponseContentLength()); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::ResponseBody()); } -#line 4120 "seclang-parser.cc" // lalr1.cc:856 +#line 4154 "seclang-parser.cc" // lalr1.cc:856 break; case 304: -#line 2362 "seclang-parser.yy" // lalr1.cc:856 +#line 2395 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::ResponseProtocol()); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::ResponseContentLength()); } -#line 4128 "seclang-parser.cc" // lalr1.cc:856 +#line 4162 "seclang-parser.cc" // lalr1.cc:856 break; case 305: -#line 2366 "seclang-parser.yy" // lalr1.cc:856 +#line 2399 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::ResponseStatus()); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::ResponseProtocol()); } -#line 4136 "seclang-parser.cc" // lalr1.cc:856 +#line 4170 "seclang-parser.cc" // lalr1.cc:856 break; case 306: -#line 2370 "seclang-parser.yy" // lalr1.cc:856 +#line 2403 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::ServerAddr()); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::ResponseStatus()); } -#line 4144 "seclang-parser.cc" // lalr1.cc:856 +#line 4178 "seclang-parser.cc" // lalr1.cc:856 break; case 307: -#line 2374 "seclang-parser.yy" // lalr1.cc:856 +#line 2407 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::ServerName()); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::ServerAddr()); } -#line 4152 "seclang-parser.cc" // lalr1.cc:856 +#line 4186 "seclang-parser.cc" // lalr1.cc:856 break; case 308: -#line 2378 "seclang-parser.yy" // lalr1.cc:856 +#line 2411 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::ServerPort()); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::ServerName()); } -#line 4160 "seclang-parser.cc" // lalr1.cc:856 +#line 4194 "seclang-parser.cc" // lalr1.cc:856 break; case 309: -#line 2382 "seclang-parser.yy" // lalr1.cc:856 +#line 2415 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::SessionID()); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::ServerPort()); } -#line 4168 "seclang-parser.cc" // lalr1.cc:856 +#line 4202 "seclang-parser.cc" // lalr1.cc:856 break; case 310: -#line 2386 "seclang-parser.yy" // lalr1.cc:856 +#line 2419 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::UniqueID()); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::SessionID()); } -#line 4176 "seclang-parser.cc" // lalr1.cc:856 +#line 4210 "seclang-parser.cc" // lalr1.cc:856 break; case 311: -#line 2390 "seclang-parser.yy" // lalr1.cc:856 +#line 2423 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::UrlEncodedError()); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::UniqueID()); } -#line 4184 "seclang-parser.cc" // lalr1.cc:856 +#line 4218 "seclang-parser.cc" // lalr1.cc:856 break; case 312: -#line 2394 "seclang-parser.yy" // lalr1.cc:856 +#line 2427 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::UserID()); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::UrlEncodedError()); } -#line 4192 "seclang-parser.cc" // lalr1.cc:856 +#line 4226 "seclang-parser.cc" // lalr1.cc:856 break; case 313: -#line 2398 "seclang-parser.yy" // lalr1.cc:856 +#line 2431 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::Status()); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::UserID()); } -#line 4200 "seclang-parser.cc" // lalr1.cc:856 +#line 4234 "seclang-parser.cc" // lalr1.cc:856 break; case 314: -#line 2402 "seclang-parser.yy" // lalr1.cc:856 +#line 2435 "seclang-parser.yy" // lalr1.cc:856 { VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::Status()); } -#line 4208 "seclang-parser.cc" // lalr1.cc:856 +#line 4242 "seclang-parser.cc" // lalr1.cc:856 break; case 315: -#line 2406 "seclang-parser.yy" // lalr1.cc:856 +#line 2439 "seclang-parser.yy" // lalr1.cc:856 { - VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::WebAppId()); + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::Status()); } -#line 4216 "seclang-parser.cc" // lalr1.cc:856 +#line 4250 "seclang-parser.cc" // lalr1.cc:856 break; case 316: -#line 2410 "seclang-parser.yy" // lalr1.cc:856 +#line 2443 "seclang-parser.yy" // lalr1.cc:856 + { + VARIABLE_CONTAINER(yylhs.value.as< std::unique_ptr > (), new Variables::WebAppId()); + } +#line 4258 "seclang-parser.cc" // lalr1.cc:856 + break; + + case 317: +#line 2447 "seclang-parser.yy" // lalr1.cc:856 { std::string name(yystack_[0].value.as< std::string > ()); char z = name.at(0); std::unique_ptr c(new Duration(name)); yylhs.value.as< std::unique_ptr > () = std::move(c); } -#line 4227 "seclang-parser.cc" // lalr1.cc:856 +#line 4269 "seclang-parser.cc" // lalr1.cc:856 break; - case 317: -#line 2418 "seclang-parser.yy" // lalr1.cc:856 + case 318: +#line 2455 "seclang-parser.yy" // lalr1.cc:856 { std::string name(yystack_[0].value.as< std::string > ()); char z = name.at(0); std::unique_ptr c(new ModsecBuild(name)); yylhs.value.as< std::unique_ptr > () = std::move(c); } -#line 4238 "seclang-parser.cc" // lalr1.cc:856 +#line 4280 "seclang-parser.cc" // lalr1.cc:856 break; - case 318: -#line 2425 "seclang-parser.yy" // lalr1.cc:856 + case 319: +#line 2462 "seclang-parser.yy" // lalr1.cc:856 { std::string name(yystack_[0].value.as< std::string > ()); char z = name.at(0); std::unique_ptr c(new HighestSeverity(name)); yylhs.value.as< std::unique_ptr > () = std::move(c); } -#line 4249 "seclang-parser.cc" // lalr1.cc:856 +#line 4291 "seclang-parser.cc" // lalr1.cc:856 break; - case 319: -#line 2432 "seclang-parser.yy" // lalr1.cc:856 + case 320: +#line 2469 "seclang-parser.yy" // lalr1.cc:856 { std::string name(yystack_[0].value.as< std::string > ()); char z = name.at(0); std::unique_ptr c(new RemoteUser(name)); yylhs.value.as< std::unique_ptr > () = std::move(c); } -#line 4260 "seclang-parser.cc" // lalr1.cc:856 +#line 4302 "seclang-parser.cc" // lalr1.cc:856 break; - case 320: -#line 2439 "seclang-parser.yy" // lalr1.cc:856 + case 321: +#line 2476 "seclang-parser.yy" // lalr1.cc:856 { std::string name(yystack_[0].value.as< std::string > ()); char z = name.at(0); std::unique_ptr c(new Time(name)); yylhs.value.as< std::unique_ptr > () = std::move(c); } -#line 4271 "seclang-parser.cc" // lalr1.cc:856 +#line 4313 "seclang-parser.cc" // lalr1.cc:856 break; - case 321: -#line 2446 "seclang-parser.yy" // lalr1.cc:856 + case 322: +#line 2483 "seclang-parser.yy" // lalr1.cc:856 { std::string name(yystack_[0].value.as< std::string > ()); char z = name.at(0); std::unique_ptr c(new TimeDay(name)); yylhs.value.as< std::unique_ptr > () = std::move(c); } -#line 4282 "seclang-parser.cc" // lalr1.cc:856 +#line 4324 "seclang-parser.cc" // lalr1.cc:856 break; - case 322: -#line 2453 "seclang-parser.yy" // lalr1.cc:856 + case 323: +#line 2490 "seclang-parser.yy" // lalr1.cc:856 { std::string name(yystack_[0].value.as< std::string > ()); char z = name.at(0); std::unique_ptr c(new TimeEpoch(name)); yylhs.value.as< std::unique_ptr > () = std::move(c); } -#line 4293 "seclang-parser.cc" // lalr1.cc:856 +#line 4335 "seclang-parser.cc" // lalr1.cc:856 break; - case 323: -#line 2460 "seclang-parser.yy" // lalr1.cc:856 + case 324: +#line 2497 "seclang-parser.yy" // lalr1.cc:856 { std::string name(yystack_[0].value.as< std::string > ()); char z = name.at(0); std::unique_ptr c(new TimeHour(name)); yylhs.value.as< std::unique_ptr > () = std::move(c); } -#line 4304 "seclang-parser.cc" // lalr1.cc:856 +#line 4346 "seclang-parser.cc" // lalr1.cc:856 break; - case 324: -#line 2467 "seclang-parser.yy" // lalr1.cc:856 + case 325: +#line 2504 "seclang-parser.yy" // lalr1.cc:856 { std::string name(yystack_[0].value.as< std::string > ()); char z = name.at(0); std::unique_ptr c(new TimeMin(name)); yylhs.value.as< std::unique_ptr > () = std::move(c); } -#line 4315 "seclang-parser.cc" // lalr1.cc:856 +#line 4357 "seclang-parser.cc" // lalr1.cc:856 break; - case 325: -#line 2474 "seclang-parser.yy" // lalr1.cc:856 + case 326: +#line 2511 "seclang-parser.yy" // lalr1.cc:856 { std::string name(yystack_[0].value.as< std::string > ()); char z = name.at(0); std::unique_ptr c(new TimeMon(name)); yylhs.value.as< std::unique_ptr > () = std::move(c); } -#line 4326 "seclang-parser.cc" // lalr1.cc:856 +#line 4368 "seclang-parser.cc" // lalr1.cc:856 break; - case 326: -#line 2481 "seclang-parser.yy" // lalr1.cc:856 + case 327: +#line 2518 "seclang-parser.yy" // lalr1.cc:856 { std::string name(yystack_[0].value.as< std::string > ()); char z = name.at(0); std::unique_ptr c(new TimeSec(name)); yylhs.value.as< std::unique_ptr > () = std::move(c); } -#line 4337 "seclang-parser.cc" // lalr1.cc:856 +#line 4379 "seclang-parser.cc" // lalr1.cc:856 break; - case 327: -#line 2488 "seclang-parser.yy" // lalr1.cc:856 + case 328: +#line 2525 "seclang-parser.yy" // lalr1.cc:856 { std::string name(yystack_[0].value.as< std::string > ()); char z = name.at(0); std::unique_ptr c(new TimeWDay(name)); yylhs.value.as< std::unique_ptr > () = std::move(c); } -#line 4348 "seclang-parser.cc" // lalr1.cc:856 +#line 4390 "seclang-parser.cc" // lalr1.cc:856 break; - case 328: -#line 2495 "seclang-parser.yy" // lalr1.cc:856 + case 329: +#line 2532 "seclang-parser.yy" // lalr1.cc:856 { std::string name(yystack_[0].value.as< std::string > ()); char z = name.at(0); std::unique_ptr c(new TimeYear(name)); yylhs.value.as< std::unique_ptr > () = std::move(c); } -#line 4359 "seclang-parser.cc" // lalr1.cc:856 - break; - - case 329: -#line 2505 "seclang-parser.yy" // lalr1.cc:856 - { - ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::Accuracy(yystack_[0].value.as< std::string > ())); - } -#line 4367 "seclang-parser.cc" // lalr1.cc:856 +#line 4401 "seclang-parser.cc" // lalr1.cc:856 break; case 330: -#line 2509 "seclang-parser.yy" // lalr1.cc:856 +#line 2542 "seclang-parser.yy" // lalr1.cc:856 { - ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::disruptive::Allow(yystack_[0].value.as< std::string > ())); + ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::Accuracy(yystack_[0].value.as< std::string > ())); } -#line 4375 "seclang-parser.cc" // lalr1.cc:856 +#line 4409 "seclang-parser.cc" // lalr1.cc:856 break; case 331: -#line 2513 "seclang-parser.yy" // lalr1.cc:856 +#line 2546 "seclang-parser.yy" // lalr1.cc:856 { - ACTION_NOT_SUPPORTED("Append", yystack_[1].location); + ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::disruptive::Allow(yystack_[0].value.as< std::string > ())); } -#line 4383 "seclang-parser.cc" // lalr1.cc:856 +#line 4417 "seclang-parser.cc" // lalr1.cc:856 break; case 332: -#line 2517 "seclang-parser.yy" // lalr1.cc:856 +#line 2550 "seclang-parser.yy" // lalr1.cc:856 { - ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::AuditLog(yystack_[0].value.as< std::string > ())); + ACTION_NOT_SUPPORTED("Append", yystack_[1].location); } -#line 4391 "seclang-parser.cc" // lalr1.cc:856 +#line 4425 "seclang-parser.cc" // lalr1.cc:856 break; case 333: -#line 2521 "seclang-parser.yy" // lalr1.cc:856 +#line 2554 "seclang-parser.yy" // lalr1.cc:856 { - ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::disruptive::Block(yystack_[0].value.as< std::string > ())); - } -#line 4399 "seclang-parser.cc" // lalr1.cc:856 - break; - - case 334: -#line 2525 "seclang-parser.yy" // lalr1.cc:856 - { - ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::Capture(yystack_[0].value.as< std::string > ())); - } -#line 4407 "seclang-parser.cc" // lalr1.cc:856 - break; - - case 335: -#line 2529 "seclang-parser.yy" // lalr1.cc:856 - { - ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::Chain(yystack_[0].value.as< std::string > ())); - } -#line 4415 "seclang-parser.cc" // lalr1.cc:856 - break; - - case 336: -#line 2533 "seclang-parser.yy" // lalr1.cc:856 - { - //ACTION_NOT_SUPPORTED("CtlAuditEngine", @0); - ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::Action(yystack_[1].value.as< std::string > ())); - } -#line 4424 "seclang-parser.cc" // lalr1.cc:856 - break; - - case 337: -#line 2538 "seclang-parser.yy" // lalr1.cc:856 - { - //ACTION_NOT_SUPPORTED("CtlAuditEngine", @0); - ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::Action(yystack_[1].value.as< std::string > ())); + ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::AuditLog(yystack_[0].value.as< std::string > ())); } #line 4433 "seclang-parser.cc" // lalr1.cc:856 break; - case 338: -#line 2543 "seclang-parser.yy" // lalr1.cc:856 + case 334: +#line 2558 "seclang-parser.yy" // lalr1.cc:856 + { + ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::disruptive::Block(yystack_[0].value.as< std::string > ())); + } +#line 4441 "seclang-parser.cc" // lalr1.cc:856 + break; + + case 335: +#line 2562 "seclang-parser.yy" // lalr1.cc:856 + { + ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::Capture(yystack_[0].value.as< std::string > ())); + } +#line 4449 "seclang-parser.cc" // lalr1.cc:856 + break; + + case 336: +#line 2566 "seclang-parser.yy" // lalr1.cc:856 + { + ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::Chain(yystack_[0].value.as< std::string > ())); + } +#line 4457 "seclang-parser.cc" // lalr1.cc:856 + break; + + case 337: +#line 2570 "seclang-parser.yy" // lalr1.cc:856 { //ACTION_NOT_SUPPORTED("CtlAuditEngine", @0); ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::Action(yystack_[1].value.as< std::string > ())); } -#line 4442 "seclang-parser.cc" // lalr1.cc:856 - break; - - case 339: -#line 2548 "seclang-parser.yy" // lalr1.cc:856 - { - ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::ctl::AuditLogParts(yystack_[0].value.as< std::string > ())); - } -#line 4450 "seclang-parser.cc" // lalr1.cc:856 - break; - - case 340: -#line 2552 "seclang-parser.yy" // lalr1.cc:856 - { - ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::ctl::RequestBodyProcessorJSON(yystack_[0].value.as< std::string > ())); - } -#line 4458 "seclang-parser.cc" // lalr1.cc:856 - break; - - case 341: -#line 2556 "seclang-parser.yy" // lalr1.cc:856 - { - ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::ctl::RequestBodyProcessorXML(yystack_[0].value.as< std::string > ())); - } #line 4466 "seclang-parser.cc" // lalr1.cc:856 break; - case 342: -#line 2560 "seclang-parser.yy" // lalr1.cc:856 + case 338: +#line 2575 "seclang-parser.yy" // lalr1.cc:856 { - ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::ctl::RequestBodyProcessorURLENCODED(yystack_[0].value.as< std::string > ())); - } -#line 4474 "seclang-parser.cc" // lalr1.cc:856 - break; - - case 343: -#line 2564 "seclang-parser.yy" // lalr1.cc:856 - { - //ACTION_NOT_SUPPORTED("CtlForceReequestBody", @0); + //ACTION_NOT_SUPPORTED("CtlAuditEngine", @0); ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::Action(yystack_[1].value.as< std::string > ())); } -#line 4483 "seclang-parser.cc" // lalr1.cc:856 +#line 4475 "seclang-parser.cc" // lalr1.cc:856 break; - case 344: -#line 2569 "seclang-parser.yy" // lalr1.cc:856 + case 339: +#line 2580 "seclang-parser.yy" // lalr1.cc:856 { - //ACTION_NOT_SUPPORTED("CtlForceReequestBody", @0); + //ACTION_NOT_SUPPORTED("CtlAuditEngine", @0); ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::Action(yystack_[1].value.as< std::string > ())); } +#line 4484 "seclang-parser.cc" // lalr1.cc:856 + break; + + case 340: +#line 2585 "seclang-parser.yy" // lalr1.cc:856 + { + ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::ctl::AuditLogParts(yystack_[0].value.as< std::string > ())); + } #line 4492 "seclang-parser.cc" // lalr1.cc:856 break; - case 345: -#line 2574 "seclang-parser.yy" // lalr1.cc:856 + case 341: +#line 2589 "seclang-parser.yy" // lalr1.cc:856 { - ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::ctl::RequestBodyAccess(yystack_[1].value.as< std::string > () + "true")); + ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::ctl::RequestBodyProcessorJSON(yystack_[0].value.as< std::string > ())); } #line 4500 "seclang-parser.cc" // lalr1.cc:856 break; - case 346: -#line 2578 "seclang-parser.yy" // lalr1.cc:856 + case 342: +#line 2593 "seclang-parser.yy" // lalr1.cc:856 { - ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::ctl::RequestBodyAccess(yystack_[1].value.as< std::string > () + "false")); + ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::ctl::RequestBodyProcessorXML(yystack_[0].value.as< std::string > ())); } #line 4508 "seclang-parser.cc" // lalr1.cc:856 break; - case 347: -#line 2582 "seclang-parser.yy" // lalr1.cc:856 + case 343: +#line 2597 "seclang-parser.yy" // lalr1.cc:856 { - ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::ctl::RuleEngine("ctl:RuleEngine=on")); + ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::ctl::RequestBodyProcessorURLENCODED(yystack_[0].value.as< std::string > ())); } #line 4516 "seclang-parser.cc" // lalr1.cc:856 break; - case 348: -#line 2586 "seclang-parser.yy" // lalr1.cc:856 + case 344: +#line 2601 "seclang-parser.yy" // lalr1.cc:856 { - ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::ctl::RuleEngine("ctl:RuleEngine=off")); + //ACTION_NOT_SUPPORTED("CtlForceReequestBody", @0); + ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::Action(yystack_[1].value.as< std::string > ())); } -#line 4524 "seclang-parser.cc" // lalr1.cc:856 +#line 4525 "seclang-parser.cc" // lalr1.cc:856 + break; + + case 345: +#line 2606 "seclang-parser.yy" // lalr1.cc:856 + { + //ACTION_NOT_SUPPORTED("CtlForceReequestBody", @0); + ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::Action(yystack_[1].value.as< std::string > ())); + } +#line 4534 "seclang-parser.cc" // lalr1.cc:856 + break; + + case 346: +#line 2611 "seclang-parser.yy" // lalr1.cc:856 + { + ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::ctl::RequestBodyAccess(yystack_[1].value.as< std::string > () + "true")); + } +#line 4542 "seclang-parser.cc" // lalr1.cc:856 + break; + + case 347: +#line 2615 "seclang-parser.yy" // lalr1.cc:856 + { + ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::ctl::RequestBodyAccess(yystack_[1].value.as< std::string > () + "false")); + } +#line 4550 "seclang-parser.cc" // lalr1.cc:856 + break; + + case 348: +#line 2619 "seclang-parser.yy" // lalr1.cc:856 + { + ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::ctl::RuleEngine("ctl:RuleEngine=on")); + } +#line 4558 "seclang-parser.cc" // lalr1.cc:856 break; case 349: -#line 2590 "seclang-parser.yy" // lalr1.cc:856 +#line 2623 "seclang-parser.yy" // lalr1.cc:856 { - ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::ctl::RuleEngine("ctl:RuleEngine=detectiononly")); + ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::ctl::RuleEngine("ctl:RuleEngine=off")); } -#line 4532 "seclang-parser.cc" // lalr1.cc:856 +#line 4566 "seclang-parser.cc" // lalr1.cc:856 break; case 350: -#line 2594 "seclang-parser.yy" // lalr1.cc:856 +#line 2627 "seclang-parser.yy" // lalr1.cc:856 { - ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::ctl::RuleRemoveById(yystack_[0].value.as< std::string > ())); + ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::ctl::RuleEngine("ctl:RuleEngine=detectiononly")); } -#line 4540 "seclang-parser.cc" // lalr1.cc:856 +#line 4574 "seclang-parser.cc" // lalr1.cc:856 break; case 351: -#line 2598 "seclang-parser.yy" // lalr1.cc:856 +#line 2631 "seclang-parser.yy" // lalr1.cc:856 { - ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::ctl::RuleRemoveByTag(yystack_[0].value.as< std::string > ())); + ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::ctl::RuleRemoveById(yystack_[0].value.as< std::string > ())); } -#line 4548 "seclang-parser.cc" // lalr1.cc:856 +#line 4582 "seclang-parser.cc" // lalr1.cc:856 break; case 352: -#line 2602 "seclang-parser.yy" // lalr1.cc:856 +#line 2635 "seclang-parser.yy" // lalr1.cc:856 { - ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::ctl::RuleRemoveTargetById(yystack_[0].value.as< std::string > ())); + ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::ctl::RuleRemoveByTag(yystack_[0].value.as< std::string > ())); } -#line 4556 "seclang-parser.cc" // lalr1.cc:856 +#line 4590 "seclang-parser.cc" // lalr1.cc:856 break; case 353: -#line 2606 "seclang-parser.yy" // lalr1.cc:856 +#line 2639 "seclang-parser.yy" // lalr1.cc:856 { - ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::ctl::RuleRemoveTargetByTag(yystack_[0].value.as< std::string > ())); + ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::ctl::RuleRemoveTargetById(yystack_[0].value.as< std::string > ())); } -#line 4564 "seclang-parser.cc" // lalr1.cc:856 +#line 4598 "seclang-parser.cc" // lalr1.cc:856 break; case 354: -#line 2610 "seclang-parser.yy" // lalr1.cc:856 +#line 2643 "seclang-parser.yy" // lalr1.cc:856 { - ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::disruptive::Deny(yystack_[0].value.as< std::string > ())); - } -#line 4572 "seclang-parser.cc" // lalr1.cc:856 - break; - - case 355: -#line 2614 "seclang-parser.yy" // lalr1.cc:856 - { - ACTION_NOT_SUPPORTED("DeprecateVar", yystack_[1].location); - } -#line 4580 "seclang-parser.cc" // lalr1.cc:856 - break; - - case 356: -#line 2618 "seclang-parser.yy" // lalr1.cc:856 - { - //ACTION_NOT_SUPPORTED("Drop", @0); - ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::Action(yystack_[0].value.as< std::string > ())); - } -#line 4589 "seclang-parser.cc" // lalr1.cc:856 - break; - - case 357: -#line 2623 "seclang-parser.yy" // lalr1.cc:856 - { - ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::Exec(yystack_[0].value.as< std::string > ())); - } -#line 4597 "seclang-parser.cc" // lalr1.cc:856 - break; - - case 358: -#line 2627 "seclang-parser.yy" // lalr1.cc:856 - { - //ACTION_NOT_SUPPORTED("ExpireVar", @0); - ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::Action(yystack_[0].value.as< std::string > ())); + ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::ctl::RuleRemoveTargetByTag(yystack_[0].value.as< std::string > ())); } #line 4606 "seclang-parser.cc" // lalr1.cc:856 break; - case 359: -#line 2632 "seclang-parser.yy" // lalr1.cc:856 + case 355: +#line 2647 "seclang-parser.yy" // lalr1.cc:856 { - ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::RuleId(yystack_[0].value.as< std::string > ())); + ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::disruptive::Deny(yystack_[0].value.as< std::string > ())); } #line 4614 "seclang-parser.cc" // lalr1.cc:856 break; - case 360: -#line 2636 "seclang-parser.yy" // lalr1.cc:856 + case 356: +#line 2651 "seclang-parser.yy" // lalr1.cc:856 { - ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::InitCol(yystack_[1].value.as< std::string > (), std::move(yystack_[0].value.as< std::unique_ptr > ()))); + ACTION_NOT_SUPPORTED("DeprecateVar", yystack_[1].location); } #line 4622 "seclang-parser.cc" // lalr1.cc:856 break; - case 361: -#line 2640 "seclang-parser.yy" // lalr1.cc:856 + case 357: +#line 2655 "seclang-parser.yy" // lalr1.cc:856 { - ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::LogData(std::move(yystack_[0].value.as< std::unique_ptr > ()))); + //ACTION_NOT_SUPPORTED("Drop", @0); + ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::Action(yystack_[0].value.as< std::string > ())); } -#line 4630 "seclang-parser.cc" // lalr1.cc:856 +#line 4631 "seclang-parser.cc" // lalr1.cc:856 + break; + + case 358: +#line 2660 "seclang-parser.yy" // lalr1.cc:856 + { + ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::Exec(yystack_[0].value.as< std::string > ())); + } +#line 4639 "seclang-parser.cc" // lalr1.cc:856 + break; + + case 359: +#line 2664 "seclang-parser.yy" // lalr1.cc:856 + { + //ACTION_NOT_SUPPORTED("ExpireVar", @0); + ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::Action(yystack_[0].value.as< std::string > ())); + } +#line 4648 "seclang-parser.cc" // lalr1.cc:856 + break; + + case 360: +#line 2669 "seclang-parser.yy" // lalr1.cc:856 + { + ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::RuleId(yystack_[0].value.as< std::string > ())); + } +#line 4656 "seclang-parser.cc" // lalr1.cc:856 + break; + + case 361: +#line 2673 "seclang-parser.yy" // lalr1.cc:856 + { + ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::InitCol(yystack_[1].value.as< std::string > (), std::move(yystack_[0].value.as< std::unique_ptr > ()))); + } +#line 4664 "seclang-parser.cc" // lalr1.cc:856 break; case 362: -#line 2644 "seclang-parser.yy" // lalr1.cc:856 +#line 2677 "seclang-parser.yy" // lalr1.cc:856 { - ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::Log(yystack_[0].value.as< std::string > ())); + ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::LogData(std::move(yystack_[0].value.as< std::unique_ptr > ()))); } -#line 4638 "seclang-parser.cc" // lalr1.cc:856 +#line 4672 "seclang-parser.cc" // lalr1.cc:856 break; case 363: -#line 2648 "seclang-parser.yy" // lalr1.cc:856 +#line 2681 "seclang-parser.yy" // lalr1.cc:856 { - ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::Maturity(yystack_[0].value.as< std::string > ())); + ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::Log(yystack_[0].value.as< std::string > ())); } -#line 4646 "seclang-parser.cc" // lalr1.cc:856 +#line 4680 "seclang-parser.cc" // lalr1.cc:856 break; case 364: -#line 2652 "seclang-parser.yy" // lalr1.cc:856 +#line 2685 "seclang-parser.yy" // lalr1.cc:856 { - ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::Msg(std::move(yystack_[0].value.as< std::unique_ptr > ()))); + ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::Maturity(yystack_[0].value.as< std::string > ())); } -#line 4654 "seclang-parser.cc" // lalr1.cc:856 +#line 4688 "seclang-parser.cc" // lalr1.cc:856 break; case 365: -#line 2656 "seclang-parser.yy" // lalr1.cc:856 +#line 2689 "seclang-parser.yy" // lalr1.cc:856 { - ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::MultiMatch(yystack_[0].value.as< std::string > ())); + ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::Msg(std::move(yystack_[0].value.as< std::unique_ptr > ()))); } -#line 4662 "seclang-parser.cc" // lalr1.cc:856 +#line 4696 "seclang-parser.cc" // lalr1.cc:856 break; case 366: -#line 2660 "seclang-parser.yy" // lalr1.cc:856 +#line 2693 "seclang-parser.yy" // lalr1.cc:856 { - ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::NoAuditLog(yystack_[0].value.as< std::string > ())); + ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::MultiMatch(yystack_[0].value.as< std::string > ())); } -#line 4670 "seclang-parser.cc" // lalr1.cc:856 +#line 4704 "seclang-parser.cc" // lalr1.cc:856 break; case 367: -#line 2664 "seclang-parser.yy" // lalr1.cc:856 +#line 2697 "seclang-parser.yy" // lalr1.cc:856 { - ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::NoLog(yystack_[0].value.as< std::string > ())); + ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::NoAuditLog(yystack_[0].value.as< std::string > ())); } -#line 4678 "seclang-parser.cc" // lalr1.cc:856 +#line 4712 "seclang-parser.cc" // lalr1.cc:856 break; case 368: -#line 2668 "seclang-parser.yy" // lalr1.cc:856 +#line 2701 "seclang-parser.yy" // lalr1.cc:856 { - ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::disruptive::Pass(yystack_[0].value.as< std::string > ())); + ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::NoLog(yystack_[0].value.as< std::string > ())); } -#line 4686 "seclang-parser.cc" // lalr1.cc:856 +#line 4720 "seclang-parser.cc" // lalr1.cc:856 break; case 369: -#line 2672 "seclang-parser.yy" // lalr1.cc:856 +#line 2705 "seclang-parser.yy" // lalr1.cc:856 { - ACTION_NOT_SUPPORTED("Pause", yystack_[1].location); + ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::disruptive::Pass(yystack_[0].value.as< std::string > ())); } -#line 4694 "seclang-parser.cc" // lalr1.cc:856 +#line 4728 "seclang-parser.cc" // lalr1.cc:856 break; case 370: -#line 2676 "seclang-parser.yy" // lalr1.cc:856 +#line 2709 "seclang-parser.yy" // lalr1.cc:856 { - ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::Phase(yystack_[0].value.as< std::string > ())); + ACTION_NOT_SUPPORTED("Pause", yystack_[1].location); } -#line 4702 "seclang-parser.cc" // lalr1.cc:856 +#line 4736 "seclang-parser.cc" // lalr1.cc:856 break; case 371: -#line 2680 "seclang-parser.yy" // lalr1.cc:856 +#line 2713 "seclang-parser.yy" // lalr1.cc:856 { - ACTION_NOT_SUPPORTED("Prepend", yystack_[1].location); + ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::Phase(yystack_[0].value.as< std::string > ())); } -#line 4710 "seclang-parser.cc" // lalr1.cc:856 +#line 4744 "seclang-parser.cc" // lalr1.cc:856 break; case 372: -#line 2684 "seclang-parser.yy" // lalr1.cc:856 +#line 2717 "seclang-parser.yy" // lalr1.cc:856 { - ACTION_NOT_SUPPORTED("Proxy", yystack_[1].location); + ACTION_NOT_SUPPORTED("Prepend", yystack_[1].location); } -#line 4718 "seclang-parser.cc" // lalr1.cc:856 +#line 4752 "seclang-parser.cc" // lalr1.cc:856 break; case 373: -#line 2688 "seclang-parser.yy" // lalr1.cc:856 +#line 2721 "seclang-parser.yy" // lalr1.cc:856 { - ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::disruptive::Redirect(std::move(yystack_[0].value.as< std::unique_ptr > ()))); + ACTION_NOT_SUPPORTED("Proxy", yystack_[1].location); } -#line 4726 "seclang-parser.cc" // lalr1.cc:856 +#line 4760 "seclang-parser.cc" // lalr1.cc:856 break; case 374: -#line 2692 "seclang-parser.yy" // lalr1.cc:856 +#line 2725 "seclang-parser.yy" // lalr1.cc:856 { - ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::Rev(yystack_[0].value.as< std::string > ())); + ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::disruptive::Redirect(std::move(yystack_[0].value.as< std::unique_ptr > ()))); } -#line 4734 "seclang-parser.cc" // lalr1.cc:856 +#line 4768 "seclang-parser.cc" // lalr1.cc:856 break; case 375: -#line 2696 "seclang-parser.yy" // lalr1.cc:856 +#line 2729 "seclang-parser.yy" // lalr1.cc:856 { - ACTION_NOT_SUPPORTED("SanitiseArg", yystack_[1].location); + ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::Rev(yystack_[0].value.as< std::string > ())); } -#line 4742 "seclang-parser.cc" // lalr1.cc:856 +#line 4776 "seclang-parser.cc" // lalr1.cc:856 break; case 376: -#line 2700 "seclang-parser.yy" // lalr1.cc:856 +#line 2733 "seclang-parser.yy" // lalr1.cc:856 { - ACTION_NOT_SUPPORTED("SanitiseMatched", yystack_[1].location); + ACTION_NOT_SUPPORTED("SanitiseArg", yystack_[1].location); } -#line 4750 "seclang-parser.cc" // lalr1.cc:856 +#line 4784 "seclang-parser.cc" // lalr1.cc:856 break; case 377: -#line 2704 "seclang-parser.yy" // lalr1.cc:856 +#line 2737 "seclang-parser.yy" // lalr1.cc:856 { - ACTION_NOT_SUPPORTED("SanitiseMatchedBytes", yystack_[1].location); + ACTION_NOT_SUPPORTED("SanitiseMatched", yystack_[1].location); } -#line 4758 "seclang-parser.cc" // lalr1.cc:856 +#line 4792 "seclang-parser.cc" // lalr1.cc:856 break; case 378: -#line 2708 "seclang-parser.yy" // lalr1.cc:856 +#line 2741 "seclang-parser.yy" // lalr1.cc:856 { - ACTION_NOT_SUPPORTED("SanitiseRequestHeader", yystack_[1].location); + ACTION_NOT_SUPPORTED("SanitiseMatchedBytes", yystack_[1].location); } -#line 4766 "seclang-parser.cc" // lalr1.cc:856 +#line 4800 "seclang-parser.cc" // lalr1.cc:856 break; case 379: -#line 2712 "seclang-parser.yy" // lalr1.cc:856 +#line 2745 "seclang-parser.yy" // lalr1.cc:856 { - ACTION_NOT_SUPPORTED("SanitiseResponseHeader", yystack_[1].location); + ACTION_NOT_SUPPORTED("SanitiseRequestHeader", yystack_[1].location); } -#line 4774 "seclang-parser.cc" // lalr1.cc:856 +#line 4808 "seclang-parser.cc" // lalr1.cc:856 break; case 380: -#line 2716 "seclang-parser.yy" // lalr1.cc:856 +#line 2749 "seclang-parser.yy" // lalr1.cc:856 { - ACTION_NOT_SUPPORTED("SetEnv", yystack_[1].location); + ACTION_NOT_SUPPORTED("SanitiseResponseHeader", yystack_[1].location); } -#line 4782 "seclang-parser.cc" // lalr1.cc:856 +#line 4816 "seclang-parser.cc" // lalr1.cc:856 break; case 381: -#line 2720 "seclang-parser.yy" // lalr1.cc:856 +#line 2753 "seclang-parser.yy" // lalr1.cc:856 { - ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::SetRSC(std::move(yystack_[0].value.as< std::unique_ptr > ()))); + ACTION_NOT_SUPPORTED("SetEnv", yystack_[1].location); } -#line 4790 "seclang-parser.cc" // lalr1.cc:856 +#line 4824 "seclang-parser.cc" // lalr1.cc:856 break; case 382: -#line 2724 "seclang-parser.yy" // lalr1.cc:856 +#line 2757 "seclang-parser.yy" // lalr1.cc:856 { - ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::SetSID(std::move(yystack_[0].value.as< std::unique_ptr > ()))); + ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::SetRSC(std::move(yystack_[0].value.as< std::unique_ptr > ()))); } -#line 4798 "seclang-parser.cc" // lalr1.cc:856 +#line 4832 "seclang-parser.cc" // lalr1.cc:856 break; case 383: -#line 2728 "seclang-parser.yy" // lalr1.cc:856 +#line 2761 "seclang-parser.yy" // lalr1.cc:856 { - ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::SetUID(std::move(yystack_[0].value.as< std::unique_ptr > ()))); + ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::SetSID(std::move(yystack_[0].value.as< std::unique_ptr > ()))); } -#line 4806 "seclang-parser.cc" // lalr1.cc:856 +#line 4840 "seclang-parser.cc" // lalr1.cc:856 break; case 384: -#line 2732 "seclang-parser.yy" // lalr1.cc:856 +#line 2765 "seclang-parser.yy" // lalr1.cc:856 { - yylhs.value.as< std::unique_ptr > () = std::move(yystack_[0].value.as< std::unique_ptr > ()); + ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::SetUID(std::move(yystack_[0].value.as< std::unique_ptr > ()))); } -#line 4814 "seclang-parser.cc" // lalr1.cc:856 +#line 4848 "seclang-parser.cc" // lalr1.cc:856 break; case 385: -#line 2736 "seclang-parser.yy" // lalr1.cc:856 +#line 2769 "seclang-parser.yy" // lalr1.cc:856 { - ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::Severity(yystack_[0].value.as< std::string > ())); + yylhs.value.as< std::unique_ptr > () = std::move(yystack_[0].value.as< std::unique_ptr > ()); } -#line 4822 "seclang-parser.cc" // lalr1.cc:856 +#line 4856 "seclang-parser.cc" // lalr1.cc:856 break; case 386: -#line 2740 "seclang-parser.yy" // lalr1.cc:856 +#line 2773 "seclang-parser.yy" // lalr1.cc:856 { - ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::Skip(yystack_[0].value.as< std::string > ())); + ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::Severity(yystack_[0].value.as< std::string > ())); } -#line 4830 "seclang-parser.cc" // lalr1.cc:856 +#line 4864 "seclang-parser.cc" // lalr1.cc:856 break; case 387: -#line 2744 "seclang-parser.yy" // lalr1.cc:856 +#line 2777 "seclang-parser.yy" // lalr1.cc:856 { - ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::SkipAfter(yystack_[0].value.as< std::string > ())); + ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::Skip(yystack_[0].value.as< std::string > ())); } -#line 4838 "seclang-parser.cc" // lalr1.cc:856 +#line 4872 "seclang-parser.cc" // lalr1.cc:856 break; case 388: -#line 2748 "seclang-parser.yy" // lalr1.cc:856 +#line 2781 "seclang-parser.yy" // lalr1.cc:856 { - ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::data::Status(yystack_[0].value.as< std::string > ())); + ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::SkipAfter(yystack_[0].value.as< std::string > ())); } -#line 4846 "seclang-parser.cc" // lalr1.cc:856 +#line 4880 "seclang-parser.cc" // lalr1.cc:856 break; case 389: -#line 2752 "seclang-parser.yy" // lalr1.cc:856 +#line 2785 "seclang-parser.yy" // lalr1.cc:856 { - ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::Tag(std::move(yystack_[0].value.as< std::unique_ptr > ()))); + ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::data::Status(yystack_[0].value.as< std::string > ())); } -#line 4854 "seclang-parser.cc" // lalr1.cc:856 +#line 4888 "seclang-parser.cc" // lalr1.cc:856 break; case 390: -#line 2756 "seclang-parser.yy" // lalr1.cc:856 +#line 2789 "seclang-parser.yy" // lalr1.cc:856 { - ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::Ver(yystack_[0].value.as< std::string > ())); + ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::Tag(std::move(yystack_[0].value.as< std::unique_ptr > ()))); } -#line 4862 "seclang-parser.cc" // lalr1.cc:856 +#line 4896 "seclang-parser.cc" // lalr1.cc:856 break; case 391: -#line 2760 "seclang-parser.yy" // lalr1.cc:856 +#line 2793 "seclang-parser.yy" // lalr1.cc:856 { - ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::XmlNS(yystack_[0].value.as< std::string > ())); + ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::Ver(yystack_[0].value.as< std::string > ())); } -#line 4870 "seclang-parser.cc" // lalr1.cc:856 +#line 4904 "seclang-parser.cc" // lalr1.cc:856 break; case 392: -#line 2764 "seclang-parser.yy" // lalr1.cc:856 +#line 2797 "seclang-parser.yy" // lalr1.cc:856 { - ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::transformations::ParityZero7bit(yystack_[0].value.as< std::string > ())); + ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::XmlNS(yystack_[0].value.as< std::string > ())); } -#line 4878 "seclang-parser.cc" // lalr1.cc:856 +#line 4912 "seclang-parser.cc" // lalr1.cc:856 break; case 393: -#line 2768 "seclang-parser.yy" // lalr1.cc:856 +#line 2801 "seclang-parser.yy" // lalr1.cc:856 { - ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::transformations::ParityOdd7bit(yystack_[0].value.as< std::string > ())); + ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::transformations::ParityZero7bit(yystack_[0].value.as< std::string > ())); } -#line 4886 "seclang-parser.cc" // lalr1.cc:856 +#line 4920 "seclang-parser.cc" // lalr1.cc:856 break; case 394: -#line 2772 "seclang-parser.yy" // lalr1.cc:856 +#line 2805 "seclang-parser.yy" // lalr1.cc:856 { - ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::transformations::ParityEven7bit(yystack_[0].value.as< std::string > ())); + ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::transformations::ParityOdd7bit(yystack_[0].value.as< std::string > ())); } -#line 4894 "seclang-parser.cc" // lalr1.cc:856 +#line 4928 "seclang-parser.cc" // lalr1.cc:856 break; case 395: -#line 2776 "seclang-parser.yy" // lalr1.cc:856 +#line 2809 "seclang-parser.yy" // lalr1.cc:856 { - ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::transformations::SqlHexDecode(yystack_[0].value.as< std::string > ())); + ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::transformations::ParityEven7bit(yystack_[0].value.as< std::string > ())); } -#line 4902 "seclang-parser.cc" // lalr1.cc:856 +#line 4936 "seclang-parser.cc" // lalr1.cc:856 break; case 396: -#line 2780 "seclang-parser.yy" // lalr1.cc:856 +#line 2813 "seclang-parser.yy" // lalr1.cc:856 { - ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::transformations::Base64Encode(yystack_[0].value.as< std::string > ())); + ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::transformations::SqlHexDecode(yystack_[0].value.as< std::string > ())); } -#line 4910 "seclang-parser.cc" // lalr1.cc:856 +#line 4944 "seclang-parser.cc" // lalr1.cc:856 break; case 397: -#line 2784 "seclang-parser.yy" // lalr1.cc:856 +#line 2817 "seclang-parser.yy" // lalr1.cc:856 { - ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::transformations::Base64Decode(yystack_[0].value.as< std::string > ())); + ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::transformations::Base64Encode(yystack_[0].value.as< std::string > ())); } -#line 4918 "seclang-parser.cc" // lalr1.cc:856 +#line 4952 "seclang-parser.cc" // lalr1.cc:856 break; case 398: -#line 2788 "seclang-parser.yy" // lalr1.cc:856 +#line 2821 "seclang-parser.yy" // lalr1.cc:856 { - ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::transformations::Base64DecodeExt(yystack_[0].value.as< std::string > ())); + ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::transformations::Base64Decode(yystack_[0].value.as< std::string > ())); } -#line 4926 "seclang-parser.cc" // lalr1.cc:856 +#line 4960 "seclang-parser.cc" // lalr1.cc:856 break; case 399: -#line 2792 "seclang-parser.yy" // lalr1.cc:856 +#line 2825 "seclang-parser.yy" // lalr1.cc:856 { - ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::transformations::CmdLine(yystack_[0].value.as< std::string > ())); + ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::transformations::Base64DecodeExt(yystack_[0].value.as< std::string > ())); } -#line 4934 "seclang-parser.cc" // lalr1.cc:856 +#line 4968 "seclang-parser.cc" // lalr1.cc:856 break; case 400: -#line 2796 "seclang-parser.yy" // lalr1.cc:856 +#line 2829 "seclang-parser.yy" // lalr1.cc:856 { - ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::transformations::Sha1(yystack_[0].value.as< std::string > ())); + ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::transformations::CmdLine(yystack_[0].value.as< std::string > ())); } -#line 4942 "seclang-parser.cc" // lalr1.cc:856 +#line 4976 "seclang-parser.cc" // lalr1.cc:856 break; case 401: -#line 2800 "seclang-parser.yy" // lalr1.cc:856 +#line 2833 "seclang-parser.yy" // lalr1.cc:856 { - ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::transformations::Md5(yystack_[0].value.as< std::string > ())); + ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::transformations::Sha1(yystack_[0].value.as< std::string > ())); } -#line 4950 "seclang-parser.cc" // lalr1.cc:856 +#line 4984 "seclang-parser.cc" // lalr1.cc:856 break; case 402: -#line 2804 "seclang-parser.yy" // lalr1.cc:856 +#line 2837 "seclang-parser.yy" // lalr1.cc:856 { - ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::transformations::EscapeSeqDecode(yystack_[0].value.as< std::string > ())); + ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::transformations::Md5(yystack_[0].value.as< std::string > ())); } -#line 4958 "seclang-parser.cc" // lalr1.cc:856 +#line 4992 "seclang-parser.cc" // lalr1.cc:856 break; case 403: -#line 2808 "seclang-parser.yy" // lalr1.cc:856 +#line 2841 "seclang-parser.yy" // lalr1.cc:856 { - ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::transformations::HexEncode(yystack_[0].value.as< std::string > ())); + ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::transformations::EscapeSeqDecode(yystack_[0].value.as< std::string > ())); } -#line 4966 "seclang-parser.cc" // lalr1.cc:856 +#line 5000 "seclang-parser.cc" // lalr1.cc:856 break; case 404: -#line 2812 "seclang-parser.yy" // lalr1.cc:856 +#line 2845 "seclang-parser.yy" // lalr1.cc:856 { - ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::transformations::HexDecode(yystack_[0].value.as< std::string > ())); + ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::transformations::HexEncode(yystack_[0].value.as< std::string > ())); } -#line 4974 "seclang-parser.cc" // lalr1.cc:856 +#line 5008 "seclang-parser.cc" // lalr1.cc:856 break; case 405: -#line 2816 "seclang-parser.yy" // lalr1.cc:856 +#line 2849 "seclang-parser.yy" // lalr1.cc:856 { - ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::transformations::LowerCase(yystack_[0].value.as< std::string > ())); + ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::transformations::HexDecode(yystack_[0].value.as< std::string > ())); } -#line 4982 "seclang-parser.cc" // lalr1.cc:856 +#line 5016 "seclang-parser.cc" // lalr1.cc:856 break; case 406: -#line 2820 "seclang-parser.yy" // lalr1.cc:856 +#line 2853 "seclang-parser.yy" // lalr1.cc:856 { - ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::transformations::UpperCase(yystack_[0].value.as< std::string > ())); + ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::transformations::LowerCase(yystack_[0].value.as< std::string > ())); } -#line 4990 "seclang-parser.cc" // lalr1.cc:856 +#line 5024 "seclang-parser.cc" // lalr1.cc:856 break; case 407: -#line 2824 "seclang-parser.yy" // lalr1.cc:856 +#line 2857 "seclang-parser.yy" // lalr1.cc:856 { - ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::transformations::UrlDecodeUni(yystack_[0].value.as< std::string > ())); + ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::transformations::UpperCase(yystack_[0].value.as< std::string > ())); } -#line 4998 "seclang-parser.cc" // lalr1.cc:856 +#line 5032 "seclang-parser.cc" // lalr1.cc:856 break; case 408: -#line 2828 "seclang-parser.yy" // lalr1.cc:856 +#line 2861 "seclang-parser.yy" // lalr1.cc:856 { - ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::transformations::UrlDecode(yystack_[0].value.as< std::string > ())); + ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::transformations::UrlDecodeUni(yystack_[0].value.as< std::string > ())); } -#line 5006 "seclang-parser.cc" // lalr1.cc:856 +#line 5040 "seclang-parser.cc" // lalr1.cc:856 break; case 409: -#line 2832 "seclang-parser.yy" // lalr1.cc:856 +#line 2865 "seclang-parser.yy" // lalr1.cc:856 { - ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::transformations::UrlEncode(yystack_[0].value.as< std::string > ())); + ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::transformations::UrlDecode(yystack_[0].value.as< std::string > ())); } -#line 5014 "seclang-parser.cc" // lalr1.cc:856 +#line 5048 "seclang-parser.cc" // lalr1.cc:856 break; case 410: -#line 2836 "seclang-parser.yy" // lalr1.cc:856 +#line 2869 "seclang-parser.yy" // lalr1.cc:856 { - ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::transformations::None(yystack_[0].value.as< std::string > ())); + ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::transformations::UrlEncode(yystack_[0].value.as< std::string > ())); } -#line 5022 "seclang-parser.cc" // lalr1.cc:856 +#line 5056 "seclang-parser.cc" // lalr1.cc:856 break; case 411: -#line 2840 "seclang-parser.yy" // lalr1.cc:856 +#line 2873 "seclang-parser.yy" // lalr1.cc:856 { - ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::transformations::CompressWhitespace(yystack_[0].value.as< std::string > ())); + ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::transformations::None(yystack_[0].value.as< std::string > ())); } -#line 5030 "seclang-parser.cc" // lalr1.cc:856 +#line 5064 "seclang-parser.cc" // lalr1.cc:856 break; case 412: -#line 2844 "seclang-parser.yy" // lalr1.cc:856 +#line 2877 "seclang-parser.yy" // lalr1.cc:856 { - ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::transformations::RemoveWhitespace(yystack_[0].value.as< std::string > ())); + ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::transformations::CompressWhitespace(yystack_[0].value.as< std::string > ())); } -#line 5038 "seclang-parser.cc" // lalr1.cc:856 +#line 5072 "seclang-parser.cc" // lalr1.cc:856 break; case 413: -#line 2848 "seclang-parser.yy" // lalr1.cc:856 +#line 2881 "seclang-parser.yy" // lalr1.cc:856 { - ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::transformations::ReplaceNulls(yystack_[0].value.as< std::string > ())); + ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::transformations::RemoveWhitespace(yystack_[0].value.as< std::string > ())); } -#line 5046 "seclang-parser.cc" // lalr1.cc:856 +#line 5080 "seclang-parser.cc" // lalr1.cc:856 break; case 414: -#line 2852 "seclang-parser.yy" // lalr1.cc:856 +#line 2885 "seclang-parser.yy" // lalr1.cc:856 { - ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::transformations::RemoveNulls(yystack_[0].value.as< std::string > ())); + ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::transformations::ReplaceNulls(yystack_[0].value.as< std::string > ())); } -#line 5054 "seclang-parser.cc" // lalr1.cc:856 +#line 5088 "seclang-parser.cc" // lalr1.cc:856 break; case 415: -#line 2856 "seclang-parser.yy" // lalr1.cc:856 +#line 2889 "seclang-parser.yy" // lalr1.cc:856 { - ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::transformations::HtmlEntityDecode(yystack_[0].value.as< std::string > ())); + ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::transformations::RemoveNulls(yystack_[0].value.as< std::string > ())); } -#line 5062 "seclang-parser.cc" // lalr1.cc:856 +#line 5096 "seclang-parser.cc" // lalr1.cc:856 break; case 416: -#line 2860 "seclang-parser.yy" // lalr1.cc:856 +#line 2893 "seclang-parser.yy" // lalr1.cc:856 { - ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::transformations::JsDecode(yystack_[0].value.as< std::string > ())); + ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::transformations::HtmlEntityDecode(yystack_[0].value.as< std::string > ())); } -#line 5070 "seclang-parser.cc" // lalr1.cc:856 +#line 5104 "seclang-parser.cc" // lalr1.cc:856 break; case 417: -#line 2864 "seclang-parser.yy" // lalr1.cc:856 +#line 2897 "seclang-parser.yy" // lalr1.cc:856 { - ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::transformations::CssDecode(yystack_[0].value.as< std::string > ())); + ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::transformations::JsDecode(yystack_[0].value.as< std::string > ())); } -#line 5078 "seclang-parser.cc" // lalr1.cc:856 +#line 5112 "seclang-parser.cc" // lalr1.cc:856 break; case 418: -#line 2868 "seclang-parser.yy" // lalr1.cc:856 +#line 2901 "seclang-parser.yy" // lalr1.cc:856 { - ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::transformations::Trim(yystack_[0].value.as< std::string > ())); + ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::transformations::CssDecode(yystack_[0].value.as< std::string > ())); } -#line 5086 "seclang-parser.cc" // lalr1.cc:856 +#line 5120 "seclang-parser.cc" // lalr1.cc:856 break; case 419: -#line 2872 "seclang-parser.yy" // lalr1.cc:856 +#line 2905 "seclang-parser.yy" // lalr1.cc:856 { - ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::transformations::TrimLeft(yystack_[0].value.as< std::string > ())); + ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::transformations::Trim(yystack_[0].value.as< std::string > ())); } -#line 5094 "seclang-parser.cc" // lalr1.cc:856 +#line 5128 "seclang-parser.cc" // lalr1.cc:856 break; case 420: -#line 2876 "seclang-parser.yy" // lalr1.cc:856 +#line 2909 "seclang-parser.yy" // lalr1.cc:856 { - ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::transformations::TrimRight(yystack_[0].value.as< std::string > ())); + ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::transformations::TrimLeft(yystack_[0].value.as< std::string > ())); } -#line 5102 "seclang-parser.cc" // lalr1.cc:856 +#line 5136 "seclang-parser.cc" // lalr1.cc:856 break; case 421: -#line 2880 "seclang-parser.yy" // lalr1.cc:856 +#line 2913 "seclang-parser.yy" // lalr1.cc:856 { - ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::transformations::NormalisePathWin(yystack_[0].value.as< std::string > ())); + ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::transformations::TrimRight(yystack_[0].value.as< std::string > ())); } -#line 5110 "seclang-parser.cc" // lalr1.cc:856 +#line 5144 "seclang-parser.cc" // lalr1.cc:856 break; case 422: -#line 2884 "seclang-parser.yy" // lalr1.cc:856 +#line 2917 "seclang-parser.yy" // lalr1.cc:856 { - ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::transformations::NormalisePath(yystack_[0].value.as< std::string > ())); + ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::transformations::NormalisePathWin(yystack_[0].value.as< std::string > ())); } -#line 5118 "seclang-parser.cc" // lalr1.cc:856 +#line 5152 "seclang-parser.cc" // lalr1.cc:856 break; case 423: -#line 2888 "seclang-parser.yy" // lalr1.cc:856 +#line 2921 "seclang-parser.yy" // lalr1.cc:856 { - ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::transformations::Length(yystack_[0].value.as< std::string > ())); + ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::transformations::NormalisePath(yystack_[0].value.as< std::string > ())); } -#line 5126 "seclang-parser.cc" // lalr1.cc:856 +#line 5160 "seclang-parser.cc" // lalr1.cc:856 break; case 424: -#line 2892 "seclang-parser.yy" // lalr1.cc:856 +#line 2925 "seclang-parser.yy" // lalr1.cc:856 { - ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::transformations::Utf8ToUnicode(yystack_[0].value.as< std::string > ())); + ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::transformations::Length(yystack_[0].value.as< std::string > ())); } -#line 5134 "seclang-parser.cc" // lalr1.cc:856 +#line 5168 "seclang-parser.cc" // lalr1.cc:856 break; case 425: -#line 2896 "seclang-parser.yy" // lalr1.cc:856 +#line 2929 "seclang-parser.yy" // lalr1.cc:856 { - ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::transformations::RemoveCommentsChar(yystack_[0].value.as< std::string > ())); + ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::transformations::Utf8ToUnicode(yystack_[0].value.as< std::string > ())); } -#line 5142 "seclang-parser.cc" // lalr1.cc:856 +#line 5176 "seclang-parser.cc" // lalr1.cc:856 break; case 426: -#line 2900 "seclang-parser.yy" // lalr1.cc:856 +#line 2933 "seclang-parser.yy" // lalr1.cc:856 { - ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::transformations::RemoveComments(yystack_[0].value.as< std::string > ())); + ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::transformations::RemoveCommentsChar(yystack_[0].value.as< std::string > ())); } -#line 5150 "seclang-parser.cc" // lalr1.cc:856 +#line 5184 "seclang-parser.cc" // lalr1.cc:856 break; case 427: -#line 2904 "seclang-parser.yy" // lalr1.cc:856 +#line 2937 "seclang-parser.yy" // lalr1.cc:856 { - ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::transformations::ReplaceComments(yystack_[0].value.as< std::string > ())); + ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::transformations::RemoveComments(yystack_[0].value.as< std::string > ())); } -#line 5158 "seclang-parser.cc" // lalr1.cc:856 +#line 5192 "seclang-parser.cc" // lalr1.cc:856 break; case 428: -#line 2911 "seclang-parser.yy" // lalr1.cc:856 +#line 2941 "seclang-parser.yy" // lalr1.cc:856 { - ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::SetVar(actions::SetVarOperation::unsetOperation, std::move(yystack_[0].value.as< std::unique_ptr > ()))); + ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::transformations::ReplaceComments(yystack_[0].value.as< std::string > ())); } -#line 5166 "seclang-parser.cc" // lalr1.cc:856 +#line 5200 "seclang-parser.cc" // lalr1.cc:856 break; case 429: -#line 2915 "seclang-parser.yy" // lalr1.cc:856 +#line 2948 "seclang-parser.yy" // lalr1.cc:856 { - ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::SetVar(actions::SetVarOperation::setToOneOperation, std::move(yystack_[0].value.as< std::unique_ptr > ()))); + ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::SetVar(actions::SetVarOperation::unsetOperation, std::move(yystack_[0].value.as< std::unique_ptr > ()))); } -#line 5174 "seclang-parser.cc" // lalr1.cc:856 +#line 5208 "seclang-parser.cc" // lalr1.cc:856 break; case 430: -#line 2919 "seclang-parser.yy" // lalr1.cc:856 +#line 2952 "seclang-parser.yy" // lalr1.cc:856 { - ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::SetVar(actions::SetVarOperation::setOperation, std::move(yystack_[2].value.as< std::unique_ptr > ()), std::move(yystack_[0].value.as< std::unique_ptr > ()))); - } -#line 5182 "seclang-parser.cc" // lalr1.cc:856 - break; - - case 431: -#line 2923 "seclang-parser.yy" // lalr1.cc:856 - { - ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::SetVar(actions::SetVarOperation::sumAndSetOperation, std::move(yystack_[2].value.as< std::unique_ptr > ()), std::move(yystack_[0].value.as< std::unique_ptr > ()))); - } -#line 5190 "seclang-parser.cc" // lalr1.cc:856 - break; - - case 432: -#line 2927 "seclang-parser.yy" // lalr1.cc:856 - { - ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::SetVar(actions::SetVarOperation::substractAndSetOperation, std::move(yystack_[2].value.as< std::unique_ptr > ()), std::move(yystack_[0].value.as< std::unique_ptr > ()))); - } -#line 5198 "seclang-parser.cc" // lalr1.cc:856 - break; - - case 433: -#line 2934 "seclang-parser.yy" // lalr1.cc:856 - { - yystack_[1].value.as< std::unique_ptr > ()->appendText(yystack_[0].value.as< std::string > ()); - yylhs.value.as< std::unique_ptr > () = std::move(yystack_[1].value.as< std::unique_ptr > ()); - } -#line 5207 "seclang-parser.cc" // lalr1.cc:856 - break; - - case 434: -#line 2939 "seclang-parser.yy" // lalr1.cc:856 - { - yystack_[1].value.as< std::unique_ptr > ()->appendVar(std::move(yystack_[0].value.as< std::unique_ptr > ())); - yylhs.value.as< std::unique_ptr > () = std::move(yystack_[1].value.as< std::unique_ptr > ()); + ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::SetVar(actions::SetVarOperation::setToOneOperation, std::move(yystack_[0].value.as< std::unique_ptr > ()))); } #line 5216 "seclang-parser.cc" // lalr1.cc:856 break; + case 431: +#line 2956 "seclang-parser.yy" // lalr1.cc:856 + { + ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::SetVar(actions::SetVarOperation::setOperation, std::move(yystack_[2].value.as< std::unique_ptr > ()), std::move(yystack_[0].value.as< std::unique_ptr > ()))); + } +#line 5224 "seclang-parser.cc" // lalr1.cc:856 + break; + + case 432: +#line 2960 "seclang-parser.yy" // lalr1.cc:856 + { + ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::SetVar(actions::SetVarOperation::sumAndSetOperation, std::move(yystack_[2].value.as< std::unique_ptr > ()), std::move(yystack_[0].value.as< std::unique_ptr > ()))); + } +#line 5232 "seclang-parser.cc" // lalr1.cc:856 + break; + + case 433: +#line 2964 "seclang-parser.yy" // lalr1.cc:856 + { + ACTION_CONTAINER(yylhs.value.as< std::unique_ptr > (), new actions::SetVar(actions::SetVarOperation::substractAndSetOperation, std::move(yystack_[2].value.as< std::unique_ptr > ()), std::move(yystack_[0].value.as< std::unique_ptr > ()))); + } +#line 5240 "seclang-parser.cc" // lalr1.cc:856 + break; + + case 434: +#line 2971 "seclang-parser.yy" // lalr1.cc:856 + { + yystack_[1].value.as< std::unique_ptr > ()->appendText(yystack_[0].value.as< std::string > ()); + yylhs.value.as< std::unique_ptr > () = std::move(yystack_[1].value.as< std::unique_ptr > ()); + } +#line 5249 "seclang-parser.cc" // lalr1.cc:856 + break; + case 435: -#line 2944 "seclang-parser.yy" // lalr1.cc:856 +#line 2976 "seclang-parser.yy" // lalr1.cc:856 + { + yystack_[1].value.as< std::unique_ptr > ()->appendVar(std::move(yystack_[0].value.as< std::unique_ptr > ())); + yylhs.value.as< std::unique_ptr > () = std::move(yystack_[1].value.as< std::unique_ptr > ()); + } +#line 5258 "seclang-parser.cc" // lalr1.cc:856 + break; + + case 436: +#line 2981 "seclang-parser.yy" // lalr1.cc:856 { std::unique_ptr r(new RunTimeString()); r->appendText(yystack_[0].value.as< std::string > ()); yylhs.value.as< std::unique_ptr > () = std::move(r); } -#line 5226 "seclang-parser.cc" // lalr1.cc:856 +#line 5268 "seclang-parser.cc" // lalr1.cc:856 break; - case 436: -#line 2950 "seclang-parser.yy" // lalr1.cc:856 + case 437: +#line 2987 "seclang-parser.yy" // lalr1.cc:856 { std::unique_ptr r(new RunTimeString()); r->appendVar(std::move(yystack_[0].value.as< std::unique_ptr > ())); yylhs.value.as< std::unique_ptr > () = std::move(r); } -#line 5236 "seclang-parser.cc" // lalr1.cc:856 +#line 5278 "seclang-parser.cc" // lalr1.cc:856 break; -#line 5240 "seclang-parser.cc" // lalr1.cc:856 +#line 5282 "seclang-parser.cc" // lalr1.cc:856 default: break; } @@ -5490,66 +5532,66 @@ namespace yy { } - const short int seclang_parser::yypact_ninf_ = -389; + const short int seclang_parser::yypact_ninf_ = -400; const signed char seclang_parser::yytable_ninf_ = -1; const short int seclang_parser::yypact_[] = { - 2728, -389, -277, -389, -102, -389, -249, -389, -389, -389, - -389, -389, -280, -389, -389, -389, -389, -389, -293, -389, - -389, -389, -153, -150, -389, -389, -389, -389, -389, -389, - -389, -389, -389, -389, -389, -389, -389, -148, -389, -389, - -146, -389, -141, -389, -142, -137, -389, -258, -87, -87, - -389, -389, -389, -389, -129, -295, -389, -389, -389, 1467, - 1467, 1467, -87, -270, -127, -389, -389, -389, -125, -389, - -389, -389, -389, -389, -389, -389, -389, -389, 1467, -87, - 2886, -389, -389, -389, -389, -389, -389, -389, -389, -389, - -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, - -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, - -389, -389, -389, 2301, -254, -389, -389, -389, -389, -389, - -389, -389, -264, -389, -389, -389, -389, -123, -121, -389, - -389, -389, -389, -389, -389, -389, -389, -389, -389, 2431, - -389, 2431, -389, 2431, -389, -389, -389, -389, -389, -389, - -389, -389, 2431, -389, -389, -389, -389, -389, -389, -389, - 2431, 2431, 2431, -389, -389, -389, -389, 2431, -389, -389, - -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, - -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, - -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, - -389, -389, -389, -389, -389, -389, 3085, -389, 12, -389, - -389, -389, -389, -389, -389, 2627, 2627, -155, -152, -149, - -147, -145, -143, -140, -138, -135, -133, -131, -128, -126, - -124, -122, -120, -389, -118, -116, -114, -112, -389, -389, - -110, -389, -389, -389, -389, -389, -389, -389, -389, -389, - -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, - -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, - -389, -389, -389, -389, -389, -389, -108, -389, -389, -389, - -389, -389, 451, -389, -389, -389, -106, -389, -389, -389, - -389, -389, -389, -389, -389, -389, -389, -389, -389, 540, - 629, 958, 1047, 1136, -104, -101, 1558, -389, -389, -389, - -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, - -389, 21, -389, -389, -389, -389, -389, -389, -389, -389, - -389, -389, -389, 1975, -389, -389, -389, 2627, -51, -389, - -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, - -389, -389, 2520, 2520, 2520, 2520, 2520, 2520, 2520, 2520, - 5, 3085, -389, -389, -389, -389, -389, -389, -389, -389, - -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, - -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, - -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, - -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, - 2520, -389, -389, -389, -389, 2520, -389, -389, 2520, -389, - -389, 2520, -389, -389, 2520, -389, -389, 2520, -389, -389, - -389, -389, 10, 1649, 2105, 2431, 2431, 2431, -389, -389, - 2431, 2431, 2431, -389, 2431, 2431, 2431, 2431, 2431, 2431, - 2431, 2431, 2431, 2431, 2431, 2431, 2431, 2431, 2431, -389, - 2431, 2431, 2431, 2431, -389, -389, 2431, 2431, 2431, 2431, - -87, -389, 2520, -389, 2431, 2431, 2431, -389, -389, -389, - -389, -389, 2627, 2627, -389, -389, 2520, 2520, 2520, 2520, - 2520, 2520, 2520, 2520, 2520, 2520, 2520, 2520, 2520, 2520, - 2520, 2520, 2520, 2520, 2520, 2520, 2520, 2520, 2520, 2520, - 2520, 2520, 2520, 2520, 2520, 2520, -389, 2520, 2520, 2520, - -389, -389 + 2729, -400, -286, -400, -101, -400, -246, -400, -400, -400, + -400, -400, -280, -400, -400, -400, -400, -400, -276, -400, + -400, -400, -150, -148, -400, -400, -400, -400, -400, -400, + -400, -400, -400, -400, -400, -400, -400, -143, -400, -400, + -144, -400, -139, -400, -140, -129, -400, -257, -86, -86, + -400, -400, -400, -400, -127, -290, -400, -400, -400, 1468, + 1468, 1468, -86, -269, -125, -400, -400, -400, -123, -400, + -400, -400, -400, -400, -400, -400, -400, -400, 1468, -86, + 2887, -400, -400, -400, -400, -400, -400, -400, -400, -400, + -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, + -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, + -400, -400, -400, 2302, -253, -400, -400, -400, -400, -400, + -400, -400, -263, -400, -400, -400, -400, -121, -119, -400, + -400, -400, -400, -400, -400, -400, -400, -400, -400, 2432, + -400, 2432, -400, 2432, -400, -400, -400, -400, -400, -400, + -400, -400, 2432, -400, -400, -400, -400, -400, -400, -400, + 2432, 2432, 2432, -400, -400, -400, -400, 2432, -400, -400, + -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, + -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, + -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, + -400, -400, -400, -400, -400, -400, 3086, -400, 0, -400, + -400, -400, -400, -400, -400, 2628, 2628, -153, -151, -149, + -147, -145, -142, -138, -135, -133, -131, -128, -126, -124, + -122, -120, -118, -400, -116, -114, -112, -110, -400, -400, + -108, -400, -400, -400, -400, -400, -400, -400, -400, -400, + -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, + -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, + -400, -400, -400, -400, -400, -400, -106, -400, -400, -400, + -400, -400, 452, -400, -400, -400, -104, -400, -400, -400, + -400, -400, -400, -400, -400, -400, -400, -400, -400, 541, + 630, 959, 1048, 1137, -100, -98, 1559, -400, -400, -400, + -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, + -400, 1, -400, -400, -400, -400, -400, -400, -400, -400, + -400, -400, -400, 1976, -400, -400, -400, -400, 2628, -50, + -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, + -400, -400, -400, 2521, 2521, 2521, 2521, 2521, 2521, 2521, + 2521, 11, 3086, -400, -400, -400, -400, -400, -400, -400, + -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, + -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, + -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, + -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, + -400, 2521, -400, -400, -400, -400, 2521, -400, -400, 2521, + -400, -400, 2521, -400, -400, 2521, -400, -400, 2521, -400, + -400, -400, -400, 6, 1650, 2106, 2432, 2432, 2432, -400, + -400, 2432, 2432, 2432, -400, 2432, 2432, 2432, 2432, 2432, + 2432, 2432, 2432, 2432, 2432, 2432, 2432, 2432, 2432, 2432, + -400, 2432, 2432, 2432, 2432, -400, -400, 2432, 2432, 2432, + 2432, -86, -400, 2521, -400, 2432, 2432, 2432, -400, -400, + -400, -400, -400, 2628, 2628, -400, -400, 2521, 2521, 2521, + 2521, 2521, 2521, 2521, 2521, 2521, 2521, 2521, 2521, 2521, + 2521, 2521, 2521, 2521, 2521, 2521, 2521, 2521, 2521, 2521, + 2521, 2521, 2521, 2521, 2521, 2521, 2521, -400, 2521, 2521, + 2521, -400, -400 }; const unsigned short int @@ -5566,312 +5608,123 @@ namespace yy { 0, 4, 72, 5, 96, 95, 15, 16, 89, 88, 9, 10, 8, 20, 19, 18, 94, 93, 99, 98, 83, 82, 130, 131, 85, 84, 132, 133, 112, 111, - 81, 79, 80, 0, 0, 329, 330, 331, 332, 333, - 334, 335, 0, 339, 340, 341, 342, 0, 0, 350, - 351, 352, 353, 354, 355, 356, 357, 358, 359, 0, - 362, 0, 363, 0, 365, 366, 367, 368, 369, 370, - 371, 372, 0, 374, 375, 376, 377, 378, 379, 380, - 0, 0, 0, 385, 386, 387, 388, 0, 396, 397, - 398, 399, 411, 417, 402, 403, 404, 415, 416, 423, - 405, 401, 410, 422, 421, 394, 393, 392, 426, 425, - 414, 412, 427, 413, 400, 395, 418, 419, 420, 406, - 409, 408, 407, 424, 390, 391, 0, 75, 30, 32, - 77, 107, 106, 134, 135, 0, 0, 161, 164, 167, - 170, 173, 176, 179, 182, 185, 188, 191, 194, 197, - 200, 203, 206, 259, 248, 209, 245, 251, 260, 261, - 218, 262, 263, 264, 265, 266, 267, 268, 269, 270, - 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, - 281, 282, 283, 284, 285, 286, 287, 289, 288, 292, - 291, 290, 293, 295, 294, 296, 254, 297, 298, 299, - 301, 300, 222, 302, 303, 255, 258, 304, 305, 306, - 307, 308, 309, 310, 311, 312, 315, 313, 314, 226, - 230, 238, 242, 234, 212, 215, 0, 317, 316, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, - 119, 151, 156, 120, 121, 122, 22, 21, 23, 28, - 27, 140, 141, 0, 76, 1, 3, 0, 429, 384, - 349, 348, 347, 337, 336, 338, 344, 343, 346, 345, - 435, 436, 360, 361, 364, 373, 381, 382, 383, 389, - 0, 0, 158, 157, 159, 160, 162, 163, 165, 166, - 168, 169, 171, 172, 174, 175, 177, 178, 180, 181, - 183, 184, 186, 187, 189, 190, 192, 193, 195, 196, - 198, 199, 201, 202, 204, 205, 246, 247, 207, 208, - 243, 244, 249, 250, 216, 217, 252, 253, 220, 221, - 219, 256, 257, 224, 225, 223, 228, 229, 227, 236, - 237, 235, 240, 241, 239, 232, 233, 231, 210, 211, - 213, 214, 0, 0, 0, 0, 0, 0, 38, 39, - 0, 0, 0, 71, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, - 0, 0, 0, 0, 40, 41, 0, 0, 0, 0, - 74, 33, 35, 428, 0, 0, 0, 433, 434, 29, - 31, 152, 0, 0, 153, 34, 36, 70, 55, 54, - 56, 57, 43, 58, 51, 59, 42, 60, 61, 62, - 63, 64, 65, 66, 52, 67, 68, 69, 44, 45, - 46, 47, 48, 49, 50, 53, 73, 430, 431, 432, - 155, 154 + 81, 79, 80, 0, 0, 330, 331, 332, 333, 334, + 335, 336, 0, 340, 341, 342, 343, 0, 0, 351, + 352, 353, 354, 355, 356, 357, 358, 359, 360, 0, + 363, 0, 364, 0, 366, 367, 368, 369, 370, 371, + 372, 373, 0, 375, 376, 377, 378, 379, 380, 381, + 0, 0, 0, 386, 387, 388, 389, 0, 397, 398, + 399, 400, 412, 418, 403, 404, 405, 416, 417, 424, + 406, 402, 411, 423, 422, 395, 394, 393, 427, 426, + 415, 413, 428, 414, 401, 396, 419, 420, 421, 407, + 410, 409, 408, 425, 391, 392, 0, 75, 30, 32, + 77, 107, 106, 134, 135, 0, 0, 162, 165, 168, + 171, 174, 177, 180, 183, 186, 189, 192, 195, 198, + 201, 204, 207, 260, 249, 210, 246, 252, 261, 262, + 219, 263, 264, 265, 266, 267, 268, 269, 270, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + 282, 283, 284, 285, 286, 287, 288, 290, 289, 293, + 292, 291, 294, 296, 295, 297, 255, 298, 299, 300, + 302, 301, 223, 303, 304, 256, 259, 305, 306, 307, + 308, 309, 310, 311, 312, 313, 316, 314, 315, 227, + 231, 239, 243, 235, 213, 216, 0, 318, 317, 319, + 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, + 119, 152, 157, 120, 121, 122, 22, 21, 23, 28, + 27, 140, 141, 0, 151, 76, 1, 3, 0, 430, + 385, 350, 349, 348, 338, 337, 339, 345, 344, 347, + 346, 436, 437, 361, 362, 365, 374, 382, 383, 384, + 390, 0, 0, 159, 158, 160, 161, 163, 164, 166, + 167, 169, 170, 172, 173, 175, 176, 178, 179, 181, + 182, 184, 185, 187, 188, 190, 191, 193, 194, 196, + 197, 199, 200, 202, 203, 205, 206, 247, 248, 208, + 209, 244, 245, 250, 251, 217, 218, 253, 254, 221, + 222, 220, 257, 258, 225, 226, 224, 229, 230, 228, + 237, 238, 236, 241, 242, 240, 233, 234, 232, 211, + 212, 214, 215, 0, 0, 0, 0, 0, 0, 38, + 39, 0, 0, 0, 71, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 37, 0, 0, 0, 0, 40, 41, 0, 0, 0, + 0, 74, 33, 35, 429, 0, 0, 0, 434, 435, + 29, 31, 153, 0, 0, 154, 34, 36, 70, 55, + 54, 56, 57, 43, 58, 51, 59, 42, 60, 61, + 62, 63, 64, 65, 66, 52, 67, 68, 69, 44, + 45, 46, 47, 48, 49, 50, 53, 73, 431, 432, + 433, 156, 155 }; const short int seclang_parser::yypgoto_[] = { - -389, -389, -62, -389, -45, -173, -389, -388, -389, -55, - -251, -59, -206, -389, -132 + -400, -400, -70, -400, -45, -181, -400, -399, -400, -400, + -55, -259, -59, -309, -400, -132 }; const short int seclang_parser::yydefgoto_[] = { - -1, 80, 81, 82, 207, 208, 470, 471, 83, 320, - 321, 351, 209, 339, 352 + -1, 80, 81, 82, 207, 208, 471, 472, 83, 333, + 320, 321, 352, 209, 340, 353 }; const unsigned short int seclang_parser::yytable_[] = { - 322, 322, 322, 213, 210, 323, 324, 93, 361, 353, - 94, 354, 113, 214, 95, 361, 433, 325, 336, 322, - 355, 90, 91, 333, 84, 85, 92, 433, 356, 357, - 358, 326, 327, 360, 334, 359, 328, 343, 344, 86, - 87, 110, 345, 111, 112, 340, 485, 341, 342, 474, - 475, 476, 88, 89, 338, 432, 114, 115, 116, 117, - 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, - 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, - 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, - 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, - 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, - 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, - 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, - 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, - 198, 199, 200, 201, 202, 203, 204, 205, 96, 97, - 410, 98, 99, 100, 101, 480, 362, 363, 102, 103, - 104, 105, 106, 107, 108, 109, 0, 415, 418, 421, - 424, 427, 211, 212, 329, 330, 331, 332, 346, 347, - 348, 349, 364, 365, 0, 366, 367, 0, 368, 369, - 370, 371, 372, 373, 374, 375, 0, 376, 377, 378, - 379, 472, 380, 381, 382, 383, 384, 385, 0, 386, - 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, - 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, - 407, 411, 412, 428, 429, 206, 430, 431, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 322, 0, 0, + 322, 322, 322, 362, 210, 323, 324, 434, 213, 354, + 337, 355, 434, 113, 362, 84, 85, 325, 214, 322, + 356, 90, 91, 334, 93, 361, 92, 94, 357, 358, + 359, 95, 326, 327, 335, 360, 486, 328, 344, 345, + 86, 87, 110, 346, 111, 112, 341, 433, 342, 343, + 475, 476, 477, 481, 339, 88, 89, 114, 115, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, + 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, + 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, + 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, + 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, + 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 0, + 411, 96, 97, 98, 99, 0, 363, 364, 100, 101, + 102, 103, 104, 105, 106, 107, 0, 416, 419, 422, + 425, 428, 108, 109, 211, 212, 329, 330, 331, 332, + 347, 348, 349, 350, 365, 366, 367, 368, 369, 370, + 371, 372, 373, 374, 0, 375, 376, 0, 0, 377, + 378, 473, 379, 380, 381, 382, 383, 384, 0, 385, + 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, + 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, + 406, 407, 408, 412, 413, 0, 206, 429, 430, 431, + 432, 0, 0, 0, 0, 0, 0, 322, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 473, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 474, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 478, 478, 478, 478, 478, 478, 478, - 478, 0, 486, 487, 488, 489, 0, 0, 490, 491, - 492, 0, 493, 494, 495, 496, 497, 498, 499, 500, - 501, 502, 503, 504, 505, 506, 507, 479, 508, 509, - 510, 511, 481, 0, 512, 513, 514, 515, 0, 0, - 0, 0, 517, 518, 519, 0, 0, 0, 0, 0, - 0, 478, 0, 0, 0, 0, 478, 0, 0, 478, - 0, 0, 478, 0, 0, 478, 0, 0, 478, 0, - 0, 0, 0, 0, 484, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 479, 479, 479, 479, 479, 479, + 479, 479, 0, 487, 488, 489, 490, 0, 0, 491, + 492, 493, 0, 494, 495, 496, 497, 498, 499, 500, + 501, 502, 503, 504, 505, 506, 507, 508, 482, 509, + 510, 511, 512, 480, 0, 513, 514, 515, 516, 0, + 0, 0, 0, 518, 519, 520, 0, 0, 0, 0, + 0, 0, 479, 0, 0, 0, 0, 479, 0, 0, + 479, 0, 0, 479, 0, 0, 479, 0, 0, 479, + 0, 0, 0, 0, 0, 485, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 478, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 520, 521, 516, 0, 478, 478, 478, - 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, - 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, - 478, 478, 478, 478, 478, 478, 478, 0, 478, 478, - 478, 217, 218, 219, 220, 221, 222, 223, 224, 225, - 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, - 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, - 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, - 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, - 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, - 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, - 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, - 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, - 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, - 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, - 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, - 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, - 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, - 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, - 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, - 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, - 297, 298, 299, 300, 301, 302, 303, 304, 305, 217, - 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, - 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, - 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, - 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, - 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, - 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, - 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, - 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, - 298, 299, 300, 301, 302, 303, 304, 305, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 350, 0, 307, 308, 309, 310, 311, 312, - 313, 314, 315, 316, 317, 318, 319, 0, 408, 409, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 350, 0, 307, 308, 309, 310, 311, 312, 313, - 314, 315, 316, 317, 318, 319, 0, 413, 414, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 350, 0, 307, 308, 309, 310, 311, 312, 313, 314, - 315, 316, 317, 318, 319, 0, 416, 417, 217, 218, - 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, - 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, - 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, - 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, - 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, - 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, - 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, - 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, - 299, 300, 301, 302, 303, 304, 305, 217, 218, 219, - 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, - 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, - 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, - 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, - 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, - 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, - 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, - 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, - 300, 301, 302, 303, 304, 305, 217, 218, 219, 220, - 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, - 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, - 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, - 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, - 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, - 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, - 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, - 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, - 301, 302, 303, 304, 305, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 350, - 0, 307, 308, 309, 310, 311, 312, 313, 314, 315, - 316, 317, 318, 319, 0, 419, 420, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 350, 0, - 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, - 317, 318, 319, 0, 422, 423, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 350, 0, 307, - 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, - 318, 319, 0, 425, 426, 215, 216, 217, 218, 219, - 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, - 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, - 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, - 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, - 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, - 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, - 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, - 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, - 300, 301, 302, 303, 304, 305, 215, 216, 217, 218, - 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, - 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, - 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, - 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, - 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, - 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, - 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, - 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, - 299, 300, 301, 302, 303, 304, 305, 482, 483, 217, - 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, - 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, - 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, - 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, - 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, - 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, - 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, - 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, - 298, 299, 300, 301, 302, 303, 304, 305, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 306, - 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, - 317, 318, 319, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 307, 308, 309, 310, 311, 312, 313, 314, 315, - 316, 317, 318, 319, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 307, 308, 309, 310, 311, 312, 313, 314, - 315, 316, 317, 318, 319, 217, 218, 219, 220, 221, - 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, - 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, - 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, - 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, - 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, - 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, - 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, - 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, - 302, 303, 304, 305, 0, 0, 0, 0, 434, 435, - 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, - 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, - 0, 456, 457, 458, 459, 460, 461, 462, 463, 464, - 465, 466, 467, 468, 469, 217, 218, 219, 220, 221, - 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, - 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, - 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, - 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, - 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, - 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, - 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, - 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, - 302, 303, 304, 305, 0, 0, 0, 0, 0, 435, - 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, - 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, - 0, 456, 457, 458, 459, 460, 461, 462, 463, 464, - 465, 466, 467, 468, 469, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 350, 0, 307, 308, - 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, - 319, 217, 218, 219, 220, 221, 222, 223, 224, 225, - 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, - 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, - 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, - 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, - 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, - 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, - 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, - 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, - 0, 0, 0, 0, 337, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 350, 0, 307, 308, - 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, - 319, 217, 218, 219, 220, 221, 222, 223, 224, 225, + 0, 0, 0, 0, 479, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 521, 522, 517, 0, 479, 479, + 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, + 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, + 479, 479, 479, 479, 479, 479, 479, 479, 0, 479, + 479, 479, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, + 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, + 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, + 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, @@ -5889,8 +5742,48 @@ namespace yy { 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 0, - 0, 0, 0, 0, 307, 308, 309, 310, 311, 312, - 313, 314, 315, 316, 317, 318, 319, 217, 218, 219, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 351, 0, 307, 308, 309, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 0, 409, + 410, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 351, 0, 307, 308, 309, 310, 311, 312, + 313, 314, 315, 316, 317, 318, 319, 0, 414, 415, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 351, 0, 307, 308, 309, 310, 311, 312, 313, + 314, 315, 316, 317, 318, 319, 0, 417, 418, 217, + 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, + 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, + 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, + 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, + 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, + 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, + 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, + 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, + 298, 299, 300, 301, 302, 303, 304, 305, 217, 218, + 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, + 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, + 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, + 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, + 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, + 299, 300, 301, 302, 303, 304, 305, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, @@ -5899,39 +5792,64 @@ namespace yy { 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, - 300, 301, 302, 303, 304, 305, 0, 0, 1, 0, - 0, 0, 2, 3, 0, 0, 0, 0, 0, 0, + 300, 301, 302, 303, 304, 305, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 350, 0, 307, 308, 309, 310, 311, 312, - 313, 314, 315, 316, 317, 318, 319, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 351, 0, 307, 308, 309, 310, 311, 312, 313, 314, + 315, 316, 317, 318, 319, 0, 420, 421, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 477, 0, 307, 308, 309, 310, 311, 312, 313, - 314, 315, 316, 317, 318, 319, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 335, 0, 0, 0, - 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 351, + 0, 307, 308, 309, 310, 311, 312, 313, 314, 315, + 316, 317, 318, 319, 0, 423, 424, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 351, 0, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, - 317, 318, 319, 5, 6, 7, 8, 9, 10, 11, - 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, - 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, - 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, - 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, - 62, 63, 64, 65, 66, 67, 4, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 68, 69, 70, - 71, 72, 73, 74, 75, 76, 77, 78, 79, 0, + 317, 318, 319, 0, 426, 427, 215, 216, 217, 218, + 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, + 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, + 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, + 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, + 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, + 299, 300, 301, 302, 303, 304, 305, 215, 216, 217, + 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, + 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, + 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, + 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, + 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, + 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, + 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, + 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, + 298, 299, 300, 301, 302, 303, 304, 305, 483, 484, + 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, + 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, + 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, + 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, + 316, 317, 318, 319, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -5939,276 +5857,212 @@ namespace yy { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 5, 6, 7, 8, 9, 10, 11, 12, 13, - 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, - 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, - 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, - 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, - 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, 113, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 68, 69, 70, 71, 72, - 73, 74, 75, 76, 77, 78, 79, 0, 0, 0, + 0, 0, 307, 308, 309, 310, 311, 312, 313, 314, + 315, 316, 317, 318, 319, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 114, 115, - 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, - 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, - 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, - 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, - 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, - 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, - 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, - 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, - 196, 197, 198, 199, 200, 201, 202, 203, 204, 205 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 307, 308, 309, 310, 311, 312, 313, + 314, 315, 316, 317, 318, 319, 217, 218, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, + 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, + 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, + 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, + 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, + 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, + 301, 302, 303, 304, 305, 0, 0, 0, 0, 435, + 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, + 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, + 456, 0, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, 468, 469, 470, 217, 218, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, + 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, + 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, + 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, + 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, + 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, + 301, 302, 303, 304, 305, 0, 0, 0, 0, 0, + 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, + 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, + 456, 0, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, 468, 469, 470, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 351, 0, 307, + 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, + 318, 319, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, + 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, + 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, + 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 0, 0, 0, 0, 338, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 351, 0, 307, + 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, + 318, 319, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, + 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, + 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, + 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 217, 218, 219, 220, 221, 222, 223, 224, 225, + 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, + 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, + 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, + 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, + 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, + 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, + 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, + 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, + 0, 0, 0, 0, 0, 307, 308, 309, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 217, 218, + 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, + 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, + 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, + 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, + 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, + 299, 300, 301, 302, 303, 304, 305, 0, 0, 1, + 0, 0, 0, 2, 3, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 351, 0, 307, 308, 309, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 478, 0, 307, 308, 309, 310, 311, 312, + 313, 314, 315, 316, 317, 318, 319, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 336, 0, 0, + 0, 2, 3, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 307, 308, 309, 310, 311, 312, 313, 314, 315, + 316, 317, 318, 319, 5, 6, 7, 8, 9, 10, + 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, + 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, + 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, + 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, + 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, + 61, 62, 63, 64, 65, 66, 67, 4, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 69, + 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 5, 6, 7, 8, 9, 10, 11, 12, + 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, + 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, + 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, + 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, + 63, 64, 65, 66, 67, 113, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 68, 69, 70, 71, + 72, 73, 74, 75, 76, 77, 78, 79, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 114, + 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, + 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, + 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, + 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, + 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, + 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, + 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, + 205 }; const short int seclang_parser::yycheck_[] = { - 59, 60, 61, 298, 49, 60, 61, 300, 3, 141, - 303, 143, 99, 308, 307, 3, 6, 62, 80, 78, - 152, 301, 302, 78, 301, 302, 306, 6, 160, 161, - 162, 301, 302, 206, 79, 167, 306, 301, 302, 141, - 142, 299, 306, 301, 302, 299, 434, 301, 302, 100, - 101, 102, 301, 302, 113, 306, 143, 144, 145, 146, - 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, - 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, - 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, - 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, - 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, - 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, - 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, - 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, - 227, 228, 229, 230, 231, 232, 233, 234, 301, 302, - 282, 301, 302, 301, 302, 361, 215, 216, 304, 305, - 301, 302, 304, 305, 301, 302, -1, 299, 300, 301, + 59, 60, 61, 3, 49, 60, 61, 6, 298, 141, + 80, 143, 6, 99, 3, 301, 302, 62, 308, 78, + 152, 301, 302, 78, 300, 206, 306, 303, 160, 161, + 162, 307, 301, 302, 79, 167, 435, 306, 301, 302, + 141, 142, 299, 306, 301, 302, 299, 306, 301, 302, + 100, 101, 102, 362, 113, 301, 302, 143, 144, 145, + 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, + 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, + 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, + 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, + 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, + 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, + 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, + 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, + 226, 227, 228, 229, 230, 231, 232, 233, 234, -1, + 282, 301, 302, 301, 302, -1, 215, 216, 301, 302, + 304, 305, 301, 302, 304, 305, -1, 299, 300, 301, 302, 303, 301, 302, 301, 302, 301, 302, 301, 302, - 301, 302, 337, 338, -1, 337, 338, -1, 337, 338, - 337, 338, 337, 338, 337, 338, -1, 337, 338, 337, + 301, 302, 301, 302, 337, 338, 337, 338, 337, 338, + 337, 338, 337, 338, -1, 337, 338, -1, -1, 337, 338, 333, 337, 338, 337, 338, 337, 338, -1, 337, 338, 337, 338, 337, 338, 337, 338, 337, 338, 337, 338, 337, 338, 337, 338, 337, 338, 337, 338, 337, - 338, 337, 338, 337, 338, 322, 337, 338, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 306, -1, -1, + 338, 337, 338, 337, 338, -1, 322, 337, 338, 337, + 338, -1, -1, -1, -1, -1, -1, 306, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 337, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 338, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 352, 353, 354, 355, 356, 357, 358, - 359, -1, 434, 435, 436, 437, -1, -1, 440, 441, - 442, -1, 444, 445, 446, 447, 448, 449, 450, 451, - 452, 453, 454, 455, 456, 457, 458, 322, 460, 461, - 462, 463, 322, -1, 466, 467, 468, 469, -1, -1, - -1, -1, 474, 475, 476, -1, -1, -1, -1, -1, - -1, 410, -1, -1, -1, -1, 415, -1, -1, 418, - -1, -1, 421, -1, -1, 424, -1, -1, 427, -1, - -1, -1, -1, -1, 433, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 353, 354, 355, 356, 357, 358, + 359, 360, -1, 435, 436, 437, 438, -1, -1, 441, + 442, 443, -1, 445, 446, 447, 448, 449, 450, 451, + 452, 453, 454, 455, 456, 457, 458, 459, 322, 461, + 462, 463, 464, 322, -1, 467, 468, 469, 470, -1, + -1, -1, -1, 475, 476, 477, -1, -1, -1, -1, + -1, -1, 411, -1, -1, -1, -1, 416, -1, -1, + 419, -1, -1, 422, -1, -1, 425, -1, -1, 428, + -1, -1, -1, -1, -1, 434, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 472, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 482, 483, 470, -1, 486, 487, 488, + -1, -1, -1, -1, 473, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 483, 484, 471, -1, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, - 509, 510, 511, 512, 513, 514, 515, -1, 517, 518, - 519, 10, 11, 12, 13, 14, 15, 16, 17, 18, - 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, - 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, - 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, - 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, - 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, - 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, - 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, - 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, - 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, - 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, - 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, - 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, - 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, - 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, - 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, - 90, 91, 92, 93, 94, 95, 96, 97, 98, 10, - 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, - 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, - 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, - 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, - 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, - 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, - 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, - 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, - 91, 92, 93, 94, 95, 96, 97, 98, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 321, -1, 323, 324, 325, 326, 327, 328, - 329, 330, 331, 332, 333, 334, 335, -1, 337, 338, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 321, -1, 323, 324, 325, 326, 327, 328, 329, - 330, 331, 332, 333, 334, 335, -1, 337, 338, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 321, -1, 323, 324, 325, 326, 327, 328, 329, 330, - 331, 332, 333, 334, 335, -1, 337, 338, 10, 11, - 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, - 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, - 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, - 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, - 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, - 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, - 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, - 92, 93, 94, 95, 96, 97, 98, 10, 11, 12, - 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, - 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, - 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, - 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, - 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, - 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, - 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, - 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, - 93, 94, 95, 96, 97, 98, 10, 11, 12, 13, - 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, - 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, - 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, - 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, - 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, - 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, - 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, - 94, 95, 96, 97, 98, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 321, - -1, 323, 324, 325, 326, 327, 328, 329, 330, 331, - 332, 333, 334, 335, -1, 337, 338, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 321, -1, - 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, - 333, 334, 335, -1, 337, 338, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 321, -1, 323, - 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, - 334, 335, -1, 337, 338, 8, 9, 10, 11, 12, - 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, - 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, - 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, - 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, - 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, - 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, - 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, - 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, - 93, 94, 95, 96, 97, 98, 8, 9, 10, 11, - 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, - 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, - 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, - 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, - 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, - 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, - 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, - 92, 93, 94, 95, 96, 97, 98, 8, 9, 10, - 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, - 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, - 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, - 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, - 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, - 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, - 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, - 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, - 91, 92, 93, 94, 95, 96, 97, 98, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 322, - 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, - 333, 334, 335, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 323, 324, 325, 326, 327, 328, 329, 330, 331, - 332, 333, 334, 335, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 323, 324, 325, 326, 327, 328, 329, 330, - 331, 332, 333, 334, 335, 10, 11, 12, 13, 14, - 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, - 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, - 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, - 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, - 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, - 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, - 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, - 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, - 95, 96, 97, 98, -1, -1, -1, -1, 103, 104, - 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, - 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, - -1, 126, 127, 128, 129, 130, 131, 132, 133, 134, - 135, 136, 137, 138, 139, 10, 11, 12, 13, 14, - 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, - 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, - 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, - 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, - 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, - 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, - 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, - 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, - 95, 96, 97, 98, -1, -1, -1, -1, -1, 104, - 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, - 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, - -1, 126, 127, 128, 129, 130, 131, 132, 133, 134, - 135, 136, 137, 138, 139, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 321, -1, 323, 324, - 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, - 335, 10, 11, 12, 13, 14, 15, 16, 17, 18, - 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, - 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, - 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, - 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, - 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, - 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, - 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, - 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, - -1, -1, -1, -1, 103, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 321, -1, 323, 324, - 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, - 335, 10, 11, 12, 13, 14, 15, 16, 17, 18, + 509, 510, 511, 512, 513, 514, 515, 516, -1, 518, + 519, 520, 10, 11, 12, 13, 14, 15, 16, 17, + 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, + 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, + 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, + 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, + 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, + 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, + 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, + 98, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, @@ -6226,21 +6080,21 @@ namespace yy { 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, -1, - -1, -1, -1, -1, 323, 324, 325, 326, 327, 328, - 329, 330, 331, 332, 333, 334, 335, 10, 11, 12, - 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, - 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, - 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, - 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, - 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, - 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, - 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, - 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, - 93, 94, 95, 96, 97, 98, -1, -1, 0, -1, - -1, -1, 4, 5, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 321, -1, 323, 324, 325, 326, 327, + 328, 329, 330, 331, 332, 333, 334, 335, -1, 337, + 338, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 321, -1, 323, 324, 325, 326, 327, 328, - 329, 330, 331, 332, 333, 334, 335, -1, -1, -1, + 329, 330, 331, 332, 333, 334, 335, -1, 337, 338, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, @@ -6249,26 +6103,91 @@ namespace yy { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 321, -1, 323, 324, 325, 326, 327, 328, 329, - 330, 331, 332, 333, 334, 335, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 140, -1, + 330, 331, 332, 333, 334, 335, -1, 337, 338, 10, + 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, + 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, + 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, + 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, + 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, + 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, + 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, + 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, + 91, 92, 93, 94, 95, 96, 97, 98, 10, 11, + 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, + 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, + 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, + 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, + 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, + 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, + 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, + 92, 93, 94, 95, 96, 97, 98, 10, 11, 12, + 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, + 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, + 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, + 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, + 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, + 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, + 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, + 93, 94, 95, 96, 97, 98, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 0, -1, -1, -1, - 4, 5, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 321, -1, 323, 324, 325, 326, 327, 328, 329, 330, + 331, 332, 333, 334, 335, -1, 337, 338, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 321, + -1, 323, 324, 325, 326, 327, 328, 329, 330, 331, + 332, 333, 334, 335, -1, 337, 338, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 321, -1, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, - 333, 334, 335, 235, 236, 237, 238, 239, 240, 241, - 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, - 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, - 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, - 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, - 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, - 292, 293, 294, 295, 296, 297, 140, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 309, 310, 311, - 312, 313, 314, 315, 316, 317, 318, 319, 320, -1, + 333, 334, 335, -1, 337, 338, 8, 9, 10, 11, + 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, + 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, + 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, + 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, + 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, + 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, + 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, + 92, 93, 94, 95, 96, 97, 98, 8, 9, 10, + 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, + 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, + 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, + 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, + 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, + 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, + 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, + 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, + 91, 92, 93, 94, 95, 96, 97, 98, 8, 9, + 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, + 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, + 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, + 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, + 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, + 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, + 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, + 90, 91, 92, 93, 94, 95, 96, 97, 98, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, + 332, 333, 334, 335, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, @@ -6276,26 +6195,151 @@ namespace yy { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 235, 236, 237, 238, 239, 240, 241, 242, 243, - 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, - 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, - 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, - 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, - 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, - 294, 295, 296, 297, 99, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 309, 310, 311, 312, 313, - 314, 315, 316, 317, 318, 319, 320, -1, -1, -1, + -1, -1, 323, 324, 325, 326, 327, 328, 329, 330, + 331, 332, 333, 334, 335, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 143, 144, - 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, - 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, - 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, - 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, - 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, - 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, - 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, - 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, - 225, 226, 227, 228, 229, 230, 231, 232, 233, 234 + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 323, 324, 325, 326, 327, 328, 329, + 330, 331, 332, 333, 334, 335, 10, 11, 12, 13, + 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, + 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, + 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, + 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, + 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, + 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, + 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, + 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, + 94, 95, 96, 97, 98, -1, -1, -1, -1, 103, + 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, + 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, + 124, -1, 126, 127, 128, 129, 130, 131, 132, 133, + 134, 135, 136, 137, 138, 139, 10, 11, 12, 13, + 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, + 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, + 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, + 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, + 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, + 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, + 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, + 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, + 94, 95, 96, 97, 98, -1, -1, -1, -1, -1, + 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, + 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, + 124, -1, 126, 127, 128, 129, 130, 131, 132, 133, + 134, 135, 136, 137, 138, 139, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 321, -1, 323, + 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, + 334, 335, 10, 11, 12, 13, 14, 15, 16, 17, + 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, + 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, + 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, + 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, + 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, + 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, + 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, + 98, -1, -1, -1, -1, 103, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 321, -1, 323, + 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, + 334, 335, 10, 11, 12, 13, 14, 15, 16, 17, + 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, + 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, + 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, + 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, + 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, + 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, + 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, + 98, 10, 11, 12, 13, 14, 15, 16, 17, 18, + 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, + 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, + 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, + 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, + 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, + 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, + 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, + 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, + -1, -1, -1, -1, -1, 323, 324, 325, 326, 327, + 328, 329, 330, 331, 332, 333, 334, 335, 10, 11, + 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, + 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, + 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, + 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, + 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, + 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, + 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, + 92, 93, 94, 95, 96, 97, 98, -1, -1, 0, + -1, -1, -1, 4, 5, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 321, -1, 323, 324, 325, 326, 327, + 328, 329, 330, 331, 332, 333, 334, 335, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 321, -1, 323, 324, 325, 326, 327, 328, + 329, 330, 331, 332, 333, 334, 335, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 140, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 0, -1, -1, + -1, 4, 5, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 323, 324, 325, 326, 327, 328, 329, 330, 331, + 332, 333, 334, 335, 235, 236, 237, 238, 239, 240, + 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, + 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, + 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, + 291, 292, 293, 294, 295, 296, 297, 140, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 309, 310, + 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 235, 236, 237, 238, 239, 240, 241, 242, + 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, + 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, + 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, + 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 99, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 309, 310, 311, 312, + 313, 314, 315, 316, 317, 318, 319, 320, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 143, + 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, + 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, + 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, + 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, + 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, + 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, + 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, + 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, + 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, + 234 }; const unsigned short int @@ -6321,7 +6365,7 @@ namespace yy { 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, - 229, 230, 231, 232, 233, 234, 322, 343, 344, 351, + 229, 230, 231, 232, 233, 234, 322, 343, 344, 352, 343, 301, 302, 298, 308, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, @@ -6333,27 +6377,27 @@ namespace yy { 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, - 348, 349, 350, 348, 348, 343, 301, 302, 306, 301, - 302, 301, 302, 348, 343, 0, 341, 103, 350, 352, - 299, 301, 302, 301, 302, 306, 301, 302, 301, 302, - 321, 350, 353, 353, 353, 353, 353, 353, 353, 353, - 344, 3, 350, 350, 337, 338, 337, 338, 337, 338, - 337, 338, 337, 338, 337, 338, 337, 338, 337, 338, - 337, 338, 337, 338, 337, 338, 337, 338, 337, 338, - 337, 338, 337, 338, 337, 338, 337, 338, 337, 338, - 337, 338, 337, 338, 337, 338, 337, 338, 337, 338, - 353, 337, 338, 337, 338, 353, 337, 338, 353, 337, - 338, 353, 337, 338, 353, 337, 338, 353, 337, 338, - 337, 338, 349, 6, 103, 104, 105, 106, 107, 108, - 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, - 119, 120, 121, 122, 123, 124, 126, 127, 128, 129, - 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, - 345, 346, 353, 350, 100, 101, 102, 321, 350, 322, - 351, 322, 8, 9, 350, 346, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 343, 353, 353, 353, - 350, 350 + 349, 350, 351, 349, 349, 343, 301, 302, 306, 301, + 302, 301, 302, 348, 349, 343, 0, 341, 103, 351, + 353, 299, 301, 302, 301, 302, 306, 301, 302, 301, + 302, 321, 351, 354, 354, 354, 354, 354, 354, 354, + 354, 344, 3, 351, 351, 337, 338, 337, 338, 337, + 338, 337, 338, 337, 338, 337, 338, 337, 338, 337, + 338, 337, 338, 337, 338, 337, 338, 337, 338, 337, + 338, 337, 338, 337, 338, 337, 338, 337, 338, 337, + 338, 337, 338, 337, 338, 337, 338, 337, 338, 337, + 338, 354, 337, 338, 337, 338, 354, 337, 338, 354, + 337, 338, 354, 337, 338, 354, 337, 338, 354, 337, + 338, 337, 338, 350, 6, 103, 104, 105, 106, 107, + 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, + 118, 119, 120, 121, 122, 123, 124, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, + 139, 345, 346, 354, 351, 100, 101, 102, 321, 351, + 322, 352, 322, 8, 9, 351, 346, 354, 354, 354, + 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, + 354, 354, 354, 354, 354, 354, 354, 354, 354, 354, + 354, 354, 354, 354, 354, 354, 354, 343, 354, 354, + 354, 351, 351 }; const unsigned short int @@ -6374,24 +6418,7 @@ namespace yy { 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, - 347, 348, 348, 349, 349, 349, 349, 349, 349, 350, - 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, - 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, - 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, - 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, - 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, - 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, - 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, - 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, - 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, - 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, - 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, - 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, - 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, - 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, - 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, - 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, - 350, 350, 350, 350, 350, 350, 350, 350, 350, 351, + 347, 348, 349, 349, 350, 350, 350, 350, 350, 350, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, @@ -6401,8 +6428,25 @@ namespace yy { 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, - 351, 351, 351, 351, 351, 351, 351, 351, 352, 352, - 352, 352, 352, 353, 353, 353, 353 + 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, + 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, + 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, + 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, + 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, + 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, + 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, + 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, + 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, + 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, + 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, + 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, + 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, + 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, + 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, + 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, + 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, + 352, 352, 352, 352, 352, 352, 352, 352, 352, 353, + 353, 353, 353, 353, 354, 354, 354, 354 }; const unsigned char @@ -6423,17 +6467,17 @@ namespace yy { 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 3, 3, 4, 4, 1, 2, 2, 2, + 1, 1, 1, 3, 3, 4, 4, 1, 2, 2, + 2, 2, 1, 2, 2, 1, 2, 2, 1, 2, 2, 1, 2, 2, 1, 2, 2, 1, 2, 2, 1, 2, 2, 1, 2, 2, 1, 2, 2, 1, 2, 2, 1, 2, 2, 1, 2, 2, 1, 2, 2, 1, 2, 2, 1, 2, 2, 1, 2, 2, 1, 2, 2, 1, 2, 2, 1, 2, 2, 1, - 2, 2, 1, 2, 2, 1, 2, 2, 1, 2, - 2, 2, 1, 2, 2, 2, 1, 2, 2, 2, - 1, 2, 2, 2, 1, 2, 2, 2, 1, 2, - 2, 2, 1, 2, 2, 1, 2, 2, 1, 2, - 2, 1, 2, 2, 1, 1, 2, 2, 1, 1, + 2, 2, 2, 1, 2, 2, 2, 1, 2, 2, + 2, 1, 2, 2, 2, 1, 2, 2, 2, 1, + 2, 2, 2, 1, 2, 2, 1, 2, 2, 1, + 2, 2, 1, 2, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -6441,17 +6485,17 @@ namespace yy { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, - 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 2, 2, 1, 1, 2, 1, 1, 1, 1, 1, - 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, - 1, 2, 2, 2, 2, 1, 1, 1, 1, 2, + 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, + 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, + 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 2, 2, 1, 1, 2, 1, 1, 1, 1, + 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, + 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, + 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, - 3, 3, 3, 2, 2, 1, 1 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, + 1, 3, 3, 3, 2, 2, 1, 1 }; @@ -6628,8 +6672,9 @@ namespace yy { "\"RUN_TIME_VAR_TIME_YEAR\"", "\"VARIABLE\"", "\"Dictionary element\"", "\"Dictionary element, selected by regexp\"", "$accept", "input", "line", "audit_log", "actions", "actions_may_quoted", "op", "op_before_init", - "expression", "variables", "variables_may_be_quoted", "var", "act", - "setvar_action", "run_time_string", YY_NULLPTR + "expression", "variables", "variables_pre_process", + "variables_may_be_quoted", "var", "act", "setvar_action", + "run_time_string", YY_NULLPTR }; #if YYDEBUG @@ -6651,35 +6696,35 @@ namespace yy { 1459, 1472, 1498, 1524, 1536, 1556, 1584, 1589, 1594, 1603, 1608, 1612, 1616, 1620, 1624, 1628, 1632, 1637, 1642, 1654, 1660, 1664, 1668, 1679, 1688, 1689, 1696, 1701, 1706, 1711, - 1718, 1726, 1730, 1737, 1742, 1748, 1754, 1760, 1767, 1777, - 1781, 1785, 1789, 1793, 1797, 1801, 1805, 1809, 1813, 1817, - 1821, 1825, 1829, 1833, 1837, 1841, 1845, 1849, 1853, 1857, - 1861, 1865, 1869, 1873, 1877, 1881, 1885, 1889, 1893, 1897, - 1901, 1905, 1909, 1913, 1917, 1921, 1925, 1929, 1933, 1937, - 1941, 1945, 1949, 1953, 1957, 1961, 1965, 1969, 1973, 1977, - 1981, 1985, 1989, 1993, 1997, 2001, 2005, 2009, 2013, 2017, - 2021, 2025, 2029, 2033, 2037, 2041, 2045, 2049, 2053, 2057, - 2061, 2065, 2069, 2073, 2077, 2081, 2085, 2089, 2093, 2097, - 2101, 2105, 2109, 2113, 2117, 2121, 2125, 2129, 2133, 2138, - 2142, 2146, 2151, 2155, 2159, 2164, 2169, 2173, 2177, 2181, - 2185, 2189, 2193, 2197, 2201, 2205, 2209, 2213, 2217, 2221, - 2225, 2229, 2233, 2237, 2241, 2245, 2249, 2253, 2257, 2261, - 2265, 2269, 2273, 2277, 2281, 2285, 2289, 2293, 2297, 2301, - 2305, 2309, 2313, 2317, 2321, 2325, 2329, 2333, 2337, 2341, - 2345, 2349, 2353, 2357, 2361, 2365, 2369, 2373, 2377, 2381, - 2385, 2389, 2393, 2397, 2401, 2405, 2409, 2417, 2424, 2431, - 2438, 2445, 2452, 2459, 2466, 2473, 2480, 2487, 2494, 2504, - 2508, 2512, 2516, 2520, 2524, 2528, 2532, 2537, 2542, 2547, - 2551, 2555, 2559, 2563, 2568, 2573, 2577, 2581, 2585, 2589, - 2593, 2597, 2601, 2605, 2609, 2613, 2617, 2622, 2626, 2631, - 2635, 2639, 2643, 2647, 2651, 2655, 2659, 2663, 2667, 2671, - 2675, 2679, 2683, 2687, 2691, 2695, 2699, 2703, 2707, 2711, - 2715, 2719, 2723, 2727, 2731, 2735, 2739, 2743, 2747, 2751, - 2755, 2759, 2763, 2767, 2771, 2775, 2779, 2783, 2787, 2791, - 2795, 2799, 2803, 2807, 2811, 2815, 2819, 2823, 2827, 2831, - 2835, 2839, 2843, 2847, 2851, 2855, 2859, 2863, 2867, 2871, - 2875, 2879, 2883, 2887, 2891, 2895, 2899, 2903, 2910, 2914, - 2918, 2922, 2926, 2933, 2938, 2943, 2949 + 1718, 1726, 1763, 1767, 1774, 1779, 1785, 1791, 1797, 1804, + 1814, 1818, 1822, 1826, 1830, 1834, 1838, 1842, 1846, 1850, + 1854, 1858, 1862, 1866, 1870, 1874, 1878, 1882, 1886, 1890, + 1894, 1898, 1902, 1906, 1910, 1914, 1918, 1922, 1926, 1930, + 1934, 1938, 1942, 1946, 1950, 1954, 1958, 1962, 1966, 1970, + 1974, 1978, 1982, 1986, 1990, 1994, 1998, 2002, 2006, 2010, + 2014, 2018, 2022, 2026, 2030, 2034, 2038, 2042, 2046, 2050, + 2054, 2058, 2062, 2066, 2070, 2074, 2078, 2082, 2086, 2090, + 2094, 2098, 2102, 2106, 2110, 2114, 2118, 2122, 2126, 2130, + 2134, 2138, 2142, 2146, 2150, 2154, 2158, 2162, 2166, 2170, + 2175, 2179, 2183, 2188, 2192, 2196, 2201, 2206, 2210, 2214, + 2218, 2222, 2226, 2230, 2234, 2238, 2242, 2246, 2250, 2254, + 2258, 2262, 2266, 2270, 2274, 2278, 2282, 2286, 2290, 2294, + 2298, 2302, 2306, 2310, 2314, 2318, 2322, 2326, 2330, 2334, + 2338, 2342, 2346, 2350, 2354, 2358, 2362, 2366, 2370, 2374, + 2378, 2382, 2386, 2390, 2394, 2398, 2402, 2406, 2410, 2414, + 2418, 2422, 2426, 2430, 2434, 2438, 2442, 2446, 2454, 2461, + 2468, 2475, 2482, 2489, 2496, 2503, 2510, 2517, 2524, 2531, + 2541, 2545, 2549, 2553, 2557, 2561, 2565, 2569, 2574, 2579, + 2584, 2588, 2592, 2596, 2600, 2605, 2610, 2614, 2618, 2622, + 2626, 2630, 2634, 2638, 2642, 2646, 2650, 2654, 2659, 2663, + 2668, 2672, 2676, 2680, 2684, 2688, 2692, 2696, 2700, 2704, + 2708, 2712, 2716, 2720, 2724, 2728, 2732, 2736, 2740, 2744, + 2748, 2752, 2756, 2760, 2764, 2768, 2772, 2776, 2780, 2784, + 2788, 2792, 2796, 2800, 2804, 2808, 2812, 2816, 2820, 2824, + 2828, 2832, 2836, 2840, 2844, 2848, 2852, 2856, 2860, 2864, + 2868, 2872, 2876, 2880, 2884, 2888, 2892, 2896, 2900, 2904, + 2908, 2912, 2916, 2920, 2924, 2928, 2932, 2936, 2940, 2947, + 2951, 2955, 2959, 2963, 2970, 2975, 2980, 2986 }; // Print the state stack on the debug stream. @@ -6714,8 +6759,8 @@ namespace yy { } // yy -#line 6718 "seclang-parser.cc" // lalr1.cc:1163 -#line 2956 "seclang-parser.yy" // lalr1.cc:1164 +#line 6763 "seclang-parser.cc" // lalr1.cc:1163 +#line 2993 "seclang-parser.yy" // lalr1.cc:1164 void yy::seclang_parser::error (const location_type& l, const std::string& m) { diff --git a/src/parser/seclang-parser.hh b/src/parser/seclang-parser.hh index 342a805b..0887ecfe 100644 --- a/src/parser/seclang-parser.hh +++ b/src/parser/seclang-parser.hh @@ -836,6 +836,7 @@ namespace yy { char dummy5[sizeof(std::unique_ptr)]; // variables + // variables_pre_process // variables_may_be_quoted char dummy6[sizeof(std::unique_ptr > > )]; @@ -2874,9 +2875,9 @@ namespace yy { enum { yyeof_ = 0, - yylast_ = 3319, ///< Last index in yytable_. - yynnts_ = 15, ///< Number of nonterminal symbols. - yyfinal_ = 335, ///< Termination state number. + yylast_ = 3320, ///< Last index in yytable_. + yynnts_ = 16, ///< Number of nonterminal symbols. + yyfinal_ = 336, ///< Termination state number. yyterror_ = 1, yyerrcode_ = 256, yyntokens_ = 339 ///< Number of tokens. @@ -3191,21 +3192,22 @@ namespace yy { value.copy< std::unique_ptr > (other.value); break; - case 353: // run_time_string + case 354: // run_time_string value.copy< std::unique_ptr > (other.value); break; - case 350: // var + case 351: // var value.copy< std::unique_ptr > (other.value); break; - case 351: // act - case 352: // setvar_action + case 352: // act + case 353: // setvar_action value.copy< std::unique_ptr > (other.value); break; case 348: // variables - case 349: // variables_may_be_quoted + case 349: // variables_pre_process + case 350: // variables_may_be_quoted value.copy< std::unique_ptr > > > (other.value); break; @@ -3432,21 +3434,22 @@ namespace yy { value.copy< std::unique_ptr > (v); break; - case 353: // run_time_string + case 354: // run_time_string value.copy< std::unique_ptr > (v); break; - case 350: // var + case 351: // var value.copy< std::unique_ptr > (v); break; - case 351: // act - case 352: // setvar_action + case 352: // act + case 353: // setvar_action value.copy< std::unique_ptr > (v); break; case 348: // variables - case 349: // variables_may_be_quoted + case 349: // variables_pre_process + case 350: // variables_may_be_quoted value.copy< std::unique_ptr > > > (v); break; @@ -3746,21 +3749,22 @@ namespace yy { value.template destroy< std::unique_ptr > (); break; - case 353: // run_time_string + case 354: // run_time_string value.template destroy< std::unique_ptr > (); break; - case 350: // var + case 351: // var value.template destroy< std::unique_ptr > (); break; - case 351: // act - case 352: // setvar_action + case 352: // act + case 353: // setvar_action value.template destroy< std::unique_ptr > (); break; case 348: // variables - case 349: // variables_may_be_quoted + case 349: // variables_pre_process + case 350: // variables_may_be_quoted value.template destroy< std::unique_ptr > > > (); break; @@ -3993,21 +3997,22 @@ namespace yy { value.move< std::unique_ptr > (s.value); break; - case 353: // run_time_string + case 354: // run_time_string value.move< std::unique_ptr > (s.value); break; - case 350: // var + case 351: // var value.move< std::unique_ptr > (s.value); break; - case 351: // act - case 352: // setvar_action + case 352: // act + case 353: // setvar_action value.move< std::unique_ptr > (s.value); break; case 348: // variables - case 349: // variables_may_be_quoted + case 349: // variables_pre_process + case 350: // variables_may_be_quoted value.move< std::unique_ptr > > > (s.value); break; @@ -6134,7 +6139,7 @@ namespace yy { } // yy -#line 6138 "seclang-parser.hh" // lalr1.cc:379 +#line 6143 "seclang-parser.hh" // lalr1.cc:379 diff --git a/src/parser/seclang-parser.yy b/src/parser/seclang-parser.yy index f196dc6a..28983fe7 100644 --- a/src/parser/seclang-parser.yy +++ b/src/parser/seclang-parser.yy @@ -725,7 +725,7 @@ using modsecurity::operators::Operator; op ; - +%type > > > variables_pre_process %type > > > variables_may_be_quoted %type > > > variables %type > var @@ -1443,7 +1443,7 @@ expression: YYERROR; } } - | CONFIG_SEC_RULE_UPDATE_TARGET_BY_TAG variables + | CONFIG_SEC_RULE_UPDATE_TARGET_BY_TAG variables_pre_process { std::string error; if (driver.m_exceptions.loadUpdateTargetByTag($1, std::move($2), &error) == false) { @@ -1456,7 +1456,7 @@ expression: YYERROR; } } - | CONFIG_SEC_RULE_UPDATE_TARGET_BY_MSG variables + | CONFIG_SEC_RULE_UPDATE_TARGET_BY_MSG variables_pre_process { std::string error; if (driver.m_exceptions.loadUpdateTargetByMsg($1, std::move($2), &error) == false) { @@ -1469,7 +1469,7 @@ expression: YYERROR; } } - | CONFIG_SEC_RULE_UPDATE_TARGET_BY_ID variables + | CONFIG_SEC_RULE_UPDATE_TARGET_BY_ID variables_pre_process { std::string error; double ruleId; @@ -1723,6 +1723,43 @@ expression: ; variables: + variables_pre_process + { + std::unique_ptr > > originalList = std::move($1); + std::unique_ptr>> newList(new std::vector>()); + std::unique_ptr>> newNewList(new std::vector>()); + std::unique_ptr>> exclusionVars(new std::vector>()); + while (!originalList->empty()) { + std::unique_ptr var = std::move(originalList->back()); + originalList->pop_back(); + if (var->m_isExclusion) { + exclusionVars->push_back(std::move(var)); + } else { + newList->push_back(std::move(var)); + } + } + + while (!newList->empty()) { + bool doNotAdd = false; + std::unique_ptr var = std::move(newList->back()); + newList->pop_back(); + for (auto &i : *exclusionVars) { + if (*var == *i) { + doNotAdd = true; + } + if (i->belongsToCollection(var.get())) { + var->addsKeyExclusion(i.get()); + } + } + if (!doNotAdd) { + newNewList->push_back(std::move(var)); + } + } + $$ = std::move(newNewList); + } + ; + +variables_pre_process: variables_may_be_quoted { $$ = std::move($1); diff --git a/src/rule.cc b/src/rule.cc index 1ecdf106..ae2dce6a 100644 --- a/src/rule.cc +++ b/src/rule.cc @@ -422,7 +422,6 @@ std::list, std::vector> Rule::getFinalVars( Transaction *trans) { - std::list exclusions; std::list exclusions_update_by_tag_remove; std::list exclusions_update_by_msg_remove; std::list exclusions_update_by_id_remove; @@ -496,43 +495,17 @@ std::vector> Rule::getFinalVars( } } - for (int i = 0; i < variables.size(); i++) { - Variable *variable = variables.at(i); - if (variable->m_isExclusion) { - std::vector z; - variable->evaluate(trans, this, &z); - for (auto &y : z) { - exclusions.push_back(std::string(y->m_key)); - delete y; - } - exclusions.push_back(std::string(variable->m_name)); - } - } for (int i = 0; i < variables.size(); i++) { Variable *variable = variables.at(i); std::vector e; bool ignoreVariable = false; - if (variable->m_isExclusion) { - continue; - } - variable->evaluate(trans, this, &e); for (const VariableValue *v : e) { std::string key = v->m_key; - if (std::find_if(exclusions.begin(), exclusions.end(), - [key](std::string m) -> bool { return key == m; }) - != exclusions.end()) { -#ifndef NO_LOGS - trans->debug(9, "Variable: " + key + - " is part of the exclusion list, skipping..."); -#endif - delete v; - v = NULL; - continue; - } + if (std::find_if(exclusions_update_by_tag_remove.begin(), exclusions_update_by_tag_remove.end(), [key](std::string m) -> bool { return key == m; }) @@ -575,6 +548,7 @@ std::vector> Rule::getFinalVars( continue; } + for (auto &i : trans->m_ruleRemoveTargetByTag) { std::string tag = i.first; std::string args = i.second; @@ -604,12 +578,15 @@ std::vector> Rule::getFinalVars( } } } + + if (ignoreVariable) { delete v; v = NULL; continue; } + for (auto &i : trans->m_ruleRemoveTargetById) { int id = i.first; std::string args = i.second; @@ -641,6 +618,8 @@ std::vector> Rule::getFinalVars( } } } + + if (ignoreVariable) { delete v; v = NULL; diff --git a/src/variables/args.h b/src/variables/args.h index 0a26c92e..18eac9e3 100644 --- a/src/variables/args.h +++ b/src/variables/args.h @@ -53,7 +53,7 @@ class Args_NoDictElement : public Variable { void evaluate(Transaction *transaction, Rule *rule, std::vector *l) override { - transaction->m_variableArgs.resolve(l); + transaction->m_variableArgs.resolve(l, m_keyExclusion); } }; @@ -68,7 +68,8 @@ class Args_DictElementRegexp : public Variable { void evaluate(Transaction *transaction, Rule *rule, std::vector *l) override { - transaction->m_variableArgs.resolveRegularExpression(&m_r, l); + transaction->m_variableArgs.resolveRegularExpression(&m_r, l, + m_keyExclusion); } Utils::Regex m_r; diff --git a/src/variables/args_get.h b/src/variables/args_get.h index 374429ba..4edc78c3 100644 --- a/src/variables/args_get.h +++ b/src/variables/args_get.h @@ -53,7 +53,7 @@ class ArgsGet_NoDictElement : public Variable { void evaluate(Transaction *transaction, Rule *rule, std::vector *l) override { - transaction->m_variableArgsGet.resolve(l); + transaction->m_variableArgsGet.resolve(l, m_keyExclusion); } }; @@ -67,7 +67,8 @@ class ArgsGet_DictElementRegexp : public Variable { void evaluate(Transaction *transaction, Rule *rule, std::vector *l) override { - transaction->m_variableArgsGet.resolveRegularExpression(&m_r, l); + transaction->m_variableArgsGet.resolveRegularExpression(&m_r, l, + m_keyExclusion); } Utils::Regex m_r; diff --git a/src/variables/args_get_names.h b/src/variables/args_get_names.h index 7e43a74f..81adeb49 100644 --- a/src/variables/args_get_names.h +++ b/src/variables/args_get_names.h @@ -53,7 +53,7 @@ class ArgsGetNames_NoDictElement : public Variable { void evaluate(Transaction *transaction, Rule *rule, std::vector *l) override { - transaction->m_variableArgsGetNames.resolve(l); + transaction->m_variableArgsGetNames.resolve(l, m_keyExclusion); } }; @@ -67,7 +67,7 @@ class ArgsGetNames_DictElementRegexp : public Variable { Rule *rule, std::vector *l) override { transaction->m_variableArgsGetNames.resolveRegularExpression( - &m_r, l); + &m_r, l, m_keyExclusion); } Utils::Regex m_r; diff --git a/src/variables/args_names.h b/src/variables/args_names.h index 1f164015..1c7463bf 100644 --- a/src/variables/args_names.h +++ b/src/variables/args_names.h @@ -53,7 +53,7 @@ class ArgsNames_NoDictElement : public Variable { void evaluate(Transaction *transaction, Rule *rule, std::vector *l) override { - transaction->m_variableArgsNames.resolve(l); + transaction->m_variableArgsNames.resolve(l, m_keyExclusion); } }; @@ -67,7 +67,7 @@ class ArgsNames_DictElementRegexp : public Variable { Rule *rule, std::vector *l) override { transaction->m_variableArgsNames.resolveRegularExpression( - &m_r, l); + &m_r, l, m_keyExclusion); } Utils::Regex m_r; diff --git a/src/variables/args_post.h b/src/variables/args_post.h index 5403264d..241b804e 100644 --- a/src/variables/args_post.h +++ b/src/variables/args_post.h @@ -53,7 +53,7 @@ class ArgsPost_NoDictElement : public Variable { void evaluate(Transaction *transaction, Rule *rule, std::vector *l) override { - transaction->m_variableArgsPost.resolve(l); + transaction->m_variableArgsPost.resolve(l, m_keyExclusion); } }; @@ -67,7 +67,8 @@ class ArgsPost_DictElementRegexp : public Variable { void evaluate(Transaction *transaction, Rule *rule, std::vector *l) override { - transaction->m_variableArgsPost.resolveRegularExpression(&m_r, l); + transaction->m_variableArgsPost.resolveRegularExpression(&m_r, l, + m_keyExclusion); } Utils::Regex m_r; diff --git a/src/variables/args_post_names.h b/src/variables/args_post_names.h index 6de81a1b..abc44ec8 100644 --- a/src/variables/args_post_names.h +++ b/src/variables/args_post_names.h @@ -53,7 +53,7 @@ class ArgsPostNames_NoDictElement : public Variable { void evaluate(Transaction *transaction, Rule *rule, std::vector *l) override { - transaction->m_variableArgsPostNames.resolve(l); + transaction->m_variableArgsPostNames.resolve(l, m_keyExclusion); } }; @@ -67,7 +67,7 @@ class ArgsPostNames_DictElementRegexp : public Variable { Rule *rule, std::vector *l) override { transaction->m_variableArgsPostNames.resolveRegularExpression( - &m_r, l); + &m_r, l, m_keyExclusion); } Utils::Regex m_r; diff --git a/src/variables/env.cc b/src/variables/env.cc index b2851eee..286e78bd 100644 --- a/src/variables/env.cc +++ b/src/variables/env.cc @@ -51,7 +51,10 @@ void Env::evaluate(Transaction *transaction, if (x.first != m_name && m_name.length() > 0) { continue; } - l->push_back(new VariableValue(&m_collectionName, &x.first, &x.second)); + if (!m_keyExclusion.toOmit(x.first)) { + l->push_back(new VariableValue(&m_collectionName, &x.first, + &x.second)); + } } } diff --git a/src/variables/env.h b/src/variables/env.h index c1df6e3a..56070b3e 100644 --- a/src/variables/env.h +++ b/src/variables/env.h @@ -38,7 +38,6 @@ class Env : public Variable { std::vector *l) override; }; - } // namespace Variables } // namespace modsecurity diff --git a/src/variables/files.h b/src/variables/files.h index 397ca0e4..7823eee9 100644 --- a/src/variables/files.h +++ b/src/variables/files.h @@ -54,7 +54,7 @@ class Files_NoDictElement : public Variable { void evaluate(Transaction *transaction, Rule *rule, std::vector *l) override { - transaction->m_variableFiles.resolve(l); + transaction->m_variableFiles.resolve(l, m_keyExclusion); } }; @@ -69,7 +69,7 @@ class Files_DictElementRegexp : public Variable { Rule *rule, std::vector *l) override { transaction->m_variableFiles.resolveRegularExpression( - &m_r, l); + &m_r, l, m_keyExclusion); } Utils::Regex m_r; diff --git a/src/variables/files_names.h b/src/variables/files_names.h index be498e8a..b0c85abd 100644 --- a/src/variables/files_names.h +++ b/src/variables/files_names.h @@ -54,7 +54,7 @@ class FilesNames_NoDictElement : public Variable { void evaluate(Transaction *transaction, Rule *rule, std::vector *l) override { - transaction->m_variableFilesNames.resolve(l); + transaction->m_variableFilesNames.resolve(l, m_keyExclusion); } }; @@ -70,7 +70,7 @@ class FilesNames_DictElementRegexp : public Variable { Rule *rule, std::vector *l) override { transaction->m_variableFilesNames.resolveRegularExpression( - &m_r, l); + &m_r, l, m_keyExclusion); } Utils::Regex m_r; diff --git a/src/variables/files_sizes.h b/src/variables/files_sizes.h index 461da6bc..7ce1493f 100644 --- a/src/variables/files_sizes.h +++ b/src/variables/files_sizes.h @@ -54,7 +54,7 @@ class FilesSizes_NoDictElement : public Variable { void evaluate(Transaction *transaction, Rule *rule, std::vector *l) override { - transaction->m_variableFilesSizes.resolve(l); + transaction->m_variableFilesSizes.resolve(l, m_keyExclusion); } }; @@ -69,7 +69,7 @@ class FilesSizes_DictElementRegexp : public Variable { Rule *rule, std::vector *l) override { transaction->m_variableFilesSizes.resolveRegularExpression( - &m_r, l); + &m_r, l, m_keyExclusion); } Utils::Regex m_r; diff --git a/src/variables/files_tmp_content.h b/src/variables/files_tmp_content.h index 54adbab6..59a14b19 100644 --- a/src/variables/files_tmp_content.h +++ b/src/variables/files_tmp_content.h @@ -54,7 +54,7 @@ class FilesTmpContent_NoDictElement : public Variable { void evaluate(Transaction *transaction, Rule *rule, std::vector *l) override { - transaction->m_variableFilesTmpContent.resolve(l); + transaction->m_variableFilesTmpContent.resolve(l, m_keyExclusion); } }; @@ -69,7 +69,7 @@ class FilesTmpContent_DictElementRegexp : public Variable { Rule *rule, std::vector *l) override { transaction->m_variableFilesTmpContent.resolveRegularExpression( - &m_r, l); + &m_r, l, m_keyExclusion); } Utils::Regex m_r; diff --git a/src/variables/files_tmp_names.h b/src/variables/files_tmp_names.h index 515bbd39..8b802797 100644 --- a/src/variables/files_tmp_names.h +++ b/src/variables/files_tmp_names.h @@ -53,7 +53,7 @@ class FilesTmpNames_NoDictElement : public Variable { void evaluate(Transaction *transaction, Rule *rule, std::vector *l) override { - transaction->m_variableFilesTmpNames.resolve(l); + transaction->m_variableFilesTmpNames.resolve(l, m_keyExclusion); } }; @@ -68,7 +68,7 @@ class FilesTmpNames_DictElementRegexp : public Variable { Rule *rule, std::vector *l) override { transaction->m_variableFilesTmpNames.resolveRegularExpression( - &m_r, l); + &m_r, l, m_keyExclusion); } Utils::Regex m_r; diff --git a/src/variables/geo.h b/src/variables/geo.h index 0ee3e94b..bdb6840d 100644 --- a/src/variables/geo.h +++ b/src/variables/geo.h @@ -54,7 +54,7 @@ class Geo_NoDictElement : public Variable { void evaluate(Transaction *transaction, Rule *rule, std::vector *l) override { - transaction->m_variableGeo.resolve(l); + transaction->m_variableGeo.resolve(l, m_keyExclusion); } }; @@ -69,7 +69,7 @@ class Geo_DictElementRegexp : public Variable { Rule *rule, std::vector *l) override { transaction->m_variableGeo.resolveRegularExpression( - &m_r, l); + &m_r, l, m_keyExclusion); } Utils::Regex m_r; diff --git a/src/variables/global.h b/src/variables/global.h index 5e6c16ed..2c994ed3 100644 --- a/src/variables/global.h +++ b/src/variables/global.h @@ -14,10 +14,11 @@ */ #include -#include -#include #include +#include +#include #include +#include #ifndef SRC_VARIABLES_GLOBAL_H_ #define SRC_VARIABLES_GLOBAL_H_ @@ -42,7 +43,7 @@ class Global_DictElement : public Variable { std::vector *l) override { t->m_collections.m_global_collection->resolveMultiMatches( m_name, t->m_collections.m_global_collection_key, - t->m_rules->m_secWebAppId.m_value, l); + t->m_rules->m_secWebAppId.m_value, l, m_keyExclusion); } std::string m_dictElement; @@ -59,7 +60,7 @@ class Global_NoDictElement : public Variable { std::vector *l) override { t->m_collections.m_global_collection->resolveMultiMatches("", t->m_collections.m_global_collection_key, - t->m_rules->m_secWebAppId.m_value, l); + t->m_rules->m_secWebAppId.m_value, l, m_keyExclusion); } }; @@ -77,7 +78,7 @@ class Global_DictElementRegexp : public Variable { t->m_collections.m_global_collection->resolveRegularExpression( m_dictElement, t->m_collections.m_global_collection_key, - t->m_rules->m_secWebAppId.m_value, l); + t->m_rules->m_secWebAppId.m_value, l, m_keyExclusion); } Utils::Regex m_r; @@ -98,8 +99,7 @@ class Global_DynamicElement : public Variable { t->m_collections.m_global_collection->resolveMultiMatches( string, t->m_collections.m_global_collection_key, - t->m_rules->m_secWebAppId.m_value, l); - + t->m_rules->m_secWebAppId.m_value, l, m_keyExclusion); } void del(Transaction *t, std::string k) { diff --git a/src/variables/ip.h b/src/variables/ip.h index cc6041d8..07010341 100644 --- a/src/variables/ip.h +++ b/src/variables/ip.h @@ -14,10 +14,11 @@ */ #include -#include -#include #include +#include +#include #include +#include #ifndef SRC_VARIABLES_IP_H_ #define SRC_VARIABLES_IP_H_ @@ -42,7 +43,7 @@ class Ip_DictElement : public Variable { std::vector *l) override { t->m_collections.m_ip_collection->resolveMultiMatches( m_name, t->m_collections.m_ip_collection_key, - t->m_rules->m_secWebAppId.m_value, l); + t->m_rules->m_secWebAppId.m_value, l, m_keyExclusion); } std::string m_dictElement; @@ -59,7 +60,7 @@ class Ip_NoDictElement : public Variable { std::vector *l) override { t->m_collections.m_ip_collection->resolveMultiMatches("", t->m_collections.m_ip_collection_key, - t->m_rules->m_secWebAppId.m_value, l); + t->m_rules->m_secWebAppId.m_value, l, m_keyExclusion); } }; @@ -74,9 +75,9 @@ class Ip_DictElementRegexp : public Variable { void evaluate(Transaction *t, Rule *rule, std::vector *l) override { - t->m_collections.m_ip_collection->resolveRegularExpression(m_dictElement, - t->m_collections.m_ip_collection_key, - t->m_rules->m_secWebAppId.m_value, l); + t->m_collections.m_ip_collection->resolveRegularExpression( + m_dictElement, t->m_collections.m_ip_collection_key, + t->m_rules->m_secWebAppId.m_value, l, m_keyExclusion); } Utils::Regex m_r; @@ -97,7 +98,7 @@ class Ip_DynamicElement : public Variable { t->m_collections.m_ip_collection->resolveMultiMatches( string, t->m_collections.m_ip_collection_key, - t->m_rules->m_secWebAppId.m_value, l); + t->m_rules->m_secWebAppId.m_value, l, m_keyExclusion); } void del(Transaction *t, std::string k) { diff --git a/src/variables/matched_vars.h b/src/variables/matched_vars.h index 7f19079b..8b2a53be 100644 --- a/src/variables/matched_vars.h +++ b/src/variables/matched_vars.h @@ -54,7 +54,7 @@ class MatchedVars_NoDictElement : public Variable { void evaluate(Transaction *transaction, Rule *rule, std::vector *l) override { - transaction->m_variableMatchedVars.resolve(l); + transaction->m_variableMatchedVars.resolve(l, m_keyExclusion); } }; @@ -69,7 +69,7 @@ class MatchedVars_DictElementRegexp : public Variable { Rule *rule, std::vector *l) override { transaction->m_variableMatchedVars.resolveRegularExpression( - &m_r, l); + &m_r, l, m_keyExclusion); } Utils::Regex m_r; diff --git a/src/variables/matched_vars_names.h b/src/variables/matched_vars_names.h index 604d6e5a..6cb5273f 100644 --- a/src/variables/matched_vars_names.h +++ b/src/variables/matched_vars_names.h @@ -54,7 +54,7 @@ class MatchedVarsNames_NoDictElement : public Variable { void evaluate(Transaction *transaction, Rule *rule, std::vector *l) override { - transaction->m_variableMatchedVarsNames.resolve(l); + transaction->m_variableMatchedVarsNames.resolve(l, m_keyExclusion); } }; @@ -69,7 +69,7 @@ class MatchedVarsNames_DictElementRegexp : public Variable { Rule *rule, std::vector *l) override { transaction->m_variableMatchedVarsNames.resolveRegularExpression( - &m_r, l); + &m_r, l, m_keyExclusion); } Utils::Regex m_r; diff --git a/src/variables/multipart_file_name.h b/src/variables/multipart_file_name.h index b3bf41ba..8d5c4d9b 100644 --- a/src/variables/multipart_file_name.h +++ b/src/variables/multipart_file_name.h @@ -54,7 +54,7 @@ class MultiPartFileName_NoDictElement : public Variable { void evaluate(Transaction *transaction, Rule *rule, std::vector *l) override { - transaction->m_variableMultipartFileName.resolve(l); + transaction->m_variableMultipartFileName.resolve(l, m_keyExclusion); } }; @@ -69,7 +69,7 @@ class MultiPartFileName_DictElementRegexp : public Variable { Rule *rule, std::vector *l) override { transaction->m_variableMultipartFileName.resolveRegularExpression( - &m_r, l); + &m_r, l, m_keyExclusion); } Utils::Regex m_r; diff --git a/src/variables/multipart_name.h b/src/variables/multipart_name.h index e1edfaac..42072395 100644 --- a/src/variables/multipart_name.h +++ b/src/variables/multipart_name.h @@ -54,7 +54,7 @@ class MultiPartName_NoDictElement : public Variable { void evaluate(Transaction *transaction, Rule *rule, std::vector *l) override { - transaction->m_variableMultipartName.resolve(l); + transaction->m_variableMultipartName.resolve(l, m_keyExclusion); } }; @@ -69,7 +69,7 @@ class MultiPartName_DictElementRegexp : public Variable { Rule *rule, std::vector *l) override { transaction->m_variableMultipartName.resolveRegularExpression( - &m_r, l); + &m_r, l, m_keyExclusion); } Utils::Regex m_r; diff --git a/src/variables/request_cookies.h b/src/variables/request_cookies.h index 772e8259..6bd28b89 100644 --- a/src/variables/request_cookies.h +++ b/src/variables/request_cookies.h @@ -54,7 +54,7 @@ class RequestCookies_NoDictElement : public Variable { void evaluate(Transaction *transaction, Rule *rule, std::vector *l) override { - transaction->m_variableRequestCookies.resolve(l); + transaction->m_variableRequestCookies.resolve(l, m_keyExclusion); } }; @@ -63,13 +63,15 @@ class RequestCookies_DictElementRegexp : public Variable { public: explicit RequestCookies_DictElementRegexp(std::string dictElement) : Variable("REQUEST_COOKIES:regex(" + dictElement + ")"), - m_r(dictElement) { } + m_r(dictElement) { + m_regex = dictElement; + } void evaluate(Transaction *transaction, Rule *rule, std::vector *l) override { transaction->m_variableRequestCookies.resolveRegularExpression( - &m_r, l); + &m_r, l, m_keyExclusion); } Utils::Regex m_r; diff --git a/src/variables/request_cookies_names.h b/src/variables/request_cookies_names.h index 4574ad59..b98ced66 100644 --- a/src/variables/request_cookies_names.h +++ b/src/variables/request_cookies_names.h @@ -54,7 +54,7 @@ class RequestCookiesNames_NoDictElement : public Variable { void evaluate(Transaction *transaction, Rule *rule, std::vector *l) override { - transaction->m_variableRequestCookiesNames.resolve(l); + transaction->m_variableRequestCookiesNames.resolve(l, m_keyExclusion); } }; @@ -69,7 +69,7 @@ class RequestCookiesNames_DictElementRegexp : public Variable { Rule *rule, std::vector *l) override { transaction->m_variableRequestCookiesNames.resolveRegularExpression( - &m_r, l); + &m_r, l, m_keyExclusion); } Utils::Regex m_r; diff --git a/src/variables/request_headers.h b/src/variables/request_headers.h index 93fd5cd4..1a7e749a 100644 --- a/src/variables/request_headers.h +++ b/src/variables/request_headers.h @@ -54,7 +54,7 @@ class RequestHeaders_NoDictElement : public Variable { void evaluate(Transaction *transaction, Rule *rule, std::vector *l) override { - transaction->m_variableRequestHeaders.resolve(l); + transaction->m_variableRequestHeaders.resolve(l, m_keyExclusion); } }; @@ -69,7 +69,7 @@ class RequestHeaders_DictElementRegexp : public Variable { Rule *rule, std::vector *l) override { transaction->m_variableRequestHeaders.resolveRegularExpression( - &m_r, l); + &m_r, l, m_keyExclusion); } Utils::Regex m_r; diff --git a/src/variables/request_headers_names.h b/src/variables/request_headers_names.h index 6c211ede..9e0672fc 100644 --- a/src/variables/request_headers_names.h +++ b/src/variables/request_headers_names.h @@ -53,7 +53,7 @@ class RequestHeadersNames_NoDictElement : public Variable { void evaluate(Transaction *transaction, Rule *rule, std::vector *l) override { - transaction->m_variableRequestHeadersNames.resolve(l); + transaction->m_variableRequestHeadersNames.resolve(l, m_keyExclusion); } }; @@ -67,7 +67,7 @@ class RequestHeadersNames_DictElementRegexp : public Variable { Rule *rule, std::vector *l) override { transaction->m_variableRequestHeadersNames.resolveRegularExpression( - &m_r, l); + &m_r, l, m_keyExclusion); } Utils::Regex m_r; diff --git a/src/variables/resource.h b/src/variables/resource.h index bec9c753..749043d0 100644 --- a/src/variables/resource.h +++ b/src/variables/resource.h @@ -14,10 +14,11 @@ */ #include -#include -#include #include +#include +#include #include +#include #ifndef SRC_VARIABLES_RESOURCE_H_ #define SRC_VARIABLES_RESOURCE_H_ @@ -42,7 +43,7 @@ class Resource_DictElement : public Variable { std::vector *l) override { t->m_collections.m_resource_collection->resolveMultiMatches( m_name, t->m_collections.m_resource_collection_key, - t->m_rules->m_secWebAppId.m_value, l); + t->m_rules->m_secWebAppId.m_value, l, m_keyExclusion); } std::string m_dictElement; @@ -59,7 +60,7 @@ class Resource_NoDictElement : public Variable { std::vector *l) override { t->m_collections.m_resource_collection->resolveMultiMatches(m_name, t->m_collections.m_resource_collection_key, - t->m_rules->m_secWebAppId.m_value, l); + t->m_rules->m_secWebAppId.m_value, l, m_keyExclusion); } }; @@ -76,7 +77,7 @@ class Resource_DictElementRegexp : public Variable { std::vector *l) override { t->m_collections.m_resource_collection->resolveRegularExpression( m_dictElement, t->m_collections.m_resource_collection_key, - t->m_rules->m_secWebAppId.m_value, l); + t->m_rules->m_secWebAppId.m_value, l, m_keyExclusion); } Utils::Regex m_r; @@ -97,7 +98,7 @@ class Resource_DynamicElement : public Variable { t->m_collections.m_resource_collection->resolveMultiMatches( string, t->m_collections.m_resource_collection_key, - t->m_rules->m_secWebAppId.m_value, l); + t->m_rules->m_secWebAppId.m_value, l, m_keyExclusion); } void del(Transaction *t, std::string k) { diff --git a/src/variables/response_headers.h b/src/variables/response_headers.h index 3b272b50..d886f0eb 100644 --- a/src/variables/response_headers.h +++ b/src/variables/response_headers.h @@ -54,7 +54,7 @@ class ResponseHeaders_NoDictElement : public Variable { void evaluate(Transaction *transaction, Rule *rule, std::vector *l) override { - transaction->m_variableResponseHeaders.resolve(l); + transaction->m_variableResponseHeaders.resolve(l, m_keyExclusion); } }; @@ -69,7 +69,7 @@ class ResponseHeaders_DictElementRegexp : public Variable { Rule *rule, std::vector *l) override { transaction->m_variableResponseHeaders.resolveRegularExpression( - &m_r, l); + &m_r, l, m_keyExclusion); } Utils::Regex m_r; diff --git a/src/variables/response_headers_names.h b/src/variables/response_headers_names.h index 3f80b0b8..7d2da578 100644 --- a/src/variables/response_headers_names.h +++ b/src/variables/response_headers_names.h @@ -53,7 +53,7 @@ class ResponseHeadersNames_NoDictElement : public Variable { void evaluate(Transaction *transaction, Rule *rule, std::vector *l) override { - transaction->m_variableResponseHeadersNames.resolve(l); + transaction->m_variableResponseHeadersNames.resolve(l, m_keyExclusion); } }; @@ -67,7 +67,7 @@ class ResponseHeadersNames_DictElementRegexp : public Variable { Rule *rule, std::vector *l) override { transaction->m_variableResponseHeadersNames.resolveRegularExpression( - &m_r, l); + &m_r, l, m_keyExclusion); } Utils::Regex m_r; diff --git a/src/variables/rule.h b/src/variables/rule.h index 37809415..1f81a40c 100644 --- a/src/variables/rule.h +++ b/src/variables/rule.h @@ -52,7 +52,7 @@ class Rule_NoDictElement : public Variable { void evaluate(Transaction *transaction, Rule *rule, std::vector *l) override { - transaction->m_variableRule.resolve(l); + transaction->m_variableRule.resolve(l, m_keyExclusion); } }; @@ -67,7 +67,7 @@ class Rule_DictElementRegexp : public Variable { Rule *rule, std::vector *l) override { transaction->m_variableRule.resolveRegularExpression( - &m_r, l); + &m_r, l, m_keyExclusion); } Utils::Regex m_r; diff --git a/src/variables/session.h b/src/variables/session.h index 6b35ce1f..0c663882 100644 --- a/src/variables/session.h +++ b/src/variables/session.h @@ -14,10 +14,11 @@ */ #include -#include -#include #include +#include +#include #include +#include #ifndef SRC_VARIABLES_SESSION_H_ #define SRC_VARIABLES_SESSION_H_ @@ -42,7 +43,7 @@ class Session_DictElement : public Variable { std::vector *l) override { t->m_collections.m_session_collection->resolveMultiMatches( m_name, t->m_collections.m_session_collection_key, - t->m_rules->m_secWebAppId.m_value, l); + t->m_rules->m_secWebAppId.m_value, l, m_keyExclusion); } std::string m_dictElement; @@ -59,7 +60,7 @@ class Session_NoDictElement : public Variable { std::vector *l) override { t->m_collections.m_session_collection->resolveMultiMatches("", t->m_collections.m_session_collection_key, - t->m_rules->m_secWebAppId.m_value, l); + t->m_rules->m_secWebAppId.m_value, l, m_keyExclusion); } }; @@ -74,9 +75,9 @@ class Session_DictElementRegexp : public Variable { void evaluate(Transaction *t, Rule *rule, std::vector *l) override { - t->m_collections.m_session_collection->resolveRegularExpression(m_dictElement, - t->m_collections.m_session_collection_key, - t->m_rules->m_secWebAppId.m_value, l); + t->m_collections.m_session_collection->resolveRegularExpression( + m_dictElement, t->m_collections.m_session_collection_key, + t->m_rules->m_secWebAppId.m_value, l, m_keyExclusion); } Utils::Regex m_r; @@ -97,7 +98,7 @@ class Session_DynamicElement : public Variable { t->m_collections.m_session_collection->resolveMultiMatches( string, t->m_collections.m_session_collection_key, - t->m_rules->m_secWebAppId.m_value, l); + t->m_rules->m_secWebAppId.m_value, l, m_keyExclusion); } void del(Transaction *t, std::string k) { diff --git a/src/variables/tx.h b/src/variables/tx.h index 02b5265d..01c405bf 100644 --- a/src/variables/tx.h +++ b/src/variables/tx.h @@ -18,6 +18,7 @@ #include #include #include +#include #ifndef SRC_VARIABLES_TX_H_ #define SRC_VARIABLES_TX_H_ @@ -41,7 +42,7 @@ class Tx_DictElement : public Variable { Rule *rule, std::vector *l) override { t->m_collections.m_tx_collection->resolveMultiMatches( - m_name, l); + m_name, l, m_keyExclusion); } std::string m_dictElement; @@ -56,7 +57,8 @@ class Tx_NoDictElement : public Variable { void evaluate(Transaction *t, Rule *rule, std::vector *l) override { - t->m_collections.m_tx_collection->resolveMultiMatches("", l); + t->m_collections.m_tx_collection->resolveMultiMatches("", l, + m_keyExclusion); } }; @@ -72,7 +74,7 @@ class Tx_DictElementRegexp : public Variable { Rule *rule, std::vector *l) override { t->m_collections.m_tx_collection->resolveRegularExpression( - m_dictElement, l); + m_dictElement, l, m_keyExclusion); } Utils::Regex m_r; @@ -90,7 +92,8 @@ class Tx_DynamicElement : public Variable { Rule *rule, std::vector *l) override { std::string string = m_string->evaluate(t); - t->m_collections.m_tx_collection->resolveMultiMatches(string, l); + t->m_collections.m_tx_collection->resolveMultiMatches(string, l, + m_keyExclusion); } void del(Transaction *t, std::string k) { diff --git a/src/variables/user.h b/src/variables/user.h index a752be53..a5ec4c65 100644 --- a/src/variables/user.h +++ b/src/variables/user.h @@ -14,10 +14,11 @@ */ #include -#include -#include #include +#include +#include #include +#include #ifndef SRC_VARIABLES_USER_H_ #define SRC_VARIABLES_USER_H_ @@ -42,7 +43,7 @@ class User_DictElement : public Variable { std::vector *l) override { t->m_collections.m_user_collection->resolveMultiMatches( m_name, t->m_collections.m_user_collection_key, - t->m_rules->m_secWebAppId.m_value, l); + t->m_rules->m_secWebAppId.m_value, l, m_keyExclusion); } std::string m_dictElement; @@ -59,7 +60,7 @@ class User_NoDictElement : public Variable { std::vector *l) override { t->m_collections.m_user_collection->resolveMultiMatches(m_name, t->m_collections.m_user_collection_key, - t->m_rules->m_secWebAppId.m_value, l); + t->m_rules->m_secWebAppId.m_value, l, m_keyExclusion); } }; @@ -76,7 +77,7 @@ class User_DictElementRegexp : public Variable { std::vector *l) override { t->m_collections.m_user_collection->resolveRegularExpression( m_dictElement, t->m_collections.m_user_collection_key, - t->m_rules->m_secWebAppId.m_value, l); + t->m_rules->m_secWebAppId.m_value, l, m_keyExclusion); } Utils::Regex m_r; @@ -97,7 +98,7 @@ class User_DynamicElement : public Variable { t->m_collections.m_user_collection->resolveMultiMatches( string, t->m_collections.m_user_collection_key, - t->m_rules->m_secWebAppId.m_value, l); + t->m_rules->m_secWebAppId.m_value, l, m_keyExclusion); } void del(Transaction *t, std::string k) { diff --git a/src/variables/variable.cc b/src/variables/variable.cc index 283cdb80..1320a4f1 100644 --- a/src/variables/variable.cc +++ b/src/variables/variable.cc @@ -32,7 +32,8 @@ Variable::Variable(std::string name) : m_name(name), m_collectionName(""), m_isExclusion(false), - m_isCount(false) { + m_isCount(false), + m_regex("") { size_t a = m_name.find(":"); if (a == std::string::npos) { a = m_name.find("."); @@ -40,7 +41,8 @@ Variable::Variable(std::string name) if (a != std::string::npos) { m_collectionName = utils::string::toupper(std::string(m_name, 0, a)); m_name = std::string(m_name, a + 1, m_name.size()); - m_fullName = std::make_shared(m_collectionName + ":" + m_name); + m_fullName = std::make_shared(m_collectionName + + ":" + m_name); } else { m_fullName = std::make_shared(m_name); m_collectionName = m_name; @@ -49,6 +51,9 @@ Variable::Variable(std::string name) } + + + std::string Variable::to_s( std::vector *variables) { std::string ret; diff --git a/src/variables/variable.h b/src/variables/variable.h index 66262545..89c97a45 100644 --- a/src/variables/variable.h +++ b/src/variables/variable.h @@ -13,12 +13,12 @@ * */ -#include -#include -#include -#include -#include #include +#include +#include +#include +#include +#include #include "modsecurity/transaction.h" #include "modsecurity/rule.h" @@ -35,6 +35,55 @@ class Transaction; namespace Variables { +class KeyExclusion { + public: + virtual bool match(std::string &a) = 0; +}; + + +// FIXME: use pre built regex. +class KeyExclusionRegex : public KeyExclusion { + public: + KeyExclusionRegex(std::string &re) + : m_re(re) { }; + + bool match(std::string &a) override { + return m_re.searchAll(a).size() > 0; + } + + Utils::Regex m_re; +}; + + +class KeyExclusionString : public KeyExclusion { + public: + KeyExclusionString(std::string &a) + : m_key(utils::string::toupper(a)) { }; + +bool match(std::string &a) override { + return a.size() == m_key.size() && std::equal(a.begin(), a.end(), m_key.begin(), + [](char aa, char bb) { + return (char) toupper(aa) == (char) bb; + }); + } + + std::string m_key; +}; + + +class KeyExclusions : public std::deque> { + public: + bool toOmit(std::string a) { + for (auto &z : *this) { + if (z->match(a)) { + return true; + } + } + return false; + } +}; + + class Variable { public: explicit Variable(std::string _name); @@ -54,6 +103,34 @@ class Variable { }); } + + bool inline belongsToCollection(Variable *var) { + return m_collectionName.size() == var->m_collectionName.size() + && std::equal(m_collectionName.begin(), m_collectionName.end(), var->m_collectionName.begin(), + [](char aa, char bb) { + return toupper(aa) == bb; + }); + } + + + void inline addsKeyExclusion(Variable *v) { + if (v->m_regex.empty()) { + std::unique_ptr r(new KeyExclusionString(v->m_name)); + m_keyExclusion.push_back(std::move(r)); + } else { + std::unique_ptr r(new KeyExclusionRegex(v->m_regex)); + m_keyExclusion.push_back(std::move(r)); + } + } + + + bool operator==(const Variable& b) { + return m_collectionName == b.m_collectionName && + m_name == b.m_name && + *m_fullName == *b.m_fullName; + } + + static void stringMatchResolveMulti(Transaction *t, const std::string &variable, std::vector *l) { @@ -425,6 +502,9 @@ class Variable { std::string m_name; std::string m_collectionName; std::shared_ptr m_fullName; + std::string m_regex; + + KeyExclusions m_keyExclusion; bool m_isExclusion; bool m_isCount; @@ -437,6 +517,7 @@ class VariableModificatorExclusion : public Variable { : Variable(*var->m_fullName.get()), m_var(std::move(var)) { m_isExclusion = true; + m_regex = m_var->m_regex; } void evaluate(Transaction *t, diff --git a/src/variables/xml.cc b/src/variables/xml.cc index 8531de16..1651ff50 100644 --- a/src/variables/xml.cc +++ b/src/variables/xml.cc @@ -137,8 +137,10 @@ void XML::evaluate(Transaction *t, std::string *a = new std::string(content); VariableValue *var = new VariableValue(m_fullName, a); + if (!m_keyExclusion.toOmit(*m_fullName)) { + l->push_back(var); + } delete a; - l->push_back(var); xmlFree(content); } } diff --git a/test/test-cases/regression/issue-1831.json b/test/test-cases/regression/issue-1831.json index c884d6f9..6ebd495c 100644 --- a/test/test-cases/regression/issue-1831.json +++ b/test/test-cases/regression/issue-1831.json @@ -3,7 +3,7 @@ "enabled": 1, "version_min": 209000, "version_max": -1, - "title": "Invalid actions break CRS 3.1 on rule 912160", + "title": "Invalid actions break CRS 3.1 on rule 912160 - 1", "url": "https:\/\/github.com\/SpiderLabs\/ModSecurity\/issues\/1830", "client": { "ip": "200.249.12.31", @@ -50,7 +50,7 @@ "enabled": 1, "version_min": 209000, "version_max": -1, - "title": "Invalid actions break CRS 3.1 on rule 912160", + "title": "Invalid actions break CRS 3.1 on rule 912160 - 2", "url": "https:\/\/github.com\/SpiderLabs\/ModSecurity\/issues\/1830", "client": { "ip": "200.249.12.31", @@ -100,7 +100,7 @@ "enabled": 1, "version_min": 209000, "version_max": -1, - "title": "Invalid actions break CRS 3.1 on rule 912160", + "title": "Invalid actions break CRS 3.1 on rule 912160 - 3", "url": "https:\/\/github.com\/SpiderLabs\/ModSecurity\/issues\/1830", "client": { "ip": "200.249.12.31", @@ -149,7 +149,7 @@ "enabled": 1, "version_min": 209000, "version_max": -1, - "title": "Invalid actions break CRS 3.1 on rule 912160", + "title": "Invalid actions break CRS 3.1 on rule 912160 - 4", "url": "https:\/\/github.com\/SpiderLabs\/ModSecurity\/issues\/1830", "client": { "ip": "200.249.12.31", diff --git a/test/test-cases/regression/variable-variation-exclusion.json b/test/test-cases/regression/variable-variation-exclusion.json index eb349222..91098b1a 100644 --- a/test/test-cases/regression/variable-variation-exclusion.json +++ b/test/test-cases/regression/variable-variation-exclusion.json @@ -48,12 +48,13 @@ }, "expected":{ "audit_log":"", - "debug_log":"Variable: REQUEST_HEADERS:Accept is part of the exclusion list, skipping...", - "error_log":"" + "debug_log":"", + "error_log":"", + "http_code":200 }, "rules":[ "SecRuleEngine On", - "SecRule REQUEST_HEADERS|!REQUEST_HEADERS:Accept|!REMOTE_HOST \"@contains test \" \"id:1,t:lowercase,t:none\"" + "SecRule REQUEST_HEADERS|!REQUEST_HEADERS:Accept|!REMOTE_HOST \"@contains html\" \"id:1,t:lowercase,t:none,block,deny,status:300\"" ] }, { @@ -105,12 +106,13 @@ }, "expected":{ "audit_log":"", - "debug_log":"Variable: REQUEST_HEADERS:Accept-Encoding is part of the exclusion list, skipping...", - "error_log":"" + "debug_log":"", + "error_log":"", + "http_code": 200 }, "rules":[ "SecRuleEngine On", - "SecRule REQUEST_HEADERS|!REQUEST_HEADERS \"@contains test \" \"id:1,t:lowercase,t:none\"" + "SecRule REQUEST_HEADERS|!REQUEST_HEADERS \"@contains html\" \"id:1,t:lowercase,t:none,block,deny,status:300\"" ] } ]