/*
 * Copyright (c) 2021-2022 Arm Limited. All rights reserved.
 *
 * SPDX-License-Identifier: Apache-2.0
 *
 * Licensed under the Apache License, Version 2.0 (the License); you may
 * not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an AS IS BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

/******************************************************************************************************************
 * Model: keyword_spotting_dnn_medium_int8
 * Source: https://github.com/ARM-software/ML-zoo/tree/master/models/keyword_spotting/dnn_medium/tflite_int8
 * Hexdump: python3 -c 'import numpy;i=numpy.load("input.npy");i.tofile("input.bin");' && xxd -i input.bin > input.h
 ******************************************************************************************************************/

unsigned char inputData[] __attribute__((aligned(16), section("input_data_sec"))) = {
    0xd5, 0xd6, 0xf2, 0x8b, 0x69, 0xf6, 0x5a, 0x0c, 0xd1, 0xeb, 0xcd, 0x8a, 0xdb, 0x04, 0xd2, 0x8b, 0x3a, 0x79,
    0x85, 0x5e, 0x44, 0x96, 0x44, 0x4c, 0x1c, 0x79, 0xf2, 0xa7, 0x8c, 0xf8, 0x41, 0x5b, 0xf6, 0xf8, 0x0e, 0xc8,
    0xad, 0xab, 0xe6, 0x54, 0x41, 0xbc, 0x8e, 0x44, 0x42, 0xca, 0x9a, 0x8b, 0x0f, 0xc0, 0xc5, 0x24, 0x3c, 0x55,
    0xc5, 0x6e, 0x9b, 0x98, 0x7f, 0x54, 0xad, 0x8d, 0x6c, 0x04, 0xa4, 0xbb, 0x29, 0xb8, 0xf6, 0x94, 0xac, 0x1c,
    0x66, 0x9f, 0x81, 0x95, 0x1d, 0x8e, 0xe1, 0xf1, 0x7c, 0xa7, 0x12, 0x03, 0x9f, 0x3c, 0x02, 0x29, 0x70, 0x83,
    0x81, 0x89, 0xa1, 0x71, 0x61, 0x26, 0xfb, 0x34, 0x82, 0x28, 0x3e, 0xf4, 0xf5, 0x72, 0x92, 0xcc, 0xf9, 0x90,
    0xc9, 0x9f, 0x7a, 0xf9, 0x95, 0x21, 0x03, 0x2d, 0x8f, 0x28, 0xe8, 0x77, 0x4b, 0xa6, 0x04, 0x44, 0x1e, 0xfa,
    0x43, 0x3e, 0x62, 0x51, 0x34, 0x0d, 0x6a, 0x05, 0xf0, 0x04, 0xf1, 0x6d, 0xa7, 0xec, 0xd6, 0x1b, 0xc6, 0x87,
    0x0a, 0xc9, 0x71, 0x72, 0x23, 0x0d, 0xad, 0xf7, 0x16, 0x08, 0xa7, 0xc8, 0xe5, 0x2a, 0xd8, 0x71, 0x75, 0xa2,
    0xab, 0x1b, 0xe3, 0xf0, 0xd2, 0xc8, 0xf2, 0x4b, 0x4b, 0xad, 0xf5, 0x34, 0x00, 0xe6, 0x26, 0x68, 0x24, 0x76,
    0x21, 0x90, 0xc5, 0x35, 0x6c, 0x3e, 0x7a, 0xf1, 0x53, 0xee, 0x90, 0x47, 0x4b, 0xf2, 0xfa, 0xa7, 0x76, 0x31,
    0x10, 0xbd, 0xf0, 0x04, 0x59, 0x45, 0x86, 0x0c, 0x6b, 0x72, 0xb5, 0x59, 0x0c, 0x05, 0x67, 0xfc, 0x8c, 0x80,
    0x82, 0x86, 0xbb, 0xbe, 0xbf, 0x5f, 0x80, 0x6e, 0x17, 0x2f, 0x6c, 0x5b, 0x7b, 0x04, 0xe3, 0x42, 0xbf, 0xf4,
    0xac, 0x03, 0xdd, 0x18, 0x11, 0x61, 0xe8, 0x6f, 0x58, 0xc8, 0xa0, 0xef, 0x8e, 0x16, 0x2f, 0xc5};