/*
@licstart  The following is the entire license notice for the
JavaScript code in this file.

Copyright (C) 1997-2019 by Dimitri van Heesch

This program is free software; you can redistribute it and/or modify
it under the terms of version 2 of the GNU General Public License as published by
the Free Software Foundation

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.

@licend  The above is the entire license notice
for the JavaScript code in this file
*/
var NAVTREE =
[
  [ "Arm NN", "index.html", [
    [ "Quick Start Guide", "quickstart.html", "quickstart" ],
    [ "Arm NN Operators", "operator_list.html", [
      [ "Arm NN Operators", "operator_list.html#S5_1_operator_list", null ]
    ] ],
    [ "Build Guides", "buildguides.html", "buildguides" ],
    [ "Contribution Guides", "contribguides.html", "contribguides" ],
    [ "Software Components", "swtools.html", "swtools" ],
    [ "Frequently asked questions", "md_docs__f_a_q.html", null ],
    [ "How to use the Android NDK to build Arm NN", "md_shim__build_guide_shim_support_library.html", null ],
    [ "Contribution Guidelines", "md__c_o_n_t_r_i_b_u_t_i_n_g.html", null ],
    [ "Namespaces", "namespaces.html", [
      [ "Namespace List", "namespaces.html", "namespaces_dup" ],
      [ "Namespace Members", "namespacemembers.html", [
        [ "All", "namespacemembers.html", "namespacemembers_dup" ],
        [ "Functions", "namespacemembers_func.html", "namespacemembers_func" ],
        [ "Variables", "namespacemembers_vars.html", null ],
        [ "Typedefs", "namespacemembers_type.html", null ],
        [ "Enumerations", "namespacemembers_enum.html", null ]
      ] ]
    ] ],
    [ "Classes", "annotated.html", [
      [ "Class List", "annotated.html", "annotated_dup" ],
      [ "Class Index", "classes.html", null ],
      [ "Class Hierarchy", "hierarchy.html", "hierarchy" ],
      [ "Class Members", "functions.html", [
        [ "All", "functions.html", "functions_dup" ],
        [ "Functions", "functions_func.html", "functions_func" ],
        [ "Variables", "functions_vars.html", "functions_vars" ],
        [ "Typedefs", "functions_type.html", "functions_type" ],
        [ "Enumerations", "functions_enum.html", null ],
        [ "Enumerator", "functions_eval.html", null ],
        [ "Related Functions", "functions_rela.html", null ]
      ] ]
    ] ],
    [ "Files", "files.html", [
      [ "File List", "files.html", "files_dup" ],
      [ "File Members", "globals.html", [
        [ "All", "globals.html", "globals_dup" ],
        [ "Functions", "globals_func.html", null ],
        [ "Variables", "globals_vars.html", null ],
        [ "Typedefs", "globals_type.html", null ],
        [ "Macros", "globals_defs.html", null ]
      ] ]
    ] ],
    [ "Examples", "examples.html", "examples" ]
  ] ]
];

var NAVTREEINDEX =
[
"_abs_8hpp.html",
"_broadcast_to_layer_8cpp_source.html",
"_cl_fully_connected_workload_8hpp.html#a18c7eef8533ca0acbbe081cd1a1fec98",
"_cl_strided_slice_workload_8hpp.html",
"_convolution2d_layer_8hpp.html",
"_filesystem_8hpp.html#a0477efb2c6f5b41fbfe937fef6db312d",
"_half_8hpp.html",
"_layers_fwd_8hpp.html#ad32a13408ace1c1fa520ed64a2cbe70f",
"_neon_activation_workload_8cpp_source.html",
"_neon_mean_workload_8cpp_source.html",
"_network_8cpp.html#abd660675ae5a9df777dcdb30c50224f6",
"_quantize_helper_8hpp.html#a21b249bca87a5ad47359abd9ec7acada",
"_ref_permute_workload_8hpp.html#aed5e6ff8fdf785380ed4c8ca21702da3",
"_scatter_nd_layer_8hpp_source.html",
"_tensor_i_o_utils_8hpp.html",
"_types_8hpp.html#a56297e0f7b215eea46c818cb7528d9eaa1e34af023adeb7d5f484f8eb4b9826b6",
"_unmap_layer_8hpp_source.html",
"classarmnn_1_1_base_iterator.html#a7ebd88dd0270b7d28a4dc73b427de052",
"classarmnn_1_1_cl_convolution2d_workload.html#a459ed0eff27e88c466b9173a6ac77de8",
"classarmnn_1_1_cl_scatter_nd_workload.html#aa755cb124275c5414c3e263ed7adca0c",
"classarmnn_1_1_depth_to_space_layer.html#a1c96a186c37deb90b7f0dd223894fa30",
"classarmnn_1_1_gpu_fsa_backend_1_1_gpu_fsa_backend_custom_allocator_wrapper.html#aae0c9f2cf99b1724ec4a6d4e292327d2",
"classarmnn_1_1_i_c_l_tensor_proxy.html#ab43e51a969c6f836417ce6dd7c3f0075",
"classarmnn_1_1_i_tensor_handle.html#a5cceed8b707a09bf27eb61f17acf8a88",
"classarmnn_1_1_layer_support_handle.html#a61938d90f2190e9a434548adbd9bde16",
"classarmnn_1_1_neon_batch_to_space_nd_workload.html#ae071e8822437c78baea75c3aef3a263a",
"classarmnn_1_1_neon_slice_workload.html#ae071e8822437c78baea75c3aef3a263a",
"classarmnn_1_1_optimization_views.html#a9a1555f25af4a0ae2c0a1fc0ed9aded8",
"classarmnn_1_1_prelu_layer.html#a46fc3fdd4b2a5dd6d184e57983cf20bc",
"classarmnn_1_1_ref_detection_post_process_workload.html#ae071e8822437c78baea75c3aef3a263a",
"classarmnn_1_1_ref_tensor_handle_decorator.html#ab2be1412c91842a072ad94759f52033e",
"classarmnn_1_1_subgraph_view.html#adc4e3f28ec3906680f1a25a7b1a3e8f9",
"classarmnn_1_1_typed_iterator.html#af1fcbf08944ac2938545444f2c502902",
"classarmnn__driver_1_1_driver_options.html#a3412073de3bb1868f07f5a3f07a72c8d",
"delegate_2opaque_2include_2_version_8hpp.html#a56708ec0b7331eb38e63bc14ee8f0f2f",
"namespacearmnn_tf_lite_parser.html",
"structarmnn_1_1_broadcast_to_descriptor.html#ac1797a73147140b6c9d72c2d353a9e8a",
"structarmnn_1_1_i_network_properties.html#ad3ab02a7f6310b35c59ca78b509905ca",
"structarmnn_1_1_lstm_descriptor.html#a2837b4396f20c956952d1a7286cab5f8",
"structarmnn_1_1_pad_descriptor.html#a66f2c989f51ab6116de4380390250b69",
"structarmnn_1_1_queue_descriptor_with_parameters.html#aad91b9bbf7aa365d304febe79a3d1333",
"structarmnn_1_1_throwing_strategy.html#ab368aedb70d5fcedb7b2d2823ff10307"
];

var SYNCONMSG = 'click to disable panel synchronisation';
var SYNCOFFMSG = 'click to enable panel synchronisation';