<!--

  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License.  You may obtain a copy of the License at

	  http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.

-->
<flex-config>

    <compiler>

        <accessible>true</accessible>
        <debug>$debug</debug>

        <library-path>
#foreach($artifact in $libraries)            <path-element>$artifact.file</path-element>
#end
        </library-path>

        <external-library-path>
#foreach($artifact in $externalLibraries)            <path-element>$artifact.file</path-element>
#end
        </external-library-path>

        <theme>
#foreach($artifact in $themeLibraries)           <filename>$artifact.file</filename>
#end
        </theme>

        <source-path>
#foreach($sourcePath in $sourcePaths)           <path-element>$sourcePath</path-element>
#end
        </source-path>

        <namespaces>
#foreach($namespace in $namespaces)            <namespace>
                <uri>$namespace.uri</uri>
                <manifest>$namespace.manifest</manifest>
            </namespace>
#end
        </namespaces>

        <keep-as3-metadata>
#foreach($metadata in $keepAs3Metadata)            <name>$metadata</name>
#end
        </keep-as3-metadata>

        <allow-subclass-overrides>$allowSubclassOverrides</allow-subclass-overrides>
        
        <mxml>
            <children-as-data>true</children-as-data>
        </mxml>

        <binding-value-change-event>org.apache.flex.events.ValueChangeEvent</binding-value-change-event>
        <binding-value-change-event-kind>org.apache.flex.events.ValueChangeEvent</binding-value-change-event-kind>
        <binding-value-change-event-type>valueChange</binding-value-change-event-type>

        <locale>
        </locale>

        <warn-no-constructor>false</warn-no-constructor>
        <show-deprecation-warnings>false</show-deprecation-warnings>

#foreach($define in $defines)        <define>
            <name>$define.name</name>
            <value>$define.value</value>
        </define>
#end
    </compiler>

#if($includeSources)
    <include-sources>
#foreach($sourcePath in $sourcePaths)        <path-element>$sourcePath</path-element>
#end
    </include-sources>
#end

#if($includeClasses)
    <include-classes>
#foreach($includeClass in $includeClasses)        <class>$includeClass</class>
#end
    </include-classes>
#end

#if($namespaceUris)
    <include-namespaces>
#foreach($namespaceUri in $namespaceUris)        <uri>$namespaceUri</uri>
#end
    </include-namespaces>
#end

#foreach($includeFile in $includeFiles)    <include-file>
        <name>$includeFile.name</name>
        <path>$includeFile.path</path>
    </include-file>
#end

#if($includeLookupOnly)
    <include-lookup-only>$includeLookupOnly</include-lookup-only>
#end

    <target-player>${targetPlayer}</target-player>

    <output>${output}</output>

</flex-config>
