// Copyright 2020 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// GENERATED FILE: Regen with $(fx get-build-dir)/host-tools/regen_fidl_benchmark_suite

library benchmarkfidl;

struct PaddedStructTree1 {
    uint8 a;
    // 3 byte padding
    uint32 b;
};

struct PaddedStructTree2 {
    PaddedStructTree1 left;
    PaddedStructTree1 right;
};

struct PaddedStructTree3 {
    PaddedStructTree2 left;
    PaddedStructTree2 right;
};

struct PaddedStructTree4 {
    PaddedStructTree3 left;
    PaddedStructTree3 right;
};

struct PaddedStructTree5 {
    PaddedStructTree4 left;
    PaddedStructTree4 right;
};

struct PaddedStructTree6 {
    PaddedStructTree5 left;
    PaddedStructTree5 right;
};

struct PaddedStructTree7 {
    PaddedStructTree6 left;
    PaddedStructTree6 right;
};

struct PaddedStructTree8 {
    PaddedStructTree7 left;
    PaddedStructTree7 right;
};
