// -----------------------------------------------------------------------------
//
//   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.
//
// $Id$
// -----------------------------------------------------------------------------

grant codeBase "${app.jar.base}/@jarsLibDir@xml-apis-ext-1.3.04.jar" {
  permission java.security.AllPermission;
};

grant codeBase "${app.jar.base}/@jarsLibDir@xml-apis-1.3.04.jar" {
  permission java.security.AllPermission;
};

grant codeBase "${app.jar.base}/@jarsLibDir@xalan-2.7.0.jar" {
  permission java.security.AllPermission;
};

grant codeBase "${app.jar.base}/@jarsLibDir@xerces_2_5_0.jar" {
  permission java.security.AllPermission;
};

grant codeBase "${app.jar.base}/batik-rasterizer-@batikVersion@.jar" {
  permission java.security.AllPermission;
};

grant codeBase "${app.jar.base}/@jarsLibDir@batik-ext-@batikVersion@.jar" {
  permission java.security.AllPermission;
};

grant codeBase "${app.jar.base}/@jarsLibDir@batik-dom-@batikVersion@.jar" {
  permission java.security.AllPermission;
};

grant codeBase "${app.jar.base}/@jarsLibDir@batik-css-@batikVersion@.jar" {
  permission java.security.AllPermission;
};

grant codeBase "${app.jar.base}/@jarsLibDir@batik-svg-dom-@batikVersion@.jar" {
  permission java.security.AllPermission;
};

grant codeBase "${app.jar.base}/@jarsLibDir@batik-gvt-@batikVersion@.jar" {
  permission java.security.AllPermission;
};

grant codeBase "${app.jar.base}/@jarsLibDir@batik-parser-@batikVersion@.jar" {
  permission java.security.AllPermission;
};

grant codeBase "${app.jar.base}/@jarsLibDir@batik-script-@batikVersion@.jar" {
  permission java.security.AllPermission;
};

grant codeBase "${app.jar.base}/@jarsLibDir@batik-bridge-@batikVersion@.jar" {
  permission java.security.AllPermission;
};

grant codeBase "${app.jar.base}/@jarsLibDir@batik-swing-@batikVersion@.jar" {
  permission java.security.AllPermission;
};

grant codeBase "${app.jar.base}/@jarsLibDir@batik-transcoder-@batikVersion@.jar" {
  permission java.security.AllPermission;
};

grant codeBase "${app.jar.base}/@jarsLibDir@batik-gui-util-@batikVersion@.jar" {
  permission java.security.AllPermission;
};

grant codeBase "${app.jar.base}/@jarsLibDir@batik-awt-util-@batikVersion@.jar" {
  permission java.security.AllPermission;
};

grant codeBase "${app.jar.base}/@jarsLibDir@batik-util-@batikVersion@.jar" {
  permission java.security.AllPermission;
};

grant codeBase "${app.jar.base}/@jarsLibDir@batik-xml-@batikVersion@.jar" {
  permission java.security.AllPermission;
};

grant codeBase "${app.jar.base}/@jarsLibDir@fop-transcoder-allinone-@fopVersion@.jar" {
  permission java.security.AllPermission;
};

grant codeBase "${app.jar.base}/@jarsLibDir@xmlgraphics-commons-@xgcVersion@.jar" {
  permission java.security.AllPermission;
};

grant codeBase "${app.jar.base}/@jarsLibDir@batik-anim-@batikVersion@.jar" {
  permission java.security.AllPermission;
};

grant codeBase "${app.jar.base}/@jarsLibDir@batik-codec-@batikVersion@.jar" {
  permission java.security.AllPermission;
};

grant codeBase "${app.jar.base}/@jarsLibDir@batik-extension-@batikVersion@.jar" {
  permission java.security.AllPermission;
};

grant codeBase "${app.jar.base}/@jarsLibDir@batik-svggen-@batikVersion@.jar" {
  permission java.security.AllPermission;
};

grant codeBase "${app.jar.base}/@jarsLibDir@js.jar" {
  permission java.lang.RuntimePermission "createClassLoader";
  permission java.net.SocketPermission "*", "listen, connect, resolve, accept";
  permission java.lang.RuntimePermission "accessDeclaredMembers";
  permission java.util.PropertyPermission "org.mozilla.javascript.JavaAdapter", "read";
  permission java.util.PropertyPermission "org.mozilla.javascript.JavaAdapterClassName", "read";
  permission java.io.FilePermission "<<ALL FILES>>", "read";
};

grant {
 permission java.io.FilePermission  "${app.jar.base}/@jarsLibDir@batik-svg-dom-@batikVersion@.jar", "read";
};

