Blame src/parser.c

Packit Service 466431
/* A Bison parser, made by GNU Bison 3.0.4.  */
Packit Service 466431
Packit Service 466431
/* Bison implementation for Yacc-like parsers in C
Packit Service 466431
Packit Service 466431
   Copyright (C) 1984, 1989-1990, 2000-2015 Free Software Foundation, Inc.
Packit Service 466431
Packit Service 466431
   This program is free software: you can redistribute it and/or modify
Packit Service 466431
   it under the terms of the GNU General Public License as published by
Packit Service 466431
   the Free Software Foundation, either version 3 of the License, or
Packit Service 466431
   (at your option) any later version.
Packit Service 466431
Packit Service 466431
   This program is distributed in the hope that it will be useful,
Packit Service 466431
   but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit Service 466431
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit Service 466431
   GNU General Public License for more details.
Packit Service 466431
Packit Service 466431
   You should have received a copy of the GNU General Public License
Packit Service 466431
   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
Packit Service 466431
Packit Service 466431
/* As a special exception, you may create a larger work that contains
Packit Service 466431
   part or all of the Bison parser skeleton and distribute that work
Packit Service 466431
   under terms of your choice, so long as that work isn't itself a
Packit Service 466431
   parser generator using the skeleton or a modified version thereof
Packit Service 466431
   as a parser skeleton.  Alternatively, if you modify or redistribute
Packit Service 466431
   the parser skeleton itself, you may (at your option) remove this
Packit Service 466431
   special exception, which will cause the skeleton and the resulting
Packit Service 466431
   Bison output files to be licensed under the GNU General Public
Packit Service 466431
   License without this special exception.
Packit Service 466431
Packit Service 466431
   This special exception was added by the Free Software Foundation in
Packit Service 466431
   version 2.2 of Bison.  */
Packit Service 466431
Packit Service 466431
/* C LALR(1) parser skeleton written by Richard Stallman, by
Packit Service 466431
   simplifying the original so-called "semantic" parser.  */
Packit Service 466431
Packit Service 466431
/* All symbols defined below should begin with yy or YY, to avoid
Packit Service 466431
   infringing on user name space.  This should be done even for local
Packit Service 466431
   variables, as they might otherwise be expanded by user macros.
Packit Service 466431
   There are some unavoidable exceptions within include files to
Packit Service 466431
   define necessary library symbols; they are noted "INFRINGES ON
Packit Service 466431
   USER NAME SPACE" below.  */
Packit Service 466431
Packit Service 466431
/* Identify Bison output.  */
Packit Service 466431
#define YYBISON 1
Packit Service 466431
Packit Service 466431
/* Bison version.  */
Packit Service 466431
#define YYBISON_VERSION "3.0.4"
Packit Service 466431
Packit Service 466431
/* Skeleton name.  */
Packit Service 466431
#define YYSKELETON_NAME "yacc.c"
Packit Service 466431
Packit Service 466431
/* Pure parsers.  */
Packit Service 466431
#define YYPURE 0
Packit Service 466431
Packit Service 466431
/* Push parsers.  */
Packit Service 466431
#define YYPUSH 0
Packit Service 466431
Packit Service 466431
/* Pull parsers.  */
Packit Service 466431
#define YYPULL 1
Packit Service 466431
Packit Service 466431
Packit Service 466431
Packit Service 466431
Packit Service 466431
/* Copy the first part of user declarations.  */
Packit Service 466431
#line 14 "parser.y" /* yacc.c:339  */
Packit Service 466431
Packit Service 466431
#include <stdio.h>
Packit Service 466431
#include <stdlib.h>
Packit Service 466431
#include <string.h>
Packit Service 466431
#include <apr_base64.h>
Packit Service 466431
int yylex(void);
Packit Service 466431
typedef struct yy_buffer_state * YY_BUFFER_STATE;
Packit Service 466431
extern void yyerror(const char **keys, const char **vals,
Packit Service 466431
                    int *status, const char *s);
Packit Service 466431
extern int yyparse(const char **keys, const char **vals, int *status);
Packit Service 466431
extern YY_BUFFER_STATE yy_scan_string(char * str);
Packit Service 466431
extern void yy_delete_buffer(YY_BUFFER_STATE buffer);
Packit Service 466431
static size_t b64_len(const char *val);
Packit Service 466431
static char *b64_enc(const char *val, size_t len);
Packit Service 466431
Packit Service 466431
#line 82 "parser.c" /* yacc.c:339  */
Packit Service 466431
Packit Service 466431
# ifndef YY_NULLPTR
Packit Service 466431
#  if defined __cplusplus && 201103L <= __cplusplus
Packit Service 466431
#   define YY_NULLPTR nullptr
Packit Service 466431
#  else
Packit Service 466431
#   define YY_NULLPTR 0
Packit Service 466431
#  endif
Packit Service 466431
# endif
Packit Service 466431
Packit Service 466431
/* Enabling verbose error messages.  */
Packit Service 466431
#ifdef YYERROR_VERBOSE
Packit Service 466431
# undef YYERROR_VERBOSE
Packit Service 466431
# define YYERROR_VERBOSE 1
Packit Service 466431
#else
Packit Service 466431
# define YYERROR_VERBOSE 0
Packit Service 466431
#endif
Packit Service 466431
Packit Service 466431
/* In a future release of Bison, this section will be replaced
Packit Service 466431
   by #include "y.tab.h".  */
Packit Service 466431
#ifndef YY_YY_PARSER_H_INCLUDED
Packit Service 466431
# define YY_YY_PARSER_H_INCLUDED
Packit Service 466431
/* Debug traces.  */
Packit Service 466431
#ifndef YYDEBUG
Packit Service 466431
# define YYDEBUG 0
Packit Service 466431
#endif
Packit Service 466431
#if YYDEBUG
Packit Service 466431
extern int yydebug;
Packit Service 466431
#endif
Packit Service 466431
Packit Service 466431
/* Token type.  */
Packit Service 466431
#ifndef YYTOKENTYPE
Packit Service 466431
# define YYTOKENTYPE
Packit Service 466431
  enum yytokentype
Packit Service 466431
  {
Packit Service 466431
    LPAREN = 258,
Packit Service 466431
    RPAREN = 259,
Packit Service 466431
    SPACE = 260,
Packit Service 466431
    OR = 261,
Packit Service 466431
    AND = 262,
Packit Service 466431
    EQUAL = 263,
Packit Service 466431
    EQUALBIN = 264,
Packit Service 466431
    AST = 265,
Packit Service 466431
    STRING = 266,
Packit Service 466431
    INT = 267
Packit Service 466431
  };
Packit Service 466431
#endif
Packit Service 466431
/* Tokens.  */
Packit Service 466431
#define LPAREN 258
Packit Service 466431
#define RPAREN 259
Packit Service 466431
#define SPACE 260
Packit Service 466431
#define OR 261
Packit Service 466431
#define AND 262
Packit Service 466431
#define EQUAL 263
Packit Service 466431
#define EQUALBIN 264
Packit Service 466431
#define AST 265
Packit Service 466431
#define STRING 266
Packit Service 466431
#define INT 267
Packit Service 466431
Packit Service 466431
/* Value type.  */
Packit Service 466431
#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
Packit Service 466431
Packit Service 466431
union YYSTYPE
Packit Service 466431
{
Packit Service 466431
#line 30 "parser.y" /* yacc.c:355  */
Packit Service 466431
Packit Service 466431
    char *sval;
Packit Service 466431
    int ival;
Packit Service 466431
Packit Service 466431
#line 151 "parser.c" /* yacc.c:355  */
Packit Service 466431
};
Packit Service 466431
Packit Service 466431
typedef union YYSTYPE YYSTYPE;
Packit Service 466431
# define YYSTYPE_IS_TRIVIAL 1
Packit Service 466431
# define YYSTYPE_IS_DECLARED 1
Packit Service 466431
#endif
Packit Service 466431
Packit Service 466431
Packit Service 466431
extern YYSTYPE yylval;
Packit Service 466431
Packit Service 466431
int yyparse (const char **keys, const char **vals, int *status);
Packit Service 466431
Packit Service 466431
#endif /* !YY_YY_PARSER_H_INCLUDED  */
Packit Service 466431
Packit Service 466431
/* Copy the second part of user declarations.  */
Packit Service 466431
Packit Service 466431
#line 168 "parser.c" /* yacc.c:358  */
Packit Service 466431
Packit Service 466431
#ifdef short
Packit Service 466431
# undef short
Packit Service 466431
#endif
Packit Service 466431
Packit Service 466431
#ifdef YYTYPE_UINT8
Packit Service 466431
typedef YYTYPE_UINT8 yytype_uint8;
Packit Service 466431
#else
Packit Service 466431
typedef unsigned char yytype_uint8;
Packit Service 466431
#endif
Packit Service 466431
Packit Service 466431
#ifdef YYTYPE_INT8
Packit Service 466431
typedef YYTYPE_INT8 yytype_int8;
Packit Service 466431
#else
Packit Service 466431
typedef signed char yytype_int8;
Packit Service 466431
#endif
Packit Service 466431
Packit Service 466431
#ifdef YYTYPE_UINT16
Packit Service 466431
typedef YYTYPE_UINT16 yytype_uint16;
Packit Service 466431
#else
Packit Service 466431
typedef unsigned short int yytype_uint16;
Packit Service 466431
#endif
Packit Service 466431
Packit Service 466431
#ifdef YYTYPE_INT16
Packit Service 466431
typedef YYTYPE_INT16 yytype_int16;
Packit Service 466431
#else
Packit Service 466431
typedef short int yytype_int16;
Packit Service 466431
#endif
Packit Service 466431
Packit Service 466431
#ifndef YYSIZE_T
Packit Service 466431
# ifdef __SIZE_TYPE__
Packit Service 466431
#  define YYSIZE_T __SIZE_TYPE__
Packit Service 466431
# elif defined size_t
Packit Service 466431
#  define YYSIZE_T size_t
Packit Service 466431
# elif ! defined YYSIZE_T
Packit Service 466431
#  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
Packit Service 466431
#  define YYSIZE_T size_t
Packit Service 466431
# else
Packit Service 466431
#  define YYSIZE_T unsigned int
Packit Service 466431
# endif
Packit Service 466431
#endif
Packit Service 466431
Packit Service 466431
#define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
Packit Service 466431
Packit Service 466431
#ifndef YY_
Packit Service 466431
# if defined YYENABLE_NLS && YYENABLE_NLS
Packit Service 466431
#  if ENABLE_NLS
Packit Service 466431
#   include <libintl.h> /* INFRINGES ON USER NAME SPACE */
Packit Service 466431
#   define YY_(Msgid) dgettext ("bison-runtime", Msgid)
Packit Service 466431
#  endif
Packit Service 466431
# endif
Packit Service 466431
# ifndef YY_
Packit Service 466431
#  define YY_(Msgid) Msgid
Packit Service 466431
# endif
Packit Service 466431
#endif
Packit Service 466431
Packit Service 466431
#ifndef YY_ATTRIBUTE
Packit Service 466431
# if (defined __GNUC__                                               \
Packit Service 466431
      && (2 < __GNUC__ || (__GNUC__ == 2 && 96 <= __GNUC_MINOR__)))  \
Packit Service 466431
     || defined __SUNPRO_C && 0x5110 <= __SUNPRO_C
Packit Service 466431
#  define YY_ATTRIBUTE(Spec) __attribute__(Spec)
Packit Service 466431
# else
Packit Service 466431
#  define YY_ATTRIBUTE(Spec) /* empty */
Packit Service 466431
# endif
Packit Service 466431
#endif
Packit Service 466431
Packit Service 466431
#ifndef YY_ATTRIBUTE_PURE
Packit Service 466431
# define YY_ATTRIBUTE_PURE   YY_ATTRIBUTE ((__pure__))
Packit Service 466431
#endif
Packit Service 466431
Packit Service 466431
#ifndef YY_ATTRIBUTE_UNUSED
Packit Service 466431
# define YY_ATTRIBUTE_UNUSED YY_ATTRIBUTE ((__unused__))
Packit Service 466431
#endif
Packit Service 466431
Packit Service 466431
#if !defined _Noreturn \
Packit Service 466431
     && (!defined __STDC_VERSION__ || __STDC_VERSION__ < 201112)
Packit Service 466431
# if defined _MSC_VER && 1200 <= _MSC_VER
Packit Service 466431
#  define _Noreturn __declspec (noreturn)
Packit Service 466431
# else
Packit Service 466431
#  define _Noreturn YY_ATTRIBUTE ((__noreturn__))
Packit Service 466431
# endif
Packit Service 466431
#endif
Packit Service 466431
Packit Service 466431
/* Suppress unused-variable warnings by "using" E.  */
Packit Service 466431
#if ! defined lint || defined __GNUC__
Packit Service 466431
# define YYUSE(E) ((void) (E))
Packit Service 466431
#else
Packit Service 466431
# define YYUSE(E) /* empty */
Packit Service 466431
#endif
Packit Service 466431
Packit Service 466431
#if defined __GNUC__ && 407 <= __GNUC__ * 100 + __GNUC_MINOR__
Packit Service 466431
/* Suppress an incorrect diagnostic about yylval being uninitialized.  */
Packit Service 466431
# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
Packit Service 466431
    _Pragma ("GCC diagnostic push") \
Packit Service 466431
    _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")\
Packit Service 466431
    _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"")
Packit Service 466431
# define YY_IGNORE_MAYBE_UNINITIALIZED_END \
Packit Service 466431
    _Pragma ("GCC diagnostic pop")
Packit Service 466431
#else
Packit Service 466431
# define YY_INITIAL_VALUE(Value) Value
Packit Service 466431
#endif
Packit Service 466431
#ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
Packit Service 466431
# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
Packit Service 466431
# define YY_IGNORE_MAYBE_UNINITIALIZED_END
Packit Service 466431
#endif
Packit Service 466431
#ifndef YY_INITIAL_VALUE
Packit Service 466431
# define YY_INITIAL_VALUE(Value) /* Nothing. */
Packit Service 466431
#endif
Packit Service 466431
Packit Service 466431
Packit Service 466431
#if ! defined yyoverflow || YYERROR_VERBOSE
Packit Service 466431
Packit Service 466431
/* The parser invokes alloca or malloc; define the necessary symbols.  */
Packit Service 466431
Packit Service 466431
# ifdef YYSTACK_USE_ALLOCA
Packit Service 466431
#  if YYSTACK_USE_ALLOCA
Packit Service 466431
#   ifdef __GNUC__
Packit Service 466431
#    define YYSTACK_ALLOC __builtin_alloca
Packit Service 466431
#   elif defined __BUILTIN_VA_ARG_INCR
Packit Service 466431
#    include <alloca.h> /* INFRINGES ON USER NAME SPACE */
Packit Service 466431
#   elif defined _AIX
Packit Service 466431
#    define YYSTACK_ALLOC __alloca
Packit Service 466431
#   elif defined _MSC_VER
Packit Service 466431
#    include <malloc.h> /* INFRINGES ON USER NAME SPACE */
Packit Service 466431
#    define alloca _alloca
Packit Service 466431
#   else
Packit Service 466431
#    define YYSTACK_ALLOC alloca
Packit Service 466431
#    if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS
Packit Service 466431
#     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
Packit Service 466431
      /* Use EXIT_SUCCESS as a witness for stdlib.h.  */
Packit Service 466431
#     ifndef EXIT_SUCCESS
Packit Service 466431
#      define EXIT_SUCCESS 0
Packit Service 466431
#     endif
Packit Service 466431
#    endif
Packit Service 466431
#   endif
Packit Service 466431
#  endif
Packit Service 466431
# endif
Packit Service 466431
Packit Service 466431
# ifdef YYSTACK_ALLOC
Packit Service 466431
   /* Pacify GCC's 'empty if-body' warning.  */
Packit Service 466431
#  define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
Packit Service 466431
#  ifndef YYSTACK_ALLOC_MAXIMUM
Packit Service 466431
    /* The OS might guarantee only one guard page at the bottom of the stack,
Packit Service 466431
       and a page size can be as small as 4096 bytes.  So we cannot safely
Packit Service 466431
       invoke alloca (N) if N exceeds 4096.  Use a slightly smaller number
Packit Service 466431
       to allow for a few compiler-allocated temporary stack slots.  */
Packit Service 466431
#   define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
Packit Service 466431
#  endif
Packit Service 466431
# else
Packit Service 466431
#  define YYSTACK_ALLOC YYMALLOC
Packit Service 466431
#  define YYSTACK_FREE YYFREE
Packit Service 466431
#  ifndef YYSTACK_ALLOC_MAXIMUM
Packit Service 466431
#   define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
Packit Service 466431
#  endif
Packit Service 466431
#  if (defined __cplusplus && ! defined EXIT_SUCCESS \
Packit Service 466431
       && ! ((defined YYMALLOC || defined malloc) \
Packit Service 466431
             && (defined YYFREE || defined free)))
Packit Service 466431
#   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
Packit Service 466431
#   ifndef EXIT_SUCCESS
Packit Service 466431
#    define EXIT_SUCCESS 0
Packit Service 466431
#   endif
Packit Service 466431
#  endif
Packit Service 466431
#  ifndef YYMALLOC
Packit Service 466431
#   define YYMALLOC malloc
Packit Service 466431
#   if ! defined malloc && ! defined EXIT_SUCCESS
Packit Service 466431
void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
Packit Service 466431
#   endif
Packit Service 466431
#  endif
Packit Service 466431
#  ifndef YYFREE
Packit Service 466431
#   define YYFREE free
Packit Service 466431
#   if ! defined free && ! defined EXIT_SUCCESS
Packit Service 466431
void free (void *); /* INFRINGES ON USER NAME SPACE */
Packit Service 466431
#   endif
Packit Service 466431
#  endif
Packit Service 466431
# endif
Packit Service 466431
#endif /* ! defined yyoverflow || YYERROR_VERBOSE */
Packit Service 466431
Packit Service 466431
Packit Service 466431
#if (! defined yyoverflow \
Packit Service 466431
     && (! defined __cplusplus \
Packit Service 466431
         || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
Packit Service 466431
Packit Service 466431
/* A type that is properly aligned for any stack member.  */
Packit Service 466431
union yyalloc
Packit Service 466431
{
Packit Service 466431
  yytype_int16 yyss_alloc;
Packit Service 466431
  YYSTYPE yyvs_alloc;
Packit Service 466431
};
Packit Service 466431
Packit Service 466431
/* The size of the maximum gap between one aligned stack and the next.  */
Packit Service 466431
# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
Packit Service 466431
Packit Service 466431
/* The size of an array large to enough to hold all stacks, each with
Packit Service 466431
   N elements.  */
Packit Service 466431
# define YYSTACK_BYTES(N) \
Packit Service 466431
     ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
Packit Service 466431
      + YYSTACK_GAP_MAXIMUM)
Packit Service 466431
Packit Service 466431
# define YYCOPY_NEEDED 1
Packit Service 466431
Packit Service 466431
/* Relocate STACK from its old location to the new one.  The
Packit Service 466431
   local variables YYSIZE and YYSTACKSIZE give the old and new number of
Packit Service 466431
   elements in the stack, and YYPTR gives the new location of the
Packit Service 466431
   stack.  Advance YYPTR to a properly aligned location for the next
Packit Service 466431
   stack.  */
Packit Service 466431
# define YYSTACK_RELOCATE(Stack_alloc, Stack)                           \
Packit Service 466431
    do                                                                  \
Packit Service 466431
      {                                                                 \
Packit Service 466431
        YYSIZE_T yynewbytes;                                            \
Packit Service 466431
        YYCOPY (&yyptr->Stack_alloc, Stack, yysize);                    \
Packit Service 466431
        Stack = &yyptr->Stack_alloc;                                    \
Packit Service 466431
        yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
Packit Service 466431
        yyptr += yynewbytes / sizeof (*yyptr);                          \
Packit Service 466431
      }                                                                 \
Packit Service 466431
    while (0)
Packit Service 466431
Packit Service 466431
#endif
Packit Service 466431
Packit Service 466431
#if defined YYCOPY_NEEDED && YYCOPY_NEEDED
Packit Service 466431
/* Copy COUNT objects from SRC to DST.  The source and destination do
Packit Service 466431
   not overlap.  */
Packit Service 466431
# ifndef YYCOPY
Packit Service 466431
#  if defined __GNUC__ && 1 < __GNUC__
Packit Service 466431
#   define YYCOPY(Dst, Src, Count) \
Packit Service 466431
      __builtin_memcpy (Dst, Src, (Count) * sizeof (*(Src)))
Packit Service 466431
#  else
Packit Service 466431
#   define YYCOPY(Dst, Src, Count)              \
Packit Service 466431
      do                                        \
Packit Service 466431
        {                                       \
Packit Service 466431
          YYSIZE_T yyi;                         \
Packit Service 466431
          for (yyi = 0; yyi < (Count); yyi++)   \
Packit Service 466431
            (Dst)[yyi] = (Src)[yyi];            \
Packit Service 466431
        }                                       \
Packit Service 466431
      while (0)
Packit Service 466431
#  endif
Packit Service 466431
# endif
Packit Service 466431
#endif /* !YYCOPY_NEEDED */
Packit Service 466431
Packit Service 466431
/* YYFINAL -- State number of the termination state.  */
Packit Service 466431
#define YYFINAL  10
Packit Service 466431
/* YYLAST -- Last index in YYTABLE.  */
Packit Service 466431
#define YYLAST   18
Packit Service 466431
Packit Service 466431
/* YYNTOKENS -- Number of terminals.  */
Packit Service 466431
#define YYNTOKENS  13
Packit Service 466431
/* YYNNTS -- Number of nonterminals.  */
Packit Service 466431
#define YYNNTS  5
Packit Service 466431
/* YYNRULES -- Number of rules.  */
Packit Service 466431
#define YYNRULES  10
Packit Service 466431
/* YYNSTATES -- Number of states.  */
Packit Service 466431
#define YYNSTATES  22
Packit Service 466431
Packit Service 466431
/* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned
Packit Service 466431
   by yylex, with out-of-bounds checking.  */
Packit Service 466431
#define YYUNDEFTOK  2
Packit Service 466431
#define YYMAXUTOK   267
Packit Service 466431
Packit Service 466431
#define YYTRANSLATE(YYX)                                                \
Packit Service 466431
  ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
Packit Service 466431
Packit Service 466431
/* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM
Packit Service 466431
   as returned by yylex, without out-of-bounds checking.  */
Packit Service 466431
static const yytype_uint8 yytranslate[] =
Packit Service 466431
{
Packit Service 466431
       0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
Packit Service 466431
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
Packit Service 466431
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
Packit Service 466431
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
Packit Service 466431
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
Packit Service 466431
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
Packit Service 466431
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
Packit Service 466431
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
Packit Service 466431
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
Packit Service 466431
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
Packit Service 466431
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
Packit Service 466431
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
Packit Service 466431
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
Packit Service 466431
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
Packit Service 466431
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
Packit Service 466431
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
Packit Service 466431
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
Packit Service 466431
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
Packit Service 466431
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
Packit Service 466431
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
Packit Service 466431
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
Packit Service 466431
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
Packit Service 466431
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
Packit Service 466431
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
Packit Service 466431
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
Packit Service 466431
       2,     2,     2,     2,     2,     2,     1,     2,     3,     4,
Packit Service 466431
       5,     6,     7,     8,     9,    10,    11,    12
Packit Service 466431
};
Packit Service 466431
Packit Service 466431
#if YYDEBUG
Packit Service 466431
  /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
Packit Service 466431
static const yytype_uint8 yyrline[] =
Packit Service 466431
{
Packit Service 466431
       0,    53,    53,    59,    60,    63,    68,    71,    76,    97,
Packit Service 466431
     109
Packit Service 466431
};
Packit Service 466431
#endif
Packit Service 466431
Packit Service 466431
#if YYDEBUG || YYERROR_VERBOSE || 0
Packit Service 466431
/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
Packit Service 466431
   First, the terminals, then, starting at YYNTOKENS, nonterminals.  */
Packit Service 466431
static const char *const yytname[] =
Packit Service 466431
{
Packit Service 466431
  "$end", "error", "$undefined", "LPAREN", "RPAREN", "SPACE", "OR", "AND",
Packit Service 466431
  "EQUAL", "EQUALBIN", "AST", "STRING", "INT", "$accept", "expr", "rule",
Packit Service 466431
  "rule_start", "requiredkv", YY_NULLPTR
Packit Service 466431
};
Packit Service 466431
#endif
Packit Service 466431
Packit Service 466431
# ifdef YYPRINT
Packit Service 466431
/* YYTOKNUM[NUM] -- (External) token number corresponding to the
Packit Service 466431
   (internal) symbol number NUM (which must be that of a token).  */
Packit Service 466431
static const yytype_uint16 yytoknum[] =
Packit Service 466431
{
Packit Service 466431
       0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
Packit Service 466431
     265,   266,   267
Packit Service 466431
};
Packit Service 466431
# endif
Packit Service 466431
Packit Service 466431
#define YYPACT_NINF -7
Packit Service 466431
Packit Service 466431
#define yypact_value_is_default(Yystate) \
Packit Service 466431
  (!!((Yystate) == (-7)))
Packit Service 466431
Packit Service 466431
#define YYTABLE_NINF -1
Packit Service 466431
Packit Service 466431
#define yytable_value_is_error(Yytable_value) \
Packit Service 466431
  0
Packit Service 466431
Packit Service 466431
  /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
Packit Service 466431
     STATE-NUM.  */
Packit Service 466431
static const yytype_int8 yypact[] =
Packit Service 466431
{
Packit Service 466431
      -2,    -2,    -6,     4,    -7,     5,    -7,     7,    -5,     2,
Packit Service 466431
      -7,     1,    -7,    -7,    -7,    -7,     9,    10,    -2,    -2,
Packit Service 466431
      -7,    -7
Packit Service 466431
};
Packit Service 466431
Packit Service 466431
  /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
Packit Service 466431
     Performed when YYTABLE does not specify something else to do.  Zero
Packit Service 466431
     means the default is an error.  */
Packit Service 466431
static const yytype_uint8 yydefact[] =
Packit Service 466431
{
Packit Service 466431
       0,     0,     0,     0,     2,     3,     7,     0,     0,     0,
Packit Service 466431
       1,     0,     6,     9,     8,    10,     0,     0,     0,     0,
Packit Service 466431
       5,     4
Packit Service 466431
};
Packit Service 466431
Packit Service 466431
  /* YYPGOTO[NTERM-NUM].  */
Packit Service 466431
static const yytype_int8 yypgoto[] =
Packit Service 466431
{
Packit Service 466431
      -7,    -7,    -1,    -7,    -7
Packit Service 466431
};
Packit Service 466431
Packit Service 466431
  /* YYDEFGOTO[NTERM-NUM].  */
Packit Service 466431
static const yytype_int8 yydefgoto[] =
Packit Service 466431
{
Packit Service 466431
      -1,     3,     4,     5,     6
Packit Service 466431
};
Packit Service 466431
Packit Service 466431
  /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
Packit Service 466431
     positive, shift that token.  If negative, reduce the rule whose
Packit Service 466431
     number is the opposite.  If YYTABLE_NINF, syntax error.  */
Packit Service 466431
static const yytype_uint8 yytable[] =
Packit Service 466431
{
Packit Service 466431
       7,     1,     8,     9,    10,    13,    14,    16,    17,     2,
Packit Service 466431
      11,    12,     0,    15,    18,    19,     0,    20,    21
Packit Service 466431
};
Packit Service 466431
Packit Service 466431
static const yytype_int8 yycheck[] =
Packit Service 466431
{
Packit Service 466431
       1,     3,     8,     9,     0,    10,    11,     6,     7,    11,
Packit Service 466431
       5,     4,    -1,    11,     5,     5,    -1,    18,    19
Packit Service 466431
};
Packit Service 466431
Packit Service 466431
  /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
Packit Service 466431
     symbol of state STATE-NUM.  */
Packit Service 466431
static const yytype_uint8 yystos[] =
Packit Service 466431
{
Packit Service 466431
       0,     3,    11,    14,    15,    16,    17,    15,     8,     9,
Packit Service 466431
       0,     5,     4,    10,    11,    11,     6,     7,     5,     5,
Packit Service 466431
      15,    15
Packit Service 466431
};
Packit Service 466431
Packit Service 466431
  /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
Packit Service 466431
static const yytype_uint8 yyr1[] =
Packit Service 466431
{
Packit Service 466431
       0,    13,    14,    15,    15,    15,    16,    16,    17,    17,
Packit Service 466431
      17
Packit Service 466431
};
Packit Service 466431
Packit Service 466431
  /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
Packit Service 466431
static const yytype_uint8 yyr2[] =
Packit Service 466431
{
Packit Service 466431
       0,     2,     1,     1,     5,     5,     3,     1,     3,     3,
Packit Service 466431
       3
Packit Service 466431
};
Packit Service 466431
Packit Service 466431
Packit Service 466431
#define yyerrok         (yyerrstatus = 0)
Packit Service 466431
#define yyclearin       (yychar = YYEMPTY)
Packit Service 466431
#define YYEMPTY         (-2)
Packit Service 466431
#define YYEOF           0
Packit Service 466431
Packit Service 466431
#define YYACCEPT        goto yyacceptlab
Packit Service 466431
#define YYABORT         goto yyabortlab
Packit Service 466431
#define YYERROR         goto yyerrorlab
Packit Service 466431
Packit Service 466431
Packit Service 466431
#define YYRECOVERING()  (!!yyerrstatus)
Packit Service 466431
Packit Service 466431
#define YYBACKUP(Token, Value)                                  \
Packit Service 466431
do                                                              \
Packit Service 466431
  if (yychar == YYEMPTY)                                        \
Packit Service 466431
    {                                                           \
Packit Service 466431
      yychar = (Token);                                         \
Packit Service 466431
      yylval = (Value);                                         \
Packit Service 466431
      YYPOPSTACK (yylen);                                       \
Packit Service 466431
      yystate = *yyssp;                                         \
Packit Service 466431
      goto yybackup;                                            \
Packit Service 466431
    }                                                           \
Packit Service 466431
  else                                                          \
Packit Service 466431
    {                                                           \
Packit Service 466431
      yyerror (keys, vals, status, YY_("syntax error: cannot back up")); \
Packit Service 466431
      YYERROR;                                                  \
Packit Service 466431
    }                                                           \
Packit Service 466431
while (0)
Packit Service 466431
Packit Service 466431
/* Error token number */
Packit Service 466431
#define YYTERROR        1
Packit Service 466431
#define YYERRCODE       256
Packit Service 466431
Packit Service 466431
Packit Service 466431
Packit Service 466431
/* Enable debugging if requested.  */
Packit Service 466431
#if YYDEBUG
Packit Service 466431
Packit Service 466431
# ifndef YYFPRINTF
Packit Service 466431
#  include <stdio.h> /* INFRINGES ON USER NAME SPACE */
Packit Service 466431
#  define YYFPRINTF fprintf
Packit Service 466431
# endif
Packit Service 466431
Packit Service 466431
# define YYDPRINTF(Args)                        \
Packit Service 466431
do {                                            \
Packit Service 466431
  if (yydebug)                                  \
Packit Service 466431
    YYFPRINTF Args;                             \
Packit Service 466431
} while (0)
Packit Service 466431
Packit Service 466431
/* This macro is provided for backward compatibility. */
Packit Service 466431
#ifndef YY_LOCATION_PRINT
Packit Service 466431
# define YY_LOCATION_PRINT(File, Loc) ((void) 0)
Packit Service 466431
#endif
Packit Service 466431
Packit Service 466431
Packit Service 466431
# define YY_SYMBOL_PRINT(Title, Type, Value, Location)                    \
Packit Service 466431
do {                                                                      \
Packit Service 466431
  if (yydebug)                                                            \
Packit Service 466431
    {                                                                     \
Packit Service 466431
      YYFPRINTF (stderr, "%s ", Title);                                   \
Packit Service 466431
      yy_symbol_print (stderr,                                            \
Packit Service 466431
                  Type, Value, keys, vals, status); \
Packit Service 466431
      YYFPRINTF (stderr, "\n");                                           \
Packit Service 466431
    }                                                                     \
Packit Service 466431
} while (0)
Packit Service 466431
Packit Service 466431
Packit Service 466431
/*----------------------------------------.
Packit Service 466431
| Print this symbol's value on YYOUTPUT.  |
Packit Service 466431
`----------------------------------------*/
Packit Service 466431
Packit Service 466431
static void
Packit Service 466431
yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, const char **keys, const char **vals, int *status)
Packit Service 466431
{
Packit Service 466431
  FILE *yyo = yyoutput;
Packit Service 466431
  YYUSE (yyo);
Packit Service 466431
  YYUSE (keys);
Packit Service 466431
  YYUSE (vals);
Packit Service 466431
  YYUSE (status);
Packit Service 466431
  if (!yyvaluep)
Packit Service 466431
    return;
Packit Service 466431
# ifdef YYPRINT
Packit Service 466431
  if (yytype < YYNTOKENS)
Packit Service 466431
    YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
Packit Service 466431
# endif
Packit Service 466431
  YYUSE (yytype);
Packit Service 466431
}
Packit Service 466431
Packit Service 466431
Packit Service 466431
/*--------------------------------.
Packit Service 466431
| Print this symbol on YYOUTPUT.  |
Packit Service 466431
`--------------------------------*/
Packit Service 466431
Packit Service 466431
static void
Packit Service 466431
yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, const char **keys, const char **vals, int *status)
Packit Service 466431
{
Packit Service 466431
  YYFPRINTF (yyoutput, "%s %s (",
Packit Service 466431
             yytype < YYNTOKENS ? "token" : "nterm", yytname[yytype]);
Packit Service 466431
Packit Service 466431
  yy_symbol_value_print (yyoutput, yytype, yyvaluep, keys, vals, status);
Packit Service 466431
  YYFPRINTF (yyoutput, ")");
Packit Service 466431
}
Packit Service 466431
Packit Service 466431
/*------------------------------------------------------------------.
Packit Service 466431
| yy_stack_print -- Print the state stack from its BOTTOM up to its |
Packit Service 466431
| TOP (included).                                                   |
Packit Service 466431
`------------------------------------------------------------------*/
Packit Service 466431
Packit Service 466431
static void
Packit Service 466431
yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop)
Packit Service 466431
{
Packit Service 466431
  YYFPRINTF (stderr, "Stack now");
Packit Service 466431
  for (; yybottom <= yytop; yybottom++)
Packit Service 466431
    {
Packit Service 466431
      int yybot = *yybottom;
Packit Service 466431
      YYFPRINTF (stderr, " %d", yybot);
Packit Service 466431
    }
Packit Service 466431
  YYFPRINTF (stderr, "\n");
Packit Service 466431
}
Packit Service 466431
Packit Service 466431
# define YY_STACK_PRINT(Bottom, Top)                            \
Packit Service 466431
do {                                                            \
Packit Service 466431
  if (yydebug)                                                  \
Packit Service 466431
    yy_stack_print ((Bottom), (Top));                           \
Packit Service 466431
} while (0)
Packit Service 466431
Packit Service 466431
Packit Service 466431
/*------------------------------------------------.
Packit Service 466431
| Report that the YYRULE is going to be reduced.  |
Packit Service 466431
`------------------------------------------------*/
Packit Service 466431
Packit Service 466431
static void
Packit Service 466431
yy_reduce_print (yytype_int16 *yyssp, YYSTYPE *yyvsp, int yyrule, const char **keys, const char **vals, int *status)
Packit Service 466431
{
Packit Service 466431
  unsigned long int yylno = yyrline[yyrule];
Packit Service 466431
  int yynrhs = yyr2[yyrule];
Packit Service 466431
  int yyi;
Packit Service 466431
  YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
Packit Service 466431
             yyrule - 1, yylno);
Packit Service 466431
  /* The symbols being reduced.  */
Packit Service 466431
  for (yyi = 0; yyi < yynrhs; yyi++)
Packit Service 466431
    {
Packit Service 466431
      YYFPRINTF (stderr, "   $%d = ", yyi + 1);
Packit Service 466431
      yy_symbol_print (stderr,
Packit Service 466431
                       yystos[yyssp[yyi + 1 - yynrhs]],
Packit Service 466431
                       &(yyvsp[(yyi + 1) - (yynrhs)])
Packit Service 466431
                                              , keys, vals, status);
Packit Service 466431
      YYFPRINTF (stderr, "\n");
Packit Service 466431
    }
Packit Service 466431
}
Packit Service 466431
Packit Service 466431
# define YY_REDUCE_PRINT(Rule)          \
Packit Service 466431
do {                                    \
Packit Service 466431
  if (yydebug)                          \
Packit Service 466431
    yy_reduce_print (yyssp, yyvsp, Rule, keys, vals, status); \
Packit Service 466431
} while (0)
Packit Service 466431
Packit Service 466431
/* Nonzero means print parse trace.  It is left uninitialized so that
Packit Service 466431
   multiple parsers can coexist.  */
Packit Service 466431
int yydebug;
Packit Service 466431
#else /* !YYDEBUG */
Packit Service 466431
# define YYDPRINTF(Args)
Packit Service 466431
# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
Packit Service 466431
# define YY_STACK_PRINT(Bottom, Top)
Packit Service 466431
# define YY_REDUCE_PRINT(Rule)
Packit Service 466431
#endif /* !YYDEBUG */
Packit Service 466431
Packit Service 466431
Packit Service 466431
/* YYINITDEPTH -- initial size of the parser's stacks.  */
Packit Service 466431
#ifndef YYINITDEPTH
Packit Service 466431
# define YYINITDEPTH 200
Packit Service 466431
#endif
Packit Service 466431
Packit Service 466431
/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
Packit Service 466431
   if the built-in stack extension method is used).
Packit Service 466431
Packit Service 466431
   Do not make this value too large; the results are undefined if
Packit Service 466431
   YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
Packit Service 466431
   evaluated with infinite-precision integer arithmetic.  */
Packit Service 466431
Packit Service 466431
#ifndef YYMAXDEPTH
Packit Service 466431
# define YYMAXDEPTH 10000
Packit Service 466431
#endif
Packit Service 466431
Packit Service 466431
Packit Service 466431
#if YYERROR_VERBOSE
Packit Service 466431
Packit Service 466431
# ifndef yystrlen
Packit Service 466431
#  if defined __GLIBC__ && defined _STRING_H
Packit Service 466431
#   define yystrlen strlen
Packit Service 466431
#  else
Packit Service 466431
/* Return the length of YYSTR.  */
Packit Service 466431
static YYSIZE_T
Packit Service 466431
yystrlen (const char *yystr)
Packit Service 466431
{
Packit Service 466431
  YYSIZE_T yylen;
Packit Service 466431
  for (yylen = 0; yystr[yylen]; yylen++)
Packit Service 466431
    continue;
Packit Service 466431
  return yylen;
Packit Service 466431
}
Packit Service 466431
#  endif
Packit Service 466431
# endif
Packit Service 466431
Packit Service 466431
# ifndef yystpcpy
Packit Service 466431
#  if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
Packit Service 466431
#   define yystpcpy stpcpy
Packit Service 466431
#  else
Packit Service 466431
/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
Packit Service 466431
   YYDEST.  */
Packit Service 466431
static char *
Packit Service 466431
yystpcpy (char *yydest, const char *yysrc)
Packit Service 466431
{
Packit Service 466431
  char *yyd = yydest;
Packit Service 466431
  const char *yys = yysrc;
Packit Service 466431
Packit Service 466431
  while ((*yyd++ = *yys++) != '\0')
Packit Service 466431
    continue;
Packit Service 466431
Packit Service 466431
  return yyd - 1;
Packit Service 466431
}
Packit Service 466431
#  endif
Packit Service 466431
# endif
Packit Service 466431
Packit Service 466431
# ifndef yytnamerr
Packit Service 466431
/* Copy to YYRES the contents of YYSTR after stripping away unnecessary
Packit Service 466431
   quotes and backslashes, so that it's suitable for yyerror.  The
Packit Service 466431
   heuristic is that double-quoting is unnecessary unless the string
Packit Service 466431
   contains an apostrophe, a comma, or backslash (other than
Packit Service 466431
   backslash-backslash).  YYSTR is taken from yytname.  If YYRES is
Packit Service 466431
   null, do not copy; instead, return the length of what the result
Packit Service 466431
   would have been.  */
Packit Service 466431
static YYSIZE_T
Packit Service 466431
yytnamerr (char *yyres, const char *yystr)
Packit Service 466431
{
Packit Service 466431
  if (*yystr == '"')
Packit Service 466431
    {
Packit Service 466431
      YYSIZE_T yyn = 0;
Packit Service 466431
      char const *yyp = yystr;
Packit Service 466431
Packit Service 466431
      for (;;)
Packit Service 466431
        switch (*++yyp)
Packit Service 466431
          {
Packit Service 466431
          case '\'':
Packit Service 466431
          case ',':
Packit Service 466431
            goto do_not_strip_quotes;
Packit Service 466431
Packit Service 466431
          case '\\':
Packit Service 466431
            if (*++yyp != '\\')
Packit Service 466431
              goto do_not_strip_quotes;
Packit Service 466431
            /* Fall through.  */
Packit Service 466431
          default:
Packit Service 466431
            if (yyres)
Packit Service 466431
              yyres[yyn] = *yyp;
Packit Service 466431
            yyn++;
Packit Service 466431
            break;
Packit Service 466431
Packit Service 466431
          case '"':
Packit Service 466431
            if (yyres)
Packit Service 466431
              yyres[yyn] = '\0';
Packit Service 466431
            return yyn;
Packit Service 466431
          }
Packit Service 466431
    do_not_strip_quotes: ;
Packit Service 466431
    }
Packit Service 466431
Packit Service 466431
  if (! yyres)
Packit Service 466431
    return yystrlen (yystr);
Packit Service 466431
Packit Service 466431
  return yystpcpy (yyres, yystr) - yyres;
Packit Service 466431
}
Packit Service 466431
# endif
Packit Service 466431
Packit Service 466431
/* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message
Packit Service 466431
   about the unexpected token YYTOKEN for the state stack whose top is
Packit Service 466431
   YYSSP.
Packit Service 466431
Packit Service 466431
   Return 0 if *YYMSG was successfully written.  Return 1 if *YYMSG is
Packit Service 466431
   not large enough to hold the message.  In that case, also set
Packit Service 466431
   *YYMSG_ALLOC to the required number of bytes.  Return 2 if the
Packit Service 466431
   required number of bytes is too large to store.  */
Packit Service 466431
static int
Packit Service 466431
yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
Packit Service 466431
                yytype_int16 *yyssp, int yytoken)
Packit Service 466431
{
Packit Service 466431
  YYSIZE_T yysize0 = yytnamerr (YY_NULLPTR, yytname[yytoken]);
Packit Service 466431
  YYSIZE_T yysize = yysize0;
Packit Service 466431
  enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
Packit Service 466431
  /* Internationalized format string. */
Packit Service 466431
  const char *yyformat = YY_NULLPTR;
Packit Service 466431
  /* Arguments of yyformat. */
Packit Service 466431
  char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
Packit Service 466431
  /* Number of reported tokens (one for the "unexpected", one per
Packit Service 466431
     "expected"). */
Packit Service 466431
  int yycount = 0;
Packit Service 466431
Packit Service 466431
  /* There are many possibilities here to consider:
Packit Service 466431
     - If this state is a consistent state with a default action, then
Packit Service 466431
       the only way this function was invoked is if the default action
Packit Service 466431
       is an error action.  In that case, don't check for expected
Packit Service 466431
       tokens because there are none.
Packit Service 466431
     - The only way there can be no lookahead present (in yychar) is if
Packit Service 466431
       this state is a consistent state with a default action.  Thus,
Packit Service 466431
       detecting the absence of a lookahead is sufficient to determine
Packit Service 466431
       that there is no unexpected or expected token to report.  In that
Packit Service 466431
       case, just report a simple "syntax error".
Packit Service 466431
     - Don't assume there isn't a lookahead just because this state is a
Packit Service 466431
       consistent state with a default action.  There might have been a
Packit Service 466431
       previous inconsistent state, consistent state with a non-default
Packit Service 466431
       action, or user semantic action that manipulated yychar.
Packit Service 466431
     - Of course, the expected token list depends on states to have
Packit Service 466431
       correct lookahead information, and it depends on the parser not
Packit Service 466431
       to perform extra reductions after fetching a lookahead from the
Packit Service 466431
       scanner and before detecting a syntax error.  Thus, state merging
Packit Service 466431
       (from LALR or IELR) and default reductions corrupt the expected
Packit Service 466431
       token list.  However, the list is correct for canonical LR with
Packit Service 466431
       one exception: it will still contain any token that will not be
Packit Service 466431
       accepted due to an error action in a later state.
Packit Service 466431
  */
Packit Service 466431
  if (yytoken != YYEMPTY)
Packit Service 466431
    {
Packit Service 466431
      int yyn = yypact[*yyssp];
Packit Service 466431
      yyarg[yycount++] = yytname[yytoken];
Packit Service 466431
      if (!yypact_value_is_default (yyn))
Packit Service 466431
        {
Packit Service 466431
          /* Start YYX at -YYN if negative to avoid negative indexes in
Packit Service 466431
             YYCHECK.  In other words, skip the first -YYN actions for
Packit Service 466431
             this state because they are default actions.  */
Packit Service 466431
          int yyxbegin = yyn < 0 ? -yyn : 0;
Packit Service 466431
          /* Stay within bounds of both yycheck and yytname.  */
Packit Service 466431
          int yychecklim = YYLAST - yyn + 1;
Packit Service 466431
          int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
Packit Service 466431
          int yyx;
Packit Service 466431
Packit Service 466431
          for (yyx = yyxbegin; yyx < yyxend; ++yyx)
Packit Service 466431
            if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR
Packit Service 466431
                && !yytable_value_is_error (yytable[yyx + yyn]))
Packit Service 466431
              {
Packit Service 466431
                if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
Packit Service 466431
                  {
Packit Service 466431
                    yycount = 1;
Packit Service 466431
                    yysize = yysize0;
Packit Service 466431
                    break;
Packit Service 466431
                  }
Packit Service 466431
                yyarg[yycount++] = yytname[yyx];
Packit Service 466431
                {
Packit Service 466431
                  YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULLPTR, yytname[yyx]);
Packit Service 466431
                  if (! (yysize <= yysize1
Packit Service 466431
                         && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
Packit Service 466431
                    return 2;
Packit Service 466431
                  yysize = yysize1;
Packit Service 466431
                }
Packit Service 466431
              }
Packit Service 466431
        }
Packit Service 466431
    }
Packit Service 466431
Packit Service 466431
  switch (yycount)
Packit Service 466431
    {
Packit Service 466431
# define YYCASE_(N, S)                      \
Packit Service 466431
      case N:                               \
Packit Service 466431
        yyformat = S;                       \
Packit Service 466431
      break
Packit Service 466431
      YYCASE_(0, YY_("syntax error"));
Packit Service 466431
      YYCASE_(1, YY_("syntax error, unexpected %s"));
Packit Service 466431
      YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
Packit Service 466431
      YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s"));
Packit Service 466431
      YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
Packit Service 466431
      YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
Packit Service 466431
# undef YYCASE_
Packit Service 466431
    }
Packit Service 466431
Packit Service 466431
  {
Packit Service 466431
    YYSIZE_T yysize1 = yysize + yystrlen (yyformat);
Packit Service 466431
    if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
Packit Service 466431
      return 2;
Packit Service 466431
    yysize = yysize1;
Packit Service 466431
  }
Packit Service 466431
Packit Service 466431
  if (*yymsg_alloc < yysize)
Packit Service 466431
    {
Packit Service 466431
      *yymsg_alloc = 2 * yysize;
Packit Service 466431
      if (! (yysize <= *yymsg_alloc
Packit Service 466431
             && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM))
Packit Service 466431
        *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM;
Packit Service 466431
      return 1;
Packit Service 466431
    }
Packit Service 466431
Packit Service 466431
  /* Avoid sprintf, as that infringes on the user's name space.
Packit Service 466431
     Don't have undefined behavior even if the translation
Packit Service 466431
     produced a string with the wrong number of "%s"s.  */
Packit Service 466431
  {
Packit Service 466431
    char *yyp = *yymsg;
Packit Service 466431
    int yyi = 0;
Packit Service 466431
    while ((*yyp = *yyformat) != '\0')
Packit Service 466431
      if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount)
Packit Service 466431
        {
Packit Service 466431
          yyp += yytnamerr (yyp, yyarg[yyi++]);
Packit Service 466431
          yyformat += 2;
Packit Service 466431
        }
Packit Service 466431
      else
Packit Service 466431
        {
Packit Service 466431
          yyp++;
Packit Service 466431
          yyformat++;
Packit Service 466431
        }
Packit Service 466431
  }
Packit Service 466431
  return 0;
Packit Service 466431
}
Packit Service 466431
#endif /* YYERROR_VERBOSE */
Packit Service 466431
Packit Service 466431
/*-----------------------------------------------.
Packit Service 466431
| Release the memory associated to this symbol.  |
Packit Service 466431
`-----------------------------------------------*/
Packit Service 466431
Packit Service 466431
static void
Packit Service 466431
yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, const char **keys, const char **vals, int *status)
Packit Service 466431
{
Packit Service 466431
  YYUSE (yyvaluep);
Packit Service 466431
  YYUSE (keys);
Packit Service 466431
  YYUSE (vals);
Packit Service 466431
  YYUSE (status);
Packit Service 466431
  if (!yymsg)
Packit Service 466431
    yymsg = "Deleting";
Packit Service 466431
  YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
Packit Service 466431
Packit Service 466431
  YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
Packit Service 466431
  YYUSE (yytype);
Packit Service 466431
  YY_IGNORE_MAYBE_UNINITIALIZED_END
Packit Service 466431
}
Packit Service 466431
Packit Service 466431
Packit Service 466431
Packit Service 466431
Packit Service 466431
/* The lookahead symbol.  */
Packit Service 466431
int yychar;
Packit Service 466431
Packit Service 466431
/* The semantic value of the lookahead symbol.  */
Packit Service 466431
YYSTYPE yylval;
Packit Service 466431
/* Number of syntax errors so far.  */
Packit Service 466431
int yynerrs;
Packit Service 466431
Packit Service 466431
Packit Service 466431
/*----------.
Packit Service 466431
| yyparse.  |
Packit Service 466431
`----------*/
Packit Service 466431
Packit Service 466431
int
Packit Service 466431
yyparse (const char **keys, const char **vals, int *status)
Packit Service 466431
{
Packit Service 466431
    int yystate;
Packit Service 466431
    /* Number of tokens to shift before error messages enabled.  */
Packit Service 466431
    int yyerrstatus;
Packit Service 466431
Packit Service 466431
    /* The stacks and their tools:
Packit Service 466431
       'yyss': related to states.
Packit Service 466431
       'yyvs': related to semantic values.
Packit Service 466431
Packit Service 466431
       Refer to the stacks through separate pointers, to allow yyoverflow
Packit Service 466431
       to reallocate them elsewhere.  */
Packit Service 466431
Packit Service 466431
    /* The state stack.  */
Packit Service 466431
    yytype_int16 yyssa[YYINITDEPTH];
Packit Service 466431
    yytype_int16 *yyss;
Packit Service 466431
    yytype_int16 *yyssp;
Packit Service 466431
Packit Service 466431
    /* The semantic value stack.  */
Packit Service 466431
    YYSTYPE yyvsa[YYINITDEPTH];
Packit Service 466431
    YYSTYPE *yyvs;
Packit Service 466431
    YYSTYPE *yyvsp;
Packit Service 466431
Packit Service 466431
    YYSIZE_T yystacksize;
Packit Service 466431
Packit Service 466431
  int yyn;
Packit Service 466431
  int yyresult;
Packit Service 466431
  /* Lookahead token as an internal (translated) token number.  */
Packit Service 466431
  int yytoken = 0;
Packit Service 466431
  /* The variables used to return semantic value and location from the
Packit Service 466431
     action routines.  */
Packit Service 466431
  YYSTYPE yyval;
Packit Service 466431
Packit Service 466431
#if YYERROR_VERBOSE
Packit Service 466431
  /* Buffer for error messages, and its allocated size.  */
Packit Service 466431
  char yymsgbuf[128];
Packit Service 466431
  char *yymsg = yymsgbuf;
Packit Service 466431
  YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
Packit Service 466431
#endif
Packit Service 466431
Packit Service 466431
#define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N))
Packit Service 466431
Packit Service 466431
  /* The number of symbols on the RHS of the reduced rule.
Packit Service 466431
     Keep to zero when no symbol should be popped.  */
Packit Service 466431
  int yylen = 0;
Packit Service 466431
Packit Service 466431
  yyssp = yyss = yyssa;
Packit Service 466431
  yyvsp = yyvs = yyvsa;
Packit Service 466431
  yystacksize = YYINITDEPTH;
Packit Service 466431
Packit Service 466431
  YYDPRINTF ((stderr, "Starting parse\n"));
Packit Service 466431
Packit Service 466431
  yystate = 0;
Packit Service 466431
  yyerrstatus = 0;
Packit Service 466431
  yynerrs = 0;
Packit Service 466431
  yychar = YYEMPTY; /* Cause a token to be read.  */
Packit Service 466431
  goto yysetstate;
Packit Service 466431
Packit Service 466431
/*------------------------------------------------------------.
Packit Service 466431
| yynewstate -- Push a new state, which is found in yystate.  |
Packit Service 466431
`------------------------------------------------------------*/
Packit Service 466431
 yynewstate:
Packit Service 466431
  /* In all cases, when you get here, the value and location stacks
Packit Service 466431
     have just been pushed.  So pushing a state here evens the stacks.  */
Packit Service 466431
  yyssp++;
Packit Service 466431
Packit Service 466431
 yysetstate:
Packit Service 466431
  *yyssp = yystate;
Packit Service 466431
Packit Service 466431
  if (yyss + yystacksize - 1 <= yyssp)
Packit Service 466431
    {
Packit Service 466431
      /* Get the current used size of the three stacks, in elements.  */
Packit Service 466431
      YYSIZE_T yysize = yyssp - yyss + 1;
Packit Service 466431
Packit Service 466431
#ifdef yyoverflow
Packit Service 466431
      {
Packit Service 466431
        /* Give user a chance to reallocate the stack.  Use copies of
Packit Service 466431
           these so that the &'s don't force the real ones into
Packit Service 466431
           memory.  */
Packit Service 466431
        YYSTYPE *yyvs1 = yyvs;
Packit Service 466431
        yytype_int16 *yyss1 = yyss;
Packit Service 466431
Packit Service 466431
        /* Each stack pointer address is followed by the size of the
Packit Service 466431
           data in use in that stack, in bytes.  This used to be a
Packit Service 466431
           conditional around just the two extra args, but that might
Packit Service 466431
           be undefined if yyoverflow is a macro.  */
Packit Service 466431
        yyoverflow (YY_("memory exhausted"),
Packit Service 466431
                    &yyss1, yysize * sizeof (*yyssp),
Packit Service 466431
                    &yyvs1, yysize * sizeof (*yyvsp),
Packit Service 466431
                    &yystacksize);
Packit Service 466431
Packit Service 466431
        yyss = yyss1;
Packit Service 466431
        yyvs = yyvs1;
Packit Service 466431
      }
Packit Service 466431
#else /* no yyoverflow */
Packit Service 466431
# ifndef YYSTACK_RELOCATE
Packit Service 466431
      goto yyexhaustedlab;
Packit Service 466431
# else
Packit Service 466431
      /* Extend the stack our own way.  */
Packit Service 466431
      if (YYMAXDEPTH <= yystacksize)
Packit Service 466431
        goto yyexhaustedlab;
Packit Service 466431
      yystacksize *= 2;
Packit Service 466431
      if (YYMAXDEPTH < yystacksize)
Packit Service 466431
        yystacksize = YYMAXDEPTH;
Packit Service 466431
Packit Service 466431
      {
Packit Service 466431
        yytype_int16 *yyss1 = yyss;
Packit Service 466431
        union yyalloc *yyptr =
Packit Service 466431
          (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
Packit Service 466431
        if (! yyptr)
Packit Service 466431
          goto yyexhaustedlab;
Packit Service 466431
        YYSTACK_RELOCATE (yyss_alloc, yyss);
Packit Service 466431
        YYSTACK_RELOCATE (yyvs_alloc, yyvs);
Packit Service 466431
#  undef YYSTACK_RELOCATE
Packit Service 466431
        if (yyss1 != yyssa)
Packit Service 466431
          YYSTACK_FREE (yyss1);
Packit Service 466431
      }
Packit Service 466431
# endif
Packit Service 466431
#endif /* no yyoverflow */
Packit Service 466431
Packit Service 466431
      yyssp = yyss + yysize - 1;
Packit Service 466431
      yyvsp = yyvs + yysize - 1;
Packit Service 466431
Packit Service 466431
      YYDPRINTF ((stderr, "Stack size increased to %lu\n",
Packit Service 466431
                  (unsigned long int) yystacksize));
Packit Service 466431
Packit Service 466431
      if (yyss + yystacksize - 1 <= yyssp)
Packit Service 466431
        YYABORT;
Packit Service 466431
    }
Packit Service 466431
Packit Service 466431
  YYDPRINTF ((stderr, "Entering state %d\n", yystate));
Packit Service 466431
Packit Service 466431
  if (yystate == YYFINAL)
Packit Service 466431
    YYACCEPT;
Packit Service 466431
Packit Service 466431
  goto yybackup;
Packit Service 466431
Packit Service 466431
/*-----------.
Packit Service 466431
| yybackup.  |
Packit Service 466431
`-----------*/
Packit Service 466431
yybackup:
Packit Service 466431
Packit Service 466431
  /* Do appropriate processing given the current state.  Read a
Packit Service 466431
     lookahead token if we need one and don't already have one.  */
Packit Service 466431
Packit Service 466431
  /* First try to decide what to do without reference to lookahead token.  */
Packit Service 466431
  yyn = yypact[yystate];
Packit Service 466431
  if (yypact_value_is_default (yyn))
Packit Service 466431
    goto yydefault;
Packit Service 466431
Packit Service 466431
  /* Not known => get a lookahead token if don't already have one.  */
Packit Service 466431
Packit Service 466431
  /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol.  */
Packit Service 466431
  if (yychar == YYEMPTY)
Packit Service 466431
    {
Packit Service 466431
      YYDPRINTF ((stderr, "Reading a token: "));
Packit Service 466431
      yychar = yylex ();
Packit Service 466431
    }
Packit Service 466431
Packit Service 466431
  if (yychar <= YYEOF)
Packit Service 466431
    {
Packit Service 466431
      yychar = yytoken = YYEOF;
Packit Service 466431
      YYDPRINTF ((stderr, "Now at end of input.\n"));
Packit Service 466431
    }
Packit Service 466431
  else
Packit Service 466431
    {
Packit Service 466431
      yytoken = YYTRANSLATE (yychar);
Packit Service 466431
      YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
Packit Service 466431
    }
Packit Service 466431
Packit Service 466431
  /* If the proper action on seeing token YYTOKEN is to reduce or to
Packit Service 466431
     detect an error, take that action.  */
Packit Service 466431
  yyn += yytoken;
Packit Service 466431
  if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
Packit Service 466431
    goto yydefault;
Packit Service 466431
  yyn = yytable[yyn];
Packit Service 466431
  if (yyn <= 0)
Packit Service 466431
    {
Packit Service 466431
      if (yytable_value_is_error (yyn))
Packit Service 466431
        goto yyerrlab;
Packit Service 466431
      yyn = -yyn;
Packit Service 466431
      goto yyreduce;
Packit Service 466431
    }
Packit Service 466431
Packit Service 466431
  /* Count tokens shifted since error; after three, turn off error
Packit Service 466431
     status.  */
Packit Service 466431
  if (yyerrstatus)
Packit Service 466431
    yyerrstatus--;
Packit Service 466431
Packit Service 466431
  /* Shift the lookahead token.  */
Packit Service 466431
  YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
Packit Service 466431
Packit Service 466431
  /* Discard the shifted token.  */
Packit Service 466431
  yychar = YYEMPTY;
Packit Service 466431
Packit Service 466431
  yystate = yyn;
Packit Service 466431
  YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
Packit Service 466431
  *++yyvsp = yylval;
Packit Service 466431
  YY_IGNORE_MAYBE_UNINITIALIZED_END
Packit Service 466431
Packit Service 466431
  goto yynewstate;
Packit Service 466431
Packit Service 466431
Packit Service 466431
/*-----------------------------------------------------------.
Packit Service 466431
| yydefault -- do the default action for the current state.  |
Packit Service 466431
`-----------------------------------------------------------*/
Packit Service 466431
yydefault:
Packit Service 466431
  yyn = yydefact[yystate];
Packit Service 466431
  if (yyn == 0)
Packit Service 466431
    goto yyerrlab;
Packit Service 466431
  goto yyreduce;
Packit Service 466431
Packit Service 466431
Packit Service 466431
/*-----------------------------.
Packit Service 466431
| yyreduce -- Do a reduction.  |
Packit Service 466431
`-----------------------------*/
Packit Service 466431
yyreduce:
Packit Service 466431
  /* yyn is the number of a rule to reduce with.  */
Packit Service 466431
  yylen = yyr2[yyn];
Packit Service 466431
Packit Service 466431
  /* If YYLEN is nonzero, implement the default value of the action:
Packit Service 466431
     '$$ = $1'.
Packit Service 466431
Packit Service 466431
     Otherwise, the following line sets YYVAL to garbage.
Packit Service 466431
     This behavior is undocumented and Bison
Packit Service 466431
     users should not rely upon it.  Assigning to YYVAL
Packit Service 466431
     unconditionally makes the parser a bit smaller, and it avoids a
Packit Service 466431
     GCC warning that YYVAL may be used uninitialized.  */
Packit Service 466431
  yyval = yyvsp[1-yylen];
Packit Service 466431
Packit Service 466431
Packit Service 466431
  YY_REDUCE_PRINT (yyn);
Packit Service 466431
  switch (yyn)
Packit Service 466431
    {
Packit Service 466431
        case 2:
Packit Service 466431
#line 53 "parser.y" /* yacc.c:1646  */
Packit Service 466431
    {
Packit Service 466431
      if (status != NULL)
Packit Service 466431
          *status = (yyvsp[0].ival);
Packit Service 466431
    }
Packit Service 466431
#line 1256 "parser.c" /* yacc.c:1646  */
Packit Service 466431
    break;
Packit Service 466431
Packit Service 466431
  case 4:
Packit Service 466431
#line 60 "parser.y" /* yacc.c:1646  */
Packit Service 466431
    {
Packit Service 466431
      (yyval.ival) = (yyvsp[-4].ival) && (yyvsp[0].ival);
Packit Service 466431
    }
Packit Service 466431
#line 1264 "parser.c" /* yacc.c:1646  */
Packit Service 466431
    break;
Packit Service 466431
Packit Service 466431
  case 5:
Packit Service 466431
#line 63 "parser.y" /* yacc.c:1646  */
Packit Service 466431
    {
Packit Service 466431
      (yyval.ival) = (yyvsp[-4].ival) || (yyvsp[0].ival);
Packit Service 466431
    }
Packit Service 466431
#line 1272 "parser.c" /* yacc.c:1646  */
Packit Service 466431
    break;
Packit Service 466431
Packit Service 466431
  case 6:
Packit Service 466431
#line 68 "parser.y" /* yacc.c:1646  */
Packit Service 466431
    {
Packit Service 466431
            (yyval.ival) = (yyvsp[-1].ival);
Packit Service 466431
          }
Packit Service 466431
#line 1280 "parser.c" /* yacc.c:1646  */
Packit Service 466431
    break;
Packit Service 466431
Packit Service 466431
  case 7:
Packit Service 466431
#line 71 "parser.y" /* yacc.c:1646  */
Packit Service 466431
    {
Packit Service 466431
            (yyval.ival) = (yyvsp[0].ival);
Packit Service 466431
          }
Packit Service 466431
#line 1288 "parser.c" /* yacc.c:1646  */
Packit Service 466431
    break;
Packit Service 466431
Packit Service 466431
  case 8:
Packit Service 466431
#line 76 "parser.y" /* yacc.c:1646  */
Packit Service 466431
    {
Packit Service 466431
            int ret = 0;
Packit Service 466431
            size_t sz;
Packit Service 466431
            if (keys != NULL && vals != NULL) {
Packit Service 466431
                for (int i = 0; keys[i] != NULL && vals[i] != NULL; i++) {
Packit Service 466431
                    if (strcmp((yyvsp[-2].sval), keys[i]) != 0) {
Packit Service 466431
                        continue;
Packit Service 466431
                    }
Packit Service 466431
                    sz = 0;
Packit Service 466431
                    memcpy(&sz, vals[i], sizeof(sz));
Packit Service 466431
                    if (sz == 0) {
Packit Service 466431
                        continue;
Packit Service 466431
                    }
Packit Service 466431
                    if (!memcmp((yyvsp[0].sval), vals[i] + sizeof(sz), sz)) {
Packit Service 466431
                        ret = 1;
Packit Service 466431
                        break;
Packit Service 466431
                    }
Packit Service 466431
                }
Packit Service 466431
            }
Packit Service 466431
            (yyval.ival) = ret;
Packit Service 466431
          }
Packit Service 466431
#line 1314 "parser.c" /* yacc.c:1646  */
Packit Service 466431
    break;
Packit Service 466431
Packit Service 466431
  case 9:
Packit Service 466431
#line 97 "parser.y" /* yacc.c:1646  */
Packit Service 466431
    {
Packit Service 466431
            int ret = 0;
Packit Service 466431
            if (keys != NULL && vals != NULL) {
Packit Service 466431
                for (int i = 0; keys[i] != NULL && vals[i] != NULL; i++) {
Packit Service 466431
                    if (strcmp((yyvsp[-2].sval), keys[i]) == 0) {
Packit Service 466431
                       ret = 1;
Packit Service 466431
                       break;
Packit Service 466431
                    }
Packit Service 466431
                }
Packit Service 466431
            }
Packit Service 466431
            (yyval.ival) = ret;
Packit Service 466431
          }
Packit Service 466431
#line 1331 "parser.c" /* yacc.c:1646  */
Packit Service 466431
    break;
Packit Service 466431
Packit Service 466431
  case 10:
Packit Service 466431
#line 109 "parser.y" /* yacc.c:1646  */
Packit Service 466431
    {
Packit Service 466431
            int ret = 0;
Packit Service 466431
            if (keys != NULL && vals != NULL) {
Packit Service 466431
                for (int i = 0; keys[i] != NULL && vals[i] != NULL; i++) {
Packit Service 466431
                    if (strcmp((yyvsp[-2].sval), keys[i]) != 0) {
Packit Service 466431
                        continue;
Packit Service 466431
                    }
Packit Service 466431
                    size_t b64len = b64_len(vals[i]);
Packit Service 466431
                    /* b64len includes the NULL terminator. */
Packit Service 466431
                    if (strlen((yyvsp[0].sval)) + 1 != b64len) {
Packit Service 466431
                        continue;
Packit Service 466431
                    }
Packit Service 466431
                    char *b64val = b64_enc(vals[i], b64len);
Packit Service 466431
                    if (!b64val) {
Packit Service 466431
                        continue;
Packit Service 466431
                    }
Packit Service 466431
                    if (strcmp((yyvsp[0].sval), b64val) == 0) {
Packit Service 466431
                        ret = 1;
Packit Service 466431
                    }
Packit Service 466431
                    free(b64val);
Packit Service 466431
                    if (ret) {
Packit Service 466431
                        break;
Packit Service 466431
                    }
Packit Service 466431
                }
Packit Service 466431
            }
Packit Service 466431
            (yyval.ival) = ret;
Packit Service 466431
          }
Packit Service 466431
#line 1363 "parser.c" /* yacc.c:1646  */
Packit Service 466431
    break;
Packit Service 466431
Packit Service 466431
Packit Service 466431
#line 1367 "parser.c" /* yacc.c:1646  */
Packit Service 466431
      default: break;
Packit Service 466431
    }
Packit Service 466431
  /* User semantic actions sometimes alter yychar, and that requires
Packit Service 466431
     that yytoken be updated with the new translation.  We take the
Packit Service 466431
     approach of translating immediately before every use of yytoken.
Packit Service 466431
     One alternative is translating here after every semantic action,
Packit Service 466431
     but that translation would be missed if the semantic action invokes
Packit Service 466431
     YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or
Packit Service 466431
     if it invokes YYBACKUP.  In the case of YYABORT or YYACCEPT, an
Packit Service 466431
     incorrect destructor might then be invoked immediately.  In the
Packit Service 466431
     case of YYERROR or YYBACKUP, subsequent parser actions might lead
Packit Service 466431
     to an incorrect destructor call or verbose syntax error message
Packit Service 466431
     before the lookahead is translated.  */
Packit Service 466431
  YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
Packit Service 466431
Packit Service 466431
  YYPOPSTACK (yylen);
Packit Service 466431
  yylen = 0;
Packit Service 466431
  YY_STACK_PRINT (yyss, yyssp);
Packit Service 466431
Packit Service 466431
  *++yyvsp = yyval;
Packit Service 466431
Packit Service 466431
  /* Now 'shift' the result of the reduction.  Determine what state
Packit Service 466431
     that goes to, based on the state we popped back to and the rule
Packit Service 466431
     number reduced by.  */
Packit Service 466431
Packit Service 466431
  yyn = yyr1[yyn];
Packit Service 466431
Packit Service 466431
  yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
Packit Service 466431
  if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
Packit Service 466431
    yystate = yytable[yystate];
Packit Service 466431
  else
Packit Service 466431
    yystate = yydefgoto[yyn - YYNTOKENS];
Packit Service 466431
Packit Service 466431
  goto yynewstate;
Packit Service 466431
Packit Service 466431
Packit Service 466431
/*--------------------------------------.
Packit Service 466431
| yyerrlab -- here on detecting error.  |
Packit Service 466431
`--------------------------------------*/
Packit Service 466431
yyerrlab:
Packit Service 466431
  /* Make sure we have latest lookahead translation.  See comments at
Packit Service 466431
     user semantic actions for why this is necessary.  */
Packit Service 466431
  yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar);
Packit Service 466431
Packit Service 466431
  /* If not already recovering from an error, report this error.  */
Packit Service 466431
  if (!yyerrstatus)
Packit Service 466431
    {
Packit Service 466431
      ++yynerrs;
Packit Service 466431
#if ! YYERROR_VERBOSE
Packit Service 466431
      yyerror (keys, vals, status, YY_("syntax error"));
Packit Service 466431
#else
Packit Service 466431
# define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \
Packit Service 466431
                                        yyssp, yytoken)
Packit Service 466431
      {
Packit Service 466431
        char const *yymsgp = YY_("syntax error");
Packit Service 466431
        int yysyntax_error_status;
Packit Service 466431
        yysyntax_error_status = YYSYNTAX_ERROR;
Packit Service 466431
        if (yysyntax_error_status == 0)
Packit Service 466431
          yymsgp = yymsg;
Packit Service 466431
        else if (yysyntax_error_status == 1)
Packit Service 466431
          {
Packit Service 466431
            if (yymsg != yymsgbuf)
Packit Service 466431
              YYSTACK_FREE (yymsg);
Packit Service 466431
            yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc);
Packit Service 466431
            if (!yymsg)
Packit Service 466431
              {
Packit Service 466431
                yymsg = yymsgbuf;
Packit Service 466431
                yymsg_alloc = sizeof yymsgbuf;
Packit Service 466431
                yysyntax_error_status = 2;
Packit Service 466431
              }
Packit Service 466431
            else
Packit Service 466431
              {
Packit Service 466431
                yysyntax_error_status = YYSYNTAX_ERROR;
Packit Service 466431
                yymsgp = yymsg;
Packit Service 466431
              }
Packit Service 466431
          }
Packit Service 466431
        yyerror (keys, vals, status, yymsgp);
Packit Service 466431
        if (yysyntax_error_status == 2)
Packit Service 466431
          goto yyexhaustedlab;
Packit Service 466431
      }
Packit Service 466431
# undef YYSYNTAX_ERROR
Packit Service 466431
#endif
Packit Service 466431
    }
Packit Service 466431
Packit Service 466431
Packit Service 466431
Packit Service 466431
  if (yyerrstatus == 3)
Packit Service 466431
    {
Packit Service 466431
      /* If just tried and failed to reuse lookahead token after an
Packit Service 466431
         error, discard it.  */
Packit Service 466431
Packit Service 466431
      if (yychar <= YYEOF)
Packit Service 466431
        {
Packit Service 466431
          /* Return failure if at end of input.  */
Packit Service 466431
          if (yychar == YYEOF)
Packit Service 466431
            YYABORT;
Packit Service 466431
        }
Packit Service 466431
      else
Packit Service 466431
        {
Packit Service 466431
          yydestruct ("Error: discarding",
Packit Service 466431
                      yytoken, &yylval, keys, vals, status);
Packit Service 466431
          yychar = YYEMPTY;
Packit Service 466431
        }
Packit Service 466431
    }
Packit Service 466431
Packit Service 466431
  /* Else will try to reuse lookahead token after shifting the error
Packit Service 466431
     token.  */
Packit Service 466431
  goto yyerrlab1;
Packit Service 466431
Packit Service 466431
Packit Service 466431
/*---------------------------------------------------.
Packit Service 466431
| yyerrorlab -- error raised explicitly by YYERROR.  |
Packit Service 466431
`---------------------------------------------------*/
Packit Service 466431
yyerrorlab:
Packit Service 466431
Packit Service 466431
  /* Pacify compilers like GCC when the user code never invokes
Packit Service 466431
     YYERROR and the label yyerrorlab therefore never appears in user
Packit Service 466431
     code.  */
Packit Service 466431
  if (/*CONSTCOND*/ 0)
Packit Service 466431
     goto yyerrorlab;
Packit Service 466431
Packit Service 466431
  /* Do not reclaim the symbols of the rule whose action triggered
Packit Service 466431
     this YYERROR.  */
Packit Service 466431
  YYPOPSTACK (yylen);
Packit Service 466431
  yylen = 0;
Packit Service 466431
  YY_STACK_PRINT (yyss, yyssp);
Packit Service 466431
  yystate = *yyssp;
Packit Service 466431
  goto yyerrlab1;
Packit Service 466431
Packit Service 466431
Packit Service 466431
/*-------------------------------------------------------------.
Packit Service 466431
| yyerrlab1 -- common code for both syntax error and YYERROR.  |
Packit Service 466431
`-------------------------------------------------------------*/
Packit Service 466431
yyerrlab1:
Packit Service 466431
  yyerrstatus = 3;      /* Each real token shifted decrements this.  */
Packit Service 466431
Packit Service 466431
  for (;;)
Packit Service 466431
    {
Packit Service 466431
      yyn = yypact[yystate];
Packit Service 466431
      if (!yypact_value_is_default (yyn))
Packit Service 466431
        {
Packit Service 466431
          yyn += YYTERROR;
Packit Service 466431
          if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
Packit Service 466431
            {
Packit Service 466431
              yyn = yytable[yyn];
Packit Service 466431
              if (0 < yyn)
Packit Service 466431
                break;
Packit Service 466431
            }
Packit Service 466431
        }
Packit Service 466431
Packit Service 466431
      /* Pop the current state because it cannot handle the error token.  */
Packit Service 466431
      if (yyssp == yyss)
Packit Service 466431
        YYABORT;
Packit Service 466431
Packit Service 466431
Packit Service 466431
      yydestruct ("Error: popping",
Packit Service 466431
                  yystos[yystate], yyvsp, keys, vals, status);
Packit Service 466431
      YYPOPSTACK (1);
Packit Service 466431
      yystate = *yyssp;
Packit Service 466431
      YY_STACK_PRINT (yyss, yyssp);
Packit Service 466431
    }
Packit Service 466431
Packit Service 466431
  YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
Packit Service 466431
  *++yyvsp = yylval;
Packit Service 466431
  YY_IGNORE_MAYBE_UNINITIALIZED_END
Packit Service 466431
Packit Service 466431
Packit Service 466431
  /* Shift the error token.  */
Packit Service 466431
  YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
Packit Service 466431
Packit Service 466431
  yystate = yyn;
Packit Service 466431
  goto yynewstate;
Packit Service 466431
Packit Service 466431
Packit Service 466431
/*-------------------------------------.
Packit Service 466431
| yyacceptlab -- YYACCEPT comes here.  |
Packit Service 466431
`-------------------------------------*/
Packit Service 466431
yyacceptlab:
Packit Service 466431
  yyresult = 0;
Packit Service 466431
  goto yyreturn;
Packit Service 466431
Packit Service 466431
/*-----------------------------------.
Packit Service 466431
| yyabortlab -- YYABORT comes here.  |
Packit Service 466431
`-----------------------------------*/
Packit Service 466431
yyabortlab:
Packit Service 466431
  yyresult = 1;
Packit Service 466431
  goto yyreturn;
Packit Service 466431
Packit Service 466431
#if !defined yyoverflow || YYERROR_VERBOSE
Packit Service 466431
/*-------------------------------------------------.
Packit Service 466431
| yyexhaustedlab -- memory exhaustion comes here.  |
Packit Service 466431
`-------------------------------------------------*/
Packit Service 466431
yyexhaustedlab:
Packit Service 466431
  yyerror (keys, vals, status, YY_("memory exhausted"));
Packit Service 466431
  yyresult = 2;
Packit Service 466431
  /* Fall through.  */
Packit Service 466431
#endif
Packit Service 466431
Packit Service 466431
yyreturn:
Packit Service 466431
  if (yychar != YYEMPTY)
Packit Service 466431
    {
Packit Service 466431
      /* Make sure we have latest lookahead translation.  See comments at
Packit Service 466431
         user semantic actions for why this is necessary.  */
Packit Service 466431
      yytoken = YYTRANSLATE (yychar);
Packit Service 466431
      yydestruct ("Cleanup: discarding lookahead",
Packit Service 466431
                  yytoken, &yylval, keys, vals, status);
Packit Service 466431
    }
Packit Service 466431
  /* Do not reclaim the symbols of the rule whose action triggered
Packit Service 466431
     this YYABORT or YYACCEPT.  */
Packit Service 466431
  YYPOPSTACK (yylen);
Packit Service 466431
  YY_STACK_PRINT (yyss, yyssp);
Packit Service 466431
  while (yyssp != yyss)
Packit Service 466431
    {
Packit Service 466431
      yydestruct ("Cleanup: popping",
Packit Service 466431
                  yystos[*yyssp], yyvsp, keys, vals, status);
Packit Service 466431
      YYPOPSTACK (1);
Packit Service 466431
    }
Packit Service 466431
#ifndef yyoverflow
Packit Service 466431
  if (yyss != yyssa)
Packit Service 466431
    YYSTACK_FREE (yyss);
Packit Service 466431
#endif
Packit Service 466431
#if YYERROR_VERBOSE
Packit Service 466431
  if (yymsg != yymsgbuf)
Packit Service 466431
    YYSTACK_FREE (yymsg);
Packit Service 466431
#endif
Packit Service 466431
  return yyresult;
Packit Service 466431
}
Packit Service 466431
#line 138 "parser.y" /* yacc.c:1906  */
Packit Service 466431
Packit Service 466431
Packit Service 466431
static size_t b64_len(const char *val)
Packit Service 466431
{
Packit Service 466431
    size_t sz = 0;
Packit Service 466431
Packit Service 466431
    memcpy(&sz, val, sizeof(sz));
Packit Service 466431
    if (sz == 0)
Packit Service 466431
        return sz;
Packit Service 466431
Packit Service 466431
    return apr_base64_encode_len(sz);
Packit Service 466431
}
Packit Service 466431
Packit Service 466431
static char *b64_enc(const char *val, size_t len)
Packit Service 466431
{
Packit Service 466431
    size_t sz = 0;
Packit Service 466431
    char *b64val;
Packit Service 466431
Packit Service 466431
    memcpy(&sz, val, sizeof(sz));
Packit Service 466431
    if (sz == 0)
Packit Service 466431
        return NULL;
Packit Service 466431
Packit Service 466431
    b64val = calloc(1, len + 1);
Packit Service 466431
    if (!b64val)
Packit Service 466431
        return NULL;
Packit Service 466431
Packit Service 466431
    apr_base64_encode(b64val, val + sizeof(sz), sz);
Packit Service 466431
    return b64val;
Packit Service 466431
}
Packit Service 466431
Packit Service 466431
/* Return 1 if the given name attributes and values (NULL terminated arrays)
Packit Service 466431
 * satisfy the expression.  This does not handle parsing errors from yyparse,
Packit Service 466431
 * so expr should be checked by required_name_attr_expr_check() first. */
Packit Service 466431
int mag_verify_name_attributes(const char *expr, const char **attrs,
Packit Service 466431
                               const char **vals)
Packit Service 466431
{
Packit Service 466431
    int ret = 0, status = 0;
Packit Service 466431
    YY_BUFFER_STATE buffer;
Packit Service 466431
Packit Service 466431
    /* No name attribute requirements. Pass. */
Packit Service 466431
    if (expr == NULL) {
Packit Service 466431
        return 1;
Packit Service 466431
    }
Packit Service 466431
Packit Service 466431
    /* No name attributes but required attributes are specified. Fail. */
Packit Service 466431
    if (attrs == NULL || vals == NULL ||
Packit Service 466431
        attrs[0] == NULL || vals[0] == NULL) {
Packit Service 466431
        return 0;
Packit Service 466431
    }
Packit Service 466431
Packit Service 466431
    buffer = yy_scan_string((char *)expr);
Packit Service 466431
    ret = yyparse(attrs, vals, &status);
Packit Service 466431
    yy_delete_buffer(buffer);
Packit Service 466431
Packit Service 466431
    return ret == 0 && status;
Packit Service 466431
}
Packit Service 466431
Packit Service 466431
/* Return 1 if the expression is provided and valid, else return 0. */
Packit Service 466431
int mag_check_name_attr_expr(const char *expr)
Packit Service 466431
{
Packit Service 466431
    int ret;
Packit Service 466431
    YY_BUFFER_STATE buffer = yy_scan_string((char *)expr);
Packit Service 466431
Packit Service 466431
    /* Just verify the syntax. */
Packit Service 466431
    ret = yyparse(NULL, NULL, NULL);
Packit Service 466431
    yy_delete_buffer(buffer);
Packit Service 466431
Packit Service 466431
    return ret == 0;
Packit Service 466431
}
Packit Service 466431
Packit Service 466431
/* Define a no-op yyerror().  Syntax errors are logged outside of calling
Packit Service 466431
 * required_name_attr_expr_check(). */
Packit Service 466431
void yyerror(const char **keys, const char **vals, int *status, const char *s)
Packit Service 466431
{
Packit Service 466431
    return;
Packit Service 466431
}