0
  $   ïˆl–Ðz¾”ªe¶…8 ^¸ÜdJbÑ¿õ„eç ÙÃ÷ ?÷     ï/*
 * WARNING: do not edit!
 * Generated by Makefile from include/openssl/asn1t.h.in
 *
 * Copyright 2000-2021 The OpenSSL Project Authors. All Rights Reserved.
 *
 * Licensed under the Apache License 2.0 (the "License").  You may not use
 * this file except in compliance with the License.  You can obtain a copy
 * in the file LICENSE in the source distribution or at
 * https://www.openssl.org/source/license.html
 */

/* clang-format off */

/* clang-format on */

#ifndef OPENSSL_ASN1T_H
#define OPENSSL_ASN1T_H
#pragma once

#include <openssl/macros.h>
#ifndef OPENSSL_NO_DEPRECATED_3_0
#define HEADER_ASN1T_H
#endif

#include <stddef.h>
#include <openssl/e_os2.h>
#include <openssl/asn1.h>

#ifdef OPENSSL_BUILD_SHLIBCRYPTO
#undef OPENSSL_EXTERN
#define OPENSSL_EXTERN OPENSSL_EXPORT
#endif

/* ASN1 template defines, structures and functions */

#ifdef __cplusplus
extern "C" {
#endif

/*-
 * These are the possible values for the itype field of the
 * ASN1_ITEM structure and determine how it is interpreted.
 *
 * For PRIMITIVE types the underlying type
 * determines the behaviour if items is NULL.
 *
 * Otherwise templates must contain a single
 * template and the type is treated in the
 * same way as the type specified in the template.
 *
 * For SEQUENCE types the templates field points
 * to the members, the size field is the
 * structure size.
 *
 * For CHOICE types the templates field points
 * to each possible member (typically a union)
 * and the 'size' field is the offset of the
 * selector.
 *
 * The 'funcs' field is used for application-specific
 * data and functions.
 *
 * The EXTERN type uses a new style d2i/i2d.
 * The new style should be used where possible
 * because it avoids things like the d2i IMPLICIT
 * hack.
 *
 * MSTRING is a multiple string type, it is used
 * for a CHOICE of character strings where the
 * actual strings all occupy an ASN1_STRING
 * structure. In this case the 'utype' field
 * has a special meaning, it is used as a mask
 * of acceptable types using the B_ASN1 constants.
 *
 * NDEF_SEQUENCE is the same as SEQUENCE except
 * that it will use indefinite length constructed
 * encoding if requested.
 *
 */

#define ASN1_ITYPE_PRIMITIVE 0x0
#define ASN1_ITYPE_SEQUENCE 0x1
#define ASN1_ITYPE_CHOICE 0x2
/* unused value                          0x3 */
#define ASN1_ITYPE_EXTERN 0x4
#define ASN1_ITYPE_MSTRING 0x5
#define ASN1_ITYPE_NDEF_SEQUENCE 0x6

/* Macro to obtain ASN1_ADB pointer from a type (only used internally) */
#define ASN1_ADB_ptr(iptr) ((const ASN1_ADB *)((iptr)()))

/* Macros for start and end of ASN1_ITEM definition */

#define ASN1_ITEM_start(itname)        \
    const ASN1_ITEM *itname##_it(void) \
    {                                  \
        static const ASN1_ITEM local_it = {

#define static_ASN1_ITEM_start(itname) \
    static ASN1_ITEM_start(itname)

#define ASN1_ITEM_end(itname) \
    }                         \
    ;                         \
    return &local_it;         \
    }

/* Macros to aid ASN1 template writing */

#define ASN1_ITEM_TEMPLATE(tname) \
    static const ASN1_TEMPLATE tname##_item_tt

#define ASN1_ITEM_TEMPLATE_END(tname) \
    ;                                 \
    ASN1_ITEM_start(tname)            \
        ASN1_ITYPE_PRIMITIVE,         \
        -1,                           \
        &tname##_item_tt,             \
        0,                            \
        NULL,                         \
        0,                            \
        #tname ASN1_ITEM_end(tname)
#define static_ASN1_ITEM_TEMPLATE_END(tname) \
    ;                                        \
    static_ASN1_ITEM_start(tname)            \
        ASN1_ITYPE_PRIMITIVE,                \
        -1,                                  \
        &tname##_item_tt,                    \
        0,                                   \
        NULL,                                \
        0,                                   \
        #tname ASN1_ITEM_end(tname)

/* This is a ASN1 type which just embeds a template */

/*-
 * This pair