/*
 * Copyright (C) 2012 The Android Open Source Project
 *
 * 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
 *
 *      http://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.
 */


/*
 * This file is auto-generated. DO NOT MODIFY!
 * The source Renderscript file: mono.rs
 */


#include "ScriptC_mono.h"

static const unsigned char __txt[] = {
    0xde,0xc0,0x17,0x0b,0x00,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0xa8,0x04,0x00,0x00,
    0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x40,0x04,0x00,
    0x78,0x05,0x00,0x00,0x02,0x40,0x04,0x00,0x03,0x00,0x00,0x00,0x42,0x43,0xc0,0xde,
    0x21,0x0c,0x00,0x00,0x27,0x01,0x00,0x00,0x01,0x10,0x00,0x00,0x12,0x00,0x00,0x00,
    0x07,0x81,0x23,0x91,0x41,0xc8,0x04,0x49,0x06,0x10,0x32,0x39,0x92,0x01,0x84,0x0c,
    0x25,0x05,0x08,0x19,0x1e,0x04,0x8b,0x62,0x80,0x14,0x45,0x02,0x42,0x92,0x0b,0x42,
    0xa4,0x10,0x32,0x14,0x38,0x08,0x18,0x49,0x0a,0x32,0x44,0x24,0x48,0x0a,0x90,0x21,
    0x23,0xc4,0x52,0x80,0x0c,0x19,0x21,0x72,0x24,0x07,0xc8,0x48,0x11,0x62,0xa8,0xa0,
    0xa8,0x40,0xc6,0xf0,0x01,0x00,0x00,0x00,0x49,0x18,0x00,0x00,0x08,0x00,0x00,0x00,
    0x0b,0x8c,0x00,0x04,0x41,0x10,0x04,0x09,0x01,0x04,0x41,0x10,0x04,0x89,0xff,0xff,
    0xff,0xff,0x1f,0xc0,0x60,0x81,0xf0,0xff,0xff,0xff,0xff,0x03,0x18,0x00,0x00,0x00,
    0x89,0x20,0x00,0x00,0x14,0x00,0x00,0x00,0x32,0x22,0x48,0x09,0x20,0x64,0x85,0x04,
    0x93,0x22,0xa4,0x84,0x04,0x93,0x22,0xe3,0x84,0xa1,0x90,0x14,0x12,0x4c,0x8a,0x8c,
    0x0b,0x84,0xa4,0x4c,0x10,0x54,0x73,0x04,0x60,0x40,0x60,0x06,0x80,0xc4,0x1c,0x01,
    0x42,0x64,0x04,0x60,0x18,0x81,0x20,0xe8,0x94,0xc1,0x20,0x44,0x69,0x18,0x81,0x10,
    0x8a,0xb0,0x0e,0xb1,0x61,0x84,0x41,0x28,0x83,0x70,0x8e,0x5e,0x11,0x8e,0xa3,0x38,
    0x10,0x30,0x8c,0x30,0x00,0x00,0x00,0x00,0x13,0xb0,0x70,0x90,0x87,0x76,0xb0,0x87,
    0x3b,0x68,0x03,0x77,0x78,0x07,0x77,0x28,0x87,0x36,0x60,0x87,0x74,0x70,0x87,0x7a,
    0xc0,0x87,0x36,0x38,0x07,0x77,0xa8,0x87,0x72,0x08,0x07,0x71,0x48,0x87,0x0d,0xf2,
    0x50,0x0e,0x6d,0x00,0x0f,0x7a,0x30,0x07,0x72,0xa0,0x07,0x73,0x20,0x07,0x7a,0x30,
    0x07,0x72,0xd0,0x06,0xe9,0x10,0x07,0x7a,0x80,0x07,0x7a,0x80,0x07,0x6d,0x90,0x0e,
    0x78,0xa0,0x07,0x78,0xa0,0x07,0x78,0xd0,0x06,0xe9,0x10,0x07,0x76,0xa0,0x07,0x71,
    0x60,0x07,0x7a,0x10,0x07,0x76,0xd0,0x06,0xe9,0x30,0x07,0x72,0xa0,0x07,0x73,0x20,
    0x07,0x7a,0x30,0x07,0x72,0xd0,0x06,0xe9,0x60,0x07,0x74,0xa0,0x07,0x76,0x40,0x07,
    0x7a,0x60,0x07,0x74,0xd0,0x06,0xe6,0x30,0x07,0x72,0xa0,0x07,0x73,0x20,0x07,0x7a,
    0x30,0x07,0x72,0xd0,0x06,0xe6,0x60,0x07,0x74,0xa0,0x07,0x76,0x40,0x07,0x7a,0x60,
    0x07,0x74,0xd0,0x06,0xf6,0x60,0x07,0x74,0xa0,0x07,0x76,0x40,0x07,0x7a,0x60,0x07,
    0x74,0xd0,0x06,0xf6,0x10,0x07,0x72,0x80,0x07,0x7a,0x60,0x07,0x74,0xa0,0x07,0x71,
    0x20,0x07,0x78,0xd0,0x06,0xe1,0x00,0x07,0x7a,0x00,0x07,0x7a,0x60,0x07,0x74,0xd0,
    0x06,0xee,0x30,0x07,0x72,0xd0,0x06,0xb3,0x60,0x07,0x74,0xa0,0xf3,0x40,0x86,0x04,
    0x32,0x42,0x44,0x04,0x60,0x20,0x30,0x57,0x81,0x59,0x09,0x34,0x44,0x51,0x00,0x00,
    0x08,0x00,0x00,0x00,0x80,0x21,0x4a,0x03,0x04,0x00,0x00,0x00,0x00,0x00,0x0c,0x51,
    0x20,0x20,0x00,0x00,0x00,0x00,0x00,0x60,0x88,0x22,0x01,0x01,0x00,0x00,0x00,0x00,
    0x00,0x59,0x20,0x00,0x08,0x00,0x00,0x00,0x32,0x1e,0x98,0x10,0x19,0x11,0x4c,0x90,
    0x8c,0x09,0x26,0x47,0xc6,0x04,0x43,0x02,0x85,0x40,0xa4,0x04,0x48,0x8c,0x11,0xe8,
    0xac,0x39,0xe7,0x1f,0x00,0x00,0x00,0x00,0x79,0x18,0x00,0x00,0x5f,0x00,0x00,0x00,
    0x43,0x88,0x29,0x98,0x84,0x05,0x87,0x3d,0x94,0x83,0x3c,0xcc,0x43,0x3a,0xbc,0x83,
    0x3b,0x2c,0x08,0xe2,0x60,0x08,0x31,0x11,0x53,0xb1,0x20,0x52,0x87,0x70,0xb0,0x87,
    0x70,0xf8,0x05,0x78,0x08,0x87,0x71,0x58,0x87,0x70,0x38,0x87,0x72,0xf8,0x05,0x77,
    0x08,0x87,0x76,0x28,0x87,0x05,0x63,0x30,0x0e,0xef,0xd0,0x0e,0x6e,0x50,0x0e,0xf8,
    0x10,0x0e,0xed,0x00,0x0f,0xec,0x50,0x0e,0x6e,0x10,0x0e,0xee,0x40,0x0e,0xf2,0xf0,
    0x0e,0xe9,0x40,0x0e,0x6e,0x20,0x0f,0xf3,0xe0,0x06,0xe8,0x50,0x0e,0xec,0xc0,0x0e,
    0xef,0x30,0x0e,0xef,0xd0,0x0e,0xf0,0x50,0x0f,0xf4,0x50,0x0e,0x43,0x88,0xe9,0x98,
    0x90,0x05,0xc4,0x39,0xa4,0x82,0x3b,0xd0,0xc3,0x82,0xa0,0x0e,0x86,0x10,0x93,0x32,
    0x09,0x0b,0x8c,0x71,0x30,0x05,0x76,0x78,0x87,0x70,0xa0,0x87,0x21,0xc4,0xc4,0x4c,
    0xcd,0x82,0xe2,0x1c,0x44,0xe1,0x1d,0xde,0x81,0x1d,0x16,0x08,0x71,0x10,0x07,0x43,
    0x84,0xe9,0x59,0x40,0xc8,0xc3,0x3b,0xbc,0x03,0x3d,0x0c,0x11,0xa6,0x68,0x41,0x30,
    0x07,0x43,0x88,0x69,0x9a,0xa8,0x05,0xcf,0x3b,0xb4,0x83,0x3b,0xa4,0x03,0x3c,0xbc,
    0x03,0x3d,0x94,0x83,0x3b,0xd0,0x03,0x18,0x8c,0x03,0x3a,0x84,0x83,0x3c,0x0c,0x21,
    0xa6,0xca,0x00,0x16,0x44,0xb3,0x90,0x0e,0xed,0x00,0x0f,0xec,0x50,0x0e,0x60,0x30,
    0x0a,0x6f,0x30,0x0a,0x6b,0xb0,0x06,0x60,0x40,0x0b,0xa2,0x10,0x0a,0xa1,0x30,0xe2,
    0x18,0x03,0x78,0x90,0x87,0x70,0x38,0x87,0x76,0x08,0x87,0x29,0x02,0x30,0x8c,0x70,
    0xc6,0x40,0x1e,0xe6,0xe1,0x17,0xca,0x01,0x1f,0xe0,0xe1,0x1d,0xe4,0x81,0x1e,0x7e,
    0xc1,0x1e,0xc2,0x41,0x1e,0xa6,0x0c,0x46,0xb2,0x8c,0x80,0xc6,0x40,0x1e,0xe6,0xe1,
    0x17,0xde,0x41,0x1c,0xd4,0xa1,0x1c,0xc6,0x81,0x1e,0x7e,0x61,0x1e,0xd8,0xe1,0x1d,
    0xe8,0x61,0x1e,0xa6,0x00,0x23,0xae,0x31,0x90,0x87,0x79,0xf8,0x85,0x72,0xc0,0x07,
    0x78,0x78,0x07,0x79,0xa0,0x87,0x5f,0x30,0x87,0x77,0x90,0x87,0x72,0x08,0x87,0x71,
    0x40,0x87,0x5f,0x70,0x87,0x70,0x68,0x87,0x72,0x98,0x12,0x38,0x23,0xa4,0x31,0x90,
    0x87,0x79,0xf8,0x85,0x72,0xc0,0x07,0x78,0x78,0x07,0x79,0xa0,0x87,0x5f,0x30,0x87,
    0x77,0x90,0x87,0x72,0x08,0x87,0x71,0x40,0x87,0x29,0x01,0x04,0x79,0x18,0x00,0x00,
    0x0b,0x00,0x00,0x00,0x33,0x08,0x80,0x1c,0xc4,0xe1,0x1c,0x66,0x14,0x01,0x3d,0x88,
    0x43,0x38,0x84,0xc3,0x8c,0x42,0x80,0x07,0x79,0x78,0x07,0x73,0x98,0xb1,0x0c,0xe6,
    0x00,0x0f,0xe1,0x30,0x0e,0xe3,0x50,0x0f,0xf2,0x10,0x0e,0xe3,0x90,0x0f,0x00,0x00,
    0x71,0x20,0x00,0x00,0x13,0x00,0x00,0x00,0x06,0x40,0x18,0x62,0x33,0x99,0x40,0x61,
    0x6c,0x8e,0xb3,0xd8,0x00,0x11,0x39,0xce,0x64,0x04,0x51,0x24,0xb9,0xcd,0x03,0x08,
    0x0a,0xe7,0x2c,0x4e,0xc4,0xf3,0x3c,0x6f,0x05,0xcd,0x3f,0xdf,0x83,0x33,0x75,0xd5,
    0xfd,0x17,0xec,0x6f,0x01,0x86,0xf0,0x2d,0x0e,0x30,0x99,0x81,0xf6,0xcf,0xf5,0x1e,
    0x49,0x29,0x20,0x28,0x9c,0xb3,0x38,0x51,0xeb,0xf0,0x3c,0xcf,0x77,0xd5,0xfd,0x17,
    0x00,0x00,0x00,0x00,0x61,0x20,0x00,0x00,0x21,0x00,0x00,0x00,0x13,0x04,0x41,0x2c,
    0x10,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x04,0x46,0x00,0x68,0xcd,0x00,0x90,0x9b,
    0x01,0x18,0x6b,0x38,0xe9,0x52,0x4e,0x3f,0xb1,0x8d,0xd9,0xf8,0xab,0x4d,0x5f,0xf6,
    0x3d,0xa2,0x63,0x0d,0x40,0x20,0x8c,0x00,0x00,0x00,0x00,0x00,0xa4,0x8c,0x11,0x03,
    0x42,0x08,0x08,0x69,0x90,0x61,0x6a,0xa0,0x11,0x83,0x42,0x08,0x0a,0xea,0x99,0x63,
    0x70,0x2a,0x66,0x90,0xc1,0x72,0xa2,0x11,0x03,0x42,0x08,0x8c,0x6b,0x30,0x62,0xc1,
    0x06,0x00,0xc3,0x81,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xa6,0x40,0x54,0x3f,
    0xd2,0xd8,0x42,0x51,0xfd,0x0e,0x35,0x01,0x01,0x31,0x00,0x00,0x03,0x00,0x00,0x00,
    0x5b,0x06,0x20,0x90,0xb6,0x0c,0x47,0x20,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,
};

ScriptC_mono::ScriptC_mono(android::renderscriptCpp::RenderScript *rs, const char *cacheDir, size_t cacheDirLength) :
        ScriptC(rs, __txt, sizeof(__txt), "mono.rs", 4, cacheDir, cacheDirLength) {
}

ScriptC_mono::~ScriptC_mono() {
}

void ScriptC_mono::forEach_root(android::sp<const android::renderscriptCpp::Allocation> ain, android::sp<const android::renderscriptCpp::Allocation> aout) const {
    forEach(0, ain, aout, NULL, 0);
}

