<!--

  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>

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

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

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

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

        <swf-external-library-path>
#foreach($artifact in $swfExternalLibraries)            <path-element>$artifact.file</path-element>
#end
        </swf-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>

        <js-namespaces>
#foreach($jsnamespace in $jsNamespaces)            <namespace>
                <uri>$jsnamespace.uri</uri>
                <manifest>$jsnamespace.manifest</manifest>
            </namespace>
#end
        </js-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>
            <imports>
                <implicit-import>org.apache.flex.events.*</implicit-import>
                <implicit-import>org.apache.flex.geom.*</implicit-import>
                <implicit-import>org.apache.flex.core.ClassFactory</implicit-import>
                <implicit-import>org.apache.flex.core.IFactory</implicit-import>
            </imports>
        </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>
        <binding-event-handler-event>org.apache.flex.events.Event</binding-event-handler-event>
        <binding-event-handler-class>org.apache.flex.events.EventDispatcher</binding-event-handler-class>
        <binding-event-handler-interface>org.apache.flex.events.IEventDispatcher</binding-event-handler-interface>
        <states-class>org.apache.flex.states.State</states-class>
        <states-instance-override-class>org.apache.flex.states.AddItems</states-instance-override-class>
        <states-property-override-class>org.apache.flex.states.SetProperty</states-property-override-class>
        <states-event-override-class>org.apache.flex.states.SetEventHandler</states-event-override-class>
        <component-factory-class>org.apache.flex.core.ClassFactory</component-factory-class>
        <component-factory-interface>org.apache.flex.core.IFactory</component-factory-interface>

        <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>
