diff --git a/StandAlone/StandAlone.cpp b/StandAlone/StandAlone.cpp
index 8203ad5049c34c37ac5d8d4f59ab6b22be10cc20..bd04bea6301d9ceea31f55a075df07207868ccaf 100644
--- a/StandAlone/StandAlone.cpp
+++ b/StandAlone/StandAlone.cpp
@@ -33,6 +33,10 @@
 //ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 //POSSIBILITY OF SUCH DAMAGE.
 //
+
+// this only applies to the standalone wrapper, not the front end in general
+#define _CRT_SECURE_NO_WARNINGS
+
 #include "Worklist.h"
 #include "./../glslang/Include/ShHandle.h"
 #include "./../glslang/Public/ShaderLang.h"
@@ -56,6 +60,7 @@ enum TOptions {
     EOptionGiveWarnings       = 0x010,
     EOptionsLinkProgram       = 0x020,
     EOptionMultiThreaded      = 0x040,
+    EOptionDumpConfig         = 0x080,
 };
 
 //
@@ -85,39 +90,122 @@ ShBinding FixedAttributeBindings[] = {
 ShBindingTable FixedAttributeTable = { 3, FixedAttributeBindings };
 
 EShLanguage FindLanguage(const std::string& name);
-bool CompileFile(const char *fileName, ShHandle, int options, const TBuiltInResource*);
+bool CompileFile(const char *fileName, ShHandle, int options);
 void usage();
 void FreeFileData(char **data);
 char** ReadFileData(const char *fileName);
 void InfoLogMsg(const char* msg, const char* name, const int num);
 
-// Use to test breaking a single shader file into multiple strings.
+// Use to test breaking up a single shader file into multiple strings.
 int NumShaderStrings = 1;
 
+TBuiltInResource Resources;
+std::string ConfigFile;
+
+//
+// These are the default resources for TBuiltInResources, used for both
+//  - parsing this string for the case where the user didn't supply one
+//  - dumping out a template for user construction of a config file
+//
+const char* DefaultConfig = 
+"MaxLights 32\n"
+"MaxClipPlanes 6\n"
+"MaxTextureUnits 32\n"
+"MaxTextureCoords 32\n"
+"MaxVertexAttribs 64\n"
+"MaxVertexUniformComponents 4096\n"
+"MaxVaryingFloats 64\n"
+"MaxVertexTextureImageUnits 32\n"
+"MaxCombinedTextureImageUnits 32\n"
+"MaxTextureImageUnits 32\n"
+"MaxFragmentUniformComponents 4096\n"
+"MaxDrawBuffers 32\n"
+"MaxVertexUniformVectors 128\n"
+"MaxVaryingVectors 8\n"
+"MaxFragmentUniformVectors 16\n"
+"MaxVertexOutputVectors 16\n"
+"MaxFragmentInputVectors 15\n"
+"MinProgramTexelOffset -8\n"
+"MaxProgramTexelOffset 7\n"
+;
+
 //
-// Set up the per compile resources
+// Parse either a .conf file provided by the user or the default string above.
 //
-void GenerateResources(TBuiltInResource& resources)
+void ProcessConfigFile()
 {
-    resources.maxLights = 32;
-    resources.maxClipPlanes = 6;
-    resources.maxTextureUnits = 32;
-    resources.maxTextureCoords = 32;
-    resources.maxVertexAttribs = 64;
-    resources.maxVertexUniformComponents = 4096;
-    resources.maxVaryingFloats = 64;
-    resources.maxVertexTextureImageUnits = 32;
-    resources.maxCombinedTextureImageUnits = 32;
-    resources.maxTextureImageUnits = 32;
-    resources.maxFragmentUniformComponents = 4096;
-    resources.maxDrawBuffers = 32;
-    resources.maxVertexUniformVectors = 128;
-    resources.maxVaryingVectors = 8;
-    resources.maxFragmentUniformVectors = 16;
-    resources.maxVertexOutputVectors = 16;
-    resources.maxFragmentInputVectors = 15;
-    resources.minProgramTexelOffset = -8;
-    resources.maxProgramTexelOffset = 7;
+    char** configStrings = 0;
+    char *config = 0;
+    if (ConfigFile.size() > 0) {
+        char** configStrings = ReadFileData(ConfigFile.c_str());
+        if (configStrings)
+            config = *configStrings;
+        else {
+            printf("Error opening configuration file; will instead use the default configuration\n");
+            usage();
+        }
+    }
+
+    if (config == 0) {
+        config = new char[strlen(DefaultConfig)];
+        strcpy(config, DefaultConfig);
+    }
+
+    const char* delims = " \t\n\r";
+    const char* token = strtok(config, delims);
+    while (token) {
+        const char* valueStr = strtok(0, delims);
+        if (valueStr == 0 || ! (valueStr[0] == '-' || (valueStr[0] >= '0' && valueStr[0] <= '9'))) {
+            printf("Error: '%s' bad .conf file.  Each name must be followed by one number.\n", valueStr ? valueStr : "");
+            return;
+        }
+        int value = atoi(valueStr);
+
+        if (strcmp(token, "MaxLights") == 0)
+            Resources.maxLights = value;
+        else if (strcmp(token, "MaxClipPlanes") == 0)
+            Resources.maxClipPlanes = value;
+        else if (strcmp(token, "MaxTextureUnits") == 0)
+            Resources.maxTextureUnits = value;
+        else if (strcmp(token, "MaxTextureCoords") == 0)
+            Resources.maxTextureCoords = value;
+        else if (strcmp(token, "MaxVertexAttribs") == 0)
+            Resources.maxVertexAttribs = value;
+        else if (strcmp(token, "MaxVertexUniformComponents") == 0)
+            Resources.maxVertexUniformComponents = value;
+        else if (strcmp(token, "MaxVaryingFloats") == 0)
+            Resources.maxVaryingFloats = value;
+        else if (strcmp(token, "MaxVertexTextureImageUnits") == 0)
+            Resources.maxVertexTextureImageUnits = value;
+        else if (strcmp(token, "MaxCombinedTextureImageUnits") == 0)
+            Resources.maxCombinedTextureImageUnits = value;
+        else if (strcmp(token, "MaxTextureImageUnits") == 0)
+            Resources.maxTextureImageUnits = value;
+        else if (strcmp(token, "MaxFragmentUniformComponents") == 0)
+            Resources.maxFragmentUniformComponents = value;
+        else if (strcmp(token, "MaxDrawBuffers") == 0)
+            Resources.maxDrawBuffers = value;
+        else if (strcmp(token, "MaxVertexUniformVectors") == 0)
+            Resources.maxVertexUniformVectors = value;
+        else if (strcmp(token, "MaxVaryingVectors") == 0)
+            Resources.maxVaryingVectors = value;
+        else if (strcmp(token, "MaxFragmentUniformVectors") == 0)
+            Resources.maxFragmentUniformVectors = value;
+        else if (strcmp(token, "MaxVertexOutputVectors") == 0)
+            Resources.maxVertexOutputVectors = value;
+        else if (strcmp(token, "MaxFragmentInputVectors") == 0)
+            Resources.maxFragmentInputVectors = value;
+        else if (strcmp(token, "MinProgramTexelOffset") == 0)
+            Resources.minProgramTexelOffset = value;
+        else if (strcmp(token, "MaxProgramTexelOffset") == 0)
+            Resources.maxProgramTexelOffset = value;
+        else
+            printf("Warning: unrecognized limit (%s) in configuration file.\n", token);
+
+        token = strtok(0, delims);
+    }
+    if (configStrings)
+        FreeFileData(configStrings);
 }
 
 // thread-safe list of shaders to asynchronously grab and compile
@@ -131,6 +219,22 @@ int Options = 0;
 bool Delay = false;
 const char* ExecutableName;
 
+//
+// *.conf => this is a config file that can set limits/resources
+//
+bool SetConfigFile(const std::string& name)
+{
+    if (name.size() < 5)
+        return false;
+
+    if (name.substr(name.size() - 5, std::string::npos) == ".conf") {
+        ConfigFile = name;
+        return true;
+    }
+
+    return false;
+}
+
 bool ProcessArguments(int argc, char* argv[])
 {
     ExecutableName = argv[0];
@@ -141,13 +245,16 @@ bool ProcessArguments(int argc, char* argv[])
     argc--;
     argv++;    
     for (; argc >= 1; argc--, argv++) {
+        Work[argc] = 0;
         if (argv[0][0] == '-') {
-            Work[argc] = 0;
             switch (argv[0][1]) {
+            case 'c':
+                Options |= EOptionDumpConfig;
+                break;
             case 'd':
                 Delay = true;                        
                 break;
-            case 'i': 
+            case 'i':
                 Options |= EOptionIntermediate;
                 break;
             case 'l':
@@ -171,14 +278,14 @@ bool ProcessArguments(int argc, char* argv[])
                 return false;
             }
         } else {
-            Work[argc] = new glslang::TWorkItem(std::string(argv[0]));
-            Worklist.add(Work[argc]);
+            std::string name(argv[0]);
+            if (! SetConfigFile(name)) {
+                Work[argc] = new glslang::TWorkItem(name);
+                Worklist.add(Work[argc]);
+            }
         }
     }
 
-    if (Worklist.empty())
-        return false;
-
     return true;
 }
 
@@ -195,9 +302,7 @@ CompileShaders(void*)
         if (compiler == 0)
             return false;
 
-        TBuiltInResource resources;
-        GenerateResources(resources);
-        CompileFile(workItem->name.c_str(), compiler, Options, &resources);
+        CompileFile(workItem->name.c_str(), compiler, Options);
 
         if (! (Options & EOptionSuppressInfolog))
             workItem->results = ShGetInfoLog(compiler);
@@ -225,9 +330,6 @@ void CompileAndLinkShaders()
     if (Options & EOptionIntermediate)
         messages = (EShMessages)(messages | EShMsgAST);
 
-    TBuiltInResource resources;
-    GenerateResources(resources);
-
     //
     // Per-shader processing...
     //
@@ -247,7 +349,7 @@ void CompileAndLinkShaders()
 
         shader->setStrings(shaderStrings, 1);
 
-        shader->parse(&resources, 100, false, messages);
+        shader->parse(&Resources, 100, false, messages);
         
         program.addShader(shader);
 
@@ -295,6 +397,20 @@ int C_DECL main(int argc, char* argv[])
         return EFailUsage;
     }
 
+    if (Options & EOptionDumpConfig) {
+        printf("%s", DefaultConfig);
+        if (Worklist.empty())
+            return ESuccess;
+    }
+
+    if (Worklist.empty()) {
+        usage();
+        return EFailUsage;
+    }
+
+    ProcessConfigFile();
+
+
     //
     // Two modes:
     // 1) linking all arguments together, single-threaded, new C++ interface
@@ -384,7 +500,7 @@ EShLanguage FindLanguage(const std::string& name)
 // Read a file's data into a string, and compile it using the old interface ShCompile, 
 // for non-linkable results.
 //
-bool CompileFile(const char *fileName, ShHandle compiler, int Options, const TBuiltInResource* resources)
+bool CompileFile(const char *fileName, ShHandle compiler, int Options)
 {
     int ret;
     char** shaderStrings = ReadFileData(fileName);
@@ -410,11 +526,11 @@ bool CompileFile(const char *fileName, ShHandle compiler, int Options, const TBu
     
     for (int i = 0; i < ((Options & EOptionMemoryLeakMode) ? 100 : 1); ++i) {
         for (int j = 0; j < ((Options & EOptionMemoryLeakMode) ? 100 : 1); ++j) {
-            //ret = ShCompile(compiler, shaderStrings, NumShaderStrings, lengths, EShOptNone, resources, Options, 100, false, messages);
-            ret = ShCompile(compiler, shaderStrings, NumShaderStrings, 0, EShOptNone, resources, Options, 100, false, messages);
+            //ret = ShCompile(compiler, shaderStrings, NumShaderStrings, lengths, EShOptNone, &Resources, Options, 100, false, messages);
+            ret = ShCompile(compiler, shaderStrings, NumShaderStrings, 0, EShOptNone, &Resources, Options, 100, false, messages);
             //const char* multi[4] = { "# ve", "rsion", " 300 e", "s" };
             //const char* multi[7] = { "/", "/", "\\", "\n", "\n", "#", "version 300 es" };
-            //ret = ShCompile(compiler, multi, 4, 0, EShOptNone, resources, Options, 100, false, messages);
+            //ret = ShCompile(compiler, multi, 4, 0, EShOptNone, &Resources, Options, 100, false, messages);
         }
 
         if (Options & EOptionMemoryLeakMode)
@@ -434,6 +550,8 @@ void usage()
 {
     printf("Usage: glslangValidator [ options ] filename\n"
            "Where: filename is a name ending in\n"
+           "    .conf provides an optional config file that replaces the default configuration\n"
+           "          (see -c option below for generating a template)\n"
            "    .vert for a vertex shader\n"
            "    .tesc for a tessellation control shader\n"
            "    .tese for a tessellation evaluation shader\n"
@@ -442,6 +560,7 @@ void usage()
            "    .comp for a compute shader\n\n"
            "Compilation warnings and errors will be printed to stdout.\n"
            "To get other information, use one of the following options:\n"
+           "-c: configuration dump; use to create default configuration file (redirect to a .conf file)\n"
            "-i: intermediate tree (glslang AST) is printed out\n"
            "-d: delay exit\n"
            "-l: link validation of all input files\n"
diff --git a/Test/baseResults/solidworks.frag.out b/Test/baseResults/solidworks.frag.out
deleted file mode 100644
index 624479c01cc3f5c3ce7e127d0d530da91cd0143f..0000000000000000000000000000000000000000
--- a/Test/baseResults/solidworks.frag.out
+++ /dev/null
@@ -1,2947 +0,0 @@
-0:? Sequence
-0:210  Function Definition: saturate(vf4; (4-component vector of float)
-0:210    Function Parameters: 
-0:210      'value' (in 4-component vector of float)
-0:212    Sequence
-0:212      Branch: Return with expression
-0:212        clamp (4-component vector of float)
-0:212          'value' (in 4-component vector of float)
-0:212          0.000000
-0:212          1.000000
-0:214  Function Definition: saturate(vf3; (3-component vector of float)
-0:214    Function Parameters: 
-0:214      'value' (in 3-component vector of float)
-0:216    Sequence
-0:216      Branch: Return with expression
-0:216        clamp (3-component vector of float)
-0:216          'value' (in 3-component vector of float)
-0:216          0.000000
-0:216          1.000000
-0:218  Function Definition: saturate(vf2; (2-component vector of float)
-0:218    Function Parameters: 
-0:218      'value' (in 2-component vector of float)
-0:220    Sequence
-0:220      Branch: Return with expression
-0:220        clamp (2-component vector of float)
-0:220          'value' (in 2-component vector of float)
-0:220          0.000000
-0:220          1.000000
-0:222  Function Definition: saturate(f1; (float)
-0:222    Function Parameters: 
-0:222      'value' (in float)
-0:224    Sequence
-0:224      Branch: Return with expression
-0:224        clamp (float)
-0:224          'value' (in float)
-0:224          0.000000
-0:224          1.000000
-0:227  Function Definition: SphereMapCoord(vf3; (2-component vector of float)
-0:227    Function Parameters: 
-0:227      'envcoord' (in 3-component vector of float)
-0:229    Sequence
-0:229      Sequence
-0:229        move second child to first child (3-component vector of float)
-0:229          'd' (3-component vector of float)
-0:229          normalize (3-component vector of float)
-0:229            'envcoord' (in 3-component vector of float)
-0:230      Branch: Return with expression
-0:230        Construct vec2 (2-component vector of float)
-0:230          subtract (float)
-0:230            component-wise multiply (float)
-0:230              component-wise multiply (float)
-0:230                arc tangent (float)
-0:230                  direct index (float)
-0:230                    'd' (3-component vector of float)
-0:230                    2 (const int)
-0:230                  direct index (float)
-0:230                    'd' (3-component vector of float)
-0:230                    0 (const int)
-0:230                0.318309
-0:230              0.500000
-0:230            0.250000
-0:230          add (float)
-0:230            component-wise multiply (float)
-0:230              arc sine (float)
-0:230                direct index (float)
-0:230                  'd' (3-component vector of float)
-0:230                  1 (const int)
-0:230              0.318309
-0:230            0.500000
-0:233  Function Definition: Flip(vf2;b1; (2-component vector of float)
-0:233    Function Parameters: 
-0:233      'coord' (in 2-component vector of float)
-0:233      'envmapFlip' (const (read only) bool)
-0:235    Sequence
-0:235      Test condition and select (void)
-0:235        Condition
-0:235        'envmapFlip' (const (read only) bool)
-0:235        true case
-0:235        Branch: Return with expression
-0:235          Construct vec2 (2-component vector of float)
-0:235            direct index (float)
-0:235              'coord' (in 2-component vector of float)
-0:235              0 (const int)
-0:235            subtract (float)
-0:235              1.000000
-0:235              direct index (float)
-0:235                'coord' (in 2-component vector of float)
-0:235                1 (const int)
-0:235        false case
-0:236        Branch: Return with expression
-0:236          'coord' (in 2-component vector of float)
-0:239  Function Definition: Affine(vf4; (3-component vector of float)
-0:239    Function Parameters: 
-0:239      'v' (in 4-component vector of float)
-0:241    Sequence
-0:241      Branch: Return with expression
-0:241        vector-scale (3-component vector of float)
-0:241          vector swizzle (3-component vector of float)
-0:241            'v' (in 4-component vector of float)
-0:241            Sequence
-0:241              0 (const int)
-0:241              1 (const int)
-0:241              2 (const int)
-0:241          divide (float)
-0:241            1.000000
-0:241            direct index (float)
-0:241              'v' (in 4-component vector of float)
-0:241              3 (const int)
-0:246  Function Definition: myExp(f1; (float)
-0:246    Function Parameters: 
-0:246      'x' (in float)
-0:246    Sequence
-0:246      Branch: Return with expression
-0:246        pow (float)
-0:246          2.718282
-0:246          'x' (in float)
-0:247  Function Definition: myLog(f1; (float)
-0:247    Function Parameters: 
-0:247      'x' (in float)
-0:247    Sequence
-0:247      Branch: Return with expression
-0:247        log (float)
-0:247          'x' (in float)
-0:249  Function Definition: myExpBase(f1;f1; (float)
-0:249    Function Parameters: 
-0:249      'x' (in float)
-0:249      'base' (in float)
-0:249    Sequence
-0:249      Branch: Return with expression
-0:249        pow (float)
-0:249          'base' (in float)
-0:249          'x' (in float)
-0:250  Function Definition: myLogBase(f1;f1; (float)
-0:250    Function Parameters: 
-0:250      'x' (in float)
-0:250      'base' (in float)
-0:250    Sequence
-0:250      Branch: Return with expression
-0:250        divide (float)
-0:250          log (float)
-0:250            'x' (in float)
-0:250          log (float)
-0:250            'base' (in float)
-0:255  Function Definition: GetLuminance(vf3; (float)
-0:255    Function Parameters: 
-0:255      'color' (in 3-component vector of float)
-0:257    Sequence
-0:257      Branch: Return with expression
-0:257        max (float)
-0:257          dot-product (float)
-0:257            0.300000
-0:257            0.590000
-0:257            0.110000
-0:257            'color' (in 3-component vector of float)
-0:257          0.000000
-0:261  Function Definition: nonZeroSign(f1; (float)
-0:261    Function Parameters: 
-0:261      'x' (in float)
-0:263    Sequence
-0:263      Branch: Return with expression
-0:263        Test condition and select (const float)
-0:263          Condition
-0:263          Compare Less Than (bool)
-0:263            'x' (in float)
-0:263            0.000000
-0:263          true case
-0:263          -1.000000
-0:263          false case
-0:263          1.000000
-0:266  Function Definition: ApplyMat2D(vf2;mf44; (2-component vector of float)
-0:266    Function Parameters: 
-0:266      'v' (in 2-component vector of float)
-0:266      'm' (in 4X4 matrix of float)
-0:268    Sequence
-0:268      Branch: Return with expression
-0:268        vector swizzle (2-component vector of float)
-0:268          matrix-times-vector (4-component vector of float)
-0:268            'm' (in 4X4 matrix of float)
-0:268            Construct vec4 (4-component vector of float)
-0:268              'v' (in 2-component vector of float)
-0:268              0.000000
-0:268              1.000000
-0:268          Sequence
-0:268            0 (const int)
-0:268            1 (const int)
-0:272  Function Definition: saturateLight(vf4; (4-component vector of float)
-0:272    Function Parameters: 
-0:272      'value' (in 4-component vector of float)
-0:275    Sequence
-0:275      Branch: Return with expression
-0:275        Function Call: saturate(vf4; (4-component vector of float)
-0:275          'value' (in 4-component vector of float)
-0:277  Function Definition: saturateLight(vf3; (3-component vector of float)
-0:277    Function Parameters: 
-0:277      'value' (in 3-component vector of float)
-0:280    Sequence
-0:280      Branch: Return with expression
-0:280        Function Call: saturate(vf3; (3-component vector of float)
-0:280          'value' (in 3-component vector of float)
-0:282  Function Definition: saturateLight(vf2; (2-component vector of float)
-0:282    Function Parameters: 
-0:282      'value' (in 2-component vector of float)
-0:285    Sequence
-0:285      Branch: Return with expression
-0:285        Function Call: saturate(vf2; (2-component vector of float)
-0:285          'value' (in 2-component vector of float)
-0:287  Function Definition: saturateLight(f1; (float)
-0:287    Function Parameters: 
-0:287      'value' (in float)
-0:290    Sequence
-0:290      Branch: Return with expression
-0:290        Function Call: saturate(f1; (float)
-0:290          'value' (in float)
-0:293  Function Definition: SetSwizzleInW(vf3;vf4;vf4;vf4; (void)
-0:293    Function Parameters: 
-0:293      'value' (in 3-component vector of float)
-0:293      'vx' (inout 4-component vector of float)
-0:293      'vy' (inout 4-component vector of float)
-0:293      'vz' (inout 4-component vector of float)
-0:295    Sequence
-0:295      move second child to first child (float)
-0:295        direct index (float)
-0:295          'vx' (inout 4-component vector of float)
-0:295          3 (const int)
-0:295        direct index (float)
-0:295          'value' (in 3-component vector of float)
-0:295          0 (const int)
-0:296      move second child to first child (float)
-0:296        direct index (float)
-0:296          'vy' (inout 4-component vector of float)
-0:296          3 (const int)
-0:296        direct index (float)
-0:296          'value' (in 3-component vector of float)
-0:296          1 (const int)
-0:297      move second child to first child (float)
-0:297        direct index (float)
-0:297          'vz' (inout 4-component vector of float)
-0:297          3 (const int)
-0:297        direct index (float)
-0:297          'value' (in 3-component vector of float)
-0:297          2 (const int)
-0:299  Function Definition: GetSwizzleInW(vf4;vf4;vf4; (3-component vector of float)
-0:299    Function Parameters: 
-0:299      'vx' (in 4-component vector of float)
-0:299      'vy' (in 4-component vector of float)
-0:299      'vz' (in 4-component vector of float)
-0:301    Sequence
-0:301      Branch: Return with expression
-0:301        Construct vec3 (3-component vector of float)
-0:301          direct index (float)
-0:301            'vx' (in 4-component vector of float)
-0:301            3 (const int)
-0:301          direct index (float)
-0:301            'vy' (in 4-component vector of float)
-0:301            3 (const int)
-0:301          direct index (float)
-0:301            'vz' (in 4-component vector of float)
-0:301            3 (const int)
-0:304  Function Definition: Max3(vf3; (float)
-0:304    Function Parameters: 
-0:304      'lightSpec' (in 3-component vector of float)
-0:306    Sequence
-0:306      Sequence
-0:306        move second child to first child (float)
-0:306          'maxSpec' (float)
-0:306          Test condition and select (float)
-0:306            Condition
-0:306            Compare Greater Than (bool)
-0:306              direct index (float)
-0:306                'lightSpec' (in 3-component vector of float)
-0:306                0 (const int)
-0:306              direct index (float)
-0:306                'lightSpec' (in 3-component vector of float)
-0:306                1 (const int)
-0:306            true case
-0:306            direct index (float)
-0:306              'lightSpec' (in 3-component vector of float)
-0:306              0 (const int)
-0:306            false case
-0:306            direct index (float)
-0:306              'lightSpec' (in 3-component vector of float)
-0:306              1 (const int)
-0:307      Test condition and select (void)
-0:307        Condition
-0:307        Compare Greater Than (bool)
-0:307          direct index (float)
-0:307            'lightSpec' (in 3-component vector of float)
-0:307            2 (const int)
-0:307          'maxSpec' (float)
-0:307        true case
-0:307        move second child to first child (float)
-0:307          'maxSpec' (float)
-0:307          direct index (float)
-0:307            'lightSpec' (in 3-component vector of float)
-0:307            2 (const int)
-0:308      Branch: Return with expression
-0:308        'maxSpec' (float)
-0:311  Function Definition: pGetProjectedPosition(vf4;mf44; (4-component vector of float)
-0:311    Function Parameters: 
-0:311      'oPosition' (in 4-component vector of float)
-0:311      'o2pMatrix' (in 4X4 matrix of float)
-0:313    Sequence
-0:313      Branch: Return with expression
-0:313        matrix-times-vector (4-component vector of float)
-0:313          'o2pMatrix' (in 4X4 matrix of float)
-0:313          'oPosition' (in 4-component vector of float)
-0:316  Function Definition: eGetNormal(vf3;mf33;b1; (3-component vector of float)
-0:316    Function Parameters: 
-0:316      'oNormal' (in 3-component vector of float)
-0:316      'o2eMatrix' (in 3X3 matrix of float)
-0:316      'bDoubleSided' (in bool)
-0:318    Sequence
-0:318      Sequence
-0:318        move second child to first child (3-component vector of float)
-0:318          'normal' (3-component vector of float)
-0:318          normalize (3-component vector of float)
-0:318            matrix-times-vector (3-component vector of float)
-0:318              'o2eMatrix' (in 3X3 matrix of float)
-0:318              'oNormal' (in 3-component vector of float)
-0:320      Test condition and select (void)
-0:320        Condition
-0:320        logical-and (bool)
-0:320          Compare Less Than (bool)
-0:320            direct index (float)
-0:320              'normal' (3-component vector of float)
-0:320              2 (const int)
-0:320            0.000000
-0:320          'bDoubleSided' (in bool)
-0:320        true case
-0:322        Sequence
-0:322          move second child to first child (3-component vector of float)
-0:322            'normal' (3-component vector of float)
-0:322            Negate value (3-component vector of float)
-0:322              'normal' (3-component vector of float)
-0:324      Branch: Return with expression
-0:324        'normal' (3-component vector of float)
-0:326  Function Definition: t2eGetMatrixTBN(mf33;vf3;vf3;b1; (3X3 matrix of float)
-0:326    Function Parameters: 
-0:326      'o2eMatrix' (in 3X3 matrix of float)
-0:326      'oNormal' (in 3-component vector of float)
-0:326      'oTangent' (in 3-component vector of float)
-0:326      'bDoubleSided' (in bool)
-0:?     Sequence
-0:331      move second child to first child (3-component vector of float)
-0:331        direct index (3-component vector of float)
-0:331          'res' (3X3 matrix of float)
-0:331          2 (const int)
-0:331        normalize (3-component vector of float)
-0:331          matrix-times-vector (3-component vector of float)
-0:331            'o2eMatrix' (in 3X3 matrix of float)
-0:331            'oNormal' (in 3-component vector of float)
-0:332      move second child to first child (3-component vector of float)
-0:332        direct index (3-component vector of float)
-0:332          'res' (3X3 matrix of float)
-0:332          0 (const int)
-0:332        normalize (3-component vector of float)
-0:332          matrix-times-vector (3-component vector of float)
-0:332            'o2eMatrix' (in 3X3 matrix of float)
-0:332            'oTangent' (in 3-component vector of float)
-0:333      move second child to first child (3-component vector of float)
-0:333        direct index (3-component vector of float)
-0:333          'res' (3X3 matrix of float)
-0:333          1 (const int)
-0:333        normalize (3-component vector of float)
-0:333          cross-product (3-component vector of float)
-0:333            direct index (3-component vector of float)
-0:333              'res' (3X3 matrix of float)
-0:333              0 (const int)
-0:333            direct index (3-component vector of float)
-0:333              'res' (3X3 matrix of float)
-0:333              2 (const int)
-0:334      move second child to first child (3-component vector of float)
-0:334        direct index (3-component vector of float)
-0:334          'res' (3X3 matrix of float)
-0:334          0 (const int)
-0:334        normalize (3-component vector of float)
-0:334          cross-product (3-component vector of float)
-0:334            direct index (3-component vector of float)
-0:334              'res' (3X3 matrix of float)
-0:334              2 (const int)
-0:334            direct index (3-component vector of float)
-0:334              'res' (3X3 matrix of float)
-0:334              1 (const int)
-0:336      Test condition and select (void)
-0:336        Condition
-0:336        logical-and (bool)
-0:336          Compare Less Than (bool)
-0:336            direct index (float)
-0:336              direct index (3-component vector of float)
-0:336                'res' (3X3 matrix of float)
-0:336                2 (const int)
-0:336              2 (const int)
-0:336            0.000000
-0:336          'bDoubleSided' (in bool)
-0:336        true case
-0:338        Sequence
-0:338          move second child to first child (3-component vector of float)
-0:338            direct index (3-component vector of float)
-0:338              'res' (3X3 matrix of float)
-0:338              2 (const int)
-0:338            Negate value (3-component vector of float)
-0:338              direct index (3-component vector of float)
-0:338                'res' (3X3 matrix of float)
-0:338                2 (const int)
-0:340      Branch: Return with expression
-0:340        'res' (3X3 matrix of float)
-0:342  Function Definition: CreateMatrixTBN(vf3;vf3;b1; (3X3 matrix of float)
-0:342    Function Parameters: 
-0:342      'eTangent' (in 3-component vector of float)
-0:342      'eNormal' (in 3-component vector of float)
-0:342      'bDoubleSided' (in bool)
-0:?     Sequence
-0:347      move second child to first child (3-component vector of float)
-0:347        direct index (3-component vector of float)
-0:347          'res' (3X3 matrix of float)
-0:347          2 (const int)
-0:347        'eNormal' (in 3-component vector of float)
-0:348      move second child to first child (3-component vector of float)
-0:348        direct index (3-component vector of float)
-0:348          'res' (3X3 matrix of float)
-0:348          0 (const int)
-0:348        'eTangent' (in 3-component vector of float)
-0:349      move second child to first child (3-component vector of float)
-0:349        direct index (3-component vector of float)
-0:349          'res' (3X3 matrix of float)
-0:349          1 (const int)
-0:349        Negate value (3-component vector of float)
-0:349          normalize (3-component vector of float)
-0:349            cross-product (3-component vector of float)
-0:349              direct index (3-component vector of float)
-0:349                'res' (3X3 matrix of float)
-0:349                2 (const int)
-0:349              direct index (3-component vector of float)
-0:349                'res' (3X3 matrix of float)
-0:349                0 (const int)
-0:351      Test condition and select (void)
-0:351        Condition
-0:351        logical-and (bool)
-0:351          Compare Less Than (bool)
-0:351            direct index (float)
-0:351              direct index (3-component vector of float)
-0:351                'res' (3X3 matrix of float)
-0:351                2 (const int)
-0:351              2 (const int)
-0:351            0.000000
-0:351          'bDoubleSided' (in bool)
-0:351        true case
-0:353        Sequence
-0:353          move second child to first child (3-component vector of float)
-0:353            direct index (3-component vector of float)
-0:353              'res' (3X3 matrix of float)
-0:353              2 (const int)
-0:353            Negate value (3-component vector of float)
-0:353              direct index (3-component vector of float)
-0:353                'res' (3X3 matrix of float)
-0:353                2 (const int)
-0:355      Branch: Return with expression
-0:355        'res' (3X3 matrix of float)
-0:357  Function Definition: tGetBumpNormal(s21;vf2;b1; (3-component vector of float)
-0:357    Function Parameters: 
-0:357      'normalMap' (in sampler2D)
-0:357      'commonCoord' (in 2-component vector of float)
-0:357      'bNormalHack' (in bool)
-0:359    Sequence
-0:359      Sequence
-0:359        move second child to first child (3-component vector of float)
-0:359          'tBumpNormal' (3-component vector of float)
-0:359          subtract (3-component vector of float)
-0:359            vector-scale (3-component vector of float)
-0:359              2.000000
-0:359              Construct vec3 (3-component vector of float)
-0:359                Function Call: texture2D(s21;vf2; (4-component vector of float)
-0:359                  'normalMap' (in sampler2D)
-0:359                  'commonCoord' (in 2-component vector of float)
-0:359            1.000000
-0:359            1.000000
-0:359            1.000000
-0:360      Test condition and select (void)
-0:360        Condition
-0:360        'bNormalHack' (in bool)
-0:360        true case
-0:362        Sequence
-0:362          vector scale second child into first child (3-component vector of float)
-0:362            'tBumpNormal' (3-component vector of float)
-0:362            0.800000
-0:364      Branch: Return with expression
-0:364        normalize (3-component vector of float)
-0:364          'tBumpNormal' (3-component vector of float)
-0:366  Function Definition: tGetBumpMapNormal(s21;vf2;b1;f1; (3-component vector of float)
-0:366    Function Parameters: 
-0:366      'normalMap' (in sampler2D)
-0:366      'commonCoord' (in 2-component vector of float)
-0:366      'bNormalHack' (in bool)
-0:366      'scale' (in float)
-0:368    Sequence
-0:368      Sequence
-0:368        move second child to first child (float)
-0:368          'up' (float)
-0:368          direct index (float)
-0:368            Construct vec3 (3-component vector of float)
-0:368              Function Call: texture2D(s21;vf2; (4-component vector of float)
-0:368                'normalMap' (in sampler2D)
-0:368                Construct vec2 (2-component vector of float)
-0:368                  direct index (float)
-0:368                    'commonCoord' (in 2-component vector of float)
-0:368                    0 (const int)
-0:368                  add (float)
-0:368                    direct index (float)
-0:368                      'commonCoord' (in 2-component vector of float)
-0:368                      1 (const int)
-0:368                    0.010000
-0:368            0 (const int)
-0:369      Sequence
-0:369        move second child to first child (float)
-0:369          'down' (float)
-0:369          direct index (float)
-0:369            Construct vec3 (3-component vector of float)
-0:369              Function Call: texture2D(s21;vf2; (4-component vector of float)
-0:369                'normalMap' (in sampler2D)
-0:369                Construct vec2 (2-component vector of float)
-0:369                  direct index (float)
-0:369                    'commonCoord' (in 2-component vector of float)
-0:369                    0 (const int)
-0:369                  subtract (float)
-0:369                    direct index (float)
-0:369                      'commonCoord' (in 2-component vector of float)
-0:369                      1 (const int)
-0:369                    0.010000
-0:369            0 (const int)
-0:370      Sequence
-0:370        move second child to first child (float)
-0:370          'left' (float)
-0:370          direct index (float)
-0:370            Construct vec3 (3-component vector of float)
-0:370              Function Call: texture2D(s21;vf2; (4-component vector of float)
-0:370                'normalMap' (in sampler2D)
-0:370                Construct vec2 (2-component vector of float)
-0:370                  subtract (float)
-0:370                    direct index (float)
-0:370                      'commonCoord' (in 2-component vector of float)
-0:370                      0 (const int)
-0:370                    0.010000
-0:370                  direct index (float)
-0:370                    'commonCoord' (in 2-component vector of float)
-0:370                    1 (const int)
-0:370            0 (const int)
-0:371      Sequence
-0:371        move second child to first child (float)
-0:371          'right' (float)
-0:371          direct index (float)
-0:371            Construct vec3 (3-component vector of float)
-0:371              Function Call: texture2D(s21;vf2; (4-component vector of float)
-0:371                'normalMap' (in sampler2D)
-0:371                Construct vec2 (2-component vector of float)
-0:371                  add (float)
-0:371                    direct index (float)
-0:371                      'commonCoord' (in 2-component vector of float)
-0:371                      0 (const int)
-0:371                    0.010000
-0:371                  direct index (float)
-0:371                    'commonCoord' (in 2-component vector of float)
-0:371                    1 (const int)
-0:371            0 (const int)
-0:372      Sequence
-0:372        move second child to first child (3-component vector of float)
-0:372          'tBumpNormal' (3-component vector of float)
-0:372          Construct vec3 (3-component vector of float)
-0:372            subtract (float)
-0:372              'right' (float)
-0:372              'left' (float)
-0:372            subtract (float)
-0:372              'down' (float)
-0:372              'up' (float)
-0:372            'scale' (in float)
-0:373      Branch: Return with expression
-0:373        normalize (3-component vector of float)
-0:373          'tBumpNormal' (3-component vector of float)
-0:381  Function Definition: GetEyeInfo(vf4;mf44; (structure)
-0:381    Function Parameters: 
-0:381      'oPosition' (in 4-component vector of float)
-0:381      'o2eMatrix' (in 4X4 matrix of float)
-0:?     Sequence
-0:384      move second child to first child (4-component vector of float)
-0:384        ePosition: direct index for structure (4-component vector of float)
-0:384          'res' (structure)
-0:384          0 (const int)
-0:384        matrix-times-vector (4-component vector of float)
-0:384          'o2eMatrix' (in 4X4 matrix of float)
-0:384          'oPosition' (in 4-component vector of float)
-0:385      move second child to first child (3-component vector of float)
-0:385        eEyeDirection: direct index for structure (3-component vector of float)
-0:385          'res' (structure)
-0:385          1 (const int)
-0:385        normalize (3-component vector of float)
-0:385          vector swizzle (3-component vector of float)
-0:385            ePosition: direct index for structure (4-component vector of float)
-0:385              'res' (structure)
-0:385              0 (const int)
-0:385            Sequence
-0:385              0 (const int)
-0:385              1 (const int)
-0:385              2 (const int)
-0:387      Branch: Return with expression
-0:387        'res' (structure)
-0:390  Function Definition: eGetReflection(vf3;vf3;vf3; (3-component vector of float)
-0:390    Function Parameters: 
-0:390      'eNormal' (in 3-component vector of float)
-0:390      'eEnvEyePosition' (in 3-component vector of float)
-0:390      'eEyeCoordPosition' (in 3-component vector of float)
-0:392    Sequence
-0:392      Sequence
-0:392        move second child to first child (3-component vector of float)
-0:392          'viewVec' (3-component vector of float)
-0:392          subtract (3-component vector of float)
-0:392            'eEyeCoordPosition' (in 3-component vector of float)
-0:392            'eEnvEyePosition' (in 3-component vector of float)
-0:393      Branch: Return with expression
-0:393        subtract (3-component vector of float)
-0:393          'viewVec' (3-component vector of float)
-0:393          vector-scale (3-component vector of float)
-0:393            vector-scale (3-component vector of float)
-0:393              2.000000
-0:393              'eNormal' (in 3-component vector of float)
-0:393            dot-product (float)
-0:393              'eNormal' (in 3-component vector of float)
-0:393              'viewVec' (3-component vector of float)
-0:397  Function Definition: oGetAutomaticTangent(vf3;mf44; (3-component vector of float)
-0:397    Function Parameters: 
-0:397      'nNormal' (in 3-component vector of float)
-0:397      'n2oMatrix' (in 4X4 matrix of float)
-0:400    Sequence
-0:400      Sequence
-0:400        move second child to first child (3-component vector of float)
-0:400          'nAbsnormal' (3-component vector of float)
-0:400          Absolute value (3-component vector of float)
-0:400            'nNormal' (in 3-component vector of float)
-0:403      Sequence
-0:403        move second child to first child (3-component vector of float)
-0:403          'teststep' (3-component vector of float)
-0:403          step (3-component vector of float)
-0:403            0.000000
-0:403            0.000000
-0:403            0.000000
-0:403            subtract (3-component vector of float)
-0:403              'nAbsnormal' (3-component vector of float)
-0:403              vector swizzle (3-component vector of float)
-0:403                'nAbsnormal' (3-component vector of float)
-0:403                Sequence
-0:403                  1 (const int)
-0:403                  2 (const int)
-0:403                  0 (const int)
-0:404      Sequence
-0:404        move second child to first child (3-component vector of float)
-0:404          'teststep2' (3-component vector of float)
-0:404          subtract (3-component vector of float)
-0:404            1.000000
-0:404            1.000000
-0:404            1.000000
-0:404            vector swizzle (3-component vector of float)
-0:404              'teststep' (3-component vector of float)
-0:404              Sequence
-0:404                2 (const int)
-0:404                0 (const int)
-0:404                1 (const int)
-0:405      Sequence
-0:405        move second child to first child (3-component vector of float)
-0:405          'cmp' (3-component vector of float)
-0:405          component-wise multiply (3-component vector of float)
-0:405            'teststep' (3-component vector of float)
-0:405            'teststep2' (3-component vector of float)
-0:408      Test condition and select (void)
-0:408        Condition
-0:408        Compare Equal (bool)
-0:408          direct index (float)
-0:408            'cmp' (3-component vector of float)
-0:408            2 (const int)
-0:408          1.000000
-0:408        true case
-0:410        Sequence
-0:410          Branch: Return with expression
-0:410            1.000000
-0:410            0.000000
-0:410            0.000000
-0:412      Sequence
-0:412        move second child to first child (float)
-0:412          'nSign' (float)
-0:412          dot-product (float)
-0:412            Sign (3-component vector of float)
-0:412              'nNormal' (in 3-component vector of float)
-0:412            'cmp' (3-component vector of float)
-0:413      Test condition and select (void)
-0:413        Condition
-0:413        Compare Equal (bool)
-0:413          direct index (float)
-0:413            'cmp' (3-component vector of float)
-0:413            1 (const int)
-0:413          1.000000
-0:413        true case
-0:414        Branch: Return with expression
-0:414          Construct vec3 (3-component vector of float)
-0:414            Negate value (float)
-0:414              'nSign' (float)
-0:414            0.000000
-0:414            0.000000
-0:413        false case
-0:416        Branch: Return with expression
-0:416          Construct vec3 (3-component vector of float)
-0:416            0.000000
-0:416            'nSign' (float)
-0:416            0.000000
-0:418  Function Definition: xGetAutomaticTexCoords(vf3;vf3;mf44; (2-component vector of float)
-0:418    Function Parameters: 
-0:418      'nPos' (in 3-component vector of float)
-0:418      'nNormal' (in 3-component vector of float)
-0:418      'n2xMatrix' (in 4X4 matrix of float)
-0:421    Sequence
-0:421      Sequence
-0:421        move second child to first child (3-component vector of float)
-0:421          'nAbsnormal' (3-component vector of float)
-0:421          Absolute value (3-component vector of float)
-0:421            'nNormal' (in 3-component vector of float)
-0:424      Sequence
-0:424        move second child to first child (3-component vector of float)
-0:424          'teststep' (3-component vector of float)
-0:424          step (3-component vector of float)
-0:424            0.000000
-0:424            0.000000
-0:424            0.000000
-0:424            subtract (3-component vector of float)
-0:424              'nAbsnormal' (3-component vector of float)
-0:424              vector swizzle (3-component vector of float)
-0:424                'nAbsnormal' (3-component vector of float)
-0:424                Sequence
-0:424                  1 (const int)
-0:424                  2 (const int)
-0:424                  0 (const int)
-0:425      Sequence
-0:425        move second child to first child (3-component vector of float)
-0:425          'teststep2' (3-component vector of float)
-0:425          subtract (3-component vector of float)
-0:425            1.000000
-0:425            1.000000
-0:425            1.000000
-0:425            vector swizzle (3-component vector of float)
-0:425              'teststep' (3-component vector of float)
-0:425              Sequence
-0:425                2 (const int)
-0:425                0 (const int)
-0:425                1 (const int)
-0:426      Sequence
-0:426        move second child to first child (3-component vector of float)
-0:426          'cmp' (3-component vector of float)
-0:426          component-wise multiply (3-component vector of float)
-0:426            'teststep' (3-component vector of float)
-0:426            'teststep2' (3-component vector of float)
-0:429      Sequence
-0:429        move second child to first child (3-component vector of float)
-0:429          'nNormalsign' (3-component vector of float)
-0:429          Sign (3-component vector of float)
-0:429            'nNormal' (in 3-component vector of float)
-0:432      multiply second child into first child (float)
-0:432        direct index (float)
-0:432          'nNormalsign' (3-component vector of float)
-0:432          1 (const int)
-0:432        -1.000000
-0:433      multiply second child into first child (float)
-0:433        direct index (float)
-0:433          'cmp' (3-component vector of float)
-0:433          2 (const int)
-0:433        direct index (float)
-0:433          'nNormalsign' (3-component vector of float)
-0:433          2 (const int)
-0:434      Sequence
-0:434        move second child to first child (2-component vector of float)
-0:434          'nTexcoord' (2-component vector of float)
-0:434          Construct vec2 (2-component vector of float)
-0:434            dot-product (float)
-0:434              component-wise multiply (3-component vector of float)
-0:434                'nNormalsign' (3-component vector of float)
-0:434                vector swizzle (3-component vector of float)
-0:434                  'nPos' (in 3-component vector of float)
-0:434                  Sequence
-0:434                    1 (const int)
-0:434                    0 (const int)
-0:434                    0 (const int)
-0:434              'cmp' (3-component vector of float)
-0:434            dot-product (float)
-0:434              vector swizzle (3-component vector of float)
-0:434                'nPos' (in 3-component vector of float)
-0:434                Sequence
-0:434                  2 (const int)
-0:434                  2 (const int)
-0:434                  1 (const int)
-0:434              'cmp' (3-component vector of float)
-0:437      Branch: Return with expression
-0:437        Function Call: ApplyMat2D(vf2;mf44; (2-component vector of float)
-0:437          'nTexcoord' (2-component vector of float)
-0:437          'n2xMatrix' (in 4X4 matrix of float)
-0:440  Function Definition: oGetCylindricalTangent(vf3;mf44; (3-component vector of float)
-0:440    Function Parameters: 
-0:440      'nPos' (in 3-component vector of float)
-0:440      'n2oMatrix' (in 4X4 matrix of float)
-0:443    Sequence
-0:443      Sequence
-0:443        move second child to first child (float)
-0:443          'l' (float)
-0:443          length (float)
-0:443            vector swizzle (2-component vector of float)
-0:443              'nPos' (in 3-component vector of float)
-0:443              Sequence
-0:443                0 (const int)
-0:443                2 (const int)
-0:444      Sequence
-0:444        move second child to first child (2-component vector of float)
-0:444          'nCylnormal' (2-component vector of float)
-0:444          divide (2-component vector of float)
-0:444            vector swizzle (2-component vector of float)
-0:444              'nPos' (in 3-component vector of float)
-0:444              Sequence
-0:444                0 (const int)
-0:444                2 (const int)
-0:444            add (float)
-0:444              'l' (float)
-0:444              0.001000
-0:446      Branch: Return with expression
-0:446        vector swizzle (3-component vector of float)
-0:446          matrix-times-vector (4-component vector of float)
-0:446            'n2oMatrix' (in 4X4 matrix of float)
-0:446            Construct vec4 (4-component vector of float)
-0:446              direct index (float)
-0:446                'nCylnormal' (2-component vector of float)
-0:446                1 (const int)
-0:446              0.000000
-0:446              Negate value (float)
-0:446                direct index (float)
-0:446                  'nCylnormal' (2-component vector of float)
-0:446                  0 (const int)
-0:446              0.000000
-0:446          Sequence
-0:446            0 (const int)
-0:446            1 (const int)
-0:446            2 (const int)
-0:448  Function Definition: xGetCylindricalTexCoords(vf3;mf44; (2-component vector of float)
-0:448    Function Parameters: 
-0:448      'nPos' (in 3-component vector of float)
-0:448      'n2xMatrix' (in 4X4 matrix of float)
-0:450    Sequence
-0:450      Sequence
-0:450        move second child to first child (2-component vector of float)
-0:450          'nDir' (2-component vector of float)
-0:450          normalize (2-component vector of float)
-0:450            vector swizzle (2-component vector of float)
-0:450              'nPos' (in 3-component vector of float)
-0:450              Sequence
-0:450                0 (const int)
-0:450                2 (const int)
-0:451      Sequence
-0:451        move second child to first child (float)
-0:451          'angle' (float)
-0:451          component-wise multiply (float)
-0:451            arc cosine (float)
-0:451              Negate value (float)
-0:451                direct index (float)
-0:451                  'nDir' (2-component vector of float)
-0:451                  0 (const int)
-0:451            Function Call: nonZeroSign(f1; (float)
-0:451              direct index (float)
-0:451                'nDir' (2-component vector of float)
-0:451                1 (const int)
-0:452      Sequence
-0:452        move second child to first child (2-component vector of float)
-0:452          'nTexcoord' (2-component vector of float)
-0:452          Construct vec2 (2-component vector of float)
-0:452            component-wise multiply (float)
-0:452              component-wise multiply (float)
-0:452                0.159155
-0:452                add (float)
-0:452                  3.141592
-0:452                  'angle' (float)
-0:452              'faceWidth' (uniform float)
-0:452            direct index (float)
-0:452              'nPos' (in 3-component vector of float)
-0:452              1 (const int)
-0:453      Branch: Return with expression
-0:453        Function Call: ApplyMat2D(vf2;mf44; (2-component vector of float)
-0:453          'nTexcoord' (2-component vector of float)
-0:453          'n2xMatrix' (in 4X4 matrix of float)
-0:455  Function Definition: xGetSphericalTexCoords(vf3;mf44; (2-component vector of float)
-0:455    Function Parameters: 
-0:455      'nDir' (in 3-component vector of float)
-0:455      'n2xMatrix' (in 4X4 matrix of float)
-0:457    Sequence
-0:457      move second child to first child (3-component vector of float)
-0:457        'nDir' (in 3-component vector of float)
-0:457        normalize (3-component vector of float)
-0:457          'nDir' (in 3-component vector of float)
-0:458      Sequence
-0:458        move second child to first child (2-component vector of float)
-0:458          'nTexcoord' (2-component vector of float)
-0:458          vector-scale (2-component vector of float)
-0:458            component-wise multiply (float)
-0:458              'faceWidth' (uniform float)
-0:458              0.318309
-0:458            Construct vec2 (2-component vector of float)
-0:458              subtract (float)
-0:458                1.570796
-0:458                component-wise multiply (float)
-0:458                  arc tangent (float)
-0:458                    direct index (float)
-0:458                      'nDir' (in 3-component vector of float)
-0:458                      2 (const int)
-0:458                    Negate value (float)
-0:458                      direct index (float)
-0:458                        'nDir' (in 3-component vector of float)
-0:458                        0 (const int)
-0:458                  0.500000
-0:458              arc cosine (float)
-0:458                direct index (float)
-0:458                  'nDir' (in 3-component vector of float)
-0:458                  1 (const int)
-0:459      Branch: Return with expression
-0:459        Function Call: ApplyMat2D(vf2;mf44; (2-component vector of float)
-0:459          'nTexcoord' (2-component vector of float)
-0:459          'n2xMatrix' (in 4X4 matrix of float)
-0:462  Function Definition: oGetProjectedTangent(mf44; (3-component vector of float)
-0:462    Function Parameters: 
-0:462      'n2oMatrix' (in 4X4 matrix of float)
-0:464    Sequence
-0:464      Branch: Return with expression
-0:464        normalize (3-component vector of float)
-0:464          vector swizzle (3-component vector of float)
-0:464            direct index (in 4-component vector of float)
-0:464              'n2oMatrix' (in 4X4 matrix of float)
-0:464              0 (const int)
-0:464            Sequence
-0:464              0 (const int)
-0:464              1 (const int)
-0:464              2 (const int)
-0:466  Function Definition: xGetPlanarTexCoords(vf4;mf44; (2-component vector of float)
-0:466    Function Parameters: 
-0:466      'nPos' (in 4-component vector of float)
-0:466      'n2xMatrix' (in 4X4 matrix of float)
-0:468    Sequence
-0:468      Branch: Return with expression
-0:468        Function Call: ApplyMat2D(vf2;mf44; (2-component vector of float)
-0:468          vector swizzle (2-component vector of float)
-0:468            'nPos' (in 4-component vector of float)
-0:468            Sequence
-0:468              0 (const int)
-0:468              1 (const int)
-0:468          'n2xMatrix' (in 4X4 matrix of float)
-0:471  Function Definition: xGetSurfaceTexCoords(vf4;mf44; (2-component vector of float)
-0:471    Function Parameters: 
-0:471      'nTexCoord' (in 4-component vector of float)
-0:471      'n2xMatrix' (in 4X4 matrix of float)
-0:473    Sequence
-0:473      Branch: Return with expression
-0:473        Function Call: ApplyMat2D(vf2;mf44; (2-component vector of float)
-0:473          vector swizzle (2-component vector of float)
-0:473            'nTexCoord' (in 4-component vector of float)
-0:473            Sequence
-0:473              0 (const int)
-0:473              1 (const int)
-0:473          'n2xMatrix' (in 4X4 matrix of float)
-0:477  Function Definition: GetCommonTexCoord(vf4;vf4;i1;mf44;mf44; (3-component vector of float)
-0:477    Function Parameters: 
-0:477      'texCoord' (in 4-component vector of float)
-0:477      'vertex' (in 4-component vector of float)
-0:477      'iTextureCoordinates' (in int)
-0:477      'textureMatrix' (in 4X4 matrix of float)
-0:477      'o2nMatrix' (in 4X4 matrix of float)
-0:?     Sequence
-0:481      Test condition and select (void)
-0:481        Condition
-0:481        Compare Equal (bool)
-0:481          'iTextureCoordinates' (in int)
-0:481          41 (const int)
-0:481        true case
-0:483        Sequence
-0:483          move second child to first child (2-component vector of float)
-0:483            vector swizzle (2-component vector of float)
-0:483              'texCoordOut' (3-component vector of float)
-0:483              Sequence
-0:483                0 (const int)
-0:483                1 (const int)
-0:483            vector swizzle (2-component vector of float)
-0:483              Function Call: xGetSurfaceTexCoords(vf4;mf44; (2-component vector of float)
-0:483                'texCoord' (in 4-component vector of float)
-0:483                'textureMatrix' (in 4X4 matrix of float)
-0:483              Sequence
-0:483                0 (const int)
-0:483                1 (const int)
-0:481        false case
-0:485        Test condition and select (void)
-0:485          Condition
-0:485          Compare Equal (bool)
-0:485            'iTextureCoordinates' (in int)
-0:485            73 (const int)
-0:485          true case
-0:487          Sequence
-0:487            move second child to first child (2-component vector of float)
-0:487              vector swizzle (2-component vector of float)
-0:487                'texCoordOut' (3-component vector of float)
-0:487                Sequence
-0:487                  0 (const int)
-0:487                  1 (const int)
-0:487              Function Call: xGetPlanarTexCoords(vf4;mf44; (2-component vector of float)
-0:487                matrix-times-vector (4-component vector of float)
-0:487                  'o2nMatrix' (in 4X4 matrix of float)
-0:487                  'vertex' (in 4-component vector of float)
-0:487                'textureMatrix' (in 4X4 matrix of float)
-0:485          false case
-0:490          Test condition and select (void)
-0:490            Condition
-0:490            Compare Equal (bool)
-0:490              'iTextureCoordinates' (in int)
-0:490              57 (const int)
-0:490            true case
-0:492            Sequence
-0:492              move second child to first child (3-component vector of float)
-0:492                'texCoordOut' (3-component vector of float)
-0:492                vector swizzle (3-component vector of float)
-0:492                  matrix-times-vector (4-component vector of float)
-0:492                    'o2nMatrix' (in 4X4 matrix of float)
-0:492                    'vertex' (in 4-component vector of float)
-0:492                  Sequence
-0:492                    0 (const int)
-0:492                    1 (const int)
-0:492                    2 (const int)
-0:490            false case
-0:494            Test condition and select (void)
-0:494              Condition
-0:494              Compare Equal (bool)
-0:494                'iTextureCoordinates' (in int)
-0:494                89 (const int)
-0:494              true case
-0:496              Sequence
-0:496                move second child to first child (3-component vector of float)
-0:496                  'texCoordOut' (3-component vector of float)
-0:496                  vector swizzle (3-component vector of float)
-0:496                    matrix-times-vector (4-component vector of float)
-0:496                      'o2nMatrix' (in 4X4 matrix of float)
-0:496                      'vertex' (in 4-component vector of float)
-0:496                    Sequence
-0:496                      0 (const int)
-0:496                      1 (const int)
-0:496                      2 (const int)
-0:494              false case
-0:498              Test condition and select (void)
-0:498                Condition
-0:498                Compare Equal (bool)
-0:498                  'iTextureCoordinates' (in int)
-0:498                  105 (const int)
-0:498                true case
-0:500                Sequence
-0:500                  move second child to first child (3-component vector of float)
-0:500                    'texCoordOut' (3-component vector of float)
-0:500                    vector swizzle (3-component vector of float)
-0:500                      matrix-times-vector (4-component vector of float)
-0:500                        'o2nMatrix' (in 4X4 matrix of float)
-0:500                        'vertex' (in 4-component vector of float)
-0:500                      Sequence
-0:500                        0 (const int)
-0:500                        1 (const int)
-0:500                        2 (const int)
-0:498                false case
-0:503                move second child to first child (3-component vector of float)
-0:503                  'texCoordOut' (3-component vector of float)
-0:503                  0.000000
-0:503                  0.000000
-0:503                  0.000000
-0:505      Branch: Return with expression
-0:505        'texCoordOut' (3-component vector of float)
-0:510  Function Definition: oGetTangent(vf3;vf3;i1;mf44; (3-component vector of float)
-0:510    Function Parameters: 
-0:510      'pos' (in 3-component vector of float)
-0:510      'normal' (in 3-component vector of float)
-0:510      'iTextureCoordinates' (in int)
-0:510      'n2oMatrix' (in 4X4 matrix of float)
-0:?     Sequence
-0:513      Test condition and select (void)
-0:513        Condition
-0:513        Compare Equal (bool)
-0:513          'iTextureCoordinates' (in int)
-0:513          57 (const int)
-0:513        true case
-0:515        Sequence
-0:515          move second child to first child (3-component vector of float)
-0:515            'tangentOut' (3-component vector of float)
-0:515            Function Call: oGetAutomaticTangent(vf3;mf44; (3-component vector of float)
-0:515              'normal' (in 3-component vector of float)
-0:515              'n2oMatrix' (in 4X4 matrix of float)
-0:513        false case
-0:517        Test condition and select (void)
-0:517          Condition
-0:517          Compare Equal (bool)
-0:517            'iTextureCoordinates' (in int)
-0:517            89 (const int)
-0:517          true case
-0:519          Sequence
-0:519            move second child to first child (3-component vector of float)
-0:519              'tangentOut' (3-component vector of float)
-0:519              Function Call: oGetCylindricalTangent(vf3;mf44; (3-component vector of float)
-0:519                'pos' (in 3-component vector of float)
-0:519                'n2oMatrix' (in 4X4 matrix of float)
-0:517          false case
-0:521          Test condition and select (void)
-0:521            Condition
-0:521            Compare Equal (bool)
-0:521              'iTextureCoordinates' (in int)
-0:521              105 (const int)
-0:521            true case
-0:523            Sequence
-0:523              move second child to first child (3-component vector of float)
-0:523                'tangentOut' (3-component vector of float)
-0:523                Function Call: oGetCylindricalTangent(vf3;mf44; (3-component vector of float)
-0:523                  'pos' (in 3-component vector of float)
-0:523                  'n2oMatrix' (in 4X4 matrix of float)
-0:521            false case
-0:525            Test condition and select (void)
-0:525              Condition
-0:525              Compare Equal (bool)
-0:525                'iTextureCoordinates' (in int)
-0:525                73 (const int)
-0:525              true case
-0:527              Sequence
-0:527                move second child to first child (3-component vector of float)
-0:527                  'tangentOut' (3-component vector of float)
-0:527                  Function Call: oGetProjectedTangent(mf44; (3-component vector of float)
-0:527                    'n2oMatrix' (in 4X4 matrix of float)
-0:525              false case
-0:530              move second child to first child (3-component vector of float)
-0:530                'tangentOut' (3-component vector of float)
-0:530                0.000000
-0:530                0.000000
-0:530                0.000000
-0:532      Branch: Return with expression
-0:532        'tangentOut' (3-component vector of float)
-0:537  Function Definition: tGetTexCoords(vf3;vf3;i1;mf44; (2-component vector of float)
-0:537    Function Parameters: 
-0:537      'texCoords' (in 3-component vector of float)
-0:537      'normal' (in 3-component vector of float)
-0:537      'iTextureCoordinates' (in int)
-0:537      'textureMatrix' (in 4X4 matrix of float)
-0:?     Sequence
-0:541      Test condition and select (void)
-0:541        Condition
-0:541        logical-or (bool)
-0:541          Compare Equal (bool)
-0:541            'iTextureCoordinates' (in int)
-0:541            41 (const int)
-0:541          Compare Equal (bool)
-0:541            'iTextureCoordinates' (in int)
-0:541            73 (const int)
-0:541        true case
-0:543        Sequence
-0:543          move second child to first child (2-component vector of float)
-0:543            vector swizzle (2-component vector of float)
-0:543              'texCoordsOut' (2-component vector of float)
-0:543              Sequence
-0:543                0 (const int)
-0:543                1 (const int)
-0:543            vector swizzle (2-component vector of float)
-0:543              'texCoords' (in 3-component vector of float)
-0:543              Sequence
-0:543                0 (const int)
-0:543                1 (const int)
-0:541        false case
-0:546        Test condition and select (void)
-0:546          Condition
-0:546          Compare Equal (bool)
-0:546            'iTextureCoordinates' (in int)
-0:546            57 (const int)
-0:546          true case
-0:548          Sequence
-0:548            move second child to first child (2-component vector of float)
-0:548              'texCoordsOut' (2-component vector of float)
-0:548              Function Call: xGetAutomaticTexCoords(vf3;vf3;mf44; (2-component vector of float)
-0:548                'texCoords' (in 3-component vector of float)
-0:548                'normal' (in 3-component vector of float)
-0:548                'textureMatrix' (in 4X4 matrix of float)
-0:546          false case
-0:550          Test condition and select (void)
-0:550            Condition
-0:550            Compare Equal (bool)
-0:550              'iTextureCoordinates' (in int)
-0:550              89 (const int)
-0:550            true case
-0:552            Sequence
-0:552              move second child to first child (2-component vector of float)
-0:552                'texCoordsOut' (2-component vector of float)
-0:552                Function Call: xGetCylindricalTexCoords(vf3;mf44; (2-component vector of float)
-0:552                  'texCoords' (in 3-component vector of float)
-0:552                  'textureMatrix' (in 4X4 matrix of float)
-0:550            false case
-0:554            Test condition and select (void)
-0:554              Condition
-0:554              Compare Equal (bool)
-0:554                'iTextureCoordinates' (in int)
-0:554                105 (const int)
-0:554              true case
-0:556              Sequence
-0:556                move second child to first child (2-component vector of float)
-0:556                  'texCoordsOut' (2-component vector of float)
-0:556                  Function Call: xGetSphericalTexCoords(vf3;mf44; (2-component vector of float)
-0:556                    'texCoords' (in 3-component vector of float)
-0:556                    'textureMatrix' (in 4X4 matrix of float)
-0:559      Branch: Return with expression
-0:559        'texCoordsOut' (2-component vector of float)
-0:562  Function Definition: tGetDispTexCoords(s21;vf2;vf3;f1; (2-component vector of float)
-0:562    Function Parameters: 
-0:562      'normalMap' (in sampler2D)
-0:562      'commonCoord' (in 2-component vector of float)
-0:562      'viewDir' (in 3-component vector of float)
-0:562      'parallaxOffset' (in float)
-0:565    Sequence
-0:565      Sequence
-0:565        move second child to first child (float)
-0:565          'height' (float)
-0:565          component-wise multiply (float)
-0:565            2.000000
-0:565            subtract (float)
-0:565              direct index (float)
-0:565                Function Call: texture2D(s21;vf2; (4-component vector of float)
-0:565                  'normalMap' (in sampler2D)
-0:565                  'commonCoord' (in 2-component vector of float)
-0:565                3 (const int)
-0:565              0.500000
-0:566      Sequence
-0:566        move second child to first child (2-component vector of float)
-0:566          'offset' (2-component vector of float)
-0:566          vector-scale (2-component vector of float)
-0:566            vector-scale (2-component vector of float)
-0:566              vector swizzle (2-component vector of float)
-0:566                normalize (3-component vector of float)
-0:566                  vector swizzle (3-component vector of float)
-0:566                    'viewDir' (in 3-component vector of float)
-0:566                    Sequence
-0:566                      0 (const int)
-0:566                      1 (const int)
-0:566                      2 (const int)
-0:566                Sequence
-0:566                  0 (const int)
-0:566                  1 (const int)
-0:566              'height' (float)
-0:566            'parallaxOffset' (in float)
-0:568      Branch: Return with expression
-0:568        add (2-component vector of float)
-0:568          'commonCoord' (in 2-component vector of float)
-0:568          'offset' (2-component vector of float)
-0:570  Function Definition: getCosmeticTexcoord(vf4;mf44; (2-component vector of float)
-0:570    Function Parameters: 
-0:570      'ePos' (in 4-component vector of float)
-0:570      'e2cTransform' (in 4X4 matrix of float)
-0:572    Sequence
-0:572      Sequence
-0:572        move second child to first child (4-component vector of float)
-0:572          'cPos' (4-component vector of float)
-0:572          matrix-times-vector (4-component vector of float)
-0:572            'e2cTransform' (in 4X4 matrix of float)
-0:572            'ePos' (in 4-component vector of float)
-0:573      Branch: Return with expression
-0:573        divide (2-component vector of float)
-0:573          vector swizzle (2-component vector of float)
-0:573            'cPos' (4-component vector of float)
-0:573            Sequence
-0:573              0 (const int)
-0:573              1 (const int)
-0:573          direct index (float)
-0:573            'cPos' (4-component vector of float)
-0:573            3 (const int)
-0:576  Function Definition: getCosmeticAlpha(vf2;s21; (float)
-0:576    Function Parameters: 
-0:576      'texcoord' (in 2-component vector of float)
-0:576      'alphaMap' (in sampler2D)
-0:578    Sequence
-0:578      Branch: Return with expression
-0:578        direct index (float)
-0:578          Function Call: texture2D(s21;vf2; (4-component vector of float)
-0:578            'alphaMap' (in sampler2D)
-0:578            vector swizzle (2-component vector of float)
-0:578              'texcoord' (in 2-component vector of float)
-0:578              Sequence
-0:578                0 (const int)
-0:578                1 (const int)
-0:578          3 (const int)
-0:581  Function Definition: GetLightDir_DP(vf3;vf3;f1; (3-component vector of float)
-0:581    Function Parameters: 
-0:581      'lightDirOrPos' (in 3-component vector of float)
-0:581      'position' (in 3-component vector of float)
-0:581      'lightType' (in float)
-0:583    Sequence
-0:583      Branch: Return with expression
-0:583        normalize (3-component vector of float)
-0:583          subtract (3-component vector of float)
-0:583            'lightDirOrPos' (in 3-component vector of float)
-0:583            vector-scale (3-component vector of float)
-0:583              'position' (in 3-component vector of float)
-0:583              'lightType' (in float)
-0:585  Function Definition: GetLightDir_D(vf3; (3-component vector of float)
-0:585    Function Parameters: 
-0:585      'lightDir' (in 3-component vector of float)
-0:588    Sequence
-0:588      Branch: Return with expression
-0:588        normalize (3-component vector of float)
-0:588          'lightDir' (in 3-component vector of float)
-0:590  Function Definition: GetLightDir_P(vf3;vf3; (3-component vector of float)
-0:590    Function Parameters: 
-0:590      'lightPos' (in 3-component vector of float)
-0:590      'position' (in 3-component vector of float)
-0:592    Sequence
-0:592      Branch: Return with expression
-0:592        normalize (3-component vector of float)
-0:592          subtract (3-component vector of float)
-0:592            'lightPos' (in 3-component vector of float)
-0:592            'position' (in 3-component vector of float)
-0:594  Function Definition: tGetLightDir_D(mf33;vf3; (3-component vector of float)
-0:594    Function Parameters: 
-0:594      't2eMatrixTBN' (in 3X3 matrix of float)
-0:594      'eLightDir' (in 3-component vector of float)
-0:596    Sequence
-0:596      Branch: Return with expression
-0:596        vector-times-matrix (3-component vector of float)
-0:596          Function Call: GetLightDir_D(vf3; (3-component vector of float)
-0:596            'eLightDir' (in 3-component vector of float)
-0:596          't2eMatrixTBN' (in 3X3 matrix of float)
-0:598  Function Definition: eGetLightDir_DP(vf3;vf3;f1; (3-component vector of float)
-0:598    Function Parameters: 
-0:598      'eLightDirOrPos' (in 3-component vector of float)
-0:598      'ePosition' (in 3-component vector of float)
-0:598      'lightType' (in float)
-0:600    Sequence
-0:600      Branch: Return with expression
-0:600        Function Call: GetLightDir_DP(vf3;vf3;f1; (3-component vector of float)
-0:600          'eLightDirOrPos' (in 3-component vector of float)
-0:600          'ePosition' (in 3-component vector of float)
-0:600          'lightType' (in float)
-0:602  Function Definition: tGetLightDir_DP(mf33;vf3;vf3;f1; (3-component vector of float)
-0:602    Function Parameters: 
-0:602      't2eMatrixTBN' (in 3X3 matrix of float)
-0:602      'eLightDirOrPos' (in 3-component vector of float)
-0:602      'ePosition' (in 3-component vector of float)
-0:602      'lightType' (in float)
-0:604    Sequence
-0:604      Branch: Return with expression
-0:604        vector-times-matrix (3-component vector of float)
-0:604          Function Call: eGetLightDir_DP(vf3;vf3;f1; (3-component vector of float)
-0:604            'eLightDirOrPos' (in 3-component vector of float)
-0:604            'ePosition' (in 3-component vector of float)
-0:604            'lightType' (in float)
-0:604          't2eMatrixTBN' (in 3X3 matrix of float)
-0:608  Function Definition: GetHalfVector(vf3;vf3; (3-component vector of float)
-0:608    Function Parameters: 
-0:608      'lightDir' (in 3-component vector of float)
-0:608      'eyeDirection' (in 3-component vector of float)
-0:610    Sequence
-0:610      Branch: Return with expression
-0:610        normalize (3-component vector of float)
-0:610          add (3-component vector of float)
-0:610            'lightDir' (in 3-component vector of float)
-0:610            'eyeDirection' (in 3-component vector of float)
-0:612  Function Definition: eGetHalfVector(vf3;vf3; (3-component vector of float)
-0:612    Function Parameters: 
-0:612      'eLightDir' (in 3-component vector of float)
-0:612      'eEyeDirection' (in 3-component vector of float)
-0:618    Sequence
-0:618      Branch: Return with expression
-0:618        Function Call: GetHalfVector(vf3;vf3; (3-component vector of float)
-0:618          'eLightDir' (in 3-component vector of float)
-0:618          0.000000
-0:618          0.000000
-0:618          1.000000
-0:620  Function Definition: tGetHalfVector(vf3;vf3;mf33; (3-component vector of float)
-0:620    Function Parameters: 
-0:620      'tLightDir' (in 3-component vector of float)
-0:620      'eEyeDirection' (in 3-component vector of float)
-0:620      't2eMatrixTBN' (in 3X3 matrix of float)
-0:626    Sequence
-0:626      Sequence
-0:626        move second child to first child (3-component vector of float)
-0:626          'tEyeDirection' (3-component vector of float)
-0:626          Construct vec3 (3-component vector of float)
-0:626            direct index (float)
-0:626              direct index (in 3-component vector of float)
-0:626                't2eMatrixTBN' (in 3X3 matrix of float)
-0:626                0 (const int)
-0:626              2 (const int)
-0:626            direct index (float)
-0:626              direct index (in 3-component vector of float)
-0:626                't2eMatrixTBN' (in 3X3 matrix of float)
-0:626                1 (const int)
-0:626              2 (const int)
-0:626            direct index (float)
-0:626              direct index (in 3-component vector of float)
-0:626                't2eMatrixTBN' (in 3X3 matrix of float)
-0:626                2 (const int)
-0:626              2 (const int)
-0:627      Branch: Return with expression
-0:627        Function Call: GetHalfVector(vf3;vf3; (3-component vector of float)
-0:627          'tLightDir' (in 3-component vector of float)
-0:627          'tEyeDirection' (3-component vector of float)
-0:631  Function Definition: GetFresnelPower(vf3; (float)
-0:631    Function Parameters: 
-0:631      'eNormal' (in 3-component vector of float)
-0:636    Sequence
-0:636      Sequence
-0:636        move second child to first child (float)
-0:636          'oneMCosAngle' (float)
-0:636          max (float)
-0:636            subtract (float)
-0:636              1.000000
-0:636              Absolute value (float)
-0:636                direct index (float)
-0:636                  'eNormal' (in 3-component vector of float)
-0:636                  2 (const int)
-0:636            0.010000
-0:637      Branch: Return with expression
-0:637        pow (float)
-0:637          'oneMCosAngle' (float)
-0:637          5.000000
-0:640  Function Definition: GetFresnelTerm_Transparency(vf3;f1;vf2; (float)
-0:640    Function Parameters: 
-0:640      'eNormal' (in 3-component vector of float)
-0:640      'transparency' (in float)
-0:640      'fresnelCoef' (in 2-component vector of float)
-0:642    Sequence
-0:642      Branch: Return with expression
-0:642        add (float)
-0:642          component-wise multiply (float)
-0:642            subtract (float)
-0:642              1.000000
-0:642              'transparency' (in float)
-0:642            direct index (float)
-0:642              'fresnelCoef' (in 2-component vector of float)
-0:642              0 (const int)
-0:642          component-wise multiply (float)
-0:642            direct index (float)
-0:642              'fresnelCoef' (in 2-component vector of float)
-0:642              1 (const int)
-0:642            Function Call: GetFresnelPower(vf3; (float)
-0:642              'eNormal' (in 3-component vector of float)
-0:645  Function Definition: GetFresnelTerm_Standard(vf3;vf2; (float)
-0:645    Function Parameters: 
-0:645      'eNormal' (in 3-component vector of float)
-0:645      'fresnelCoef' (in 2-component vector of float)
-0:647    Sequence
-0:647      Branch: Return with expression
-0:647        add (float)
-0:647          direct index (float)
-0:647            'fresnelCoef' (in 2-component vector of float)
-0:647            0 (const int)
-0:647          component-wise multiply (float)
-0:647            direct index (float)
-0:647              'fresnelCoef' (in 2-component vector of float)
-0:647              1 (const int)
-0:647            Function Call: GetFresnelPower(vf3; (float)
-0:647              'eNormal' (in 3-component vector of float)
-0:649  Function Definition: GetFresnel_New(vf3;f1; (float)
-0:649    Function Parameters: 
-0:649      'eNormal' (in 3-component vector of float)
-0:649      'fresnelCoef' (in float)
-0:651    Sequence
-0:651      Branch: Return with expression
-0:651        pow (float)
-0:651          max (float)
-0:651            subtract (float)
-0:651              1.000000
-0:651              Absolute value (float)
-0:651                direct index (float)
-0:651                  'eNormal' (in 3-component vector of float)
-0:651                  2 (const int)
-0:651            0.010000
-0:651          'fresnelCoef' (in float)
-0:654  Function Definition: GetFresnelTerm(vf3;f1;vf2;i1; (float)
-0:654    Function Parameters: 
-0:654      'eNormal' (in 3-component vector of float)
-0:654      'transparency' (in float)
-0:654      'fresnelCoef' (in 2-component vector of float)
-0:654      'iFresnelType' (in int)
-0:656    Sequence
-0:656      Test condition and select (void)
-0:656        Condition
-0:656        Compare Equal (bool)
-0:656          'iFresnelType' (in int)
-0:656          48 (const int)
-0:656        true case
-0:658        Sequence
-0:658          Branch: Return with expression
-0:658            Function Call: GetFresnelTerm_Transparency(vf3;f1;vf2; (float)
-0:658              'eNormal' (in 3-component vector of float)
-0:658              'transparency' (in float)
-0:658              'fresnelCoef' (in 2-component vector of float)
-0:656        false case
-0:660        Test condition and select (void)
-0:660          Condition
-0:660          Compare Equal (bool)
-0:660            'iFresnelType' (in int)
-0:660            32 (const int)
-0:660          true case
-0:662          Sequence
-0:662            Branch: Return with expression
-0:662              Function Call: GetFresnelTerm_Standard(vf3;vf2; (float)
-0:662                'eNormal' (in 3-component vector of float)
-0:662                'fresnelCoef' (in 2-component vector of float)
-0:660          false case
-0:666          Sequence
-0:666            Branch: Return with expression
-0:666              Function Call: GetFresnel_New(vf3;f1; (float)
-0:666                'eNormal' (in 3-component vector of float)
-0:666                direct index (float)
-0:666                  'fresnelCoef' (in 2-component vector of float)
-0:666                  0 (const int)
-0:672  Function Definition: GetRimLight(vf3;f1;f1;vf3; (3-component vector of float)
-0:672    Function Parameters: 
-0:672      'tNormal' (in 3-component vector of float)
-0:672      'rimlightCoef1' (in float)
-0:672      'rimlightCoef2' (in float)
-0:672      'rimlightColor' (in 3-component vector of float)
-0:674    Sequence
-0:674      Branch: Return with expression
-0:674        vector-scale (3-component vector of float)
-0:674          add (float)
-0:674            component-wise multiply (float)
-0:674              'rimlightCoef1' (in float)
-0:674              Function Call: GetFresnelPower(vf3; (float)
-0:674                'tNormal' (in 3-component vector of float)
-0:674            'rimlightCoef2' (in float)
-0:674          'rimlightColor' (in 3-component vector of float)
-0:678  Function Definition: GetMaxSpecTerm(vf4;b1; (float)
-0:678    Function Parameters: 
-0:678      'specular' (in 4-component vector of float)
-0:678      'iMaxSpecW' (in bool)
-0:680    Sequence
-0:680      Test condition and select (void)
-0:680        Condition
-0:680        'iMaxSpecW' (in bool)
-0:680        true case
-0:682        Sequence
-0:682          Branch: Return with expression
-0:682            direct index (float)
-0:682              'specular' (in 4-component vector of float)
-0:682              3 (const int)
-0:680        false case
-0:686        Sequence
-0:686          Branch: Return with expression
-0:686            direct index (float)
-0:686              'specular' (in 4-component vector of float)
-0:686              0 (const int)
-0:690  Function Definition: GetSpecFac(f1;vf2; (float)
-0:690    Function Parameters: 
-0:690      'fMaxSpec' (in float)
-0:690      'coef' (in 2-component vector of float)
-0:692    Sequence
-0:692      Branch: Return with expression
-0:692        Function Call: saturate(f1; (float)
-0:692          component-wise multiply (float)
-0:692            subtract (float)
-0:692              'fMaxSpec' (in float)
-0:692              direct index (float)
-0:692                'coef' (in 2-component vector of float)
-0:692                0 (const int)
-0:692            direct index (float)
-0:692              'coef' (in 2-component vector of float)
-0:692              1 (const int)
-0:696  Function Definition: GetDiffuseFromOneLight(vf3;vf3;vf3;i1;f1; (3-component vector of float)
-0:696    Function Parameters: 
-0:696      'normal' (in 3-component vector of float)
-0:696      'lightDir' (in 3-component vector of float)
-0:696      'lightColor' (in 3-component vector of float)
-0:696      'iAlphaType' (in int)
-0:696      'transparency' (in float)
-0:699    Sequence
-0:699      Sequence
-0:699        move second child to first child (float)
-0:699          'LdotB' (float)
-0:699          dot-product (float)
-0:699            'lightDir' (in 3-component vector of float)
-0:699            'normal' (in 3-component vector of float)
-0:700      Test condition and select (void)
-0:700        Condition
-0:700        Compare Equal (bool)
-0:700          'iAlphaType' (in int)
-0:700          26 (const int)
-0:700        true case
-0:702        Sequence
-0:702          move second child to first child (float)
-0:702            'LdotB' (float)
-0:702            Function Call: saturate(f1; (float)
-0:702              'LdotB' (float)
-0:700        false case
-0:706        Sequence
-0:706          Test condition and select (void)
-0:706            Condition
-0:706            Compare Less Than (bool)
-0:706              'LdotB' (float)
-0:706              0.000000
-0:706            true case
-0:708            Sequence
-0:708              move second child to first child (float)
-0:708                'LdotB' (float)
-0:708                component-wise multiply (float)
-0:708                  Absolute value (float)
-0:708                    'LdotB' (float)
-0:708                  subtract (float)
-0:708                    1.000000
-0:708                    'transparency' (in float)
-0:713      Branch: Return with expression
-0:713        vector-scale (3-component vector of float)
-0:713          'LdotB' (float)
-0:713          'lightColor' (in 3-component vector of float)
-0:717  Function Definition: GetSpecularFromOneLight(vf3;vf3;f1;vf3;b1; (4-component vector of float)
-0:717    Function Parameters: 
-0:717      'normal' (in 3-component vector of float)
-0:717      'halfVector' (in 3-component vector of float)
-0:717      'specularPower' (in float)
-0:717      'lightSpec' (in 3-component vector of float)
-0:717      'bSpecWTerm' (in bool)
-0:719    Sequence
-0:719      Sequence
-0:719        move second child to first child (float)
-0:719          'ndoth' (float)
-0:719          dot-product (float)
-0:719            'normal' (in 3-component vector of float)
-0:719            'halfVector' (in 3-component vector of float)
-0:720      move second child to first child (float)
-0:720        'ndoth' (float)
-0:720        pow (float)
-0:720          max (float)
-0:720            'ndoth' (float)
-0:720            0.010000
-0:720          'specularPower' (in float)
-0:722      Sequence
-0:722        move second child to first child (4-component vector of float)
-0:722          'res' (4-component vector of float)
-0:722          Construct vec4 (4-component vector of float)
-0:722            vector-scale (3-component vector of float)
-0:722              'ndoth' (float)
-0:722              'lightSpec' (in 3-component vector of float)
-0:722            0.000000
-0:723      Test condition and select (void)
-0:723        Condition
-0:723        'bSpecWTerm' (in bool)
-0:723        true case
-0:725        Sequence
-0:725          move second child to first child (float)
-0:725            direct index (float)
-0:725              'res' (4-component vector of float)
-0:725              3 (const int)
-0:725            component-wise multiply (float)
-0:725              'ndoth' (float)
-0:725              Function Call: Max3(vf3; (float)
-0:725                'lightSpec' (in 3-component vector of float)
-0:727      Branch: Return with expression
-0:727        'res' (4-component vector of float)
-0:734  Function Definition: AddSpecularAndDiffuse(vf3;vf3;vf3;i1;vf3;vf3;f1;b1;b1;vf3;vf4;f1; (void)
-0:734    Function Parameters: 
-0:734      'normal' (in 3-component vector of float)
-0:734      'lightDirAux' (in 3-component vector of float)
-0:734      'lightColor' (in 3-component vector of float)
-0:734      'iAlphaType' (in int)
-0:734      'halfVector' (in 3-component vector of float)
-0:734      'lightSpec' (in 3-component vector of float)
-0:734      'specularPower' (in float)
-0:734      'bMaxSpec' (in bool)
-0:734      'noSpec' (in bool)
-0:734      'diffuseLight' (inout 3-component vector of float)
-0:734      'specularLight' (inout 4-component vector of float)
-0:734      'transparency' (in float)
-0:736    Sequence
-0:736      add second child into first child (3-component vector of float)
-0:736        'diffuseLight' (inout 3-component vector of float)
-0:736        Function Call: GetDiffuseFromOneLight(vf3;vf3;vf3;i1;f1; (3-component vector of float)
-0:736          'normal' (in 3-component vector of float)
-0:736          'lightDirAux' (in 3-component vector of float)
-0:736          'lightColor' (in 3-component vector of float)
-0:736          'iAlphaType' (in int)
-0:736          'transparency' (in float)
-0:737      Test condition and select (void)
-0:737        Condition
-0:737        Negate conditional (bool)
-0:737          'noSpec' (in bool)
-0:737        true case
-0:739        Sequence
-0:739          add second child into first child (4-component vector of float)
-0:739            'specularLight' (inout 4-component vector of float)
-0:739            Function Call: GetSpecularFromOneLight(vf3;vf3;f1;vf3;b1; (4-component vector of float)
-0:739              'normal' (in 3-component vector of float)
-0:739              'halfVector' (in 3-component vector of float)
-0:739              'specularPower' (in float)
-0:739              'lightSpec' (in 3-component vector of float)
-0:739              'bMaxSpec' (in bool)
-0:745  Function Definition: GetDiffuseTerm(vf3;vf3; (3-component vector of float)
-0:745    Function Parameters: 
-0:745      'diffuseLight' (in 3-component vector of float)
-0:745      'materialColor' (in 3-component vector of float)
-0:747    Sequence
-0:747      Branch: Return with expression
-0:747        component-wise multiply (3-component vector of float)
-0:747          'diffuseLight' (in 3-component vector of float)
-0:747          'materialColor' (in 3-component vector of float)
-0:750  Function Definition: GetSpecularTerm(vf3;vf3; (3-component vector of float)
-0:750    Function Parameters: 
-0:750      'specularLight' (in 3-component vector of float)
-0:750      'materialColor' (in 3-component vector of float)
-0:752    Sequence
-0:752      Branch: Return with expression
-0:752        component-wise multiply (3-component vector of float)
-0:752          'specularLight' (in 3-component vector of float)
-0:752          'materialColor' (in 3-component vector of float)
-0:755  Function Definition: GetFresnelAmbient(f1; (3-component vector of float)
-0:755    Function Parameters: 
-0:755      'fresnel' (in float)
-0:757    Sequence
-0:757      Branch: Return with expression
-0:757        Construct vec3 (3-component vector of float)
-0:757          'fresnel' (in float)
-0:761  Function Definition: TransformEnvColor(vf3;b1;f1;f1;f1;vf3; (3-component vector of float)
-0:761    Function Parameters: 
-0:761      'envColorIn' (in 3-component vector of float)
-0:761      'useHdr' (in bool)
-0:761      'envColorWash' (in float)
-0:761      'envBrightness' (in float)
-0:761      'envContrast' (in float)
-0:761      'envColorModifier' (in 3-component vector of float)
-0:763    Sequence
-0:763      Test condition and select (void)
-0:763        Condition
-0:763        'useHdr' (in bool)
-0:763        true case
-0:769        Sequence
-0:769          move second child to first child (3-component vector of float)
-0:769            'envColorIn' (in 3-component vector of float)
-0:769            add (3-component vector of float)
-0:769              vector-scale (3-component vector of float)
-0:769                subtract (3-component vector of float)
-0:769                  'envColorIn' (in 3-component vector of float)
-0:769                  'envcolorAverage' (uniform 3-component vector of float)
-0:769                'envContrast' (in float)
-0:769              vector-scale (3-component vector of float)
-0:769                'envcolorAverage' (uniform 3-component vector of float)
-0:769                'envBrightness' (in float)
-0:770          move second child to first child (3-component vector of float)
-0:770            'envColorIn' (in 3-component vector of float)
-0:770            mix (3-component vector of float)
-0:770              'envColorIn' (in 3-component vector of float)
-0:770              Construct vec3 (3-component vector of float)
-0:770                Function Call: GetLuminance(vf3; (float)
-0:770                  'envColorIn' (in 3-component vector of float)
-0:770              'envColorWash' (in float)
-0:771          multiply second child into first child (3-component vector of float)
-0:771            'envColorIn' (in 3-component vector of float)
-0:771            'envColorModifier' (in 3-component vector of float)
-0:772          Branch: Return with expression
-0:772            max (3-component vector of float)
-0:772              'envColorIn' (in 3-component vector of float)
-0:772              0.000000
-0:772              0.000000
-0:772              0.000000
-0:763        false case
-0:776        Sequence
-0:776          Sequence
-0:776            move second child to first child (3-component vector of float)
-0:776              'color' (3-component vector of float)
-0:776              mix (3-component vector of float)
-0:776                vector swizzle (3-component vector of float)
-0:776                  'envColorIn' (in 3-component vector of float)
-0:776                  Sequence
-0:776                    0 (const int)
-0:776                    1 (const int)
-0:776                    2 (const int)
-0:776                Construct vec3 (3-component vector of float)
-0:776                  Function Call: GetLuminance(vf3; (float)
-0:776                    'envColorIn' (in 3-component vector of float)
-0:776                'envColorWash' (in float)
-0:777          Sequence
-0:777            move second child to first child (3-component vector of float)
-0:777              'res' (3-component vector of float)
-0:777              add (3-component vector of float)
-0:777                add (3-component vector of float)
-0:777                  vector-scale (3-component vector of float)
-0:777                    add (3-component vector of float)
-0:777                      subtract (3-component vector of float)
-0:777                        'color' (3-component vector of float)
-0:777                        0.635000
-0:777                      'envBrightness' (in float)
-0:777                    'envContrast' (in float)
-0:777                  0.635000
-0:777                'envColorModifier' (in 3-component vector of float)
-0:778          Branch: Return with expression
-0:778            'res' (3-component vector of float)
-0:783  Function Definition: GetEnv(vf3; (4-component vector of float)
-0:783    Function Parameters: 
-0:783      'envCoord' (in 3-component vector of float)
-0:787    Sequence
-0:787      Sequence
-0:787        Branch: Return with expression
-0:787          Function Call: textureCube(sC1;vf3; (4-component vector of float)
-0:787            'envCubicSpecular' (uniform samplerCube)
-0:787            'envCoord' (in 3-component vector of float)
-0:795  Function Definition: GetEnvDiffuse(vf3; (4-component vector of float)
-0:795    Function Parameters: 
-0:795      'envCoord' (in 3-component vector of float)
-0:799    Sequence
-0:799      Sequence
-0:799        Branch: Return with expression
-0:799          Function Call: textureCube(sC1;vf3; (4-component vector of float)
-0:799            'envCubicDiffuse' (uniform samplerCube)
-0:799            'envCoord' (in 3-component vector of float)
-0:806  Function Definition: GetAmbiantAndDiffuseModifierEnv(vf3;f1;f1;f1;vf3;b1; (3-component vector of float)
-0:806    Function Parameters: 
-0:806      'envCoord' (in 3-component vector of float)
-0:806      'envColorWash' (in float)
-0:806      'envBrightness' (in float)
-0:806      'envContrast' (in float)
-0:806      'envColor' (in 3-component vector of float)
-0:806      'useHdr' (in bool)
-0:808    Sequence
-0:808      Sequence
-0:808        move second child to first child (4-component vector of float)
-0:808          'env' (4-component vector of float)
-0:808          Function Call: GetEnv(vf3; (4-component vector of float)
-0:808            'envCoord' (in 3-component vector of float)
-0:809      Branch: Return with expression
-0:809        Function Call: TransformEnvColor(vf3;b1;f1;f1;f1;vf3; (3-component vector of float)
-0:809          vector swizzle (3-component vector of float)
-0:809            'env' (4-component vector of float)
-0:809            Sequence
-0:809              0 (const int)
-0:809              1 (const int)
-0:809              2 (const int)
-0:809          'useHdr' (in bool)
-0:809          'envColorWash' (in float)
-0:809          'envBrightness' (in float)
-0:809          'envContrast' (in float)
-0:809          'envColor' (in 3-component vector of float)
-0:811  Function Definition: GetDiffuseMap(s21;vf2;vf3;vf3; (4-component vector of float)
-0:811    Function Parameters: 
-0:811      'diffMap' (in sampler2D)
-0:811      'coord' (in 2-component vector of float)
-0:811      'average' (in 3-component vector of float)
-0:811      'diffuseMapModifierCWB' (in 3-component vector of float)
-0:822    Sequence
-0:822      Sequence
-0:822        Branch: Return with expression
-0:822          Function Call: texture2D(s21;vf2; (4-component vector of float)
-0:822            'diffMap' (in sampler2D)
-0:822            'coord' (in 2-component vector of float)
-0:826  Function Definition: GetAmbiantAndDiffuseModifierDiff(s21;vf2;vf3;vf3; (3-component vector of float)
-0:826    Function Parameters: 
-0:826      'diffMap' (in sampler2D)
-0:826      'commonCoord' (in 2-component vector of float)
-0:826      'average' (in 3-component vector of float)
-0:826      'diffuseMapModifier' (in 3-component vector of float)
-0:828    Sequence
-0:828      Branch: Return with expression
-0:828        vector swizzle (3-component vector of float)
-0:828          Function Call: GetDiffuseMap(s21;vf2;vf3;vf3; (4-component vector of float)
-0:828            'diffMap' (in sampler2D)
-0:828            'commonCoord' (in 2-component vector of float)
-0:828            'average' (in 3-component vector of float)
-0:828            'diffuseMapModifier' (in 3-component vector of float)
-0:828          Sequence
-0:828            0 (const int)
-0:828            1 (const int)
-0:828            2 (const int)
-0:831  Function Definition: GetAmbiantAndDiffuseModifierDiffAlpha(s21;vf2;vf3;vf3; (4-component vector of float)
-0:831    Function Parameters: 
-0:831      'diffMap' (in sampler2D)
-0:831      'commonCoord' (in 2-component vector of float)
-0:831      'average' (in 3-component vector of float)
-0:831      'diffuseMapModifier' (in 3-component vector of float)
-0:833    Sequence
-0:833      Branch: Return with expression
-0:833        vector swizzle (4-component vector of float)
-0:833          Function Call: GetDiffuseMap(s21;vf2;vf3;vf3; (4-component vector of float)
-0:833            'diffMap' (in sampler2D)
-0:833            'commonCoord' (in 2-component vector of float)
-0:833            'average' (in 3-component vector of float)
-0:833            'diffuseMapModifier' (in 3-component vector of float)
-0:833          Sequence
-0:833            0 (const int)
-0:833            1 (const int)
-0:833            2 (const int)
-0:833            3 (const int)
-0:838  Function Definition: GetAlphaFrom_Material(vf4; (float)
-0:838    Function Parameters: 
-0:838      'matColor' (in 4-component vector of float)
-0:840    Sequence
-0:840      Branch: Return with expression
-0:840        direct index (float)
-0:840          'matColor' (in 4-component vector of float)
-0:840          3 (const int)
-0:842  Function Definition: GetAlphaFrom_Fresnel(f1; (float)
-0:842    Function Parameters: 
-0:842      'fresnel' (in float)
-0:844    Sequence
-0:844      Branch: Return with expression
-0:844        subtract (float)
-0:844          1.000000
-0:844          'fresnel' (in float)
-0:846  Function Definition: GetAlphaFrom_FresnelPlusTransparency(f1;f1; (float)
-0:846    Function Parameters: 
-0:846      'fresnel' (in float)
-0:846      'transparency' (in float)
-0:848    Sequence
-0:848      Branch: Return with expression
-0:848        add (float)
-0:848          'fresnel' (in float)
-0:848          'transparency' (in float)
-0:850  Function Definition: GetAlphaFrom_PlasticPerspex(vf3; (float)
-0:850    Function Parameters: 
-0:850      'diffuseTerm' (in 3-component vector of float)
-0:852    Sequence
-0:852      Branch: Return with expression
-0:852        component-wise multiply (float)
-0:852          0.700000
-0:852          add (float)
-0:852            direct index (float)
-0:852              'diffuseTerm' (in 3-component vector of float)
-0:852              0 (const int)
-0:852            0.200000
-0:854  Function Definition: GetAlphaFrom_Glass(f1;f1;f1; (float)
-0:854    Function Parameters: 
-0:854      'fMaxSpec' (in float)
-0:854      'fresnel' (in float)
-0:854      'transparency' (in float)
-0:856    Sequence
-0:856      Sequence
-0:856        move second child to first child (float)
-0:856          'specfac' (float)
-0:856          Function Call: saturate(f1; (float)
-0:856            component-wise multiply (float)
-0:856              subtract (float)
-0:856                'fMaxSpec' (in float)
-0:856                0.480000
-0:856              5.000000
-0:857      Sequence
-0:857        move second child to first child (float)
-0:857          'fresnelGlass' (float)
-0:857          Function Call: saturate(f1; (float)
-0:857            component-wise multiply (float)
-0:857              component-wise multiply (float)
-0:857                'fresnel' (in float)
-0:857                'fresnel' (in float)
-0:857              0.010000
-0:858      Branch: Return with expression
-0:858        add (float)
-0:858          component-wise multiply (float)
-0:858            Function Call: saturate(f1; (float)
-0:858              add (float)
-0:858                'fresnelGlass' (float)
-0:858                'transparency' (in float)
-0:858            subtract (float)
-0:858              1.000000
-0:858              'specfac' (float)
-0:858          'specfac' (float)
-0:860  Function Definition: GetAlpha(vf4;f1;f1;vf3;vf4;b1;i1; (float)
-0:860    Function Parameters: 
-0:860      'matColor' (in 4-component vector of float)
-0:860      'fresnel' (in float)
-0:860      'transparency' (in float)
-0:860      'diffuseTerm' (in 3-component vector of float)
-0:860      'specularTerm' (in 4-component vector of float)
-0:860      'iMaxSpecW' (in bool)
-0:860      'iAlphaType' (in int)
-0:862    Sequence
-0:862      Test condition and select (void)
-0:862        Condition
-0:862        Compare Equal (bool)
-0:862          'iAlphaType' (in int)
-0:862          58 (const int)
-0:862        true case
-0:864        Sequence
-0:864          Branch: Return with expression
-0:864            Function Call: GetAlphaFrom_Fresnel(f1; (float)
-0:864              'fresnel' (in float)
-0:862        false case
-0:866        Test condition and select (void)
-0:866          Condition
-0:866          Compare Equal (bool)
-0:866            'iAlphaType' (in int)
-0:866            42 (const int)
-0:866          true case
-0:868          Sequence
-0:868            Branch: Return with expression
-0:868              Function Call: GetAlphaFrom_FresnelPlusTransparency(f1;f1; (float)
-0:868                'fresnel' (in float)
-0:868                'transparency' (in float)
-0:866          false case
-0:870          Test condition and select (void)
-0:870            Condition
-0:870            Compare Equal (bool)
-0:870              'iAlphaType' (in int)
-0:870              74 (const int)
-0:870            true case
-0:872            Sequence
-0:872              Branch: Return with expression
-0:872                Function Call: GetAlphaFrom_Material(vf4; (float)
-0:872                  'matColor' (in 4-component vector of float)
-0:870            false case
-0:874            Test condition and select (void)
-0:874              Condition
-0:874              Compare Equal (bool)
-0:874                'iAlphaType' (in int)
-0:874                90 (const int)
-0:874              true case
-0:876              Sequence
-0:876                Branch: Return with expression
-0:876                  Function Call: GetAlphaFrom_PlasticPerspex(vf3; (float)
-0:876                    'diffuseTerm' (in 3-component vector of float)
-0:874              false case
-0:878              Test condition and select (void)
-0:878                Condition
-0:878                Compare Equal (bool)
-0:878                  'iAlphaType' (in int)
-0:878                  122 (const int)
-0:878                true case
-0:880                Sequence
-0:880                  Sequence
-0:880                    move second child to first child (float)
-0:880                      't' (float)
-0:880                      Function Call: GetMaxSpecTerm(vf4;b1; (float)
-0:880                        'specularTerm' (in 4-component vector of float)
-0:880                        'iMaxSpecW' (in bool)
-0:881                  Branch: Return with expression
-0:881                    Function Call: GetAlphaFrom_Glass(f1;f1;f1; (float)
-0:881                      't' (float)
-0:881                      'fresnel' (in float)
-0:881                      'transparency' (in float)
-0:878                false case
-0:883                Test condition and select (void)
-0:883                  Condition
-0:883                  Compare Equal (bool)
-0:883                    'iAlphaType' (in int)
-0:883                    106 (const int)
-0:883                  true case
-0:885                  Sequence
-0:885                    Branch: Return with expression
-0:885                      'transparency' (in float)
-0:883                  false case
-0:889                  Sequence
-0:889                    Branch: Return with expression
-0:889                      1.000000
-0:895  Function Definition: GetFinalColor(vf3;vf3;vf3;f1; (4-component vector of float)
-0:895    Function Parameters: 
-0:895      'ambiant' (in 3-component vector of float)
-0:895      'diffuse' (in 3-component vector of float)
-0:895      'specular' (in 3-component vector of float)
-0:895      'alpha' (in float)
-0:897    Sequence
-0:897      Branch: Return with expression
-0:897        Construct vec4 (4-component vector of float)
-0:897          add (3-component vector of float)
-0:897            add (3-component vector of float)
-0:897              'ambiant' (in 3-component vector of float)
-0:897              'diffuse' (in 3-component vector of float)
-0:897            'specular' (in 3-component vector of float)
-0:897          'alpha' (in float)
-0:899  Function Definition: GetFinalColor_Fac(vf3;vf3;vf3;f1;f1; (4-component vector of float)
-0:899    Function Parameters: 
-0:899      'ambiant' (in 3-component vector of float)
-0:899      'diffuse' (in 3-component vector of float)
-0:899      'specular' (in 3-component vector of float)
-0:899      'facCoef' (in float)
-0:899      'alpha' (in float)
-0:901    Sequence
-0:901      Branch: Return with expression
-0:901        Construct vec4 (4-component vector of float)
-0:901          add (3-component vector of float)
-0:901            vector-scale (3-component vector of float)
-0:901              subtract (float)
-0:901                1.000000
-0:901                'facCoef' (in float)
-0:901              add (3-component vector of float)
-0:901                'ambiant' (in 3-component vector of float)
-0:901                'diffuse' (in 3-component vector of float)
-0:901            vector-scale (3-component vector of float)
-0:901              'facCoef' (in float)
-0:901              'specular' (in 3-component vector of float)
-0:901          'alpha' (in float)
-0:903  Function Definition: GetFinalColor_Fac_SaturateAD_ModifyAD(vf3;vf3;vf3;f1;vf3;f1; (4-component vector of float)
-0:903    Function Parameters: 
-0:903      'ambiant' (in 3-component vector of float)
-0:903      'diffuse' (in 3-component vector of float)
-0:903      'specular' (in 3-component vector of float)
-0:903      'facCoef' (in float)
-0:903      'modify' (in 3-component vector of float)
-0:903      'alpha' (in float)
-0:905    Sequence
-0:905      Branch: Return with expression
-0:905        Construct vec4 (4-component vector of float)
-0:905          add (3-component vector of float)
-0:905            component-wise multiply (3-component vector of float)
-0:905              vector-scale (3-component vector of float)
-0:905                subtract (float)
-0:905                  1.000000
-0:905                  'facCoef' (in float)
-0:905                'modify' (in 3-component vector of float)
-0:905              Function Call: saturateLight(vf3; (3-component vector of float)
-0:905                add (3-component vector of float)
-0:905                  'ambiant' (in 3-component vector of float)
-0:905                  'diffuse' (in 3-component vector of float)
-0:905            vector-scale (3-component vector of float)
-0:905              'facCoef' (in float)
-0:905              'specular' (in 3-component vector of float)
-0:905          'alpha' (in float)
-0:907  Function Definition: GetFinalColor_SaturateAD_ModifyAD(vf3;vf3;vf3;vf3;f1; (4-component vector of float)
-0:907    Function Parameters: 
-0:907      'ambiant' (in 3-component vector of float)
-0:907      'diffuse' (in 3-component vector of float)
-0:907      'specular' (in 3-component vector of float)
-0:907      'modify' (in 3-component vector of float)
-0:907      'alpha' (in float)
-0:909    Sequence
-0:909      Branch: Return with expression
-0:909        Construct vec4 (4-component vector of float)
-0:909          add (3-component vector of float)
-0:909            component-wise multiply (3-component vector of float)
-0:909              'modify' (in 3-component vector of float)
-0:909              Function Call: saturateLight(vf3; (3-component vector of float)
-0:909                add (3-component vector of float)
-0:909                  'ambiant' (in 3-component vector of float)
-0:909                  'diffuse' (in 3-component vector of float)
-0:909            'specular' (in 3-component vector of float)
-0:909          'alpha' (in float)
-0:911  Function Definition: GetFinalColor_ModifyADS(vf3;vf3;vf3;vf3;f1; (4-component vector of float)
-0:911    Function Parameters: 
-0:911      'ambiant' (in 3-component vector of float)
-0:911      'diffuse' (in 3-component vector of float)
-0:911      'specular' (in 3-component vector of float)
-0:911      'modify' (in 3-component vector of float)
-0:911      'alpha' (in float)
-0:913    Sequence
-0:913      Branch: Return with expression
-0:913        Construct vec4 (4-component vector of float)
-0:913          component-wise multiply (3-component vector of float)
-0:913            'modify' (in 3-component vector of float)
-0:913            add (3-component vector of float)
-0:913              Function Call: saturateLight(vf3; (3-component vector of float)
-0:913                add (3-component vector of float)
-0:913                  'ambiant' (in 3-component vector of float)
-0:913                  'diffuse' (in 3-component vector of float)
-0:913              'specular' (in 3-component vector of float)
-0:913          'alpha' (in float)
-0:915  Function Definition: GetFinalColor_Illum(vf3;vf3;f1; (4-component vector of float)
-0:915    Function Parameters: 
-0:915      'ambiant' (in 3-component vector of float)
-0:915      'diffuseAndSpecular' (in 3-component vector of float)
-0:915      'alpha' (in float)
-0:917    Sequence
-0:917      Branch: Return with expression
-0:917        Construct vec4 (4-component vector of float)
-0:917          add (3-component vector of float)
-0:917            'ambiant' (in 3-component vector of float)
-0:917            'diffuseAndSpecular' (in 3-component vector of float)
-0:917          'alpha' (in float)
-0:921  Function Definition: GetShadowColor(sS21;vf3;f1; (float)
-0:921    Function Parameters: 
-0:921      'shadowMap' (in sampler2DShadow)
-0:921      'shadowUV' (in 3-component vector of float)
-0:921      'mapScale' (in float)
-0:923    Sequence
-0:923      Sequence
-0:923        move second child to first child (float)
-0:923          'shadowColor' (float)
-0:923          direct index (float)
-0:923            Function Call: shadow2D(sS21;vf3; (4-component vector of float)
-0:923              'shadowMap' (in sampler2DShadow)
-0:923              add (3-component vector of float)
-0:923                'shadowUV' (in 3-component vector of float)
-0:923                vector-scale (3-component vector of float)
-0:923                  -1.500000
-0:923                  -1.500000
-0:923                  0.000000
-0:923                  'mapScale' (in float)
-0:923            0 (const int)
-0:924      add second child into first child (float)
-0:924        'shadowColor' (float)
-0:924        direct index (float)
-0:924          Function Call: shadow2D(sS21;vf3; (4-component vector of float)
-0:924            'shadowMap' (in sampler2DShadow)
-0:924            add (3-component vector of float)
-0:924              'shadowUV' (in 3-component vector of float)
-0:924              vector-scale (3-component vector of float)
-0:924                -1.500000
-0:924                -0.500000
-0:924                0.000000
-0:924                'mapScale' (in float)
-0:924          0 (const int)
-0:925      add second child into first child (float)
-0:925        'shadowColor' (float)
-0:925        direct index (float)
-0:925          Function Call: shadow2D(sS21;vf3; (4-component vector of float)
-0:925            'shadowMap' (in sampler2DShadow)
-0:925            add (3-component vector of float)
-0:925              'shadowUV' (in 3-component vector of float)
-0:925              vector-scale (3-component vector of float)
-0:925                -1.500000
-0:925                0.500000
-0:925                0.000000
-0:925                'mapScale' (in float)
-0:925          0 (const int)
-0:926      add second child into first child (float)
-0:926        'shadowColor' (float)
-0:926        direct index (float)
-0:926          Function Call: shadow2D(sS21;vf3; (4-component vector of float)
-0:926            'shadowMap' (in sampler2DShadow)
-0:926            add (3-component vector of float)
-0:926              'shadowUV' (in 3-component vector of float)
-0:926              vector-scale (3-component vector of float)
-0:926                -1.500000
-0:926                1.500000
-0:926                0.000000
-0:926                'mapScale' (in float)
-0:926          0 (const int)
-0:928      add second child into first child (float)
-0:928        'shadowColor' (float)
-0:928        direct index (float)
-0:928          Function Call: shadow2D(sS21;vf3; (4-component vector of float)
-0:928            'shadowMap' (in sampler2DShadow)
-0:928            add (3-component vector of float)
-0:928              'shadowUV' (in 3-component vector of float)
-0:928              vector-scale (3-component vector of float)
-0:928                -0.500000
-0:928                -1.500000
-0:928                0.000000
-0:928                'mapScale' (in float)
-0:928          0 (const int)
-0:929      add second child into first child (float)
-0:929        'shadowColor' (float)
-0:929        direct index (float)
-0:929          Function Call: shadow2D(sS21;vf3; (4-component vector of float)
-0:929            'shadowMap' (in sampler2DShadow)
-0:929            add (3-component vector of float)
-0:929              'shadowUV' (in 3-component vector of float)
-0:929              vector-scale (3-component vector of float)
-0:929                -0.500000
-0:929                -0.500000
-0:929                0.000000
-0:929                'mapScale' (in float)
-0:929          0 (const int)
-0:930      add second child into first child (float)
-0:930        'shadowColor' (float)
-0:930        direct index (float)
-0:930          Function Call: shadow2D(sS21;vf3; (4-component vector of float)
-0:930            'shadowMap' (in sampler2DShadow)
-0:930            add (3-component vector of float)
-0:930              'shadowUV' (in 3-component vector of float)
-0:930              vector-scale (3-component vector of float)
-0:930                -0.500000
-0:930                0.500000
-0:930                0.000000
-0:930                'mapScale' (in float)
-0:930          0 (const int)
-0:931      add second child into first child (float)
-0:931        'shadowColor' (float)
-0:931        direct index (float)
-0:931          Function Call: shadow2D(sS21;vf3; (4-component vector of float)
-0:931            'shadowMap' (in sampler2DShadow)
-0:931            add (3-component vector of float)
-0:931              'shadowUV' (in 3-component vector of float)
-0:931              vector-scale (3-component vector of float)
-0:931                -0.500000
-0:931                1.500000
-0:931                0.000000
-0:931                'mapScale' (in float)
-0:931          0 (const int)
-0:933      add second child into first child (float)
-0:933        'shadowColor' (float)
-0:933        direct index (float)
-0:933          Function Call: shadow2D(sS21;vf3; (4-component vector of float)
-0:933            'shadowMap' (in sampler2DShadow)
-0:933            add (3-component vector of float)
-0:933              'shadowUV' (in 3-component vector of float)
-0:933              vector-scale (3-component vector of float)
-0:933                0.500000
-0:933                -1.500000
-0:933                0.000000
-0:933                'mapScale' (in float)
-0:933          0 (const int)
-0:934      add second child into first child (float)
-0:934        'shadowColor' (float)
-0:934        direct index (float)
-0:934          Function Call: shadow2D(sS21;vf3; (4-component vector of float)
-0:934            'shadowMap' (in sampler2DShadow)
-0:934            add (3-component vector of float)
-0:934              'shadowUV' (in 3-component vector of float)
-0:934              vector-scale (3-component vector of float)
-0:934                0.500000
-0:934                -0.500000
-0:934                0.000000
-0:934                'mapScale' (in float)
-0:934          0 (const int)
-0:935      add second child into first child (float)
-0:935        'shadowColor' (float)
-0:935        direct index (float)
-0:935          Function Call: shadow2D(sS21;vf3; (4-component vector of float)
-0:935            'shadowMap' (in sampler2DShadow)
-0:935            add (3-component vector of float)
-0:935              'shadowUV' (in 3-component vector of float)
-0:935              vector-scale (3-component vector of float)
-0:935                0.500000
-0:935                0.500000
-0:935                0.000000
-0:935                'mapScale' (in float)
-0:935          0 (const int)
-0:936      add second child into first child (float)
-0:936        'shadowColor' (float)
-0:936        direct index (float)
-0:936          Function Call: shadow2D(sS21;vf3; (4-component vector of float)
-0:936            'shadowMap' (in sampler2DShadow)
-0:936            add (3-component vector of float)
-0:936              'shadowUV' (in 3-component vector of float)
-0:936              vector-scale (3-component vector of float)
-0:936                0.500000
-0:936                1.500000
-0:936                0.000000
-0:936                'mapScale' (in float)
-0:936          0 (const int)
-0:938      add second child into first child (float)
-0:938        'shadowColor' (float)
-0:938        direct index (float)
-0:938          Function Call: shadow2D(sS21;vf3; (4-component vector of float)
-0:938            'shadowMap' (in sampler2DShadow)
-0:938            add (3-component vector of float)
-0:938              'shadowUV' (in 3-component vector of float)
-0:938              vector-scale (3-component vector of float)
-0:938                1.500000
-0:938                -1.500000
-0:938                0.000000
-0:938                'mapScale' (in float)
-0:938          0 (const int)
-0:939      add second child into first child (float)
-0:939        'shadowColor' (float)
-0:939        direct index (float)
-0:939          Function Call: shadow2D(sS21;vf3; (4-component vector of float)
-0:939            'shadowMap' (in sampler2DShadow)
-0:939            add (3-component vector of float)
-0:939              'shadowUV' (in 3-component vector of float)
-0:939              vector-scale (3-component vector of float)
-0:939                1.500000
-0:939                -0.500000
-0:939                0.000000
-0:939                'mapScale' (in float)
-0:939          0 (const int)
-0:940      add second child into first child (float)
-0:940        'shadowColor' (float)
-0:940        direct index (float)
-0:940          Function Call: shadow2D(sS21;vf3; (4-component vector of float)
-0:940            'shadowMap' (in sampler2DShadow)
-0:940            add (3-component vector of float)
-0:940              'shadowUV' (in 3-component vector of float)
-0:940              vector-scale (3-component vector of float)
-0:940                1.500000
-0:940                0.500000
-0:940                0.000000
-0:940                'mapScale' (in float)
-0:940          0 (const int)
-0:941      add second child into first child (float)
-0:941        'shadowColor' (float)
-0:941        direct index (float)
-0:941          Function Call: shadow2D(sS21;vf3; (4-component vector of float)
-0:941            'shadowMap' (in sampler2DShadow)
-0:941            add (3-component vector of float)
-0:941              'shadowUV' (in 3-component vector of float)
-0:941              vector-scale (3-component vector of float)
-0:941                1.500000
-0:941                1.500000
-0:941                0.000000
-0:941                'mapScale' (in float)
-0:941          0 (const int)
-0:942      Branch: Return with expression
-0:942        divide (float)
-0:942          'shadowColor' (float)
-0:942          16.000000
-0:947  Function Definition: GetShadowColorLow(sS21;vf3;f1; (float)
-0:947    Function Parameters: 
-0:947      'shadowMap' (in sampler2DShadow)
-0:947      'shadowUV' (in 3-component vector of float)
-0:947      'mapScale' (in float)
-0:949    Sequence
-0:949      Sequence
-0:949        move second child to first child (float)
-0:949          'shadowColor' (float)
-0:949          direct index (float)
-0:949            Function Call: shadow2D(sS21;vf3; (4-component vector of float)
-0:949              'shadowMap' (in sampler2DShadow)
-0:949              add (3-component vector of float)
-0:949                'shadowUV' (in 3-component vector of float)
-0:949                vector-scale (3-component vector of float)
-0:949                  -0.500000
-0:949                  -0.500000
-0:949                  0.000000
-0:949                  'mapScale' (in float)
-0:949            0 (const int)
-0:950      add second child into first child (float)
-0:950        'shadowColor' (float)
-0:950        direct index (float)
-0:950          Function Call: shadow2D(sS21;vf3; (4-component vector of float)
-0:950            'shadowMap' (in sampler2DShadow)
-0:950            add (3-component vector of float)
-0:950              'shadowUV' (in 3-component vector of float)
-0:950              vector-scale (3-component vector of float)
-0:950                -0.500000
-0:950                0.500000
-0:950                0.000000
-0:950                'mapScale' (in float)
-0:950          0 (const int)
-0:951      add second child into first child (float)
-0:951        'shadowColor' (float)
-0:951        direct index (float)
-0:951          Function Call: shadow2D(sS21;vf3; (4-component vector of float)
-0:951            'shadowMap' (in sampler2DShadow)
-0:951            add (3-component vector of float)
-0:951              'shadowUV' (in 3-component vector of float)
-0:951              vector-scale (3-component vector of float)
-0:951                0.500000
-0:951                -0.500000
-0:951                0.000000
-0:951                'mapScale' (in float)
-0:951          0 (const int)
-0:952      add second child into first child (float)
-0:952        'shadowColor' (float)
-0:952        direct index (float)
-0:952          Function Call: shadow2D(sS21;vf3; (4-component vector of float)
-0:952            'shadowMap' (in sampler2DShadow)
-0:952            add (3-component vector of float)
-0:952              'shadowUV' (in 3-component vector of float)
-0:952              vector-scale (3-component vector of float)
-0:952                0.500000
-0:952                0.500000
-0:952                0.000000
-0:952                'mapScale' (in float)
-0:952          0 (const int)
-0:953      Branch: Return with expression
-0:953        divide (float)
-0:953          'shadowColor' (float)
-0:953          4.000000
-0:958  Function Definition: getMixColor(vf4;vf4;f1;vf3;vf3; (4-component vector of float)
-0:958    Function Parameters: 
-0:958      'matColor' (in 4-component vector of float)
-0:958      'matColor2' (in 4-component vector of float)
-0:958      'colorMixFactor' (in float)
-0:958      'eNormal' (in 3-component vector of float)
-0:958      'eyeVector' (in 3-component vector of float)
-0:960    Sequence
-0:960      Sequence
-0:960        move second child to first child (float)
-0:960          'cpdot' (float)
-0:960          max (float)
-0:960            Absolute value (float)
-0:960              dot-product (float)
-0:960                'eNormal' (in 3-component vector of float)
-0:960                'eyeVector' (in 3-component vector of float)
-0:960            0.010000
-0:961      move second child to first child (float)
-0:961        'cpdot' (float)
-0:961        clamp (float)
-0:961          subtract (float)
-0:961            component-wise multiply (float)
-0:961              1.200000
-0:961              pow (float)
-0:961                'cpdot' (float)
-0:961                'colorMixFactor' (in float)
-0:961            0.100000
-0:961          0.000000
-0:961          1.000000
-0:962      Branch: Return with expression
-0:962        mix (4-component vector of float)
-0:962          'matColor2' (in 4-component vector of float)
-0:962          'matColor' (in 4-component vector of float)
-0:962          'cpdot' (float)
-0:1002  Function Definition: main( (void)
-0:1002    Function Parameters: 
-0:1005    Sequence
-0:1005      Sequence
-0:1005        move second child to first child (2-component vector of float)
-0:1005          'texCoords' (2-component vector of float)
-0:1005          0.000000
-0:1005          0.000000
-0:1012      Sequence
-0:1012        move second child to first child (3-component vector of float)
-0:1012          'tangent' (3-component vector of float)
-0:1012          normalize (3-component vector of float)
-0:1012            'v_Tangent' (smooth in 3-component vector of float)
-0:1016      Sequence
-0:1016        move second child to first child (3X3 matrix of float)
-0:1016          't2eMatrixTBN' (3X3 matrix of float)
-0:1016          Function Call: t2eGetMatrixTBN(mf33;vf3;vf3;b1; (3X3 matrix of float)
-0:1016            'gl_NormalMatrix' (uniform 3X3 matrix of float)
-0:1016            'v_Normal' (smooth in 3-component vector of float)
-0:1016            'tangent' (3-component vector of float)
-0:1016            Compare Not Equal (bool)
-0:1016              'doubleSided' (uniform float)
-0:1016              0.000000
-0:1113      Sequence
-0:1113        move second child to first child (2-component vector of float)
-0:1113          'newTexCoord' (2-component vector of float)
-0:1113          'texCoords' (2-component vector of float)
-0:1134      Sequence
-0:1134        move second child to first child (3-component vector of float)
-0:1134          'tBumpNormal' (3-component vector of float)
-0:1134          direct index (3-component vector of float)
-0:1134            't2eMatrixTBN' (3X3 matrix of float)
-0:1134            2 (const int)
-0:1145      Sequence
-0:1145        move second child to first child (4-component vector of float)
-0:1145          'mixColor' (4-component vector of float)
-0:1145          'matColor' (uniform 4-component vector of float)
-0:1148      Sequence
-0:1148        move second child to first child (float)
-0:1148          'fresnelColor' (float)
-0:1148          0.000000
-0:1158      Sequence
-0:1158        move second child to first child (3-component vector of float)
-0:1158          'lightNormal' (3-component vector of float)
-0:1158          'tBumpNormal' (3-component vector of float)
-0:?       Sequence
-0:1202        move second child to first child (float)
-0:1202          'l_reflectModifier' (float)
-0:1202          'reflectModifier' (uniform float)
-0:1210      Sequence
-0:1210        move second child to first child (3-component vector of float)
-0:1210          'diffuseLight' (3-component vector of float)
-0:1210          0.000000
-0:1210          0.000000
-0:1210          0.000000
-0:1211      Sequence
-0:1211        move second child to first child (4-component vector of float)
-0:1211          'specularLight' (4-component vector of float)
-0:1211          0.000000
-0:1211          0.000000
-0:1211          0.000000
-0:1211          0.000000
-0:1212      Sequence
-0:1212        move second child to first child (4-component vector of float)
-0:1212          'microFlakeSpec' (4-component vector of float)
-0:1212          0.000000
-0:1212          0.000000
-0:1212          0.000000
-0:1212          0.000000
-0:1217      Sequence
-0:1217        move second child to first child (3-component vector of float)
-0:1217          'tLightDir' (3-component vector of float)
-0:1217          0.000000
-0:1217          0.000000
-0:1217          1.000000
-0:1218      Sequence
-0:1218        move second child to first child (3-component vector of float)
-0:1218          'tHalfVector' (3-component vector of float)
-0:1218          0.000000
-0:1218          0.000000
-0:1218          -1.000000
-0:1230      Sequence
-0:1230        Sequence
-0:1230          move second child to first child (3-component vector of float)
-0:1230            'tLightDir' (3-component vector of float)
-0:1230            Function Call: eGetLightDir_DP(vf3;vf3;f1; (3-component vector of float)
-0:1230              Construct vec3 (3-component vector of float)
-0:1230                'lightDir0' (uniform 4-component vector of float)
-0:1230              'v_PositionEyeSpace' (smooth in 3-component vector of float)
-0:1230              direct index (float)
-0:1230                'lightType' (uniform 4-component vector of float)
-0:1230                0 (const int)
-0:1231          move second child to first child (3-component vector of float)
-0:1231            'tHalfVector' (3-component vector of float)
-0:1231            Function Call: eGetHalfVector(vf3;vf3; (3-component vector of float)
-0:1231              'tLightDir' (3-component vector of float)
-0:1231              'v_EyeDirection' (smooth in 3-component vector of float)
-0:1236        Function Call: AddSpecularAndDiffuse(vf3;vf3;vf3;i1;vf3;vf3;f1;b1;b1;vf3;vf4;f1; (void)
-0:1233          'lightNormal' (3-component vector of float)
-0:1234          'tLightDir' (3-component vector of float)
-0:1234          Construct vec3 (3-component vector of float)
-0:1234            'lightColor0' (uniform 4-component vector of float)
-0:1234          26 (const int)
-0:1235          'tHalfVector' (3-component vector of float)
-0:1235          Construct vec3 (3-component vector of float)
-0:1235            'lightSpec0' (uniform 4-component vector of float)
-0:1235          direct index (float)
-0:1235            'specularMaterial' (uniform 4-component vector of float)
-0:1235            3 (const int)
-0:1235          false (const bool)
-0:1235          false (const bool)
-0:1236          'diffuseLight' (3-component vector of float)
-0:1236          'specularLight' (4-component vector of float)
-0:1236          'transparency' (uniform float)
-0:1250      Sequence
-0:1250        Test condition and select (void)
-0:1250          Condition
-0:1250          Compare Greater Than (bool)
-0:1250            'isDynamicShadowVisible' (uniform float)
-0:1250            0.000000
-0:1250          true case
-0:1252          Sequence
-0:1252            Sequence
-0:1252              move second child to first child (float)
-0:1252                'shadowColor' (float)
-0:1252                Function Call: GetShadowColor(sS21;vf3;f1; (float)
-0:1252                  'shadowMap2D' (uniform sampler2DShadow)
-0:1252                  vector swizzle (3-component vector of float)
-0:1252                    'v_projCoordSM' (smooth in 4-component vector of float)
-0:1252                    Sequence
-0:1252                      0 (const int)
-0:1252                      1 (const int)
-0:1252                      2 (const int)
-0:1252                  'shadowMapScale' (uniform float)
-0:1258            vector scale second child into first child (3-component vector of float)
-0:1258              vector swizzle (3-component vector of float)
-0:1258                'diffuseLight' (3-component vector of float)
-0:1258                Sequence
-0:1258                  0 (const int)
-0:1258                  1 (const int)
-0:1258                  2 (const int)
-0:1258              'shadowColor' (float)
-0:1259            vector scale second child into first child (3-component vector of float)
-0:1259              vector swizzle (3-component vector of float)
-0:1259                'specularLight' (4-component vector of float)
-0:1259                Sequence
-0:1259                  0 (const int)
-0:1259                  1 (const int)
-0:1259                  2 (const int)
-0:1259              'shadowColor' (float)
-0:1299      Sequence
-0:1299        Sequence
-0:1299          move second child to first child (3-component vector of float)
-0:1299            'tLightDir' (3-component vector of float)
-0:1299            Function Call: eGetLightDir_DP(vf3;vf3;f1; (3-component vector of float)
-0:1299              Construct vec3 (3-component vector of float)
-0:1299                'lightDir1' (uniform 4-component vector of float)
-0:1299              'v_PositionEyeSpace' (smooth in 3-component vector of float)
-0:1299              direct index (float)
-0:1299                'lightType' (uniform 4-component vector of float)
-0:1299                1 (const int)
-0:1300          move second child to first child (3-component vector of float)
-0:1300            'tHalfVector' (3-component vector of float)
-0:1300            Function Call: eGetHalfVector(vf3;vf3; (3-component vector of float)
-0:1300              'tLightDir' (3-component vector of float)
-0:1300              'v_EyeDirection' (smooth in 3-component vector of float)
-0:1305        Function Call: AddSpecularAndDiffuse(vf3;vf3;vf3;i1;vf3;vf3;f1;b1;b1;vf3;vf4;f1; (void)
-0:1302          'lightNormal' (3-component vector of float)
-0:1303          'tLightDir' (3-component vector of float)
-0:1303          Construct vec3 (3-component vector of float)
-0:1303            'lightColor1' (uniform 4-component vector of float)
-0:1303          26 (const int)
-0:1304          'tHalfVector' (3-component vector of float)
-0:1304          Construct vec3 (3-component vector of float)
-0:1304            'lightSpec1' (uniform 4-component vector of float)
-0:1304          direct index (float)
-0:1304            'specularMaterial' (uniform 4-component vector of float)
-0:1304            3 (const int)
-0:1304          false (const bool)
-0:1304          false (const bool)
-0:1305          'diffuseLight' (3-component vector of float)
-0:1305          'specularLight' (4-component vector of float)
-0:1305          'transparency' (uniform float)
-0:1323      Sequence
-0:1323        Sequence
-0:1323          move second child to first child (3-component vector of float)
-0:1323            'tLightDir' (3-component vector of float)
-0:1323            Function Call: eGetLightDir_DP(vf3;vf3;f1; (3-component vector of float)
-0:1323              Construct vec3 (3-component vector of float)
-0:1323                'lightDir2' (uniform 4-component vector of float)
-0:1323              'v_PositionEyeSpace' (smooth in 3-component vector of float)
-0:1323              direct index (float)
-0:1323                'lightType' (uniform 4-component vector of float)
-0:1323                2 (const int)
-0:1324          move second child to first child (3-component vector of float)
-0:1324            'tHalfVector' (3-component vector of float)
-0:1324            Function Call: eGetHalfVector(vf3;vf3; (3-component vector of float)
-0:1324              'tLightDir' (3-component vector of float)
-0:1324              'v_EyeDirection' (smooth in 3-component vector of float)
-0:1329        Function Call: AddSpecularAndDiffuse(vf3;vf3;vf3;i1;vf3;vf3;f1;b1;b1;vf3;vf4;f1; (void)
-0:1326          'lightNormal' (3-component vector of float)
-0:1327          'tLightDir' (3-component vector of float)
-0:1327          Construct vec3 (3-component vector of float)
-0:1327            'lightColor2' (uniform 4-component vector of float)
-0:1327          26 (const int)
-0:1328          'tHalfVector' (3-component vector of float)
-0:1328          Construct vec3 (3-component vector of float)
-0:1328            'lightSpec2' (uniform 4-component vector of float)
-0:1328          direct index (float)
-0:1328            'specularMaterial' (uniform 4-component vector of float)
-0:1328            3 (const int)
-0:1328          false (const bool)
-0:1328          false (const bool)
-0:1329          'diffuseLight' (3-component vector of float)
-0:1329          'specularLight' (4-component vector of float)
-0:1329          'transparency' (uniform float)
-0:1341      move second child to first child (3-component vector of float)
-0:1341        vector swizzle (3-component vector of float)
-0:1341          'specularTerm' (4-component vector of float)
-0:1341          Sequence
-0:1341            0 (const int)
-0:1341            1 (const int)
-0:1341            2 (const int)
-0:1341        Function Call: GetSpecularTerm(vf3;vf3; (3-component vector of float)
-0:1341          Construct vec3 (3-component vector of float)
-0:1341            'specularLight' (4-component vector of float)
-0:1341          vector-scale (3-component vector of float)
-0:1341            Construct vec3 (3-component vector of float)
-0:1341              'specularMaterial' (uniform 4-component vector of float)
-0:1341            'specularLightModifier' (uniform float)
-0:1369      Sequence
-0:1369        Sequence
-0:1369          move second child to first child (float)
-0:1369            'alpha' (float)
-0:1369            'transparency' (uniform float)
-0:1374      Sequence
-0:1374        move second child to first child (3-component vector of float)
-0:1374          'ambientAndDiffuseModifier' (3-component vector of float)
-0:1374          1.000000
-0:1374          1.000000
-0:1374          1.000000
-0:1377      Sequence
-0:1377        move second child to first child (3-component vector of float)
-0:1377          'ambientAndDiffuseModifier' (3-component vector of float)
-0:1377          0.000000
-0:1377          0.000000
-0:1377          0.000000
-0:1412        Sequence
-0:1412          add second child into first child (3-component vector of float)
-0:1412            'ambientAndDiffuseModifier' (3-component vector of float)
-0:1412            subtract (float)
-0:1412              1.000000
-0:1412              'l_reflectModifier' (float)
-0:1416        multiply second child into first child (3-component vector of float)
-0:1416          'ambientAndDiffuseModifier' (3-component vector of float)
-0:1416          vector swizzle (3-component vector of float)
-0:1416            'mixColor' (4-component vector of float)
-0:1416            Sequence
-0:1416              0 (const int)
-0:1416              1 (const int)
-0:1416              2 (const int)
-0:?         Sequence
-0:1429          Sequence
-0:1429            move second child to first child (3-component vector of float)
-0:1429              'eReflection' (3-component vector of float)
-0:1429              Function Call: eGetReflection(vf3;vf3;vf3; (3-component vector of float)
-0:1429                direct index (3-component vector of float)
-0:1429                  't2eMatrixTBN' (3X3 matrix of float)
-0:1429                  2 (const int)
-0:1429                'envEyePosition' (uniform 3-component vector of float)
-0:1429                'v_PositionEyeSpace' (smooth in 3-component vector of float)
-0:1431          move second child to first child (3-component vector of float)
-0:1431            'eReflection' (3-component vector of float)
-0:1431            matrix-times-vector (3-component vector of float)
-0:1431              'e2lDirectionMat' (uniform 3X3 matrix of float)
-0:1431              'eReflection' (3-component vector of float)
-0:1434          Sequence
-0:1434            Sequence
-0:1434              move second child to first child (3-component vector of float)
-0:1434                'env' (3-component vector of float)
-0:1434                vector swizzle (3-component vector of float)
-0:1434                  Function Call: GetEnv(vf3; (4-component vector of float)
-0:1434                    'eReflection' (3-component vector of float)
-0:1434                  Sequence
-0:1434                    0 (const int)
-0:1434                    1 (const int)
-0:1434                    2 (const int)
-0:1435            Sequence
-0:1435              move second child to first child (float)
-0:1435                'envgs' (float)
-0:1435                add (float)
-0:1435                  component-wise multiply (float)
-0:1435                    direct index (float)
-0:1435                      'env' (3-component vector of float)
-0:1435                      0 (const int)
-0:1435                    0.300000
-0:1435                  component-wise multiply (float)
-0:1435                    component-wise multiply (float)
-0:1435                      component-wise multiply (float)
-0:1435                        direct index (float)
-0:1435                          'env' (3-component vector of float)
-0:1435                          1 (const int)
-0:1435                        0.590000
-0:1435                      direct index (float)
-0:1435                        'env' (3-component vector of float)
-0:1435                        0 (const int)
-0:1435                    0.110000
-0:1436            move second child to first child (float)
-0:1436              'l_reflectModifier' (float)
-0:1436              clamp (float)
-0:1436                component-wise multiply (float)
-0:1436                  component-wise multiply (float)
-0:1436                    'l_reflectModifier' (float)
-0:1436                    'envgs' (float)
-0:1436                  10.000000
-0:1436                'l_reflectModifier' (float)
-0:1436                1.000000
-0:1437            add second child into first child (3-component vector of float)
-0:1437              'ambientAndDiffuseModifier' (3-component vector of float)
-0:1437              vector-scale (3-component vector of float)
-0:1437                'l_reflectModifier' (float)
-0:1437                'env' (3-component vector of float)
-0:1454      move second child to first child (3-component vector of float)
-0:1454        'diffuseTerm' (3-component vector of float)
-0:1454        vector-scale (3-component vector of float)
-0:1454          'diffuseLight' (3-component vector of float)
-0:1454          'matDiffuse' (uniform float)
-0:1466      move second child to first child (3-component vector of float)
-0:1466        'ambientTerm' (3-component vector of float)
-0:1466        add (3-component vector of float)
-0:1466          vector-scale (3-component vector of float)
-0:1466            Construct vec3 (3-component vector of float)
-0:1466              'ambientLight' (uniform 4-component vector of float)
-0:1466            'matAmbient' (uniform float)
-0:1466          Construct vec3 (3-component vector of float)
-0:1466            'matEmissivity' (uniform float)
-0:1494      vector scale second child into first child (3-component vector of float)
-0:1494        'ambientTerm' (3-component vector of float)
-0:1494        1.000000
-0:1555      Sequence
-0:1555        move second child to first child (4-component vector of float)
-0:1555          'finalColor' (4-component vector of float)
-0:1559          Function Call: GetFinalColor(vf3;vf3;vf3;f1; (4-component vector of float)
-0:1556            component-wise multiply (3-component vector of float)
-0:1556              'ambientTerm' (3-component vector of float)
-0:1556              'ambientAndDiffuseModifier' (3-component vector of float)
-0:1557            component-wise multiply (3-component vector of float)
-0:1557              'diffuseTerm' (3-component vector of float)
-0:1557              'ambientAndDiffuseModifier' (3-component vector of float)
-0:1558            vector swizzle (3-component vector of float)
-0:1558              'specularTerm' (4-component vector of float)
-0:1558              Sequence
-0:1558                0 (const int)
-0:1558                1 (const int)
-0:1558                2 (const int)
-0:1559            'alpha' (float)
-0:1592      Sequence
-0:1592        Test condition and select (void)
-0:1592          Condition
-0:1592          Compare Equal (bool)
-0:1592            direct index (float)
-0:1592              'finalColor' (4-component vector of float)
-0:1592              3 (const int)
-0:1592            1.000000
-0:1592          true case
-0:1594          Sequence
-0:1594            move second child to first child (float)
-0:1594              direct index (float)
-0:1594                'finalColor' (4-component vector of float)
-0:1594                3 (const int)
-0:1594              clamp (float)
-0:1594                subtract (float)
-0:1594                  1.000000
-0:1594                  direct index (float)
-0:1594                    'v_TexCoord' (smooth in 4-component vector of float)
-0:1594                    3 (const int)
-0:1594                0.000000
-0:1594                1.000000
-0:1592          false case
-0:1598          Sequence
-0:1598            multiply second child into first child (float)
-0:1598              direct index (float)
-0:1598                'finalColor' (4-component vector of float)
-0:1598                3 (const int)
-0:1598              clamp (float)
-0:1598                subtract (float)
-0:1598                  1.000000
-0:1598                  component-wise multiply (float)
-0:1598                    component-wise multiply (float)
-0:1598                      direct index (float)
-0:1598                        'v_TexCoord' (smooth in 4-component vector of float)
-0:1598                        3 (const int)
-0:1598                      direct index (float)
-0:1598                        'v_TexCoord' (smooth in 4-component vector of float)
-0:1598                        3 (const int)
-0:1598                    direct index (float)
-0:1598                      'v_TexCoord' (smooth in 4-component vector of float)
-0:1598                      3 (const int)
-0:1598                0.000000
-0:1598                1.000000
-0:1611      move second child to first child (4-component vector of float)
-0:1611        'gl_FragColor' (fragColor 4-component vector of float)
-0:1611        'finalColor' (4-component vector of float)
-0:?   Linker Objects
-0:?     'matColor' (uniform 4-component vector of float)
-0:?     'matColor2' (uniform 4-component vector of float)
-0:?     'colorMixFactor' (uniform float)
-0:?     'matDiffuse' (uniform float)
-0:?     'matEmissivity' (uniform float)
-0:?     'matAmbient' (uniform float)
-0:?     'specularMaterial' (uniform 4-component vector of float)
-0:?     'specularLightModifier' (uniform float)
-0:?     'ambientLight' (uniform 4-component vector of float)
-0:?     'lightDir0' (uniform 4-component vector of float)
-0:?     'lightColor0' (uniform 4-component vector of float)
-0:?     'lightSpec0' (uniform 4-component vector of float)
-0:?     'lightDir1' (uniform 4-component vector of float)
-0:?     'lightColor1' (uniform 4-component vector of float)
-0:?     'lightSpec1' (uniform 4-component vector of float)
-0:?     'lightDir2' (uniform 4-component vector of float)
-0:?     'lightColor2' (uniform 4-component vector of float)
-0:?     'lightSpec2' (uniform 4-component vector of float)
-0:?     'lightType' (uniform 4-component vector of float)
-0:?     'shadowMapScale' (uniform float)
-0:?     'isAOShadowVisible' (uniform float)
-0:?     'isDynamicShadowVisible' (uniform float)
-0:?     'floorPoint' (uniform 4-component vector of float)
-0:?     'floorNormal' (uniform 4-component vector of float)
-0:?     'center' (uniform 3-component vector of float)
-0:?     'faceWidth' (uniform float)
-0:?     'diffuseAverage' (uniform 3-component vector of float)
-0:?     'diffuseMapModifier' (uniform 3-component vector of float)
-0:?     'e2cCosmeticTextureTransform' (uniform 4X4 matrix of float)
-0:?     'envcolorAverage' (uniform 3-component vector of float)
-0:?     'envBrightness' (uniform float)
-0:?     'envColorWash' (uniform float)
-0:?     'envContrast' (uniform float)
-0:?     'envEyePosition' (uniform 3-component vector of float)
-0:?     'envColor' (uniform 3-component vector of float)
-0:?     'reflectModifier' (uniform float)
-0:?     'transparency' (uniform float)
-0:?     'doubleSided' (uniform float)
-0:?     'fresnelCoef1' (uniform float)
-0:?     'fresnelCoef2' (uniform float)
-0:?     'RimlightColor' (uniform 3-component vector of float)
-0:?     'specularColor' (uniform 4-component vector of float)
-0:?     'e2lDirectionMat' (uniform 3X3 matrix of float)
-0:?     'microFlakeShininess' (uniform float)
-0:?     'microFlakeCoef' (uniform float)
-0:?     'microFlakeColor' (uniform 4-component vector of float)
-0:?     'parallaxOffset' (uniform float)
-0:?     'parallaxPrecision' (uniform float)
-0:?     'shadowMap2D' (uniform sampler2DShadow)
-0:?     'AOTermMap2D' (uniform sampler2D)
-0:?     'reflectionMap2D' (uniform sampler2D)
-0:?     'envSphericalDiffuse' (uniform sampler2D)
-0:?     'envCubicDiffuse' (uniform samplerCube)
-0:?     'diffMap2D' (uniform sampler2D)
-0:?     'alphaMap' (uniform sampler2D)
-0:?     'envCubicSpecular' (uniform samplerCube)
-0:?     'envSphericalSpecular' (uniform sampler2D)
-0:?     'normalMap2D' (uniform sampler2D)
-0:?     'envSphericalBackground' (uniform sampler2D)
-0:?     'envCubicBackground' (uniform samplerCube)
-0:?     'v_TexCoord' (smooth in 4-component vector of float)
-0:?     'v_EyeDirection' (smooth in 3-component vector of float)
-0:?     'v_PositionEyeSpace' (smooth in 3-component vector of float)
-0:?     'v_Normal' (smooth in 3-component vector of float)
-0:?     'v_Tangent' (smooth in 3-component vector of float)
-0:?     'v_projCoordSM' (smooth in 4-component vector of float)
-0:?     'v_fragCoord' (smooth in 4-component vector of float)
-0:?     'v_projCoordRF' (smooth in 4-component vector of float)
-0:?     'v_FloorPoint' (smooth in 4-component vector of float)
-0:?     'v_patternCoord' (smooth in 2-component vector of float)
-
diff --git a/Test/baseResults/test.conf b/Test/baseResults/test.conf
new file mode 100644
index 0000000000000000000000000000000000000000..2f04420ee2f538e4e6e2241e73dc2045bf9b85bf
--- /dev/null
+++ b/Test/baseResults/test.conf
@@ -0,0 +1,19 @@
+MaxLights 32
+MaxClipPlanes 6
+MaxTextureUnits 32
+MaxTextureCoords 32
+MaxVertexAttribs 64
+MaxVertexUniformComponents 4096
+MaxVaryingFloats 64
+MaxVertexTextureImageUnits 32
+MaxCombinedTextureImageUnits 32
+MaxTextureImageUnits 32
+MaxFragmentUniformComponents 4096
+MaxDrawBuffers 32
+MaxVertexUniformVectors 128
+MaxVaryingVectors 8
+MaxFragmentUniformVectors 16
+MaxVertexOutputVectors 16
+MaxFragmentInputVectors 15
+MinProgramTexelOffset -8
+MaxProgramTexelOffset 7
diff --git a/Test/runtests b/Test/runtests
index 3126fca182ea1bca3015785abff5e88ba2909a03..16b5deb6677ebe790cab46d913523ec6707abe1e 100644
--- a/Test/runtests
+++ b/Test/runtests
@@ -5,9 +5,17 @@ BASEDIR=baseResults
 EXE=./glslangValidator.exe
 
 #
-# isolated compilation tests
+# configuration file test
 #
+echo running configuration file test
+$EXE -c > $TARGETDIR/test.conf
+diff -b $BASEDIR/test.conf $TARGETDIR/test.conf
+$EXE -i $TARGETDIR/test.conf specExamples.vert > $TARGETDIR/specExamples.vert.out
+diff -b $BASEDIR/specExamples.vert.out $TARGETDIR
 
+#
+# isolated compilation tests
+#
 while read t; do
     echo Running $t...
     b=`basename $t`
@@ -18,7 +26,6 @@ done < testlist
 #
 # grouped shaders for link tests
 #
-
 function runLinkTest {
     echo Running $*...
     $EXE -i -l $* > $TARGETDIR/$1.out
@@ -31,8 +38,8 @@ runLinkTest noMain.vert mains.frag
 #
 # multi-threaded test
 #
-
 echo Comparing single thread to multithread for all tests in current directory...
 $EXE -i *.vert *.geom *.frag *.tes* *.comp > singleThread.out
 $EXE -i *.vert *.geom *.frag *.tes* *.comp -t > multiThread.out
 diff singleThread.out multiThread.out
+
diff --git a/Todo.txt b/Todo.txt
index 09f9e53fbbfc2be9b03d274cb35bbd9fbe4a7890..75f2c3eac0c80ac3d7dc9c518f8500c8e34a50de 100644
--- a/Todo.txt
+++ b/Todo.txt
@@ -1,6 +1,8 @@
 Current functionality level: ESSL 3.0
 
 Link Validation
+    + provide input config file for setting limits
+	  - also consider spitting out measures of complexity
     - ensure no static references thrown away
     Cross-stage linking
       - type consistency check of uniform and ins <-> outs, both variables and blocks, stage-specific arrayness matching
@@ -13,6 +15,7 @@ Link Validation
       - 1.3: deprecated mixing fixed vertex/fragment stage with programmable fragment/vertex stage.
       - 4.3: remove cross-version linking restrictions.
       - 4.3: Allow mismatches in interpolation and auxiliary qualification across stages.
+	  - 4.4: A stage contains two different blocks, each with no instance name, where the blocks contain a member with the same name.
     Intra-stage linking
       - exactly one main
       - type consistency check of uniforms, globals, ins, and outs, both variables and blocks
@@ -33,6 +36,8 @@ Link Validation
       - 4.3: Be clear that early_fragment_tests is only needed in one fragment-stage compilation unit.
       - 4.3: Be clear that implicit array sizing is only within a stage, not cross stage.
       - 4.4: overlapping transform/feedback offsets, offset/stride overflow checks, and stride matching
+	  - 4.4: If gl_FragCoord is redeclared in any fragment shader in a program, it must be redeclared in all the fragment shaders in that program that have a static use gl_FragCoord
+	  - 4.4: An interface contains two different blocks, each with no instance name, where the blocks contain a member with the same name.
 
 Shader Functionality to Implement/Finish
     ESSL 3.0
@@ -116,7 +121,6 @@ Shader Functionality to Implement/Finish
       - Add 64-bit floating-point attributes for vertex shader inputs.
       - Support viewport arrays so where the geometry shader selects which viewport array will transform its output.
     GLSL 4.2
-      - Add 420-style function signature matching rules (or did this start in 4.0?)
       + Move these previously deprecated features to be only in the compatibility profile:
         + The keyword attribute for vertex shader inputs. (Use in instead.)
         + The keyword varying for inputs and outputs. (Use in and out instead.)
@@ -153,12 +157,9 @@ Shader Functionality to Implement/Finish
       - Allow swizzle operations on scalars.
       - Positive signed decimal literals, as well as octal and hexadecimal, can set all 32 bits. This includes setting the sign bit to create a negative value.
       - Make GLSL consistent with the API regarding user clipping, by no longer referring to gl_Positionwhen gl_ClipVertex is not written. Rather, user clipping becomes undefined.
-      - Minor consistency fixes, corrections
-        - Consistently state structures have members not fields. The period ( . ) is still called the field selector, for all its multiple uses.
-        - Remove comment that there is no communication between instantiations of a shader.
-        - Clarified that a comma sequence-operator expression cannot be a constant expression. E.g., “(2,3)” is not allowed, semantically, as a valid constant expression 3, even though it is an expression that will evaluate to 3.
-        - Use vec2instead of vec3for coordinate in textureGather*(sampler2DRect,...).
-        - Clarify that textureGatherOffset() can take non-constants for the offsets.
+      - Clarified that a comma sequence-operator expression cannot be a constant expression. E.g., “(2,3)” is not allowed, semantically, as a valid constant expression 3, even though it is an expression that will evaluate to 3.
+      - Use vec2 instead of vec3 for coordinate in textureGather*(sampler2DRect,...).
+      - Clarify that textureGatherOffset() can take non-constants for the offsets.
     GLSL 4.3
       - Add shader storage bufferobjects, as per the ARB_shader_storage_buffer_object extension. 
         This includes 1) allowing the last member of a storage buffer block to be an array that does not