// WARNING: This file is machine generated by fidlc.

#include <lib/fidl/internal.h>


extern const struct FidlCodedStruct fidl_test_vectors_ExampleUseOfVectorsTable;


static const struct FidlCodedVector Vector4294967295nonnullable5uint8Table = {.tag=kFidlTypeVector, .element=(fidl_type_t*)(&fidl_internal_kUint8Table), .max_count=4294967295u, .element_size=1u, .nullable=kFidlNullability_Nonnullable};

static const struct FidlCodedVector Vector4294967295nonnullable4boolTable = {.tag=kFidlTypeVector, .element=(fidl_type_t*)(&fidl_internal_kBoolTable), .max_count=4294967295u, .element_size=1u, .nullable=kFidlNullability_Nonnullable};

static const struct FidlCodedVector Vector4294967295nonnullable32Vector4294967295nonnullable4boolTable = {.tag=kFidlTypeVector, .element=(fidl_type_t*)(&Vector4294967295nonnullable4boolTable), .max_count=4294967295u, .element_size=16u, .nullable=kFidlNullability_Nonnullable};


static const struct FidlStructElement Fields37fidl_test_vectors_ExampleUseOfVectors[] = {
    /*FidlStructPadding*/{.field=/*FidlStructField*/{.header=/*FidlStructElementHeader*/{.element_type=kFidlStructElementType_Field, .is_resource=kFidlIsResource_NotResource},.offset=0u, .field_type=(fidl_type_t*)(&Vector4294967295nonnullable5uint8Table)}},
    /*FidlStructPadding*/{.field=/*FidlStructField*/{.header=/*FidlStructElementHeader*/{.element_type=kFidlStructElementType_Field, .is_resource=kFidlIsResource_NotResource},.offset=16u, .field_type=(fidl_type_t*)(&Vector4294967295nonnullable32Vector4294967295nonnullable4boolTable)}}
};
const struct FidlCodedStruct fidl_test_vectors_ExampleUseOfVectorsTable = {.tag=kFidlTypeStruct, .elements=Fields37fidl_test_vectors_ExampleUseOfVectors, .element_count=2u, .size=32u, .name="fidl.test.vectors/ExampleUseOfVectors"};

